/**
  * Metodo para renderizar o formulario de cadastro/alteracao dos parametros do contribuinte.
  *
  * Retorna para a view a instancia do formulario Contribuinte_Form_ParametrosContribuinte
  */
 public function contribuinteAction()
 {
     $oForm = new Contribuinte_Form_ParametrosContribuinte();
     $oParametroContribuinte = $this->buscaParametroContribuinte($this->view->contribuinte->getIdUsuarioContribuinte());
     $aDados = $this->getRequest()->getPost();
     if ($this->getRequest()->isPost() && $oForm->isValid($aDados)) {
         try {
             $oDoctrine = Zend_Registry::get('em');
             $oDoctrine->getConnection()->beginTransaction();
             $oParametroContribuinte->setAvisofimEmissaoNota($aDados["avisofim_emissao_nota"]);
             $oParametroContribuinte->setCofins(DBSeller_Helper_Number_Format::toDataBase($aDados["cofins"]));
             $oParametroContribuinte->setCsll(DBSeller_Helper_Number_Format::toDataBase($aDados["csll"]));
             $oParametroContribuinte->setIdContribuinte($this->view->contribuinte->getIdUsuarioContribuinte());
             $oParametroContribuinte->setInss(DBSeller_Helper_Number_Format::toDataBase($aDados["inss"]));
             $oParametroContribuinte->setIr(DBSeller_Helper_Number_Format::toDataBase($aDados["ir"]));
             $oParametroContribuinte->setMaxDeducao(DBSeller_Helper_Number_Format::toDataBase($aDados["max_deducao"]));
             $oParametroContribuinte->setPis(DBSeller_Helper_Number_Format::toDataBase($aDados["pis"]));
             $oParametroContribuinte->setValorIssFixo(DBSeller_Helper_Number_Format::toDataBase($aDados["valor_iss_fixo"]));
             $oParametroContribuinte->salvar();
             $oDoctrine->getConnection()->commit();
             $this->view->messages[] = array('success' => 'Parâmetros modificados com sucesso.');
             $oArquivoUpload = new Zend_File_Transfer();
             $oArquivoUpload->receive();
             $iInscricaoMunicipal = $this->view->contribuinte->getInscricaoMunicipal();
             Administrativo_Model_Empresa::setLogoByIm($iInscricaoMunicipal, $oArquivoUpload->getFileInfo());
         } catch (Exception $oErro) {
             $oDoctrine->getConnection()->rollback();
             $this->view->messages[] = array('error' => $oErro->getMessage());
         }
     }
     $oDados->im = $this->view->contribuinte->getInscricaoMunicipal();
     $oDados->nome_contribuinte = $this->view->contribuinte->getNome();
     $oDados->avisofim_emissao_nota = $oParametroContribuinte->getAvisofimEmissaoNota();
     $oDados->cofins = $oParametroContribuinte->getCofins();
     $oDados->csll = $oParametroContribuinte->getCsll();
     $oDados->inss = $oParametroContribuinte->getInss();
     $oDados->ir = $oParametroContribuinte->getIr();
     $oDados->max_deducao = $oParametroContribuinte->getMaxDeducao();
     $oDados->pis = $oParametroContribuinte->getPis();
     $oDados->valor_iss_fixo = $oParametroContribuinte->getValorIssFixo();
     $oForm->preenche($oDados);
     $this->view->sLogoPrestador = Administrativo_Model_Empresa::getLogoByIm($oDados->im);
     $this->view->form = $oForm;
 }
 /**
  * Calcula Valores para Dms
  *
  * @param boolean $lTomadorRetemImposto
  * @param string  $fValorServico
  * @param string  $fValorDeducao
  * @param string  $fValorDescontoCondicionado
  * @param string  $fValorDescontoIncondicionado
  * @param string  $fPercentualAliquota
  * @return Array  $aRetorno
  */
 public static function emissaoManualCalculaValoresDms($lTomadorRetemImposto, $fValorServico, $fValorDeducao, $fValorDescontoCondicionado, $fValorDescontoIncondicionado, $fPercentualAliquota)
 {
     $fValorServico = DBSeller_Helper_Number_Format::toDataBase($fValorServico);
     $fValorDeducao = DBSeller_Helper_Number_Format::toDataBase($fValorDeducao);
     $fValorDescontoCondicionado = DBSeller_Helper_Number_Format::toDataBase($fValorDescontoCondicionado);
     $fValorDescontoIncondicionado = DBSeller_Helper_Number_Format::toDataBase($fValorDescontoIncondicionado);
     $fPercentualAliquota = str_replace(',', '.', $fPercentualAliquota);
     // Validacao
     if ($fValorDeducao >= $fValorServico) {
         $fValorDeducao = 0;
     }
     if ($fValorDescontoCondicionado >= $fValorServico) {
         $fValorDescontoCondicionado = 0;
     }
     if ($fValorDescontoIncondicionado >= $fValorServico) {
         $fValorDescontoIncondicionado = 0;
     }
     // Calculos
     $fValorBaseCalculo = $fValorServico - $fValorDeducao - $fValorDescontoIncondicionado;
     $fValorImposto = $fValorBaseCalculo * ($fPercentualAliquota / 100);
     $fValorLiquido = $fValorServico - $fValorDescontoCondicionado - $fValorDescontoIncondicionado;
     if ($lTomadorRetemImposto == 1) {
         $fValorLiquido -= $fValorImposto;
     }
     // Retorno Json
     $aRetorno['s_valor_bruto'] = DBSeller_Helper_Number_Format::toMoney($fValorServico);
     $aRetorno['s_valor_deducao'] = DBSeller_Helper_Number_Format::toMoney($fValorDeducao);
     $aRetorno['s_vl_condicionado'] = DBSeller_Helper_Number_Format::toMoney($fValorDescontoCondicionado);
     $aRetorno['s_vl_desc_incondicionado'] = DBSeller_Helper_Number_Format::toMoney($fValorDescontoIncondicionado);
     $aRetorno['s_base_calculo'] = DBSeller_Helper_Number_Format::toMoney($fValorBaseCalculo);
     $aRetorno['s_valor_imposto'] = DBSeller_Helper_Number_Format::toMoney($fValorImposto);
     $aRetorno['s_valor_pagar'] = DBSeller_Helper_Number_Format::toMoney($fValorLiquido);
     return $aRetorno;
 }
 /**
  * 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);
 }