✏️ 正在编辑: Lancamento.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/models/Lancamento.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_Lancamento { protected $_id; protected $_empresaId; protected $_dataLancamento; protected $_descricao; protected $_valor; protected $_dataVencimento; protected $_valorPago; protected $_dataPagamento; protected $_categoriaId; protected $_formaPagamentoId; protected $_contaId; protected $_obs; protected $_usuarioBaixa; protected $_dataBaixa; //Repeticao de lancamento protected $_numeroParcelas; protected $_periodicidade; protected $_comporSaldo; protected $_fornecedorId; protected $_corretorId; protected $_setor; protected $_subsetor; protected $_idPai; protected $_transferencia; protected $_funcionarioId; protected $_numeroDocumento; protected $_diarioRotaId; protected $_diarioTipoId; protected $_resumoDiario; protected $_anexo; protected $_competencia; public function __construct($options = null) { if( is_array($options) ){ $this->setOptions($options); } } 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 getId() { return $this->_id; } public function setId($id) { $this->_id = $id; } public function getEmpresaId() { return $this->_empresaId; } public function setEmpresaId($empresaId) { $this->_empresaId = $empresaId; } public function getDataLancamento() { return $this->_dataLancamento; } public function setDataLancamento($dataLancamento) { if( !empty($dataLancamento) ){ try { $data = new Zend_Date($dataLancamento, Zend_Date::DATES, 'pt'); $dataLancamento = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataLancamento = null; } } else { $dataLancamento = null; } $this->_dataLancamento = $dataLancamento; } public function getDescricao() { return $this->_descricao; } public function setDescricao($descricao) { $this->_descricao = $descricao; } public function getValor() { return $this->_valor; } public function setValor($valor) { $this->_valor = $valor; } public function getDataVencimento() { return $this->_dataVencimento; } public function setDataVencimento($dataVencimento) { if( !empty($dataVencimento) ){ try { $data = new Zend_Date($dataVencimento, Zend_Date::DATES, 'pt'); $dataVencimento = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataVencimento = null; } } else { $dataVencimento = null; } $this->_dataVencimento = $dataVencimento; } public function getValorPago() { return $this->_valorPago; } public function setValorPago($valorPago) { $this->_valorPago = $valorPago; } public function getDataPagamento() { return $this->_dataPagamento; } public function setDataPagamento($dataPagamento) { if( !empty($dataPagamento) ){ try { $data = new Zend_Date($dataPagamento, Zend_Date::DATES, 'pt'); $dataPagamento = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataPagamento = null; } } else { $dataPagamento = null; } $this->_dataPagamento = $dataPagamento; } public function getCategoriaId() { return $this->_categoriaId; } public function setCategoriaId($categoriaId) { $this->_categoriaId = $categoriaId; } public function getFormaPagamentoId() { return $this->_formaPagamentoId; } public function setFormaPagamentoId($formaPagamentoId) { $this->_formaPagamentoId = $formaPagamentoId; } public function getContaId() { return $this->_contaId; } public function setContaId($contaId) { $this->_contaId = $contaId; } public function getObs() { return $this->_obs; } public function setObs($obs) { $this->_obs = $obs; } public function getUsuarioBaixa() { return $this->_usuarioBaixa; } public function setUsuarioBaixa($usuarioBaixa) { $this->_usuarioBaixa = $usuarioBaixa; } public function getDataBaixa() { return $this->_dataBaixa; } public function setDataBaixa($dataBaixa) { if( !empty($dataBaixa) ){ try { $data = new Zend_Date($dataBaixa, Zend_Date::DATES, 'pt'); $dataBaixa = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataBaixa = null; } } else { $dataBaixa = null; } $this->_dataBaixa = $dataBaixa; } public function getNumeroParcelas() { return $this->_numeroParcelas; } public function setNumeroParcelas($numeroParcelas) { $this->_numeroParcelas = $numeroParcelas; } public function getPeriodicidade() { return $this->_periodicidade; } public function setPeriodicidade($periodicidade) { $this->_periodicidade = $periodicidade; } public function getComporSaldo() { return $this->_comporSaldo; } public function setComporSaldo($comporSaldo) { $this->_comporSaldo = $comporSaldo; } public function getFornecedorId() { return $this->_fornecedorId; } public function setFornecedorId($fornecedorId) { $this->_fornecedorId = $fornecedorId; } public function getCorretorId() { return $this->_corretorId; } public function setCorretorId($corretorId) { $this->_corretorId = $corretorId; } public function getSetor() { return $this->_setor; } public function setSetor($setor) { $this->_setor = $setor; } public function getSubsetor() { return $this->_subsetor; } public function setSubsetor($subsetor) { $this->_subsetor = $subsetor; } public function getIdPai() { return $this->_idPai; } public function setIdPai($idPai) { $this->_idPai = $idPai; } public function getTransferencia() { return $this->_transferencia; } public function setTransferencia($transferencia) { $this->_transferencia = $transferencia; } public function getFuncionarioId() { return $this->_funcionarioId; } public function setFuncionarioId($funcionarioId) { $this->_funcionarioId = $funcionarioId; } public function getNumeroDocumento() { return $this->_numeroDocumento; } public function setNumeroDocumento($numeroDocumento) { $this->_numeroDocumento = $numeroDocumento; } public function getResumoDiario() { return $this->_resumoDiario; } public function setResumoDiario($resumoDiario) { $this->_resumoDiario = $resumoDiario; } public function getDiarioRotaId() { return $this->_diarioRotaId; } public function getDiarioTipoId() { return $this->_diarioTipoId; } public function setDiarioRotaId($diarioRotaId) { $this->_diarioRotaId = $diarioRotaId; } public function setDiarioTipoId($diarioTipoId) { $this->_diarioTipoId = $diarioTipoId; } function getAnexo() { return $this->_anexo; } function setAnexo($anexo) { $this->_anexo = $anexo; } function getCompetencia() { return $this->_competencia; } function setCompetencia($competencia) { $this->_competencia = $competencia; } /** * Trata os dados para gravar os lançamentos em registros repetidos * @param array $lancamento */ public function repetir(array $lancamento) { $data = $lancamento['data_vencimento']; $competencia = $lancamento['competencia'] ?? null; $dados = $lancamento; unset($dados['numero_parcelas']); unset($dados['periodicidade']); for ( $i = 1; $i < $lancamento['numero_parcelas']; $i++ ) { $data = $this->_trataPeriodicidade(new Zend_date($data, 'yyyy-MM-dd'), $lancamento['periodicidade']); $dados['data_vencimento'] = $data->toString('yyyy-MM-dd'); $competencia = $this->defineCompetencia($competencia, $lancamento['periodicidade'], $dados); $dbtable = new Model_DbTable_Lancamento(); $dbtable->insert($dados); } } /** * * @param string $tipoLancamento RECEITA | DESPESA * @return array */ public function preparaRepeticao($tipoLancamento) { return array( 'data_vencimento' => $this->getDataVencimento(), 'numero_parcelas' => $this->getNumeroParcelas(), 'periodicidade' => $this->getPeriodicidade(), 'empresa_id' => $this->getEmpresaId(), 'descricao' => $this->getDescricao(), 'valor' => $this->getValor(), 'categoria_id' => $this->getCategoriaId(), 'forma_pagamento_id' => $this->getFormaPagamentoId(), 'conta_id' => $this->getContaId(), 'obs' => $this->getObs(), 'data_pagamento' => $this->getDataPagamento(), 'valor_pago' => $this->getValorPago(), 'tipo' => $tipoLancamento, 'fornecedor_id' => $this->getFornecedorId(), 'corretor_id' => $this->getCorretorId(), 'funcionario_id' => $this->getFuncionarioId(), 'setor' => $this->getSetor(), 'subsetor' => $this->getSubsetor(), 'id_pai' => $this->getIdPai(), 'competencia' => $this->getCompetencia() ); } protected function _trataPeriodicidade(Zend_date $data, $periodicidade) { switch ( $periodicidade ) { case "D7": $data->add('7', Zend_Date::DAY); break; case "D15": $data->add('15', Zend_Date::DAY); break; case "M1": $data->add('1', Zend_Date::MONTH); break; case "M2": $data->add('2', Zend_Date::MONTH); break; case "M3": $data->add('3', Zend_Date::MONTH); break; case "M6": $data->add('6', Zend_Date::MONTH); break; case "M12": $data->add('1', Zend_Date::YEAR); break; } return $data; } public function getLancamentosPeriodo($fields, $order = "data_pagamento ASC") { $params = array( "(tipo = 'DEBITO_CORRETOR' OR tipo = 'CREDITO_CORRETOR')" ); if( !empty($fields['data_pagamento_de']) && !empty($fields['data_pagamento_a']) ){ $dataInicial = new Zend_Date($fields['data_pagamento_de'], 'dd/MM/yyyy'); $dataFinal = new Zend_Date($fields['data_pagamento_a'], 'dd/MM/yyyy'); $params[] = "(data_pagamento >= STR_TO_DATE('" . $dataInicial . "', '%d/%m/%Y')" . " AND data_pagamento <= STR_TO_DATE('" . $dataFinal . "', '%d/%m/%Y'))"; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = 'corretor_id = ' . $fields['corretor_id']; } $where = implode(' AND ', $params); $dbtable = new Model_DbTable_Lancamento(); return $dbtable->fetchAll($where, $order); } public function getLancamentosAbertos($fields) { $params = array( "(data_pagamento IS NULL OR data_pagamento = '0000-00-00')" ); $params[] = "lancamentos.excluido<>1"; if( isset($fields['mes_ano']) && !empty($fields['mes_ano']) ){ $params[] = "(DATE_FORMAT(data_vencimento, '%m/%Y') = '{$fields['mes_ano']}')"; } if( isset($fields['tipo_lancamento']) && !empty($fields['tipo_lancamento']) ){ $params[] = "tipo = '{$fields['tipo_lancamento']}'"; } $dbtable = new Model_DbTable_Lancamento(); $select = $dbtable->getAdapter()->select()->from(array( 'lancamentos' => 'tb_lancamentos' ), array( 'lancamentos.*' )) ->joinLeft(array( 'categorias' => 'tb_categorias' ), "lancamentos.categoria_id = categorias.id", array( 'categoria' => 'nome' )) ->where(implode(" AND ", $params)) ->order("data_vencimento ASC"); return $dbtable->getAdapter()->fetchAll($select); } public function getDebitosCorretores($fields = null) { $params[] = "lancamentos.excluido<>1"; if( !empty($fields['empresa_id']) ){ $params[] = "empresa.id = {$fields['empresa_id']}"; } if( !empty($fields['rota_id']) ){ $params[] = "rota.id = {$fields['rota_id']}"; } if( !empty($fields['supervisor_id']) ){ $params[] = "supervisor.id = {$fields['supervisor_id']}"; } if( !empty($fields['gerente_id']) ){ $params[] = "gerente.id = {$fields['gerente_id']}"; } if (!empty($fields['corretor_id'])) { $params[] = "corretor.id = {$fields['corretor_id']}"; } $ns = new Zend_Session_Namespace(); if( !$ns->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-corretores-filiais') ){ $params[] = "empresa.id = " . Yuppie_Auth::getIdentity()->empresa_id; } if( Yuppie_Auth::getIdentity()->grupo == 'Supervisor' ){ $params[] = "supervisor.id = " . Yuppie_Auth::getIdentity()->id; }elseif( Yuppie_Auth::getIdentity()->grupo == 'Gerente Regional' ){ $params[] = "gerente.id = " . Yuppie_Auth::getIdentity()->id; } $dbtable = new Model_DbTable_Lancamento(); $select = $dbtable->getAdapter()->select()->from(array( "lancamentos" => "tb_lancamentos" ), array( 'total' => 'sum((CASE WHEN lancamentos.tipo="CREDITO_CORRETOR" then 1 else -1 end )* lancamentos.valor_pago)' )) ->joinLeft(array( "corretor" => "tb_corretores" ), "lancamentos.corretor_id = corretor.id", array( 'corretor.id', 'corretor' => 'nome' )) ->joinLeft(array( "rota" => "tb_rotas" ), "rota.id = corretor.rota_id", array( 'rota' => 'nome' )) ->joinLeft(array( "empresa" => "tb_empresas" ), "empresa.id = corretor.empresa_id", array( 'empresa' => 'nome', 'empresa_id' => 'empresa.id' )) ->joinLeft(array( "supervisor" => "tb_gerente_rota" ), "supervisor.id = rota.gerente_id", array( 'supervisor' => 'nome' )) ->joinLeft(array( "gerente" => "tb_gerentes" ), "gerente.id = supervisor.gerente_id", array( 'gerente' => 'nome' )); $select->where('(lancamentos.tipo="CREDITO_CORRETOR" or lancamentos.tipo="DEBITO_CORRETOR")'); $select->where(implode(" AND ", $params)); $select->group('corretor.id'); $select->order('corretor'); return $dbtable->getAdapter()->fetchAll($select); } public function validarViagem($diarioId) { $dbtable = new Model_DbTable_Lancamento(); $diario = new Model_DbTable_DiarioRota(); $dadosDiario = $diario->fetchRow("id = " . $diarioId); if( $dadosDiario['status'] == 'ABERTO' ){ $dados = array( 'status' => 'FECHADO' ); if( $dadosDiario['km_final'] <= 0 ){ throw new Exception("Atenção!!! é necessário informar o campo km final para este diário."); } $whereD = "id = " . $diarioId; $diario->update($dados, $whereD); } $data = array( 'status_viagem' => 1, 'tipo' => 'DESPESA' ); $result = null; $where = "diario_rota_id = " . $diarioId; if( $diarioId > 0 ){ $result = $dbtable->update($data, $where); } return $result; } public function atualizarDiario(array $values, $diarioId = null, $tipo = null) { if (empty($diarioId)){ throw new Core_Exception('Diário não identificado'); } $dataP = new Zend_Date($values['data']); $dbtableDiario = new Model_DbTable_DiarioRota(); $dadosDiarios = $dbtableDiario->fetchRow("id = " . $diarioId); if ($dadosDiarios['data_saida'] > $dataP->get('yyyy-MM-dd') || $dadosDiarios['data_retorno'] < $dataP->get('yyyy-MM-dd')) { throw new Core_Exception("A data do lançamento está fora do período informado no diário"); } $tiped = explode("tipo", $tipo); $data = [ 'diario_rota_id' => $diarioId, 'tipo_diario' => $tiped[1], 'supervisor_id' => Yuppie_Auth::getIdentity()->id, 'corretor_id' => isset($values['corretor_id']) ? $values['corretor_id'] : null, 'data' => $dataP->get('yyyy-MM-dd'), 'cidade' => isset($values['cidade']) ? $values['cidade'] : null, 'uf' => isset($values['uf']) ? $values['uf'] : null, 'km_veiculo' => isset($values['km_veiculo']) ? $values['km_veiculo'] : null, 'hospedagem' => isset($values['hospedagem']) ? $values['hospedagem'] : null, 'nome_restaurante' => isset($values['nome_restaurante']) ? $values['nome_restaurante'] : null, 'refeicao' => isset($values['refeicao']) ? $values['refeicao'] : null, 'resumo_visita' => isset($values['resumo_visita']) ? $values['resumo_visita'] : null, 'valor' => isset($values['valor']) ? $values['valor'] : null, 'motivo_gasto' => isset($values['motivo_gasto']) ? $values['motivo_gasto'] : null, ]; $idDiarioTipo = (new Model_DbTable_DiarioTipos())->insert($data); $descricao = null; switch ( $tiped[1] ) { case 1: $descricao = "Lançamento Diário: Combustível"; break; case 2: $descricao = "Lançamento Diário: Hospedagem"; break; case 3: $descricao = "Lançamento Diário: Alimentação"; break; case 4: $descricao = "Diário: Resumo de Visita"; break; case 5: $descricao = "Lançamento Diário: Extra"; break; } $dataLancamento = [ 'diario_rota_id' => $diarioId, 'diario_tipo_id' => $idDiarioTipo, 'rota_id' => $values['rota'] ?? null, 'data_vencimento' => $dataP->get('yyyy-MM-dd'), 'data_pagamento' => $dataP->get('yyyy-MM-dd'), 'descricao' => $descricao, 'valor' => $values['valor'] ?? null, 'valor_pago' => $values['valor'] ?? null, 'tipo' => 'DIARIO', 'categoria_id' => $values['categoria'] ?? 0, 'supervisor_id' => Yuppie_Auth::getIdentity()->id, 'empresa_id' => Yuppie_Auth::getIdentity()->empresa_id, 'resumo_diario' => isset($values['resumo_visita']) ? $values['resumo_visita'] : null ]; $idLancamento = (new Model_DbTable_Lancamento())->insert($dataLancamento); return $idDiarioTipo; } public function alterarConciliacao($id) { $dbTable = new Model_DbTable_Lancamento(); $anterior = $dbTable->fetchRow("id = " . $id); if( $anterior['conciliacao'] == 0 ){ $data = array( 'conciliacao' => 1 ); } else { $data = array( 'conciliacao' => 0 ); } $result = null; $where = "id = " . $id; if( $id > 0 ){ $result = $dbTable->update($data, $where); } //grava alteracao no log if( $result > 0 ){ $log = new Model_DbTable_Log(); $log->save($dbTable, $data, $where, null); } return $result; } public function editarDiarioSupervisor($lancamentos = array(), $dados = null, $dataRetorno = null, $dataSaida = null) { $result = null; $lancamento = new Model_DbTable_Lancamento(); $diarioTipo = new Model_DbTable_DiarioTipos(); $dataAtual = Zend_Date::now()->get('yyyy-MM-dd'); foreach ( $lancamentos as $diarioTipoId => $lancamentoId ) { $date = new Zend_Date($dados['data_viagem'][$diarioTipoId], Zend_Date::DATES, 'pt'); $dataViagem = $date->toString('yyyy-MM-dd'); if( $dataSaida > $dataViagem || $dataRetorno < $dataViagem || $dataSaida > $dataAtual || $dataRetorno < $dataAtual ){ throw new Exception("Periodo de data inválido"); } $diarioTipo->update(array( 'valor' => $dados['valor'][$diarioTipoId], 'data' => $dataViagem ), "id = " . $diarioTipoId); $data = array( 'data_vencimento' => $dataViagem, 'data_pagamento' => $dataViagem, 'descricao' => $dados['descricao'][$diarioTipoId], 'valor' => $dados['valor'][$diarioTipoId], 'valor_pago' => $dados['valor'][$diarioTipoId], 'rota_id' => $dados['rota_id'][$diarioTipoId], ); $result = $lancamento->update($data, "id = " . $lancamentoId); } return $result; } public function uploadAnexo($tipos) { $fields = []; Upload::save((new Zend_File_Transfer_Adapter_Http()), $fields, 'diario'); if (is_array($fields['anexo'])) { foreach ($fields['anexo'] as $tipo => $anexo) { $tipoDiario = String_Refatorar::soNumeros($tipo); $dbTable = new Model_DbTable_DiarioTipos(); $dbTable->update([ 'anexo' => $anexo, ], ["id = ?" => $tipos[$tipoDiario]]); } } else { $dbTable = new Model_DbTable_DiarioTipos(); $dbTable->update([ 'anexo' => $fields['anexo'], ], ["id = ?" => current($tipos)]); } } /** * @param $competencia * @param $periodicidade * @param array $dados * @return Zend_date * @throws Zend_Date_Exception */ public function defineCompetencia($competencia, $periodicidade, array &$dados) { if ($competencia) { $competencia = $this->_trataPeriodicidade(new Zend_date($competencia, 'yyyy-MM-dd'), $periodicidade); $dados['competencia'] = $competencia->toString('MM/yyyy'); } return $competencia; } /** * @param Zend_Controller_Request_Abstract|null $request * @return array * @throws Zend_Date_Exception */ public function getPeriodosAnaliseHorizontal(?Zend_Controller_Request_Abstract $request): array { $periodos = []; if ($request->getPost('competencia')) { $periodoInicial = new Zend_Date($request->getPost('competencia'), 'yyyy-MM-dd'); $periodoFinal = new Zend_Date($request->getPost('competencia'), 'yyyy-MM-dd'); $periodoFinal->add('1', Zend_Date::MONTH); } if ($request->getPost('periodo_inicial_1')) { $periodoInicial = new Zend_Date($request->getPost('periodo_inicial_1')); $periodoFinal = new Zend_Date($request->getPost('periodo_final_1')); } $de = clone $periodoInicial; $ate = clone $periodoFinal; while ($de->get('MM/yyyy') != $ate->get('MM/yyyy')) { $periodos[] = $de->get('MM/yyyy'); $de->setDay(1)->addMonth(1); } return $periodos; } }
💾 保存文件
← 返回文件管理器