/**
  * Instancia o formulario de emissão de RPS
  *
  * @param string                                  $sCodigoVerificacao Código de Verificação
  * @param Contribuinte_Model_ContribuinteAbstract $oContribuinte      Dados do contribuinte
  * @return Contribuinte_Form_Nota
  */
 private function formNota($sCodigoVerificacao, Contribuinte_Model_ContribuinteAbstract $oContribuinte = NULL)
 {
     // Seta o contribuinte da sessão se não for enviado por parâmetro
     $oContribuinte = $oContribuinte ? $oContribuinte : $this->_session->contribuinte;
     $iIdContribuinte = $oContribuinte->getIdUsuarioContribuinte();
     $maxNota = 0;
     $maxGuia = 0;
     $aListaIdContribuinte = $oContribuinte->getContribuintes();
     // Calcula quantos dias no passado a nota pode ser emtidida
     $oParametrosPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase();
     $max = $oParametrosPrefeitura->getNotaRetroativa();
     $oUltimaGuia = Contribuinte_Model_Guia::getUltimaGuiaNota($oContribuinte);
     $uDataUltimaNota = Contribuinte_Model_Nota::getUltimaNotaEmitidaByContribuinte($aListaIdContribuinte);
     $dia = new DateTime();
     if ($oUltimaGuia != NULL) {
         if ($oUltimaGuia->getMesComp() + 1 > 12) {
             $iMes = 1;
         } else {
             $iMes = $oUltimaGuia->getMesComp();
         }
         $uDataUltimoDiaCompetencia = new Zend_Date("01/{$iMes}/{$oUltimaGuia->getAnoComp()}");
         $uDataUltimoDiaCompetencia->sub(1, Zend_date::DAY);
         $diff = $dia->diff(new DateTime($uDataUltimoDiaCompetencia->get('YYYY-MM-dd')), TRUE);
         $maxGuia = $diff->d < $max ? $diff->d : $max;
     }
     if ($uDataUltimaNota != NULL) {
         $diff = $dia->diff(new DateTime($uDataUltimaNota), TRUE);
         $maxNota = $diff->d < $max ? $diff->d : $max;
     }
     if ($maxNota - $maxGuia < $maxGuia) {
         $max = $maxGuia - 1;
     } else {
         if ($maxNota > 0) {
             $max = $maxNota;
         } else {
             $max = 0;
         }
     }
     $dia = $dia->sub(new DateInterval('P' . $max . 'D'));
     $oForm = new Contribuinte_Form_Nota($sCodigoVerificacao, $dia, '/contribuinte/rps/index', TRUE);
     if ($oContribuinte !== NULL) {
         $oParametros = Contribuinte_Model_ParametroContribuinte::getById($iIdContribuinte);
         $oForm->preencheParametros($oParametros);
     }
     return $oForm;
 }
 /**
  * Formulário NFSE
  *
  * @param string $sCodigoVerificacao
  * @param string $oContribuinte
  * @return Contribuinte_Form_Nota
  */
 private function formNota($sCodigoVerificacao, $oContribuinte = NULL)
 {
     $oContribuinte = $oContribuinte ?: $this->_session->contribuinte;
     $iMaxNota = 0;
     $iMaxGuia = 0;
     // Calcula quantos dias no passado a nota pode ser emitida
     $oParametrosPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase();
     $iDiasRetroativosEmissaoNota = $oParametrosPrefeitura->getNotaRetroativa();
     $oDataCorrente = new DateTime();
     $oUltimaGuia = Contribuinte_Model_Guia::getUltimaGuiaNota($oContribuinte);
     $uDataUltimaNota = Contribuinte_Model_Nota::getUltimaNotaEmitidaByContribuinte($oContribuinte->getContribuintes());
     if ($uDataUltimaNota != NULL) {
         $oDiff = $oDataCorrente->diff(new DateTime($uDataUltimaNota), TRUE);
         $iMaxNota = $oDiff->days < $iDiasRetroativosEmissaoNota ? $oDiff->days : $iDiasRetroativosEmissaoNota;
     }
     if (!empty($oUltimaGuia)) {
         $iMes = $oUltimaGuia->getMesComp();
         $iAno = $oUltimaGuia->getAnoComp();
         if ($oUltimaGuia->getMesComp() + 1 > 12) {
             $iMes = 1;
         }
         $iMes = str_pad($iMes, 2, '0', STR_PAD_LEFT);
         $uDataUltimoDiaCompetencia = new Zend_Date("01/{$iMes}/{$iAno}");
         $uDataUltimoDiaCompetencia->sub(-1, Zend_date::MONTH);
         $oDiff = $oDataCorrente->diff(new DateTime($uDataUltimoDiaCompetencia->get('Y-M-d')), TRUE);
         $iMaxGuia = $oDiff->days < $iDiasRetroativosEmissaoNota ? $oDiff->days : $iDiasRetroativosEmissaoNota;
     }
     if ($iMaxNota > $iMaxGuia && $iMaxGuia > 0) {
         $iDiasRetroativosEmissaoNota = $iMaxGuia;
     } else {
         if ($iMaxNota > 0) {
             $iDiasRetroativosEmissaoNota = $iMaxNota;
         } else {
             if (!$iDiasRetroativosEmissaoNota || $iMaxNota == 0) {
                 $iDiasRetroativosEmissaoNota = 0;
             }
         }
     }
     $oDataCorrente = new DateTime();
     $oDataCorrente = $oDataCorrente->sub(date_interval_create_from_date_string("{$iDiasRetroativosEmissaoNota} days"));
     $oForm = new Contribuinte_Form_Nota($sCodigoVerificacao, $oDataCorrente);
     if ($oContribuinte !== NULL) {
         $oParametros = Contribuinte_Model_ParametroContribuinte::getById($oContribuinte->getIdUsuarioContribuinte());
         if ($oParametros instanceof Contribuinte_Model_ParametroContribuinte) {
             $oForm->preencheParametros($oParametros);
         }
     }
     return $oForm;
 }