public function indexAction() { $this->_helper->layout->setLayoutPath(APPLICATION_PATH . '/modules/contribuinte/views/scripts/layouts'); $this->_helper->layout->setLayout('layout-modal'); $oForm = new Contribuinte_Form_Empresa(); if ($this->getRequest()->isPost()) { $aDados = $this->getRequest()->getPost(); $oForm->preenche($aDados); if (!$oForm->isValid($aDados)) { $this->view->form = $oForm; $this->getResponse()->setHttpResponseCode(406); // Evita o Fechamento da Modal JS } else { $iCodigoIbge = Administrativo_Model_Prefeitura::getDadosPrefeituraBase()->getIbge(); if ($aDados['z01_munic'] == $iCodigoIbge) { $aDados['z01_bairro'] = $aDados['z01_bairro_munic']; $aDados['z01_ender'] = $aDados['z01_ender_munic']; } else { $aDados['z01_bairro'] = $aDados['z01_bairro_fora']; $aDados['z01_ender'] = $aDados['z01_ender_fora']; } // Salva Nova Empresa (NFSE) $aDadosEmpresa = array(); $aDadosEmpresa['t_cnpjcpf'] = DBSeller_Helper_Number_Format::getNumbers($aDados['z01_cgccpf']); $aDadosEmpresa['t_razao_social'] = $aDados['z01_nome']; $aDadosEmpresa['t_cod_pais'] = $aDados['z01_nome']; $aDadosEmpresa['t_uf'] = $aDados['z01_uf']; $aDadosEmpresa['t_cod_municipio'] = $aDados['z01_munic']; $aDadosEmpresa['t_cep'] = $aDados['z01_cep']; $aDadosEmpresa['t_bairro'] = $aDados['z01_bairro_fora']; $aDadosEmpresa['t_endereco'] = $aDados['z01_ender_fora']; $aDadosEmpresa['t_endereco_numero'] = $aDados['z01_numero']; $aDadosEmpresa['t_endereco_comp'] = $aDados['z01_compl']; $aDadosEmpresa['t_telefone'] = $aDados['z01_telef']; $aDadosEmpresa['t_email'] = $aDados['z01_email']; $oEmpresa = new Contribuinte_Model_EmpresaBase(); $oEmpresa->persist($aDadosEmpresa); $this->_helper->getHelper('FlashMessenger')->addMessage(array('success' => 'Empresa cadastrada com sucesso.')); return TRUE; } } else { $this->view->form = $oForm; } }
/** * Busca informações da empresa pelo CGC/CPF * * @param $sCgcCpf * @param bool $lSubstituto * @return null|StdClass */ public static function getByCgcCpf($sCgcCpf, $lSubstituto = FALSE) { if (!$sCgcCpf) { return NULL; } // Busca dados do e-Cidade $aEmpresa = Contribuinte_Model_EmpresaEcidade::getByCgcCpf($sCgcCpf); if (!empty($aEmpresa)) { foreach ($aEmpresa as $oDadosEmpresa) { $aDadosRetorno[] = $oDadosEmpresa; } $oDadosRetorno = new StdClass(); $oDadosRetorno->eCidade = array(new self($aDadosRetorno[0])); return $oDadosRetorno; } // Busca dados da Base Local $aEmpresa = Contribuinte_Model_EmpresaBase::getByAttribute('cpfcnpj', $sCgcCpf); if (!empty($aEmpresa)) { $oDadosRetorno = new StdClass(); $oDadosRetorno->eNota = array(new self($aEmpresa)); return $oDadosRetorno; } return NULL; }
/** * Salva a nota (por array) * * @param array $aDados * @throws Exception * @return boolean|NULL */ public function notaPersist(array $aDados) { // Se o numero da nota vier no vetor nao precisa salvar a nota porque provavelmente é um refresh do navegador if (isset($aDados['nota'])) { return FALSE; } // Nova verificação de alguns dados obrigatórios que a nota não seja emitida caso o cliente mude algum valor pelo // firebug if (empty($aDados['natureza_operacao']) || empty($aDados['s_dados_cod_tributacao']) || empty($aDados['s_vl_liquido']) || empty($aDados['descricao'])) { return FALSE; } // Limpa mascaras $aFilterDigits = new Zend_Filter_Digits(); // filtro para retornar somente numeros $aDados['t_cnpjcpf'] = $aFilterDigits->filter($aDados['t_cnpjcpf']); $aDados['t_cep'] = $aFilterDigits->filter($aDados['t_cep']); $aDados['t_telefone'] = $aFilterDigits->filter($aDados['t_telefone']); // Converte para o formato do DB $aDados['s_vl_servicos'] = $this->toFloat($aDados['s_vl_servicos']); $aDados['s_vl_liquido'] = $this->toFloat($aDados['s_vl_liquido']); $aDados['s_vl_deducoes'] = $this->toFloat($aDados['s_vl_deducoes']); $aDados['s_vl_bc'] = $this->toFloat($aDados['s_vl_bc']); $aDados['s_vl_aliquota'] = $this->toFloat($aDados['s_vl_aliquota']); $aDados['s_vl_iss'] = $this->toFloat($aDados['s_vl_iss']); $aDados['s_vl_pis'] = $this->toFloat($aDados['s_vl_pis']); $aDados['s_vl_cofins'] = $this->toFloat($aDados['s_vl_cofins']); $aDados['s_vl_inss'] = $this->toFloat($aDados['s_vl_inss']); $aDados['s_vl_ir'] = $this->toFloat($aDados['s_vl_ir']); $aDados['vl_liquido_nfse'] = $aDados['s_vl_liquido']; $aDados['s_vl_csll'] = $this->toFloat($aDados['s_vl_csll']); $aDados['s_vl_condicionado'] = $this->toFloat($aDados['s_vl_condicionado']); $aDados['s_vl_desc_incondicionado'] = $this->toFloat($aDados['s_vl_desc_incondicionado']); $aDados['s_vl_outras_retencoes'] = $this->toFloat($aDados['s_vl_outras_retencoes']); $aDados['s_dados_discriminacao'] = $aDados['descricao']; // Converte a data/hora de emissão da nota $aDados['dt_nota'] = self::getDateTime($aDados['dt_nota']); $aDados['hr_nota'] = self::getDateTime($aDados['dt_nota']); $aDados['ano_comp'] = $aDados['dt_nota']->format('Y'); $aDados['mes_comp'] = $aDados['dt_nota']->format('m'); // Flag marcado ou nao $lPrestadorRetemISS = $aDados['s_dados_iss_retido'] == 0 ? TRUE : FALSE; $aDados['s_dados_iss_retido'] = $lPrestadorRetemISS ? self::PRESTADOR_RETEM_ISS : self::TOMADOR_RETEM_ISS; // Salva o email do tomador $this->salvaEmailTomador($aDados['t_cnpjcpf'], utf8_encode($aDados['t_email'])); $oServico = Contribuinte_Model_Servico::getByCodServico($aDados['s_dados_cod_tributacao']); $oServico = is_array($oServico) ? $oServico[0] : $oServico; if (!is_object($oServico)) { throw new Exception('O código do serviço é inválido.'); } // Outros dados do serviço $aDados['s_dados_cod_cnae'] = utf8_encode($oServico->attr('estrut_cnae')); $aDados['s_dados_item_lista_servico'] = utf8_encode($oServico->attr('cod_item_servico')); try { // Dados do prestador $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($aDados['p_im']); } catch (Exception $e) { throw new Exception('E-cidade temporariamente indisponível. Emissão bloqueada!', WebService_Model_Ecidade::CODIGO_ERRO_CONSULTA_WEBSERVICE); } $aDados['p_cnpjcpf'] = $oContribuinte->getCgcCpf(); $aDados['p_razao_social'] = $oContribuinte->getNome(); $aDados['p_nome_fantasia'] = $oContribuinte->getNomeFantasia(); $aDados['p_ie'] = $oContribuinte->getInscricaoEstadual(); $aDados['p_cod_pais'] = $oContribuinte->getCodigoPais(); $aDados['p_uf'] = $oContribuinte->getEstado(); $aDados['p_cod_municipio'] = $oContribuinte->getCodigoIbgeMunicipio(); $aDados['p_cep'] = $oContribuinte->getCep(); $aDados['p_bairro'] = $oContribuinte->getLogradouroBairro(); $aDados['p_endereco_numero'] = $oContribuinte->getLogradouroNumero(); $aDados['p_endereco_comp'] = $oContribuinte->getLogradouroComplemento(); $aDados['p_telefone'] = $oContribuinte->getTelefone(); $aDados['p_email'] = $oContribuinte->getEmail(); $aDados['p_endereco'] = $oContribuinte->getTipoLogradouro() . ' ' . $oContribuinte->getDescricaoLogradouro(); /* * Dados do RPS */ if (isset($aDados['data_rps'])) { if (is_string($aDados['data_rps'])) { $aDataRps = explode('/', $aDados['data_rps']); $oDataRps = new DateTime($aDataRps[2] . '-' . $aDataRps[1] . '-' . $aDataRps[0]); $aDados['data_rps'] = $oDataRps; } if ($aDados['n_rps'] == '') { $aDados['n_rps'] = $this->getNRpsByCnpj($aDados['p_cnpjcpf']) + 1; } else { // Se o numero do RPS ja existe para este contribuinte, retorna erro if (self::existeRps($oContribuinte, $aDados['n_rps'], $aDados['tipo_nota'])) { return NULL; } } } /* * Dados do tomador */ // Se o tomador for substituto então busca CGM apenas do e-cidade $oTomador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['t_cnpjcpf']); /* * @todo Refatorar esse trecho de codigo */ if (!empty($oTomador->eCidade)) { $oTomador = is_array($oTomador->eCidade) ? reset($oTomador->eCidade) : $oTomador->eCidade; } else { if (!empty($oTomador->eNota)) { $oTomador = is_array($oTomador->eNota) ? reset($oTomador->eNota) : $oTomador->eNota; } } // Se nao encontrou tomador, entao cadastra no banco do sistema if (!is_object($oTomador) || empty($oTomador)) { $oTomador = new Contribuinte_Model_EmpresaBase(); if ($oTomador instanceof Contribuinte_Model_EmpresaBase && $oTomador->isEntity()) { $oTomador->persist($aDados); } } // Dados da tributacao $aDados['s_dec_reg_esp_tributacao'] = (int) $oContribuinte->getRegimeTributario(); $aDados['s_dados_exigibilidadeiss'] = (int) $oContribuinte->getExigibilidade(); $aDados['s_dec_incentivo_fiscal'] = (int) $oContribuinte->getIncentivoFiscal(); $aDados['s_dec_simples_nacional'] = $oContribuinte->getDescricaoOptanteSimples() == 'Sim' ? 1 : 2; // Busca a proxima numeracao da nota para o contribuinte $aDados['nota'] = $this->proximaNotaByContribuinte($oContribuinte->getContribuintes()); // Configura o parametro para checar se deve adicionar a nota na guia de pagamento $oChecaEmissaoGuia = new stdClass(); $oChecaEmissaoGuia->data = $aDados['dt_nota']->format('d/m/Y'); $oChecaEmissaoGuia->inscricao_municipal = $oContribuinte->getInscricaoMunicipal(); // Se for RPS pega a data do mesmo if (isset($aDados['data_rps'])) { $oChecaEmissaoGuia->data = $aDados['data_rps']->format('d/m/Y'); } /* * Verifica se deve incluir a nota na guia de pagamento, conforme as * regras de emissão do contribuinte (sobrescreve todas as regras anteriores) */ $lEmiteGuia = Contribuinte_Model_EmissorGuia::checarEmissaoGuia($oChecaEmissaoGuia); $lTributacaoMunicipio = $aDados['s_tributacao_municipio'] == 't' ? TRUE : FALSE; $iNaturezaOperacao = $aDados['natureza_operacao']; if ($lEmiteGuia && $iNaturezaOperacao == 2 && $lTributacaoMunicipio) { $aDados['s_dados_iss_retido'] = '1'; $lEmiteGuia = TRUE; } $aDados['emite_guia'] = $lEmiteGuia; // Se o prestador não for responsável pela retenção não inclui a nota na guia de pagamento if ((!$lPrestadorRetemISS || $iNaturezaOperacao == 2 && !$lTributacaoMunicipio) && $aDados['emite_guia']) { $aDados['emite_guia'] = FALSE; } // Persiste na base de dados $this->setAttributes($aDados); $this->em->persist($this->entity); $this->em->flush(); // Gera o código hash para autenticação $this->salvarCodigoHash($this->getNota()); return TRUE; }
/** * Acao Salvar DMS Entrada * * @return mixed bool|json */ public function emissaoManualEntradaSalvarAction() { // Dados Request $aDados = $this->getRequest()->getParams(); // Formulario $oForm = new Contribuinte_Form_DmsEntrada(); $oForm->populate($aDados); // Valida o formulario if ($oForm->isValid($aDados)) { // Verifica se ja existe uma nota com o numero e se tem AIDOF self::emissaoManualEntradaVerificarDocumentoAction(); // Valida se a data da nota esta no mes corrente $oValidaDataNota = new DBSeller_Validator_DateCurrentMonth(); $oValidaDataNota->setMes($aDados['mes_comp']); $oValidaDataNota->setAno($aDados['ano_comp']); if (!$oValidaDataNota->isValid($aDados['s_nota_data'])) { $aErros = $oValidaDataNota->getMessages(); $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $aErros[$oValidaDataNota::COMPETENCIA_INVALIDA]; echo $this->getHelper('json')->sendJson($aRetornoJson); exit; } // Aplica filtro de mascaras $aDados['s_cpf_cnpj'] = $oForm->getElement('s_cpf_cnpj')->getValue(); // SALVAR DADOS DA DMS (INI) if (isset($aDados['id_dms']) && !empty($aDados['id_dms'])) { $oDms = Contribuinte_Model_Dms::getById($aDados['id_dms']); } else { $oDms = new Contribuinte_Model_Dms(); $oDms->setAnoCompetencia($aDados['ano_comp']); $oDms->setMesCompetencia($aDados['mes_comp']); $oDms->setOperacao('e'); } if (!is_object($oDms)) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $this->translate->_('Código DMS não encontrado.'); echo $this->getHelper('json')->sendJson($aRetornoJson); exit; } $oDms->setDataOperacao(new DateTime()); $oDms->setStatus('aberto'); $oDms->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte()); $oDms->setIdUsuario($this->usuarioLogado->getId()); // SALVAR DADOS DA DMS (FIM) // SALVAR DADOS DA NOTA (INI) if (isset($aDados['id']) && !empty($aDados['id'])) { $oDmsNota = Contribuinte_Model_DmsNota::getById($aDados['id']); } else { $oDmsNota = new Contribuinte_Model_DmsNota(); } if (!is_object($oDmsNota)) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $this->translate->_('Código Dms Nota não encontrado.'); echo $this->getHelper('json')->sendJson($aRetornoJson); exit; } // Dados Nota $oGrupoDocumento = Contribuinte_model_nota::getTipoNota($aDados['tipo_documento']); $oDataNota = new DateTime(str_replace('/', '-', $aDados['s_nota_data'])); $oDataNota->format('Y-m-d'); $oDmsNota->setNotaNumero($aDados['s_nota']); $oDmsNota->setNotaSerie($aDados['s_nota_serie']); $oDmsNota->setNotaData($oDataNota); $oDmsNota->setGrupoDocumento($oGrupoDocumento->codigo_grupo); $oDmsNota->setTipoDocumento($aDados['tipo_documento']); $oDmsNota->setSituacaoDocumento($aDados['situacao_documento']); $oDmsNota->setNaturezaOperacao($aDados['natureza_operacao']); $oDmsNota->setEmiteGuia(TRUE); $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido'] == 1); // Se a natureza da operação for 2 (fora da prefeitura), NÃO emite guia if ($aDados['natureza_operacao'] == 2) { $oDmsNota->setEmiteGuia(FALSE); } // Dados Servico $oDataServico = new DateTime(str_replace('/', '-', $aDados['s_data'])); $oDataServico->format('Y-m-d'); // Formata dados $sServicoValorPagar = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_bruto']); $sServicoValorDeducao = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_deducao']); $sServicoValorCondicionado = DBSeller_Helper_Number_Format::toDataBase($aDados['s_vl_condicionado']); $sServicoDescontoIncondicionado = DBSeller_Helper_Number_Format::toDataBase($aDados['s_vl_desc_incondicionado']); $sServicoAliquota = str_replace(',', '.', $aDados['s_aliquota']); $sServicoBaseCalculo = DBSeller_Helper_Number_Format::toDataBase($aDados['s_base_calculo']); $sServicoValorImposto = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_imposto']); $sServicoValorLiquido = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_pagar']); // Seta os dados do Documento de DMS $oDmsNota->setNumpre(0); $oDmsNota->setServicoData($oDataServico); $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido']); $oDmsNota->setServicoValorPagar($sServicoValorPagar); $oDmsNota->setServicoValorDeducao($sServicoValorDeducao); $oDmsNota->setServicoValorCondicionado($sServicoValorCondicionado); $oDmsNota->setServicoDescontoIncondicionado($sServicoDescontoIncondicionado); $oDmsNota->setServicoAliquota($sServicoAliquota); $oDmsNota->setServicoBaseCalculo($sServicoBaseCalculo); $oDmsNota->setServicoValorImposto($sServicoValorImposto); $oDmsNota->setServicoValorLiquido($sServicoValorLiquido); $oDmsNota->setDescricaoServico($aDados['s_observacao']); $oDmsNota->setServicoCodigoObra($aDados['s_codigo_obra']); $oDmsNota->setServicoArt($aDados['s_art']); $oDmsNota->setServicoInformacoesComplementares($aDados['s_informacoes_complementares']); if ($this->oContribuinte->getInscricaoMunicipal()) { $oDadosTomador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($this->oContribuinte->getInscricaoMunicipal()); } else { $oDadosTomador = Contribuinte_Model_ContribuinteEventual::getByCpfCnpj($this->oContribuinte->getCgcCpf()); } $oDmsNota->setTomadorCpfCnpj($oDadosTomador->getCgcCpf()); $oDmsNota->setTomadorInscricaoMunicipal($oDadosTomador->getInscricaoMunicipal()); $oDmsNota->setTomadorInscricaoEstadual($oDadosTomador->getInscricaoEstadual()); $oDmsNota->setTomadorRazaoSocial($oDadosTomador->getNome()); $oDmsNota->setTomadorNomeFantasia($oDadosTomador->getNomeFantasia()); $oDmsNota->setTomadorEnderecoRua($oDadosTomador->getDescricaoLogradouro()); $oDmsNota->setTomadorEnderecoNumero($oDadosTomador->getLogradouroNumero()); $oDmsNota->setTomadorEnderecoComplemento($oDadosTomador->getLogradouroComplemento()); $oDmsNota->setTomadorEnderecoBairro($oDadosTomador->getLogradouroBairro()); $oDmsNota->setTomadorEnderecoCodigoMunicipio($oDadosTomador->getCodigoIbgeMunicipio()); $oDmsNota->setTomadorEnderecoEstado($oDadosTomador->getEstado()); $oDmsNota->setTomadorEnderecoCodigoPais($oDadosTomador->getCodigoPais()); $oDmsNota->setTomadorEnderecoCEP($oDadosTomador->getCep()); $oDmsNota->setTomadorTelefone($oDadosTomador->getTelefone()); $oDmsNota->setTomadorEmail($oDadosTomador->getEmail()); // Dados Tomador $oDadosPrestador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['s_cpf_cnpj']); if (empty($oDadosPrestador->eCidade)) { // Se não for cadastrado no eCidade, salva prestador no NFSE if (empty($oDadosPrestador->eNota) && !empty($aDados['s_cpf_cnpj'])) { $aDadosPrestador['t_cnpjcpf'] = $aDados['s_cpf_cnpj']; $aDadosPrestador['t_razao_social'] = $aDados['s_razao_social']; $oDadosPrestadorNota = new Contribuinte_Model_EmpresaBase(); $oDadosPrestadorNota->persist($aDadosPrestador); } $oDmsNota->setPrestadorCpfCnpj($aDados['s_cpf_cnpj']); $oDmsNota->setPrestadorRazaoSocial($aDados['s_razao_social']); } else { $oDadosPrestadorEcidade = $oDadosPrestador->eCidade[0]; $oDmsNota->setPrestadorCpfCnpj($aDados['s_cpf_cnpj']); $oDmsNota->setPrestadorNomeFantasia($oDadosPrestadorEcidade->attr('nome_fanta')); $oDmsNota->setPrestadorRazaoSocial($oDadosPrestadorEcidade->attr('nome')); $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestadorEcidade->attr('inscricao')); $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestadorEcidade->attr('inscr_est')); $oDmsNota->setPrestadorEnderecoRua($oDadosPrestadorEcidade->attr('endereco')); $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestadorEcidade->attr('numero')); $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestadorEcidade->attr('complemento')); $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestadorEcidade->attr('bairro')); $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestadorEcidade->attr('cod_ibge')); $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestadorEcidade->attr('uf')); $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestadorEcidade->attr('cod_pais')); $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestadorEcidade->attr('cep')); $oDmsNota->setPrestadorTelefone($oDadosPrestadorEcidade->attr('telefone')); $oDmsNota->setPrestadorEmail($oDadosPrestadorEcidade->attr('email')); } $oDmsNota->setIdUsuario($this->usuarioLogado->getId()); $oDmsNota->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte()); $oDmsNota->setDms($oDms->getEntity()); // Adiciona o documento ao DMS $oDms->addDmsNotas($oDmsNota->getEntity()); // Salva o DMS e o documento $iCodigoDms = $oDms->persist(); // Configura a mensagem de retorno $aRetornoJson['status'] = TRUE; $aRetornoJson['success'] = $this->translate->_('Documento lançado com sucesso!'); $aRetornoJson['id_dms'] = $iCodigoDms; // Quando for alteração, configura a mensagem de alteração if (isset($aDados['id']) && $aDados['id']) { $sUrlDmsAlterado = "/contribuinte/dms/emissao-manual-entrada/id_dms/{$iCodigoDms}"; $aRetornoJson['success'] = $this->translate->_('Documento alterado com sucesso!'); $aRetornoJson['url'] = $this->view->baseUrl($sUrlDmsAlterado); } } else { $aRetornoJson['status'] = FALSE; $aRetornoJson['fields'] = array_keys($oForm->getMessages()); $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.'); } echo $this->getHelper('json')->sendJson($aRetornoJson); }