✏️ 正在编辑: FolhaPagamento.php
路径:
/srv/systems_dir/yuppiecred/application/models/FolhaPagamento.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_FolhaPagamento { private $_id; private $_funcionarioId; private $_dataFolha; private $_salarioBruto; private $_beneficios; private $_adicionalFerias; private $_inss; private $_irpf; private $_bonus; private $_descontosEventuais; private $_qtdeFalta; private $_adicionalAnual; private $_valeTransporte; private $_valeAlimentacao; private $_valeRefeicao; private $_planoSaude; private $_seguroVida; private $_diasTrabalhados; private $_salarioFamilia; private $_gratificacao; private $_gratificacaoFuncao; private $_planoSaudeDependente; private $_planoOdontologico; private $_obs; private $_comissao; private $_descontoTransporte; public function getId() { return $this->_id; } public function getFuncionarioId() { return $this->_funcionarioId; } public function getDataFolha() { return $this->_dataFolha; } public function getSalarioBruto() { return $this->_salarioBruto; } public function getBeneficios() { return $this->_beneficios; } public function getAdicionalFerias() { return $this->_adicionalFerias; } public function getInss() { return $this->_inss; } public function getIrpf() { return $this->_irpf; } public function getBonus() { return $this->_bonus; } public function getDescontosEventuais() { return $this->_descontosEventuais; } public function getQtdeFalta() { return $this->_qtdeFalta; } public function getObs() { return $this->_obs; } public function setObs($obs) { $this->_obs = $obs; } public function setId($id) { $this->_id = $id; } public function setFuncionarioId($folhaId) { $this->_funcionarioId = $folhaId; } public function setDataFolha($dataFolha) { if( !empty($dataFolha) ){ try { $data = new Zend_Date($dataFolha, Zend_Date::DATES, 'pt'); $dataFolha = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataFolha = null; } } else { $dataFolha = null; } $this->_dataFolha = $dataFolha; } public function setSalarioBruto($salarioBruto) { $this->_salarioBruto = str_replace(array( '.', ',' ), array( '', '.' ), $salarioBruto); } public function setBeneficios($beneficios) { $this->_beneficios = str_replace(array( '.', ',' ), array( '', '.' ), $beneficios); } public function setAdicionalFerias($adicionalFerias) { $this->_adicionalFerias = str_replace(array( '.', ',' ), array( '', '.' ), $adicionalFerias); } public function setInss($inss) { $this->_inss = str_replace(array( '.', ',' ), array( '', '.' ), $inss); } public function setIrpf($irpf) { $this->_irpf = str_replace(array( '.', ',' ), array( '', '.' ), $irpf); } public function setBonus($bonus) { $this->_bonus = str_replace(array( '.', ',' ), array( '', '.' ), $bonus); } public function setDescontosEventuais($descontosEventuais) { $this->_descontosEventuais = str_replace(array( '.', ',' ), array( '', '.' ), $descontosEventuais); } public function setQtdeFalta($qtdeFalta) { $this->_qtdeFalta = $qtdeFalta; } public function getAdicionalAnual() { return $this->_adicionalAnual; } public function getValeTransporte() { return $this->_valeTransporte; } public function getValeAlimentacao() { return $this->_valeAlimentacao; } public function getValeRefeicao() { return $this->_valeRefeicao; } public function getPlanoSaude() { return $this->_planoSaude; } public function getSeguroVida() { return $this->_seguroVida; } public function setAdicionalAnual($adicionalAnual) { $this->_adicionalAnual = str_replace(array( '.', ',' ), array( '', '.' ), $adicionalAnual); } public function setValeTransporte($valeTransporte) { $this->_valeTransporte = str_replace(array( '.', ',' ), array( '', '.' ), $valeTransporte); } public function setValeAlimentacao($valeAlimentacao) { $this->_valeAlimentacao = str_replace(array( '.', ',' ), array( '', '.' ), $valeAlimentacao); } public function setValeRefeicao($valeRefeicao) { $this->_valeRefeicao = str_replace(array( '.', ',' ), array( '', '.' ), $valeRefeicao); } public function setPlanoSaude($planoSaude) { $this->_planoSaude = str_replace(array( '.', ',' ), array( '', '.' ), $planoSaude); } public function setSeguroVida($seguroVida) { $this->_seguroVida = str_replace(array( '.', ',' ), array( '', '.' ), $seguroVida); } public function getDiasTrabalhados() { return $this->_diasTrabalhados; } public function setDiasTrabalhados($diasTrabalhados) { $this->_diasTrabalhados = $diasTrabalhados; } public function getSalarioFamilia() { return $this->_salarioFamilia; } public function setSalarioFamilia($salarioFamilia) { $this->_salarioFamilia = str_replace(array( '.', ',' ), array( '', '.' ), $salarioFamilia); } public function getGratificacao() { return $this->_gratificacao; } public function setGratificacao($gratificacao) { $this->_gratificacao = str_replace(array( '.', ',' ), array( '', '.' ), $gratificacao); } public function getGratificacaoFuncao() { return $this->_gratificacaoFuncao; } public function setGratificacaoFuncao($gratificacaoFuncao) { $this->_gratificacaoFuncao = str_replace(array( '.', ',' ), array( '', '.' ), $gratificacaoFuncao); return $this; } public function getPlanoSaudeDependente() { return $this->_planoSaudeDependente; } public function setPlanoSaudeDependente($planoSaudeDependente) { $this->_planoSaudeDependente = str_replace(array( '.', ',' ), array( '', '.' ), $planoSaudeDependente); } public function getPlanoOdontologico() { return $this->_planoOdontologico; } public function setPlanoOdontologico($planoOdontologico) { $this->_planoOdontologico = str_replace(array( '.', ',' ), array( '', '.' ), $planoOdontologico); } function getComissao() { return $this->_comissao; } function setComissao($_comissao) { $this->_comissao = str_replace(array( '.', ',' ), array( '', '.' ), $_comissao); } public function __construct($options = null) { if( is_array($options) ){ $this->setOptions($options); } } function getDescontoTransporte() { return $this->_descontoTransporte; } function setDescontoTransporte($_descontoTransporte) { $this->_descontoTransporte = str_replace(array( '.', ',' ), array( '', '.' ), $_descontoTransporte); } public function setOptions(array $options) { $methods = get_class_methods($this); foreach ( $options as $key => $value ) { $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'set' . ucfirst($key); if( in_array($method, $methods) ){ $this->$method($value); } } return $this; } public function _toArray() { $dbtable = new Model_DbTable_FolhaPagamento(); $info = $dbtable->info(); $methods = get_class_methods($this); $data = array(); foreach ( $info['cols'] as $key ) { $col = $key; $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'get' . ucfirst($key); if( in_array($method, $methods) ){ $data[$col] = $this->$method(); } } return $data; } /** * Insere ou altera o registro passado por parâmetro * @param Model_Fornecedor $fornecedor */ public function salvar(Model_FolhaPagamento $folha) { $dbtable = new Model_DbTable_FolhaPagamento(); $data = $folha->_toArray(); if( $folha->getId() > 0 ){ $funcionario = new Model_Funcionario(); $data2 = $funcionario->getDadosFolha($data['funcionario_id'], $data['dias_trabalhados'], $data['qtde_falta']); $dataUpdate = array_merge($data, $data2); // pr(array($data2, $data,$dataUpdate),1); $dbtable->update($dataUpdate, "id = " . $folha->getId()); return $folha->getId(); } else { return $dbtable->insert($folha->_toArray()); } } /** * Exclui o registro passado por parâmetro * @param int $id * @return int The number of rows deleted */ public function excluir($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_FolhaPagamento(); return $dbtable->delete("id = " . $id); } return null; } /** * Retorna uma lista de empresas * @param string $where * @param string $order * @param int $count * @param int $offset * @return array */ public function listar($fields = null, $order = null) { $params = array( 'folha.excluido<>1', 'funcionarios.excluido<>1' ); $where = null; if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "cargos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['funcionario_id']) && !empty($fields['funcionario_id']) ){ $params[] = "funcionario_id = " . $fields['funcionario_id']; } if( isset($fields['cargo_id']) && !empty($fields['cargo_id']) ){ $params[] = "funcionarios.cargo_id = " . $fields['cargo_id']; } if( isset($fields['data_folha_de']) && !empty($fields['data_folha_de']) && isset($fields['data_folha_a']) && !empty($fields['data_folha_a']) ){ $params[] = "(data_folha >= STR_TO_DATE('" . $fields['data_folha_de'] . "', '%d/%m/%Y')" . " AND data_folha <= STR_TO_DATE('" . $fields['data_folha_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['mes_ano']) && !empty($fields['mes_ano']) ){ $params[] = "DATE_FORMAT(data_folha, '%m/%Y') = '" . $fields['mes_ano'] . "'"; } if( count($params) > 0 ){ $where = implode(" AND ", $params); } $dbtable = new Model_DbTable_FolhaPagamento(); $select = $dbtable->getAdapter()->select()->from(array( 'folha' => 'tb_folha_pagamento' ), array( 'folha.*' )) ->joinInner(array( 'funcionarios' => 'tb_fornecedores' ), 'folha.funcionario_id = funcionarios.id', array( 'funcionario' => 'nome' )) ->joinLeft(array( 'cargos' => 'tb_cargos' ), "funcionarios.cargo_id = cargos.id", array( 'cargo' => 'nome' )) ->joinLeft(array( 'empresas' => 'tb_empresas' ), "cargos.empresa_id = empresas.id", array( 'empresa' => 'nome' )) ->where($where) ->order("funcionarios.nome ASC"); // pr($select->__toString(),1); return $dbtable->getAdapter()->fetchAll($select); } public function listarBeneficios($fields = null, $order = null) { $params = array( 'folha.excluido<>1', 'funcionarios.excluido<>1' ); $where = null; if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "cargos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['funcionario_id']) && !empty($fields['funcionario_id']) ){ $params[] = "funcionario_id = " . $fields['funcionario_id']; } if( isset($fields['cargo_id']) && !empty($fields['cargo_id']) ){ $params[] = "funcionarios.cargo_id = " . $fields['cargo_id']; } if( isset($fields['data_folha_de']) && !empty($fields['data_folha_de']) && isset($fields['data_folha_a']) && !empty($fields['data_folha_a']) ){ $params[] = "(data_folha >= STR_TO_DATE('" . $fields['data_folha_de'] . "', '%d/%m/%Y')" . " AND data_folha <= STR_TO_DATE('" . $fields['data_folha_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['mes_ano']) && !empty($fields['mes_ano']) ){ $params[] = "DATE_FORMAT(data_folha, '%m/%Y') = '" . $fields['mes_ano'] . "'"; } if( count($params) > 0 ){ $where = implode(" AND ", $params); } $dbtable = new Model_DbTable_FolhaPagamento(); $select = $dbtable->getAdapter()->select()->from(array( 'folha' => 'tb_folha_pagamento' ), array( 'folha.*' )) ->joinInner(array( 'funcionarios' => 'tb_fornecedores' ), 'folha.funcionario_id = funcionarios.id', array( 'funcionario' => 'nome' )) ->joinLeft(array( 'cargos' => 'tb_cargos' ), "funcionarios.cargo_id = cargos.id", array( 'cargo' => 'nome' )) ->joinLeft(array( "empresas" => 'tb_empresas' ), "empresas.id = cargos.empresa_id", array( 'empresa' => 'nome' )) ->where($where) ->order("funcionarios.nome ASC"); $dbtable->getAdapter()->fetchAll($select); return $dbtable->getAdapter()->fetchAll($select); } /** * Retorna um fetchRow do item passado por parâmetro * @param int $id * @return Zend_Db_Table_Row_Abstract | null */ public function exibir($id) { $dbtable = new Model_DbTable_FolhaPagamento(); return $dbtable->fetchRow("id = " . $id); } public function gerarFolha($empresaId, $dataFolha, $diasTrabalhados) { $dt = new Zend_Date($dataFolha); $cont = 0; $cargo = new Model_Cargo(); $cargos = $cargo->listar(array( 'empresa_id' => $empresaId )); $cargosId = array(); foreach ( $cargos as $c ) { $cargosId[] = $c['id']; } if( count($cargosId) <= 0 ){ $dbtableEmpresa = new Model_DbTable_Empresa(); $empresa = $dbtableEmpresa->fetchRow("id = " . $empresaId); throw new Core_Exception("Nenhum cargo cadastrado para a empresa {$empresa->nome}!"); } if( $diasTrabalhados <= 0 ){ throw new Core_Exception("A quantidade de dias trabalhados não pode ser nulo."); } $funcionario = new Model_Funcionario(); $funcionarios = $funcionario->listar(['empresa_id = ?' => $empresaId, 'cargo_id IN (?)' => $cargosId, 'data_desligamento IS NULL OR data_desligamento = ?' => '0000-00-00']); if( count($funcionarios) <= 0 ){ throw new Core_Exception('Nenhum funcionário encontrado.'); } $dbtableFolha = new Model_DbTable_FolhaPagamento(); foreach ( $funcionarios as $func ) { $dadosFolha = $funcionario->getDadosFolha($func['id'], $diasTrabalhados, $qtdeFaltas = 0); $result = $dbtableFolha->insert(array( 'funcionario_id' => $func['id'], 'data_folha' => $dt->get('yyyy-MM-dd'), 'salario_bruto' => $dadosFolha['salario_bruto'], 'inss' => $dadosFolha['inss'], 'irpf' => $dadosFolha['irpf'], 'vale_transporte' => $dadosFolha['vale_transporte'], 'vale_alimentacao' => $dadosFolha['vale_alimentacao'], 'plano_saude' => $dadosFolha['plano_saude'], 'plano_saude_dependente' => $dadosFolha['plano_saude_dependente'], 'gratificacao_funcao' => $dadosFolha['gratificacao_funcao'], 'dias_trabalhados' => $diasTrabalhados, 'desconto_transporte' => $dadosFolha['desconto_transporte'], 'salario_familia' => $dadosFolha['salario_familia'], 'qtde_falta' => $qtdeFaltas, )); if( $result != null ){ $cont++; } } return $cont; } public function lancarDespesa($folhaId) { $dadosFolha = (new Model_FolhaPagamento())->exibir($folhaId); $funcionario = $dadosFolha->findParentRow('Model_DbTable_Funcionario'); $cargo = $funcionario->findParentRow('Model_DbTable_Cargo'); $setor = $funcionario->findParentRow('Model_DbTable_Setor'); $conta = (new Model_Conta())->getContaFolhaPagamento($funcionario->empresa_id); if (empty($conta)) { throw new Core_Exception("Não existe conta vinculada para folha de pagamento nesta empresa."); } $despesa = new Model_Despesa(); if ($despesa->listar('folha_pagamento_id = ' . $folhaId)->count()) { throw new Core_Exception("Despesa já lançada para esse item."); } $salarioLiquido = (($dadosFolha->salario_bruto + $dadosFolha->salario_familia + $dadosFolha->comissao + $dadosFolha->gratificacao + $dadosFolha->gratificacao_funcao) - ($dadosFolha->irpf + $dadosFolha->inss + $dadosFolha->desconto_transporte + $dadosFolha->plano_saude_dependente + $dadosFolha->plano_odontologico + $dadosFolha->descontos_eventuais)); $despesa->setOptions([ 'empresa_id' => $funcionario->empresa_id, 'categoria_id' => $cargo->categoria_despesa, 'funcionario_id' => $dadosFolha->funcionario_id, 'descricao' => "Ref. lançamento da folha de pagamento", 'valor' => $salarioLiquido, 'data_vencimento' => $dadosFolha->data_folha, 'setor' => $setor->nome, 'conta_id' => $conta->id, 'competencia' => (new Zend_Date($dadosFolha->data_folha))->subMonth(1)->get('MM/yyyy'), 'folha_pagamento_id' => $dadosFolha->id, ]); return $despesa->salvar($despesa); } }
💾 保存文件
← 返回文件管理器