コード例 #1
0
 /**
  * Importacao de arquivo [Json]
  *
  * @throws Exception
  */
 public function processarArquivoAction()
 {
     parent::noLayout();
     $oFormImportacaoDms = new Contribuinte_Form_ImportacaoArquivo();
     $oFormImportacaoDms->renderizaCamposDms();
     $oDoctrine = Zend_Registry::get('em');
     $oDoctrine->getConnection()->beginTransaction();
     try {
         // Id do usuário logado
         $oContador = $this->oUsuario;
         $iCodigoUsuario = $this->usuarioLogado->getId();
         $oContribuinteLogado = $this->oContribuinte;
         $oImportacao = new Contribuinte_Model_ImportacaoDms();
         if (!$oFormImportacaoDms->arquivo->isUploaded()) {
             throw new Exception($this->translate->_('Informe um arquivo válido.'));
         }
         $sArquivoPdfBase64 = base64_encode(file_get_contents($_FILES['arquivo']['tmp_name']));
         $sNomeArquivo = $_FILES['arquivo']['name'];
         // Seta a inscrição municipal do contribuinte, caso seja contador seta nulo
         $oRetorno = Contribuinte_Model_ImportarDmsEcidade::processarArquivo($oContador, $oContribuinteLogado, $sArquivoPdfBase64);
         if ($oRetorno->bStatus == FALSE) {
             throw new Exception($oRetorno->sMensagem);
         }
         if (!is_array($oRetorno->aDados)) {
             $sMensagem = 'Arquivo processado de forma incorreta! Favor entre em contato com o suporte.';
             throw new Exception($this->translate->_($sMensagem));
         }
         // Varre os contadores / escritórios
         $oEscritorio = NULL;
         $aImportacaoNotas = NULL;
         $fValorTotalImportado = NULL;
         $fValorTotalImpostoImportado = NULL;
         $iQuantidadeNotas = NULL;
         foreach ($oRetorno->aDados['contadores'] as $aContadores) {
             // Dados do contador / escritório
             $oEscritorio = isset($aContadores['dados']) ? $aContadores['dados'] : NULL;
             if (!isset($aContadores['contribuintes']) || count($aContadores) < 1) {
                 throw new Exception('Arquivo inconsistente, não foi encontrado contribuintes.');
             }
             // Varre os contribuintes do contador
             foreach ($aContadores['contribuintes'] as $aContribuintes) {
                 // Totalizadores
                 $fValorTotalImpostoImportado = 0;
                 $fValorTotalImportado = 0;
                 $iQuantidadeNotas = 0;
                 $iTotalImportadas = 0;
                 // Dados
                 $aPlanilhas = $aContribuintes['planilha'];
                 // Varre as planilhas do contribuinte
                 foreach ($aPlanilhas as $sOperacao => $oPlanilha) {
                     if (isset($oPlanilha->aNotas) && count($oPlanilha->aNotas) > 0) {
                         $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($oPlanilha->iInscricao);
                         $oDms = new Contribuinte_Model_Dms();
                         $oDms->setAnoCompetencia($oPlanilha->iAnoCompetencia);
                         $oDms->setMesCompetencia($oPlanilha->iMesCompetencia);
                         $oDms->setDataOperacao(new DateTime($oPlanilha->dtDatausu));
                         $oDms->setStatus('aberto');
                         $oDms->setOperacao($sOperacao);
                         $oDms->setIdContribuinte($oContribuinte->getIdUsuarioContribuinte());
                         $oDms->setIdUsuario($iCodigoUsuario);
                         // Verifica se existe notas para o contribuinte
                         if (isset($aContribuintes['notas'][$sOperacao])) {
                             // Varre as notas do contribuinte
                             foreach ($aContribuintes['notas'][$sOperacao] as $oNota) {
                                 // Dados Nota
                                 $oGrupoDocumento = Contribuinte_Model_Nota::getTipoNota($oNota->iCodigoTipoNota);
                                 $oDmsNota = new Contribuinte_Model_DmsNota();
                                 $oDmsNota->setNotaNumero($oNota->sNumeroNota);
                                 $oDmsNota->setNotaSerie($oNota->sSerie);
                                 $oDmsNota->setNotaData(new DateTime(date('Y-m-d', $oNota->sDataEmissao->iTimeStamp)));
                                 $oDmsNota->setGrupoDocumento($oGrupoDocumento->codigo_grupo);
                                 $oDmsNota->setTipoDocumento($oNota->iCodigoTipoNota);
                                 $oDmsNota->setSituacaoDocumento($oNota->sSituacao);
                                 $oDmsNota->setEmiteGuia($oNota->lEmiteGuia);
                                 // Dados Servico
                                 $bTomadorPagaIss = empty($oNota->bRetido) ? FALSE : TRUE;
                                 // Formatada dados
                                 $dServicoData = new DateTime(date('Y-m-d', $oNota->sDataPrestacao->iTimeStamp));
                                 // Validação dos valores das notas
                                 $oValidacaoValores = Contribuinte_model_dms::emissaoManualCalculaValoresDms($bTomadorPagaIss, DBSeller_Helper_Number_Format::toMoney($oNota->fValorServico), DBSeller_Helper_Number_Format::toMoney($oNota->fValorDeducao), DBSeller_Helper_Number_Format::toMoney($oNota->fValorDescontoCondicional), DBSeller_Helper_Number_Format::toMoney($oNota->fValorDescontoIncondicional), DBSeller_Helper_Number_Format::toMoney($oNota->fValorAliquota));
                                 // Verifica valores do imposto
                                 if (DBSeller_Helper_Number_Format::toMoney($oNota->fValorBaseCalculo) != $oValidacaoValores['s_base_calculo'] || DBSeller_Helper_Number_Format::toMoney($oNota->fValorIssqn) != $oValidacaoValores['s_valor_imposto']) {
                                     $sMensagem = 'Arquivo possui valores inconsistentes!<br>';
                                     $sMensagem .= "Nota: {$oNota->sNumeroNota} Série: {$oNota->sSerie}";
                                     throw new Exception($this->translate->_($sMensagem));
                                 }
                                 // Dados do documento de DMS
                                 $oDmsNota->setServicoData($dServicoData);
                                 $oDmsNota->setServicoImpostoRetido($bTomadorPagaIss);
                                 $oDmsNota->setServicoCodigoServico($oNota->iCodigoAtividade);
                                 $oDmsNota->setDescricaoServico($oNota->sDescricaoServico);
                                 $oDmsNota->setServicoValorPagar($oNota->fValorServico);
                                 $oDmsNota->setServicoValorLiquido($oNota->fValorNota);
                                 $oDmsNota->setServicoValorDeducao($oNota->fValorDeducao);
                                 $oDmsNota->setServicoValorCondicionado($oNota->fValorDescontoCondicional);
                                 $oDmsNota->setServicoDescontoIncondicionado($oNota->fValorDescontoIncondicional);
                                 $oDmsNota->setServicoBaseCalculo($oNota->fValorBaseCalculo);
                                 $oDmsNota->setServicoValorAliquota($oNota->fValorAliquota);
                                 $oDmsNota->setServicoValorImposto($oNota->fValorIssqn);
                                 $oDmsNota->setNumpre(0);
                                 // Campos novos
                                 $oDmsNota->setNaturezaOperacao($oNota->iNaturezaOperacao);
                                 $oDmsNota->setServicoCodigoObra($oNota->sCodigoObra);
                                 $oDmsNota->setServicoArt($oNota->sArt);
                                 $oDmsNota->setServicoInformacoesComplementares($oNota->sInformacoesComplementares);
                                 // Verifica a operação
                                 if (strtolower($sOperacao) == Contribuinte_Model_Dms::SAIDA) {
                                     $iInscricaoPrestador = $oPlanilha->iInscricao;
                                     $sCpfCnpjTomador = $oNota->iCpfCnpjTomador;
                                     $oDadosPrestador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoPrestador);
                                 } else {
                                     $oDadosPrestador = Contribuinte_Model_Contribuinte::getByCpfCnpj($oNota->iCpfCnpjTomador);
                                     $sCpfCnpjTomador = $oContribuinte->getCgcCpf();
                                 }
                                 // Verifica o prestador
                                 if (empty($oDadosPrestador)) {
                                     $sMensagem = 'Arquivo processado de forma incorreta!<br>Existem contribuinte inválidos.';
                                     throw new Exception($this->translate->_($sMensagem));
                                 }
                                 // Serviços prestados
                                 if (strtolower($sOperacao) == Contribuinte_Model_Dms::SAIDA) {
                                     $oDmsNota->setPrestadorCpfCnpj($oDadosPrestador->getCgcCpf());
                                     $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestador->getInscricaoMunicipal());
                                     $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestador->getInscricaoEstadual());
                                     $oDmsNota->setPrestadorEnderecoRua($oDadosPrestador->getDescricaoLogradouro());
                                     $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestador->getLogradouroNumero());
                                     $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestador->getLogradouroComplemento());
                                     $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestador->getLogradouroBairro());
                                     $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestador->getCodigoIbgeMunicipio());
                                     $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestador->getEstado());
                                     $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestador->getCodigoPais());
                                     $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestador->getCep());
                                     $oDmsNota->setPrestadorTelefone($oDadosPrestador->getTelefone());
                                     $oDmsNota->setPrestadorEmail($oDadosPrestador->getEmail());
                                 } else {
                                     // Dados Prestador
                                     $oDadosPrestador = Contribuinte_Model_Empresa::getByCgcCpf($oNota->iCpfCnpjTomador);
                                     // Verifica se é prestador do eCidade e NFSe
                                     if (is_object($oDadosPrestador) && isset($oDadosPrestador->eCidade)) {
                                         $oDadosPrestador = $oDadosPrestador->eCidade[0];
                                         $oDmsNota->setPrestadorCpfCnpj($oNota->iCpfCnpjTomador);
                                         $oDmsNota->setPrestadorRazaoSocial($oDadosPrestador->attr('nome'));
                                         $oDmsNota->setPrestadorNomeFantasia($oDadosPrestador->attr('nome_fanta'));
                                         $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestador->attr('inscricao'));
                                         $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestador->attr('inscr_est'));
                                         $oDmsNota->setPrestadorEnderecoRua($oDadosPrestador->attr('logradouro'));
                                         $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestador->attr('numero'));
                                         $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestador->attr('complemento'));
                                         $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestador->attr('bairro'));
                                         $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestador->attr('cod_ibge'));
                                         $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestador->attr('uf'));
                                         $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestador->attr('cod_pais'));
                                         $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestador->attr('cep'));
                                         $oDmsNota->setPrestadorTelefone($oDadosPrestador->attr('telefone'));
                                         $oDmsNota->setPrestadorEmail($oDadosPrestador->attr('email'));
                                     } else {
                                         $oDmsNota->setPrestadorCpfCnpj($oNota->iCpfCnpjTomador);
                                         $oDmsNota->setPrestadorRazaoSocial($oNota->sNomeRazaoSocial);
                                         $oDmsNota->setPrestadorNomeFantasia($oNota->sNomeRazaoSocial);
                                     }
                                 }
                                 // Dados Tomador
                                 $oDadosTomador = Contribuinte_Model_Empresa::getByCgcCpf($sCpfCnpjTomador);
                                 // Verifica se é tomador do eCidade e NFSe
                                 if (is_object($oDadosTomador) && isset($oDadosTomador->eCidade)) {
                                     $oDadosTomador = $oDadosTomador->eCidade[0];
                                     $oDmsNota->setTomadorCpfCnpj($oDadosTomador->attr('cpf'));
                                     $oDmsNota->setTomadorRazaoSocial($oDadosTomador->attr('nome'));
                                     $oDmsNota->setTomadorNomeFantasia($oDadosTomador->attr('nome_fanta'));
                                     $oDmsNota->setTomadorInscricaoMunicipal($oDadosTomador->attr('inscricao'));
                                     $oDmsNota->setTomadorInscricaoEstadual($oDadosTomador->attr('inscr_est'));
                                     $oDmsNota->setTomadorEnderecoRua($oDadosTomador->attr('logradouro'));
                                     $oDmsNota->setTomadorEnderecoNumero($oDadosTomador->attr('numero'));
                                     $oDmsNota->setTomadorEnderecoComplemento($oDadosTomador->attr('complemento'));
                                     $oDmsNota->setTomadorEnderecoBairro($oDadosTomador->attr('bairro'));
                                     $oDmsNota->setTomadorEnderecoCodigoMunicipio($oDadosTomador->attr('cod_ibge'));
                                     $oDmsNota->setTomadorEnderecoEstado($oDadosTomador->attr('uf'));
                                     $oDmsNota->setTomadorEnderecoCodigoPais($oDadosTomador->attr('cod_pais'));
                                     $oDmsNota->setTomadorEnderecoCEP($oDadosTomador->attr('cep'));
                                     $oDmsNota->setTomadorTelefone($oDadosTomador->attr('telefone'));
                                     $oDmsNota->setTomadorEmail($oDadosTomador->attr('email'));
                                 } else {
                                     if (!isset($oDadosTomador->eNota)) {
                                         $aDadosTomador['t_cnpjcpf'] = $sCpfCnpjTomador;
                                         $aDadosTomador['t_razao_social'] = $oNota->sNomeRazaoSocial;
                                         $oDadosTomador = new Contribuinte_Model_EmpresaBase();
                                         $oDadosTomador->persist($aDadosTomador);
                                         $oDmsNota->setTomadorCpfCnpj($oNota->iCpfCnpjTomador);
                                         $oDmsNota->setTomadorRazaoSocial($oNota->sNomeRazaoSocial);
                                     }
                                 }
                                 // Dados dos usuário e contribuinte
                                 $oDmsNota->setIdUsuario($iCodigoUsuario);
                                 $oDmsNota->setIdContribuinte($oContribuinte->getIdUsuarioContribuinte());
                                 // Incrementa os valores
                                 $fValorTotalImpostoImportado = $fValorTotalImpostoImportado + $oNota->fValorIssqn;
                                 $fValorTotalImportado = $fValorTotalImportado + $oNota->fValorNota;
                                 $iQuantidadeNotas++;
                                 // Se for serviço prestado, verifica se a quantidade de AIDOFs é suficiente para importação
                                 if (strtolower($sOperacao) == Contribuinte_Model_Dms::SAIDA) {
                                     $iTotalNotasImportadas = count($aContribuintes['notas'][$sOperacao]);
                                     $iTotalImportadas = $iTotalImportadas + 1;
                                     $oAidof = new Administrativo_Model_Aidof();
                                     $iQuantidadeNotasEmissao = $oAidof->getQuantidadesNotasEmissao($oPlanilha->iInscricao, $oNota->iCodigoTipoNota);
                                     $iQuantidadeLiberada = $iQuantidadeNotasEmissao - $iTotalImportadas;
                                     if ($iQuantidadeLiberada <= 0) {
                                         $sMensagem = 'Você não possui AIDOFs liberadas para importar os documentos.';
                                         $sMensagem = sprintf($sMensagem, $iQuantidadeLiberada, $iTotalNotasImportadas);
                                         throw new Exception($this->translate->_($sMensagem));
                                     } else {
                                         if ($iQuantidadeLiberada < $iTotalNotasImportadas) {
                                             $sMensagem = 'Você possui apenas "%s" AIDOFs liberadas para importar "%s" documentos.';
                                             $sMensagem = sprintf($sMensagem, $iQuantidadeLiberada, $iTotalNotasImportadas);
                                             throw new Exception($this->translate->_($sMensagem));
                                         }
                                     }
                                     // Valida se a numeração da nota está no intervalo confere com as AIDOF liberadas
                                     $lNumeracaoNotaConfereComAidofLiberada = $oAidof->verificarNumeracaoValidaParaEmissaoDocumento($oDmsNota->getPrestadorInscricaoMunicipal(), $oDmsNota->getNotaNumero(), $oDmsNota->getTipoDocumento());
                                     if (!$lNumeracaoNotaConfereComAidofLiberada) {
                                         $sMensagem = 'O número do documento "%s" não confere com a numeração permitida pelas AIDOF\'s.';
                                         throw new Exception($this->translate->_(sprintf($sMensagem, $oDmsNota->getNotaNumero())));
                                     }
                                 }
                                 // Verifica se ja existe o documento, ignora e anula a planilha
                                 if ($oDmsNota::checarNotaEmitida($oContribuinte, $oNota->iCodigoTipoNota, $oNota->sNumeroNota, NULL, $sOperacao)) {
                                     $sMensagem = 'O documento nº "%s" já consta na base de dados do sistema.';
                                     throw new Exception($this->translate->_(sprintf($sMensagem, $oNota->sNumeroNota)));
                                 } else {
                                     // Adiciona as notas no DMS
                                     $oDmsNota->setDms($oDms->getEntity());
                                     $oDms->addDmsNotas($oDmsNota->getEntity());
                                 }
                                 // Formata os dados
                                 $sCompetenciaImportacao = $oPlanilha->iMesCompetencia . '-' . $oPlanilha->iAnoCompetencia;
                                 // Adiciona os dados do documento na importação
                                 $oImportacaoNotas = new Contribuinte_Model_ImportacaoDmsNota();
                                 $oImportacaoNotas->setNumeroNota($oNota->sNumeroNota);
                                 $oImportacaoNotas->setTipoNota($oNota->iCodigoTipoNota);
                                 $oImportacaoNotas->setValorTotal($oDmsNota->getServicoValorPagar());
                                 $oImportacaoNotas->setValorImposto($oNota->fValorIssqn);
                                 $oImportacaoNotas->setOperacaoNota($sOperacao);
                                 $oImportacaoNotas->setDataEmissaoNota($oDmsNota->getNotaData());
                                 $oImportacaoNotas->setCompetencia($sCompetenciaImportacao);
                                 $oImportacaoNotas->setIdContribuinte($oContribuinte->getIdUsuarioContribuinte());
                                 // Adiciona os dados na lista da importação
                                 $aImportacaoNotas[] = $oImportacaoNotas;
                             }
                         }
                     } else {
                         $sMensagem = 'Nenhum documento foi encontrado para importar.';
                         throw new Exception($this->translate->_($sMensagem));
                     }
                     // Salva o DMS
                     $aCodigosDms[] = $oDms->persist();
                 }
             }
         }
         // Formata os dados
         $sCodigoEscritorio = isset($oEscritorio->iInscricaoMunicipal) ? $oEscritorio->iInscricaoMunicipal : NULL;
         // Prepara informações da importacao
         $oImportacao->setDataOperacao(new DateTime());
         $oImportacao->setValorTotal($fValorTotalImportado);
         $oImportacao->setValorImposto($fValorTotalImpostoImportado);
         $oImportacao->setNomeArquivo($sNomeArquivo);
         $oImportacao->setQuantidadeNotas($iQuantidadeNotas);
         $oImportacao->setIdUsuario($iCodigoUsuario);
         $oImportacao->setCodigoEscritorio($sCodigoEscritorio);
         if (is_array($aImportacaoNotas)) {
             foreach ($aImportacaoNotas as $oNotaImportada) {
                 $oNotaImportada->setImportacaoDms($oImportacao->getEntity());
                 $oImportacao->addImportacaoNotas($oNotaImportada->getEntity());
             }
         }
         // Salva log de importação
         $iCodigoImportacao = $oImportacao->persist();
         // Retorno em Json
         $aRetornoJson['status'] = $oRetorno->bStatus;
         $aRetornoJson['success'] = $oRetorno->sMensagem;
         $aRetornoJson['url'] = $this->view->baseUrl("/contribuinte/dms/comprovante/id/{$iCodigoImportacao}");
         $oDoctrine->getConnection()->commit();
         echo $this->getHelper('json')->sendJson($aRetornoJson);
     } catch (Exception $oErro) {
         $oDoctrine->getConnection()->rollback();
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $oErro->getMessage();
         echo $this->getHelper('json')->sendJson($aRetornoJson);
         return;
     }
 }
コード例 #2
0
 /**
  * Metodo responsavel por criar as guias dms do prestador
  *
  * @param Contribuinte_Model_Dms $oDms
  * @param                        $sDataPagamento
  * @return StdClass
  */
 public static function gerarGuiaDmsPrestador(Contribuinte_Model_Dms $oDms, $sDataPagamento)
 {
     try {
         $oDoctrine = Zend_Registry::get('em');
         $oDoctrine->getConnection()->beginTransaction();
         $aNotas = array();
         foreach ($oDms->getDmsNotas() as $oDadosNota) {
             $oNota = new Contribuinte_Model_DmsNota($oDadosNota);
             // Ignora notas prestadas e retidas pelo tomador
             if ($oDms->getOperacao() == 's' && $oNota->getServicoImpostoRetido() == TRUE) {
                 continue;
             }
             // Ignora notas tomadas e retidas pelo tomador
             if ($oDms->getOperacao() == 'e' && $oNota->getServicoImpostoRetido() == FALSE) {
                 continue;
             }
             // Ignora notas anuladas, extraviadas ou canceladas
             if ($oNota->getStatus() == 5 || in_array($oNota->getSituacaoDocumento(), array('E', 'C'))) {
                 continue;
             }
             // Ignora notas isentas
             if ($oNota->getEmiteGuia() == FALSE) {
                 continue;
             }
             // Ignora notas com aliquota ou servico zerados
             if (floatval($oNota->getServicoAliquota()) <= 0) {
                 continue;
             } else {
                 if (floatval($oNota->getServicoValorImposto()) <= 0) {
                     continue;
                 }
             }
             $aNotas[$oNota->getId()] = $oNota;
         }
         $iMesCompetencia = $oDms->getMesCompetencia();
         $iAnoCompetencia = $oDms->getAnoCompetencia();
         $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getById($oDms->getIdContribuinte());
         $oContribuinte = Administrativo_Model_UsuarioContribuinte::getContribuinte($oDms->getIdContribuinte());
         // Salva guia antes de ser gerada no e-cidade
         $oGuia = new Contribuinte_Model_Guia();
         $sDataPagamentoGuia = DBSeller_Helper_Date_Date::invertDate($sDataPagamento);
         $oGuia->gerarGuiaDmsPrestador($oContribuinte, new DateTime($sDataPagamentoGuia), $iMesCompetencia, $iAnoCompetencia);
         // Envia Guia para o e-cidade
         $oGuiaGerar = self::montaDadosGuia($oUsuarioContribuinte, $iAnoCompetencia, $iMesCompetencia, $aNotas, $sDataPagamento, $oGuia->getId());
         $oGuiaGerada = self::gerarGuia($oGuiaGerar, $sDataPagamento, self::TIPO_DEBITO_RETIDO);
         $oDms->setCodigoPlanilha($oGuiaGerada->codigo_planilha);
         $oDms->setStatus('emitida');
         $aDadosNotas = $oGuiaGerar->notas;
         $aDadosNotas += $oGuiaGerada->notas;
         foreach ($aDadosNotas as $oNotaProcessada) {
             $oNota = $aNotas[$oNotaProcessada->codigo_documento];
             $oNota->setCodigoNotaPlanilha($oNotaProcessada->codigo_nota_planilha);
             $oNota->setNumpre($oGuiaGerada->debito_planilha);
         }
         $oDms->persist();
         $oGuia->complementaGuiaDmsPrestador($oGuiaGerada->debito, $oDms);
         $oGuiaGerada->arquivo_guia = self::salvarPdf($oGuiaGerada->debito->dados_boleto->arquivo_guia, 'guia_substituto');
         $oDoctrine->getConnection()->commit();
         return $oGuiaGerada;
     } catch (Exception $oError) {
         $oDoctrine->getConnection()->rollback();
         return $oError->getMessage();
     }
 }