/**
  * 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;
 }
 /**
  * Verifica se o contribuinte é optante pelo simples na data especificada
  * Utiliza o mesmo método utilizado no DMS
  *
  * @see Contribuinte_Lib_Controller_AbstractController::verificarContribuinteOptanteSimplesAction()
  * @throws Exception
  */
 public function verificarContribuinteOptanteSimplesAction()
 {
     try {
         $sData = $this->getRequest()->getParam('data');
         if (!$sData) {
             throw new Exception('Informe a data para verificar.');
         }
         $oDataSimples = new DateTime(DBSeller_Helper_Date_Date::invertDate($sData, '-'));
         if (!$oDataSimples instanceof DateTime) {
             throw new Exception('Data inválida');
         }
         $oContribuinte = $this->_session->contribuinte;
         $oParametros = Contribuinte_Model_ParametroContribuinte::getById($oContribuinte->getIdUsuarioContribuinte());
         $aRetorno['optante_simples_nacional'] = $oContribuinte->isOptanteSimples($oDataSimples) ? TRUE : FALSE;
         $aRetorno['optante_simples_categoria'] = $oContribuinte->getOptanteSimplesCategoria();
         if ($oParametros instanceof Contribuinte_Model_ParametroContribuinte) {
             $fAliquota = $oParametros->getEntity()->getValorIssFixo();
             $aRetorno['valor_iss_fixo'] = DBSeller_Helper_Number_Format::toMoney($fAliquota);
         }
         echo $this->getHelper('json')->sendJson($aRetorno);
     } catch (Exception $oError) {
         $aRetorno['erro'] = TRUE;
         $aRetorno['mensagem'] = $oError->getMessage();
         echo $this->getHelper('json')->sendJson($aRetorno);
     }
 }
 /**
  * Retorna o parametro cadastrado para contribuinte
  * @param integer $iCodigoContribuinte Codigo do Contribuinte
  * @return Contribuinte_Model_ParametroContribuinte Instancia do model de parametros
  */
 public static function buscaParametroContribuinte($iCodigoContribuinte)
 {
     $parametro = Contribuinte_Model_ParametroContribuinte::getById($iCodigoContribuinte);
     if ($parametro == null) {
         $parametro = new Contribuinte_Model_ParametroContribuinte();
         $parametro->setIm($im);
     }
     return $parametro;
 }
 /**
  * Preenche os atributos dos campos referentes ao valores de impostos (estes itens serão enviados por ajax)
  *
  * @param Contribuinte_Model_ParametroContribuinte $oParametroContribuinte
  * @return Contribuinte_Form_Nota
  */
 public function preencheParametros(Contribuinte_Model_ParametroContribuinte $oParametroContribuinte)
 {
     if ($oParametroContribuinte === NULL) {
         return $this;
     }
     if ($oParametroContribuinte->getEntity()->getMaxDeducao() <= 0) {
         $this->getElement('s_vl_deducoes')->setAttrib('readonly', TRUE);
     }
     $this->s_vl_deducoes->setAttrib('perc', $oParametroContribuinte->getEntity()->getMaxDeducao());
     $this->s_vl_pis->setAttrib('perc', $oParametroContribuinte->getEntity()->getPis());
     $this->s_vl_cofins->setAttrib('perc', $oParametroContribuinte->getEntity()->getCofins());
     $this->s_vl_inss->setAttrib('perc', $oParametroContribuinte->getEntity()->getInss());
     $this->s_vl_ir->setAttrib('perc', $oParametroContribuinte->getEntity()->getIr());
     $this->s_vl_csll->setAttrib('perc', $oParametroContribuinte->getEntity()->getCsll());
     return $this;
 }