/**
  * Cria uma nova instancia de ParametroContribuinte
  * @param Contribuinte\ParametroContribuinte $entity Entidade com os dados do parametro
  */
 public function __construct(Contribuinte\ParametroContribuinte $entity = null)
 {
     parent::__construct($entity);
     if ($entity === null) {
         $this->entity->setMaxDeducao(0);
     }
 }
 /**
  * Instancia um novo cadastro de pessoa
  *
  * É possível instanciar os dados de três formas:
  *  não passando id: Ira construir uma instancia vazia;
  *  Um inteiro, ira instanciar os dados do cadastro pelo Id;
  *  um Instancia da entidade \Contribuinte\CadastroPessoa
  * @param mixed $mId codigo da pessa
  */
 public function __construct($mId = null)
 {
     if (!is_object($mId)) {
         $this->entity = new Contribuinte\CadastroPessoa();
         if (!empty($mId)) {
             $this->entity = parent::getEntityByPrimaryKey($mId);
             if (empty($this->entity)) {
                 throw new Exception('Cadastro não existe no banco de dados.');
             }
         }
     } else {
         $this->entity = $mId;
     }
 }
 /**
  * @param integer $iIdContribuinte
  */
 public static function consultaGuiasDesif($iIdContribuinte)
 {
     try {
         $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('id', $iIdContribuinte);
         $em = parent::getEm();
         $sDql = 'SELECT g FROM Contribuinte\\Guia g INNER JOIN  Contribuinte\\DesifContaGuia d WITH g.id = d.guia';
         $sDql .= ' WHERE g.id_contribuinte = :c AND g.tipo_documento_origem = :t';
         $oQuery = $em->createQuery($sDql)->setParameters(array('t' => self::$DOCUMENTO_ORIGEM_NFSE, 'c' => $oUsuarioContribuinte->getEntity()));
         $aResultado = $oQuery->getResult();
         $aGuias = array();
         if ($aResultado != NULL) {
             foreach ($aResultado as $q) {
                 $aGuias[] = new self($q);
             }
         }
         return $aGuias;
     } catch (Excpetion $oErro) {
         throw $oErro;
     }
 }
 /**
  * Busca as quantidades dos valores das notas por período
  *
  * @param $aParametros
  * @return array
  * @throws Exception
  */
 public function getNotaPorPeriodo($aParametros)
 {
     try {
         $oEntityManager = parent::getEm();
         $oQuery = $oEntityManager->createQueryBuilder();
         $sSelect = 'count(n) as notas,';
         $sSelect .= 'n.p_im,';
         $sSelect .= 'n.p_razao_social,';
         $sSelect .= 'sum(n.vl_liquido_nfse) as vl_liquido_nfse,';
         $sSelect .= 'sum(n.s_vl_iss) as s_vl_iss';
         $oQuery->select($sSelect);
         $oQuery->from('Contribuinte\\Nota', 'n');
         /**
          * Verifica data inicial e data final
          */
         if (isset($aParametros['data_nota_inicial']) && isset($aParametros["data_nota_final"])) {
             $oDataInicial = new DateTime(str_replace("/", "-", $aParametros['data_nota_inicial']));
             $oDataFinal = new DateTime(str_replace("/", "-", $aParametros['data_nota_final']));
             $oQuery->andWhere('n.dt_nota BETWEEN :dt_nota_inicial and :dt_nota_final');
             $aWhere['dt_nota_inicial'] = $oDataInicial->format('Y-m-d');
             $aWhere['dt_nota_final'] = $oDataFinal->format('Y-m-d');
         }
         if (!empty($aParametros['natureza_operacao'])) {
             $oQuery->andWhere("n.natureza_operacao = {$aParametros['natureza_operacao']}");
         }
         if (!empty($aParametros['s_dados_iss_retido'])) {
             $oQuery->andWhere("n.s_dados_iss_retido = {$aParametros['s_dados_iss_retido']}");
         }
         $oQuery->setParameters($aWhere);
         $oQuery->groupBy('n.id_contribuinte, n.p_im, n.p_razao_social');
         $aResultado = $oQuery->getQuery()->getResult();
         return $aResultado;
     } catch (Exception $e) {
         throw $e;
     }
 }
 /**
  * Verifica se exista nota emitida com o numero, serie, tipo documento e inscricao municipal
  *
  * @deprecated       Considerar:
  *                   Contribuinte_Model_DmsNota::checarNotaEmitida()
  *                   Contribuinte_Model_DmsNota::checarNotaEmitidaPrestadorEventual()
  * @param stdclass $oParametro
  *           string   $oParametro->sTipoOperacao
  *           integer  $oParametro->iTipoDocumento
  *           string   $oParametro->sNumero
  *           string   $oParametro->sSerie
  *           integer  $oParametro->iInscricaoMunicipal
  * @return boolean
  *           [TRUE : Existe Nota Emitida]
  */
 public static function existeNotaEmitida($oParametro = NULL)
 {
     if (!is_object($oParametro)) {
         throw new Exception('Informe o Parâmetro');
     }
     if (!isset($oParametro->sTipoOperacao)) {
         throw new Exception('Informe o Tipo de Operação do Documento');
     }
     if (!isset($oParametro->iTipoDocumento)) {
         throw new Exception('Informe o Tipo do Documento');
     }
     if (!isset($oParametro->sNumero)) {
         throw new Exception('Informe o Número do Documento');
     }
     if (!isset($oParametro->sSerie)) {
         throw new Exception('Informe a Série do Documento');
     }
     if (!isset($oParametro->iInscricaoMunicipal)) {
         throw new Exception('Informe o Contribuinte');
     }
     $oQuery = parent::getEm()->createQueryBuilder();
     $oQuery->select('1');
     $oQuery->from('Contribuinte\\DmsNota', 'n');
     $oQuery->leftJoin('Contribuinte\\Dms', 'd', \Doctrine\ORM\Query\Expr\Join::WITH, 'n.id_dms = d.id');
     if ($oParametro->sTipoOperacao == 's') {
         $oQuery->where('n.p_im = :im');
     } else {
         $oQuery->where('n.t_im = :im');
     }
     $oQuery->andWhere('d.operacao       = :operacao');
     $oQuery->andWhere('n.tipo_documento = :tipo_documento');
     $oQuery->andWhere('n.nota           = TRIM(:nota)');
     $oQuery->andWhere('n.serie          = :serie');
     $oQuery->setParameter('im', $oParametro->iInscricaoMunicipal);
     $oQuery->setParameter('operacao', $oParametro->sTipoOperacao);
     $oQuery->setParameter('tipo_documento', $oParametro->iTipoDocumento);
     $oQuery->setParameter('nota', $oParametro->sNumero);
     $oQuery->setParameter('serie', $oParametro->sSerie);
     $oQuery->setMaxResults(1);
     $aResultado = $oQuery->getQuery()->getResult();
     return is_array($aResultado) && count($aResultado) > 0;
 }
 /**
  * Instancia uma nova DMS
  *
  * @param object|string|null $uEntity nome ou instancia da entidade
  */
 public function __construct($uEntity = NULL)
 {
     parent::__construct($uEntity);
 }
 /**
  * Método que busca as importaçoes DES-IF por competencia e contribuinte
  *
  * @param  array     $aIdContribuinte
  * @param  integer   $iCompetenciaInicial
  * @param  integer   $iCompetenciaFinal
  * @throws Exception
  */
 public static function getImportacaoPorCompetencia($aIdContribuinte, $iCompetenciaInicial, $iCompetenciaFinal)
 {
     try {
         $oEntityManager = parent::getEm();
         $oQuery = $oEntityManager->createQueryBuilder();
         $oQuery->select('n');
         $oQuery->from('Contribuinte\\ImportacaoDesif', 'n');
         $oQuery->where('n.contribuinte in(?1)');
         $oQuery->setParameters(array('1' => $aIdContribuinte));
         if (!is_null($iCompetenciaInicial)) {
             $oQuery->andWhere('n.competencia_inicial >= ?2');
             $oQuery->setParameter('2', $iCompetenciaInicial);
         }
         if (!is_null($iCompetenciaFinal)) {
             $oQuery->andWhere('n.competencia_final <= ?3');
             $oQuery->setParameter('3', $iCompetenciaFinal);
         }
         $aResultado = $oQuery->getQuery()->getResult();
         return $aResultado;
     } catch (Exception $oErro) {
         throw $oErro;
     }
 }