/**
  * Reescrita do Metodo Header da Classe FPDF
  *
  * @see FPDF::Header()
  */
 public function Header()
 {
     $sLogotipoPrefeitura = APPLICATION_PATH . '/../public/global/img/brasao.jpg';
     $sTarjaSemValorFiscal = APPLICATION_PATH . '/../public/administrativo/img/nfse/tarja_sem_valor.png';
     if (file_exists($sLogotipoPrefeitura)) {
         $this->Image($sLogotipoPrefeitura, 12, 10);
     }
     if (file_exists($sTarjaSemValorFiscal) && getenv("APPLICATION_ENV") != 'production') {
         $this->Image($sTarjaSemValorFiscal, 30, 50);
     }
     $oParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll();
     $this->SetFont('Arial', '', 12);
     $this->Cell(0, 8, utf8_decode($oParametrosPrefeitura[0]->getNome()), 0, 1, 'C');
     $this->Cell(0, 8, utf8_decode('RELATÓRIO DE CONTRIBUINTES COM PERMISSÃO AO WEBSERVICE'), 0, 1, 'C');
     $this->SetFont('Arial', 'U', 12);
     $this->Cell(0, 8, utf8_decode($this->sAmbiente), 0, 1, 'C');
     $this->Ln(20);
 }
 /**
  * Comprovante de importação de RPS
  */
 public function rpsReciboAction()
 {
     parent::noLayout();
     $iIdImportacao = $this->_getParam('id');
     $oDoctrine = Zend_Registry::get('em');
     $oImportacao = $oDoctrine->find('\\Contribuinte\\ImportacaoArquivo', $iIdImportacao);
     $oDadosUsuario = Administrativo_Model_Usuario::getById($oImportacao->getIdUsuario());
     $oPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll();
     // Dados da View
     $this->view->oImportacao = $oImportacao;
     $this->view->oDadosUsuario = $oDadosUsuario;
     $this->view->oDadosPrefeitura = $oPrefeitura[0];
     $this->view->sNomePrefeitura = $oPrefeitura[0]->getEntity()->getNome();
     // Carrega a view do comprovante
     $sHtml = $this->view->render('importacao-arquivo/comprovante-importacao-rps.phtml');
     // Renderiza a view do comprovante
     $this->renderPdf($sHtml, 'comprovante-importacao-rps', array('format' => 'A4'));
 }
 /**
  * Gera o comprovante para a importacao de DMS
  */
 public function comprovanteAction()
 {
     parent::noLayout();
     $iIdImportacao = $this->getRequest()->getParam('id');
     $oImportacao = Contribuinte_Model_ImportacaoDms::getByAttribute('id', $iIdImportacao)->getEntity();
     $oDadosContador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($oImportacao->getCodigoEscritorio());
     $oDadosUsuario = Administrativo_Model_Usuario::getById($oImportacao->getIdUsuario());
     $aPrefeitura = Administrativo_Model_ParametroPrefeitura::getListAll();
     $oPrefeitura = reset($aPrefeitura);
     $this->view->oImportacao = $oImportacao;
     $this->view->oDadosContador = $oDadosContador;
     $this->view->oDadosUsuario = $oDadosUsuario;
     $this->view->oDadosPrefeitura = $oPrefeitura;
     $this->view->sNomePrefeitura = $oPrefeitura->getEntity()->getNome();
     $this->_helper->layout->setLayout('pdf');
     $this->renderPdf($this->view->render('dms/comprovante.phtml'), 'comprovante', array('format' => 'A4'));
 }
 /**
  * Valida a importação de arquivo do tipo RPS modelo 1 (ABRASF 1.0)
  */
 public function validaArquivoCarregado()
 {
     $oSessao = new Zend_Session_Namespace('nfse');
     if (empty($this->oDadosPrefeitura)) {
         $aParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll(0, 1);
         if (count($aParametrosPrefeitura) == 0) {
             throw new Exception('Parâmetros da prefeitura não configurados. Processamento Abortado');
         }
         $this->oDadosPrefeitura = $aParametrosPrefeitura[0];
     }
     if (empty($this->oArquivoXmlRetorno->lote->numero)) {
         $this->setMensagemErro('E88');
     }
     if (empty($this->oArquivoXmlRetorno->lote->cnpj)) {
         $this->setMensagemErro('E46');
     }
     $oContribuinte = Contribuinte_Model_Contribuinte::getByCpfCnpj($this->oArquivoXmlRetorno->lote->cnpj);
     if (empty($oContribuinte)) {
         $this->setMensagemErro('E45', 'Contribuinte: ' . $this->oArquivoXmlRetorno->lote->cnpj);
     } else {
         if ($oContribuinte->getCgcCpf() != $oSessao->contribuinte->getCgcCpf()) {
             $this->setMensagemErro('E156', '', true);
         }
     }
     if ($this->oArquivoXmlRetorno->lote->quantidade_rps != count($this->oArquivoXmlRetorno->rps)) {
         $this->setMensagemErro('E69');
     }
     if (strlen($this->oArquivoXmlRetorno->lote->quantidade_rps) > 4) {
         $this->setMensagemErro('E72');
     }
     $aNumeracaoRPS = array();
     foreach ($this->oArquivoXmlRetorno->rps as $oRps) {
         if ($this->oArquivoXmlRetorno->lote->inscricao_municipal != $oRps->prestador->inscricao_municipal) {
             $this->setMensagemErro('E70', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->numero)) {
             $this->setMensagemErro('E11');
         } else {
             if (is_int($oRps->numero) && strlen($oRps->numero) > 15) {
                 $this->setMensagemErro('E96', 'RPS: ' . $oRps->numero);
             }
             if (in_array($oRps->numero, $aNumeracaoRPS)) {
                 $this->setMensagemErro('E71', 'RPS: ' . $oRps->numero);
             }
             $aNumeracaoRPS[$oRps->numero] = NULL;
         }
         if (strlen($oRps->serie) > 5) {
             $this->setMensagemErro('E97', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->tipo)) {
             $this->setMensagemErro('E12', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->natureza_operacao)) {
             $this->setMensagemErro('E3', 'RPS: ' . $oRps->numero);
         } else {
             if (!in_array($oRps->natureza_operacao, array(1, 2, 3, 4, 5, 6))) {
                 $this->setMensagemErro('E144', 'RPS: ' . $oRps->numero);
             }
         }
         if (empty($oRps->optante_simples_nacional)) {
             $this->setMensagemErro('E8', 'RPS: ' . $oRps->numero);
         } else {
             if (!in_array($oRps->optante_simples_nacional, array(1, 2))) {
                 $this->setMensagemErro('E146', 'RPS: ' . $oRps->numero);
             }
         }
         if (empty($oRps->incentivador_cultural)) {
             $this->setMensagemErro('E9', 'RPS: ' . $oRps->numero);
         } else {
             if (!in_array($oRps->incentivador_cultural, array(1, 2))) {
                 $this->setMensagemErro('E147', 'RPS: ' . $oRps->numero);
             }
         }
         if (empty($oRps->data_emissao)) {
             $this->setMensagemErro('E14', 'RPS: ' . $oRps->numero);
         }
         if (!in_array($oRps->status, array(1, 2))) {
             $this->setMensagemErro('E68', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->data_emissao->format('Ymd') > date('Ymd')) {
             $this->setMensagemErro('E16', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->prestador->cnpj == $oRps->tomador->cpf_cnpj) {
             $this->setMensagemErro('E52', 'RPS: ' . $oRps->numero);
         }
         // validação dos valores se float
         $oNumeroFloat = new Zend_Validate_Float();
         if ($oRps->servico->valores->valor_servicos <= 0) {
             $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_servicos)) {
             $this->setMensagemErro('E100', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_servicos <= 0) {
             $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_deducoes > $oRps->servico->valores->valor_servicos) {
             $this->setMensagemErro('E19', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_deducoes < 0) {
             $this->setMensagemErro('E20', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_deducoes)) {
             $this->setMensagemErro('E101', 'RPS: ' . $oRps->numero);
         }
         $fTotalDesconto = $oRps->servico->valores->desconto_incondicionado + $oRps->servico->valores->desconto_condicionado;
         if ($fTotalDesconto > $oRps->servico->valores->valor_servicos) {
             $this->setMensagemErro('E21', 'RPS: ' . $oRps->numero);
         }
         if ($fTotalDesconto < 0) {
             $this->setMensagemErro('E22', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($fTotalDesconto)) {
             $this->setMensagemErro('E102', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_pis < 0) {
             $this->setMensagemErro('E23', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_pis)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_cofins < 0) {
             $this->setMensagemErro('E24', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_cofins)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_inss < 0) {
             $this->setMensagemErro('E25', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_inss)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_ir < 0) {
             $this->setMensagemErro('E26', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_ir)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->valor_csll < 0) {
             $this->setMensagemErro('E27', 'RPS: ' . $oRps->numero);
         }
         if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_csll)) {
             $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero);
         }
         if (!in_array($oRps->servico->valores->iss_retido, array(1, 2))) {
             $this->setMensagemErro('E36', 'RPS: ' . $oRps->numero);
         }
         if ($oRps->servico->valores->iss_retido == 1) {
             if ($oRps->servico->valores->valor_iss_retido <= 0) {
                 $this->setMensagemErro('E40', 'RPS: ' . $oRps->numero);
             }
             if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_iss_retido)) {
                 $this->setMensagemErro('E153', 'RPS: ' . $oRps->numero);
             }
             if (strlen(DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($oRps->tomador->cpf_cnpj)) != 14) {
                 $this->setMensagemErro('E39', 'RPS: ' . $oRps->numero . ". Serviços tomados por pessoa Física não pode reter iss");
             }
         }
         if ($oRps->servico->valores->iss_retido == 1 && $oRps->servico->valores->valor_iss_retido > $oRps->servico->valores->valor_servicos) {
             $this->setMensagemErro('E99', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->servico->discriminacao)) {
             $this->setMensagemErro('E41', 'RPS: ' . $oRps->numero);
         }
         if (!empty($oContribuinte)) {
             $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal();
             $aServicos = Contribuinte_Model_Servico::getByIm($iInscricaoMunicipal);
             // Valida se o prestador de serviço pode atuar no município
             if (empty($aServicos)) {
                 $this->setMensagemErro('E17', 'RPS: ' . $oRps->numero);
             }
             // Valida se o prestador do serviço é emissor de NFSE
             $iTipoEmissaoNfse = Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA;
             if ($oContribuinte->getTipoEmissao($iInscricaoMunicipal) != $iTipoEmissaoNfse) {
                 $this->setMensagemErro('E138', 'RPS: ' . $oRps->numero);
             }
             // Valida a competência
             $oCompetencia = new Contribuinte_Model_Competencia($oRps->data_emissao->format('Y'), $oRps->data_emissao->format('m'), $oContribuinte);
             if (empty($oCompetencia) || $oCompetencia->existeGuiaEmitida()) {
                 $this->setMensagemErro(null, "A competência da RPS \"{$oRps->numero}\" é inválida, já existe Guia Emitida.");
             }
         }
         // Valida se a data é maior que a atual
         if ($oRps->data_emissao->format('Y-m') > date('Y-m')) {
             $this->setMensagemErro('E2', 'RPS: ' . $oRps->numero);
         }
         // Valida se já existe na base de dados
         $oTipoRps = Administrativo_Model_ParametroPrefeituraRps::getByTipoNfse($oRps->tipo);
         $iTipoRps = 0;
         // Valida o tipo de RPS
         if (is_object($oTipoRps)) {
             $iTipoRps = $oTipoRps->getEntity()->getTipoEcidade($oRps->tipo);
         }
         if ($iTipoRps == 0) {
             $this->setMensagemErro('E13', 'RPS: ' . $oRps->numero);
         }
         // Verifica se a numeração do AIDOF é válida
         $oAidof = new Administrativo_Model_Aidof();
         $lVerificaNumeracaoRps = $oAidof->verificarNumeracaoValidaParaEmissaoDocumento($oSessao->contribuinte->getInscricaoMunicipal(), $oRps->numero, $iTipoRps);
         if ($lVerificaNumeracaoRps === FALSE) {
             $this->setMensagemErro('E90', 'RPS: ' . $oRps->numero);
         }
         $lExisteRps = Contribuinte_Model_Nota::existeRps($oSessao->contribuinte, $oRps->numero, $oRps->tipo);
         if ($lExisteRps) {
             $this->setMensagemErro('E10', 'RPS: ' . $oRps->numero);
         }
         if (empty($oRps->servico->atividade)) {
             $this->setMensagemErro('E31', 'RPS: ' . $oRps->numero);
         } else {
             if (strlen($oRps->servico->atividade) > 5) {
                 $this->setMensagemErro('E104', 'RPS: ' . $oRps->numero);
             }
             // Valida Grupo de Serviço/Atividade
             if (!empty($iInscricaoMunicipal)) {
                 $oServico = Contribuinte_Model_Servico::getServicoPorAtividade($iInscricaoMunicipal, $oRps->servico->atividade);
                 if (!$oServico) {
                     $this->setMensagemErro('E30', 'RPS: ' . $oRps->numero);
                 }
             }
         }
         if (empty($oRps->servico->codigo_cnae)) {
             $this->setMensagemErro('E33', 'RPS: ' . $oRps->numero);
         } else {
             if (strlen($oRps->servico->codigo_cnae) > 7) {
                 $this->setMensagemErro('E105', 'RPS: ' . $oRps->numero);
             }
         }
         if (!empty($oRps->servico->ibge_municipio)) {
             if (strlen($oRps->servico->ibge_municipio) > 7) {
                 $this->setMensagemErro('E108', 'RPS: ' . $oRps->numero);
             }
             // 2 = fora do municipio
             if ($oRps->natureza_operacao == 2 && $oRps->servico->ibge_municipio == $this->oDadosPrefeitura->getIbge()) {
                 $this->setMensagemErro('E110', 'RPS: ' . $oRps->numero);
             }
         }
         // Validar IBGE Prefeitura
         if ($oRps->natureza_operacao == 1 && $this->oDadosPrefeitura->getIbge() !== $oRps->servico->ibge_municipio) {
             $this->setMensagemErro('E42', 'RPS: ' . $oRps->numero);
         }
         if (strlen($oRps->construcao_civil->art) > 15) {
             $this->setMensagemErro('E130', 'RPS: ' . $oRps->numero);
         }
         if (strlen($oRps->construcao_civil->codigo_obra) > 15) {
             $this->setMensagemErro('E129', 'Rps: ' . $oRps->numero);
         }
         if (count($this->aMensagensErroValidacao) >= 50) {
             $this->setMensagemErro('E49', '', TRUE);
         }
     }
     // Se existirem erros executa uma exceção com a lista de erros
     if (count($this->aMensagensErroValidacao) > 0) {
         return FALSE;
     }
     return TRUE;
 }
 /**
  * Retorna os dados da prefeitura
  *
  * @return mixed
  * @throws Exception
  */
 public static function getDadosPrefeituraBase()
 {
     $oDadosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll();
     if (count($oDadosPrefeitura) > 1) {
         throw new Exception('Cadastro de Prefeitura Inconsistente. Favor entre em contato com o Suporte');
     }
     return $oDadosPrefeitura[0];
 }
 /**
  * Define os dados da prefeitura
  *
  * @param Administrativo_Model_ParametroPrefeitura $oDadosPrefeitura
  * @param bool                                     $lLivroFiscal
  */
 public function setDadosPrefeitura(Administrativo_Model_ParametroPrefeitura $oDadosPrefeitura, $lLivroFiscal = TRUE)
 {
     if ($lLivroFiscal) {
         $this->AddPage();
     }
     $this->lImprimePaginas = TRUE;
     $sLogotipoPrefeitura = APPLICATION_PATH . '/../public/global/img/brasaomenor.jpg';
     if (file_exists($sLogotipoPrefeitura)) {
         $this->Image($sLogotipoPrefeitura, 8, 7);
     }
     $sTitulo = 'Livro Fiscal Serviços Prestados Mensal';
     if (!$lLivroFiscal) {
         $sTitulo = 'DECLARAÇÃO DE RECEITAS';
     }
     $this->SetFont('Arial', 'B', 10);
     $this->Cell(0, 5, utf8_decode($oDadosPrefeitura->getNome()), 0, 0, 'C');
     $this->Ln();
     $this->Cell(0, 5, 'SECRETARIA MUNICIPAL DA FAZENDA', 0, 0, 'C');
     $this->Ln();
     $this->Ln();
     $this->Cell(0, 5, utf8_decode($sTitulo), 0, 0, 'C');
     $this->Ln(15);
 }
 /**
  * Preenche dados do formulario
  *
  * @param Administrativo_Model_ParametroPrefeitura $oParametroPrefeitura
  * @return Administrativo_Form_ParametroPrefeitura
  */
 public function preenche(Administrativo_Model_ParametroPrefeitura $oParametroPrefeitura)
 {
     if ($oParametroPrefeitura->getModeloImportacaoRps() && isset($this->modelo_importacao_rps)) {
         $this->modelo_importacao_rps->setValue($oParametroPrefeitura->getModeloImportacaoRps());
     }
     if ($oParametroPrefeitura->getModeloImpressaoNfse() && isset($this->modelo_impressao_nfse)) {
         $this->modelo_impressao_nfse->setValue($oParametroPrefeitura->getModeloImpressaoNfse());
     }
     if ($oParametroPrefeitura->getInformacoesComplementaresNfse() && isset($this->informacoes_complementares_nfse)) {
         $this->informacoes_complementares_nfse->setValue($oParametroPrefeitura->getInformacoesComplementaresNfse());
     }
     if ($oParametroPrefeitura->getSetor() && isset($this->setor)) {
         $this->setor->setValue($oParametroPrefeitura->getSetor());
     }
     if ($oParametroPrefeitura->getSecretaria() && isset($this->secretaria)) {
         $this->secretaria->setValue($oParametroPrefeitura->getSecretaria());
     }
     return $this;
 }
 /**
  * Verifica se esta na regra do parametro da prfeitura para reter tomador pessoa fisica na emissão de nota
  * @param  array   $aDados array de dados do formulário
  * @return boolean true|false
  */
 private function podeReterPessoaFisica(array $aDados)
 {
     if ($aDados['s_dados_iss_retido'] == 0) {
         return TRUE;
     }
     if (strlen($aDados['t_cnpjcpf']) > 14) {
         return TRUE;
     }
     $oParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll();
     if ($aDados['natureza_operacao'] == 1 && $oParametrosPrefeitura[0]->getReterPessoaFisica() == 1) {
         return TRUE;
     }
     return FALSE;
 }
 /**
  * Método construtor
  *
  * @return $this|void
  */
 public function init()
 {
     // informações do sistema
     $oBaseUrlHelper = new Zend_View_Helper_BaseUrl();
     $oTradutor = $this->getTranslator();
     // Configurações do Formulário
     $this->setAction($oBaseUrlHelper->baseUrl($this->sAction));
     $this->setMethod(Zend_Form::METHOD_POST);
     $this->setAttrib('id', 'nota');
     // Vetor com os dias em que a nota pode ser emitida
     $aDiasEmissao = array();
     $oDia = new DateTime();
     do {
         $aDiasEmissao[$oDia->format('Y-m-d')] = $oDia->format('d/m/Y');
         $oDia = $oDia->sub(new DateInterval('P1D'));
     } while ($oDia->format('Ymd') >= $this->dMenorDiaEmissao->format('Ymd'));
     // Validador para campos de valores do documento
     $oValidacaoFloat = new Zend_Validate_Float(array('locale' => 'br'));
     // Reter Pessoa física é um parametro da prefeitura
     $oElm = $this->createElement('hidden', 'reter_pessoa_fisica');
     $oParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll();
     $oElm->setValue($oParametrosPrefeitura[0]->getReterPessoaFisica());
     $this->addElement($oElm);
     /**
      * Dados da Nota
      */
     $oElm = $this->createElement('select', 'dt_nota', array('divspan' => 4, 'multiOptions' => $aDiasEmissao));
     $oElm->setLabel('Data:');
     $oElm->setAttrib('class', 'span2');
     $oElm->setAttrib('data-url', $oBaseUrlHelper->baseUrl('/contribuinte/nota/verificar-contribuinte-optante-simples'));
     $oElm->setRequired(TRUE);
     $this->addElement($oElm);
     $oElm = $this->createElement('select', 'natureza_operacao', array('divspan' => 5));
     $oElm->setLabel('Natureza da Operação:');
     $oElm->setAttrib('class', 'span3');
     $oElm->setRequired(TRUE);
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     // Popula as naturezas de operacao
     self::setNaturezaOperacao();
     // Grupo da nota (o tipo padrão é o da NFSe)
     $oElm = $this->createElement('hidden', 'grupo_nota');
     $oElm->setValue(Contribuinte_Model_Nota::GRUPO_NOTA_NFSE);
     $this->addElement($oElm);
     $aGrupoElementosDadosNota = array('dt_nota', 'natureza_operacao');
     if (!$this->lRps) {
         $oElm = $this->createElement('checkbox', 'nota_substituta', array('divspan' => 4));
         $oElm->setLabel('Nota Substituta:');
         $oElm->setAttrib('class', 'span3');
         $oElm->removeDecorator('errors');
         $this->addElement($oElm);
         $oElm = $this->createElement('text', 'nota_substituida', array('divspan' => 5));
         $oElm->setLabel('Nº da Nota Substituida:');
         $oElm->setAttrib('class', 'span3 mask-numero');
         $oElm->setAttrib('maxlength', 10);
         $oElm->removeDecorator('errors');
         $this->addElement($oElm);
         $aGrupoElementosDadosNota[] = 'nota_substituta';
         $aGrupoElementosDadosNota[] = 'nota_substituida';
     }
     // Adiciona elementos ao grupo dos dados da nota
     $this->addDisplayGroup($aGrupoElementosDadosNota, 'dados_nota', array('legend' => 'Dados da Nota'));
     /**
      * RPS
      */
     if ($this->lRps) {
         // Seta o grupo de nota para o tipo RPS
         $this->getElement('grupo_nota')->setValue(Contribuinte_Model_Nota::GRUPO_NOTA_RPS);
         $oElm = $this->createElement('select', 'tipo_nota', array('divspan' => 10));
         $oElm->setLabel('Tipo de Documento:');
         $oElm->setAttrib('class', 'span6');
         $oElm->setRequired(TRUE);
         $oElm->removeDecorator('errors');
         $this->addElement($oElm);
         // Popula os tipos de documento
         self::setTiposDocumento();
         // Data de emissão do RPS
         $oElm = $this->createElement('text', 'data_rps', array('divspan' => 4));
         $oElm->setLabel('Data do RPS:');
         $oElm->setAttrib('class', 'span2');
         $oElm->addValidator(new Zend_Validate_Date(array('format' => 'dd/mm/yyyy')));
         $oElm->setRequired(TRUE);
         $oElm->removeDecorator('errors');
         $this->addElement($oElm);
         // Número do RPS
         $oElm = $this->createElement('text', 'n_rps', array('divspan' => 2));
         $oElm->setLabel('Número do RPS:');
         $oElm->setAttrib('class', 'span2 mask-numero');
         $oElm->setAttrib('maxlength', '5');
         $this->addElement($oElm);
         // Adiciona os elementos ao grupo de dados do RPS
         $this->addDisplayGroup(array('tipo_nota', 'data_rps', 'n_rps'), 'dados_rps', array('legend' => 'RPS'));
     }
     /**
      * Dados do Tomador
      */
     $oElm = $this->createElement('checkbox', 's_dados_iss_retido', array('divspan' => 10));
     $oElm->setLabel('Subst. Tributário (Retido):');
     $oElm->setAttrib('style', 'width:18px');
     $oElm->setAttrib('checked', FALSE);
     $this->addElement($oElm);
     $oElm = $this->createElement('button', 'buscador', array('label' => '', 'icon' => 'search', 'iconPosition' => Twitter_Bootstrap_Form_Element_Button::ICON_POSITION_LEFT));
     $oElm = $this->createElement('text', 't_cnpjcpf', array('divspan' => 10, 'append' => $oElm));
     $oElm->setLabel('CPF / CNPJ:');
     $oElm->setAttrib('class', 'span3 mask-cpf-cnpj');
     $oElm->setAttrib('campo-ref', 'cpf');
     $oElm->setAttrib('maxlength', 18);
     $oElm->setAttrib('url', $oBaseUrlHelper->baseUrl('/contribuinte/empresa/dados-cgm'));
     $oElm->addValidator(new DBSeller_Validator_CpfCnpj());
     $oElm->addFilter(new Zend_Filter_Digits());
     $oElm->setRequired(FALSE);
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_razao_social', array('divspan' => 10));
     $oElm->setLabel('Nome / Razão Social:');
     $oElm->setAttrib('class', 'span9');
     $oElm->setAttrib('campo-ref', 'nome');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_nome_fantasia', array('divspan' => 10));
     $oElm->setLabel('Nome Fantasia:');
     $oElm->setAttrib('class', 'span4 pessoa_juridica');
     $oElm->setAttrib('campo-ref', 'nome_fanta');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_im', array('divspan' => 5));
     $oElm->setLabel('Inscrição Municipal:');
     $oElm->setAttrib('class', 'span3 pessoa_juridica');
     $oElm->setAttrib('campo-ref', 'inscricao');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_ie', array('divspan' => 5));
     $oElm->setLabel('Inscrição Estadual:');
     $oElm->setAttrib('class', 'span4 pessoa_juridica');
     $oElm->setAttrib('campo-ref', 'inscr_est');
     $this->addElement($oElm);
     //$oElm = $this->createElement('hidden', 't_cod_pais');
     //$oElm->setValue('01058'); //codigo_bacen do Brasil
     //$this->addElement($oElm);
     $aPaises = Default_Model_Cadenderpais::getAll();
     $oElm = $this->createElement('select', 't_cod_pais', array('multiOptions' => $aPaises, 'divspan' => 5));
     $oElm->setLabel('País:');
     $oElm->setAttrib('class', 'select-estados span3 dados-tomador');
     $oElm->setValue('01058');
     $this->addElement($oElm);
     // Lista de estados
     $aEstado = Default_Model_Cadenderestado::getEstados('01058');
     $oElm = $this->createElement('select', 't_uf', array('multiOptions' => $aEstado, 'divspan' => 5));
     $oElm->setLabel('Estado:');
     $oElm->setAttrib('class', 'select-estados span3 dados-tomador');
     $oElm->setAttrib('select-munic', 't_cod_municipio');
     $oElm->setAttrib('ajax-url', $oBaseUrlHelper->baseUrl('/endereco/get-municipios/'));
     $oElm->setAttrib('campo-ref', 'uf');
     $oElm->setAttrib('key', FALSE);
     $oElm->setRequired(FALSE);
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $oElm = $this->createElement('select', 't_cod_municipio', array('divspan' => 3));
     $oElm->setLabel('Município:');
     $oElm->setAttrib('class', 'span4 dados-tomador');
     $oElm->setAttrib('campo-ref', 'cod_ibge');
     $oElm->setAttrib('key', TRUE);
     $oElm->removeDecorator('errors');
     $oElm->setRequired(FALSE);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_cep', array('divspan' => 10));
     $oElm->setLabel('CEP:');
     $oElm->setAttrib('class', 'span2 mask-cep dados-tomador');
     $oElm->setAttrib('campo-ref', 'cep');
     $oElm->setAttrib('maxlength', 8);
     $oElm->addFilter(new Zend_Filter_Digits());
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_endereco', array('divspan' => 7));
     $oElm->setLabel('Endereço:');
     $oElm->setAttrib('class', 'span6 dados-tomador');
     $oElm->setAttrib('campo-ref', 'logradouro');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_endereco_numero', array('divspan' => 4));
     $oElm->setLabel('Número:');
     $oElm->setAttrib('class', 'span2 numerico dados-tomador');
     $oElm->setAttrib('campo-ref', 'numero');
     $oElm->setAttrib('maxlength', 8);
     $oElm->setValidators(array('Int'));
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_endereco_comp', array('divspan' => 5));
     $oElm->setLabel('Complemento:');
     $oElm->setAttrib('class', 'span4 dados-tomador');
     $oElm->setAttrib('campo-ref', 'complemento');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_bairro', array('divspan' => 3));
     $oElm->setLabel('Bairro:');
     $oElm->setAttrib('class', 'span4 dados-tomador');
     $oElm->setAttrib('campo-ref', 'bairro');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_telefone', array('divspan' => 4));
     $oElm->setLabel('Telefone:');
     $oElm->setAttrib('class', 'span3 mask-fone');
     $oElm->setAttrib('campo-ref', 'telefone');
     $oElm->setAttrib('maxlength', 14);
     $oElm->addFilter(new Zend_Filter_Digits());
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 't_email', array('divspan' => 5));
     $oElm->setLabel('Email:');
     $oElm->setAttrib('class', 'span5');
     $oElm->setAttrib('campo-ref', 'email');
     $oElm->removeDecorator('errors');
     $oElm->addValidator('EmailAddress');
     $this->addElement($oElm);
     $this->addDisplayGroup(array('s_dados_iss_retido', 't_cnpjcpf', 't_cod_pais', 't_razao_social', 't_nome_fantasia', 't_im', 't_ie', 't_uf', 't_cod_municipio', 't_cep', 't_endereco', 't_endereco_numero', 't_endereco_comp', 't_bairro', 't_telefone', 't_email'), 'tomador', array('legend' => 'Tomador'));
     /**
      * Dados do servico
      */
     $oElm = $this->createElement('select', 's_dados_cod_tributacao', array('multiOptions' => array(), 'divspan' => 10));
     $oElm->setLabel('Serviço:');
     $oElm->setAttrib('class', 'span9');
     $oElm->setAttrib('url', $oBaseUrlHelper->baseUrl('/contribuinte/nota/get-servico/'));
     $oElm->setRequired(TRUE);
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $oElm = $this->createElement('hidden', 's_dados_cod_pais');
     $oElm->setValue('01058');
     //codigo_bacen do Brasil
     $this->addElement($oElm);
     $oElm = $this->createElement('select', 'estado', array('multiOptions' => $aEstado, 'divspan' => 5));
     $oElm->setLabel('Estado:');
     $oElm->setAttrib('class', 'select-estados span3');
     $oElm->setAttrib('select-munic', 's_dados_municipio_incidencia');
     $oElm->setAttrib('ajax-url', $oBaseUrlHelper->baseUrl('/endereco/get-municipios/'));
     $oElm->setAttrib('key', FALSE);
     $oElm->setRequired(TRUE);
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     // Lista de cidades
     $aCidade = array('0' => '');
     $oElm = $this->createElement('select', 's_dados_municipio_incidencia', array('multiOptions' => $aCidade, 'divspan' => 5));
     $oElm->setLabel('Município:');
     $oElm->setAttrib('class', 'span4');
     $oElm->setAttrib('key', TRUE);
     $oElm->removeDecorator('errors');
     $oElm->clearValidators();
     $oElm->setRequired(TRUE);
     $this->addElement($oElm);
     $oElm = $this->createElement('textarea', 'descricao', array('divspan' => 10));
     $oElm->setLabel('Descrição do Serviço:');
     $oElm->setAttrib('class', 'span9 exibir-contador-maxlength');
     $oElm->setAttrib('rows', '6');
     $oElm->setAttrib('maxlength', 2000);
     $oElm->removeDecorator('errors');
     $oElm->setRequired(TRUE);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_codigo_obra', array('divspan' => 5));
     $oElm->setLabel('Código da Obra:');
     $oElm->setAttrib('maxlength', 14);
     $oElm->setAttrib('class', 'span3');
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_art', array('divspan' => 5));
     $oElm->setLabel('ART:');
     $oElm->setAttrib('maxlength', 14);
     $oElm->setAttrib('class', 'span3');
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $oElm = $this->createElement('textarea', 's_informacoes_complementares', array('divspan' => 10));
     $oElm->setLabel('Outras Informações:');
     $oElm->setAttrib('class', 'span9 exibir-contador-maxlength');
     $oElm->setAttrib('maxlength', 600);
     $oElm->setAttrib('rows', '6');
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $this->addDisplayGroup(array('s_dados_cod_tributacao', 's_dados_cod_cnae', 's_dados_item_lista_servico', 'descricao_item_lista_servico', 's_dados_cod_pais', 'estado', 's_dados_municipio_incidencia', 'descricao', 's_codigo_obra', 's_art', 's_informacoes_complementares'), 'grp_servico', array('legend' => 'Dados do Serviço'));
     /**
      * Valores do servico
      */
     $oElm = $this->createElement('text', 's_vl_servicos', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('Valor do Serviço:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $oElm->setRequired(TRUE);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_deducoes', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('Dedução:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->setAttrib('habilita_deducao', FALSE);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_bc', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('Base de Cálculo:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->setAttrib('readonly', TRUE);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_aliquota', array('append' => '%', 'divspan' => 3));
     $oElm->setLabel('Alíquota:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 5);
     $oElm->removeDecorator('errors');
     $oElm->addValidator(new Zend_Validate_Between(array('min' => 0, 'max' => 9999, 'inclusive' => TRUE)));
     $oElm->setValue(0);
     $oElm->setRequired(TRUE);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_iss', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('ISS:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->setAttrib('readonly', TRUE);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_pis', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('PIS:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_cofins', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('COFINS:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_inss', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('INSS:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_ir', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('IR:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_csll', array('prepend' => 'R$', 'divspan' => 6));
     $oElm->setLabel('CSLL:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_outras_retencoes', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('Outras Retenções:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_condicionado', array('prepend' => 'R$', 'divspan' => 6));
     $oElm->setLabel('Desconto Condicional:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_desc_incondicionado', array('prepend' => 'R$', 'divspan' => 3));
     $oElm->setLabel('Desconto Incondicional:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->removeDecorator('errors');
     $oElm->addValidator($oValidacaoFloat);
     $this->addElement($oElm);
     $oElm = $this->createElement('text', 's_vl_liquido', array('prepend' => 'R$', 'divspan' => 6));
     $oElm->setLabel('Valor Líquido:');
     $oElm->setAttrib('class', 'input-small mask-valores');
     $oElm->setAttrib('placeholder', '0,00');
     $oElm->setAttrib('maxlength', 11);
     $oElm->setAttrib('readonly', TRUE);
     $oElm->addValidator(new DBSeller_Validator_Between(array('min' => 0, 'max' => 99999999999, 'inclusive' => false)));
     $oElm->removeDecorator('errors');
     $this->addElement($oElm);
     $oElm = $this->createElement('hidden', 's_tributacao_municipio');
     $oElm->setValue('f');
     $this->addElement($oElm);
     $oElm = $this->createElement('hidden', 's_dados_cod_tributacao_copia');
     $oElm->setValue(NULL);
     $this->addElement($oElm);
     $this->addDisplayGroup(array('s_vl_servicos', 's_vl_deducoes', 's_vl_bc', 's_vl_aliquota', 's_vl_iss', 's_vl_pis', 's_vl_cofins', 's_vl_cofins', 's_vl_inss', 's_vl_ir', 's_vl_csll', 's_vl_outras_retencoes', 's_vl_condicionado', 's_vl_desc_incondicionado', 's_vl_liquido'), 'valores', array('legend' => 'Valores do Serviço'));
     if ($this->sCodigoVerificacao == NULL) {
         $this->addElement('button', 'emitir', array('label' => 'Emitir', 'type' => 'submit', 'buttonType' => Twitter_Bootstrap_Form_Element_Button::BUTTON_SUCCESS, 'data-loading-text' => $oTradutor->_('Aguarde...'), 'class' => 'span2'));
         $this->addDisplayGroup(array('emitir'), 'actions', array('disableLoadDefaultDecorators' => TRUE, 'decorators' => array('Actions')));
     } else {
         $this->addElement(new Twitter_Bootstrap_Form_Element_Button('nova', array('label' => 'Nova', 'type' => 'button', 'url' => $oBaseUrlHelper->baseUrl('/contribuinte/nota/index/'), 'buttonType' => Twitter_Bootstrap_Form_Element_Button::BUTTON_SUCCESS)));
         $this->addElement(new Twitter_Bootstrap_Form_Element_Button('imprimir', array('label' => 'Imprimir', 'type' => 'button', 'url' => $oBaseUrlHelper->baseUrl("/contribuinte/nota/nota-impressa/cod/{$this->sCodigoVerificacao}"), 'buttonType' => Twitter_Bootstrap_Form_Element_Button::BUTTON_SUCCESS)));
         $this->addDisplayGroup(array('imprimir', 'nova'), 'actions', array('disableLoadDefaultDecorators' => TRUE, 'decorators' => array('Actions')));
     }
     return $this;
 }