/** * Retorna o objeto relativo a compentência do contribuinte * * @param Contribuinte_Model_ContribuinteAbstract $oContribuinte * @return Contribuinte_Model_Competencia[] */ public static function getByContribuinte(Contribuinte_Model_ContribuinteAbstract $oContribuinte) { $oEntityManager = self::getEm(); $sSql = 'SELECT DISTINCT nota.ano_comp, nota.mes_comp, SUM(nota.s_vl_iss) as s_vl_iss , SUM(nota.s_vl_servicos) as s_vl_servicos FROM Contribuinte\\Nota nota WHERE nota.id_contribuinte in(:id_contribuinte) AND nota.cancelada = false AND nota.s_vl_iss > 0 AND nota.s_dados_iss_retido = 1 AND nota.emite_guia = true AND nota.importada = false GROUP BY nota.ano_comp, nota.mes_comp ORDER BY nota.ano_comp DESC, nota.mes_comp DESC'; $oQuery = $oEntityManager->createQuery($sSql); $oQuery->setParameter('id_contribuinte', $oContribuinte->getContribuintes()); $aResultados = $oQuery->getResult(); $aRetorno = array(); foreach ($aResultados as $aCompetencia) { $oCompetencia = new self($aCompetencia['ano_comp'], $aCompetencia['mes_comp'], $oContribuinte); $oCompetencia->setTotalIss($aCompetencia['s_vl_iss']); $oCompetencia->setTotalServico($aCompetencia['s_vl_servicos']); $lExisteGuia = Contribuinte_Model_Guia::existeGuia($oContribuinte, $aCompetencia['mes_comp'], $aCompetencia['ano_comp'], 10); $oCompetencia->setExisteGuia($lExisteGuia); $aRetorno[] = $oCompetencia; } return $aRetorno; }
/** * Retorna se existe guia para aquela nota * * @param Contribuinte_Model_ContribuinteAbstract $oContribuinte * @param integer $iMesCompetencia * @param integer $iAnoCompetencia * @param integer|null $iDocumentoOrigem * @return bool * @throws Zend_Exception */ public static function existeGuia(Contribuinte_Model_ContribuinteAbstract $oContribuinte, $iMesCompetencia, $iAnoCompetencia, $iDocumentoOrigem = NULL) { if (empty($oContribuinte)) { throw new Zend_Exception('Informe um contribuinte válido'); } if (!$iMesCompetencia) { throw new Zend_Exception('Informe o mês de competência'); } if (!$iAnoCompetencia) { throw new Zend_Exception('Informe o ano de competência'); } $oEntityManager = self::getEm(); $oRepositorio = $oEntityManager->getRepository(self::$entityName); $aParametros = array('id_contribuinte' => $oContribuinte->getContribuintes(), 'mes_comp' => $iMesCompetencia, 'ano_comp' => $iAnoCompetencia); if (!empty($iDocumentoOrigem)) { $aParametros['tipo_documento_origem'] = $iDocumentoOrigem; } $aResultado = $oRepositorio->findOneBy($aParametros); return !empty($aResultado); }
/** * Retorna as notas por id do contribuinte e competência * * @param integer $iAnoCompetencia * @param integer $iMesCompetencia * @param Contribuinte_Model_ContribuinteAbstract $oContribuinte * @return Contribuinte_Model_Nota[] */ public static function getNotasRetidasNaCompetenciaDoContribuinte($iAnoCompetencia, $iMesCompetencia, Contribuinte_Model_ContribuinteAbstract $oContribuinte) { $oEntityManager = parent::getEm(); $sSql = 'SELECT e FROM Contribuinte\\Nota e WHERE e.ano_comp = :ano AND e.mes_comp = :mes AND e.id_contribuinte in(:id_contribuinte) AND e.cancelada = false AND e.s_dados_iss_retido = ' . self::PRESTADOR_RETEM_ISS . ' AND e.s_vl_iss > 0 AND e.emite_guia = true'; $oQuery = $oEntityManager->createQuery($sSql); $oQuery->setParameters(array('mes' => $iMesCompetencia, 'ano' => $iAnoCompetencia, 'id_contribuinte' => $oContribuinte->getContribuintes())); $aResultado = $oQuery->getResult(); $aRetorno = array(); if (is_array($aResultado)) { foreach ($aResultado as $oResultado) { $aRetorno[] = new self($oResultado); } } return $aRetorno; }
/** * Verifica se exista nota emitida com o numero e serie informados * * @param Contribuinte_Model_ContribuinteAbstract $oContribuinte * @param string $sTipoDocumentoDescricao * @param string $sNumeroDocumento * @param string $sSerieDocumento * @param integer $iIdDocumento * @return boolean * [TRUE : Existe Nota Emitida] */ public static function checarNotaEmitidaPrestadorEventual(Contribuinte_Model_ContribuinteAbstract $oContribuinte, $sTipoDocumentoDescricao, $sNumeroDocumento, $sSerieDocumento = NULL, $iIdDocumento = NULL) { if (empty($oContribuinte)) { throw new Exception('Informe um contribuinte válido para checar a emissão'); } if (!$sTipoDocumentoDescricao) { throw new Exception('Informe o Tipo de Nota para checar a emissão'); } if (!$sNumeroDocumento) { throw new Exception('Informe o Número da Nota para checar a emissão'); } $oEntityManager = parent::getEm(); $oQuery = $oEntityManager->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'); $oQuery->where('n.id_contribuinte in (:id_contribuinte)'); $oQuery->andWhere('n.nota = :nota'); $oQuery->andWhere('n.tipo_documento_descricao = :tipo_documento_descricao'); $oQuery->andWhere('d.operacao = :operacao'); $oQuery->setParameter('id_contribuinte', $oContribuinte->getContribuintes()); $oQuery->setParameter('nota', $sNumeroDocumento); $oQuery->setParameter('tipo_documento_descricao', $sTipoDocumentoDescricao); $oQuery->setParameter('operacao', 's'); $oQuery->setMaxResults(1); if ($sSerieDocumento) { $oQuery->andWhere('n.serie = TRIM(:serie)'); $oQuery->setParameter('serie', $sSerieDocumento); } // Verifica se existem outros documentos somente na alteração if ($iIdDocumento) { $oQuery->andWhere('n.id <> :id_nota'); $oQuery->setParameter('id_nota', $iIdDocumento); } $aResultado = $oQuery->getQuery()->getResult(); if (is_array($aResultado) && count($aResultado) > 0) { return TRUE; } return FALSE; }
/** * Retorna Notas do Dms filtrando por id do Dms * * @param Contribuinte_Model_ContribuinteAbstract $oContribuinte Instância do contribuinte * @param integer $iAno Ano da competência * @param integer $iMes Mês da competência * @param string $sOperacao Tipo de operação * @return Contribuinte_Model_Dms[] Coleção de contribuinte */ public static function getDMSSemGuiaNaCompetencia(Contribuinte_Model_ContribuinteAbstract $oContribuinte, $iAno, $iMes, $sOperacao = self::SAIDA) { $sDql = 'SELECT e FROM Contribuinte\\Dms e WHERE e.id_contribuinte in(:id_contribuinte) AND e.operacao = :operacao AND e.ano_comp = :ano AND e.mes_comp = :mes AND e.codigo_planilha IS NULL AND (e.status = \'fechado\' OR e.status = \'emitida\')'; $oEntidade = self::getEm(); $sQuery = $oEntidade->createQuery($sDql); $oResult = $sQuery->setParameters(array('id_contribuinte' => $oContribuinte->getContribuintes(), 'mes' => $iMes, 'ano' => $iAno, 'operacao' => $sOperacao))->getResult(); if (count($oResult) > 0) { foreach ($oResult as $oRetorno) { $aRetorno[] = new self($oRetorno); } } return isset($aRetorno) ? $aRetorno : array(); }