Commit e86975eb5c51afdac3a5988abe8f5018c21a0f6e

Authored by Hemerson Morais
1 parent 95623c9d

[UPD] - Sprint 05 - [Historia] US079 - Tratamento de envio de processos anexados.

Showing 1 changed file with 263 additions and 3 deletions   Show diff stats
rn/ExpedirProcedimentoRN.php
... ... @@ -91,7 +91,7 @@ class ExpedirProcedimentoRN extends InfraRN {
91 91 $this->objSerieRN = new SerieRN();
92 92 $this->objAnexoRN = new AnexoRN();
93 93 $this->objProcedimentoAndamentoRN = new ProcedimentoAndamentoRN();
94   -
  94 + $this->ordemDocumento = 1;
95 95 $this->barraProgresso = new InfraBarraProgresso();
96 96 $this->barraProgresso->setNumMin(0);
97 97 $this->barraProgresso->setNumMax(ProcessoEletronicoINT::NEE_EXPEDICAO_ETAPA_CONCLUSAO);
... ... @@ -142,7 +142,7 @@ class ExpedirProcedimentoRN extends InfraRN {
142 142  
143 143 //Construção do processo para envio
144 144 $objProcesso = $this->construirProcesso($dblIdProcedimento, $objExpedirProcedimentoDTO->getArrIdProcessoApensado(), $objMetadadosProcessoTramiteAnterior);
145   -
  145 + // var_dump($objProcesso->documento);exit;
146 146 $param = new stdClass();
147 147 $param->novoTramiteDeProcesso = new stdClass();
148 148 $param->novoTramiteDeProcesso->cabecalho = $objCabecalho;
... ... @@ -440,7 +440,8 @@ class ExpedirProcedimentoRN extends InfraRN {
440 440  
441 441 $this->atribuirProdutorProcesso($objProcesso, $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo());
442 442 $this->atribuirDataHoraDeRegistro($objProcesso, $objProcedimentoDTO->getDblIdProcedimento());
443   - $this->atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior);
  443 + $this->atribuirProtocolos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior);
  444 + //$this->atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior);
444 445 $this->atribuirDadosInteressados($objProcesso, $dblIdProcedimento);
445 446 $this->adicionarProcessosApensados($objProcesso, $arrIdProcessoApensado);
446 447  
... ... @@ -723,6 +724,64 @@ class ExpedirProcedimentoRN extends InfraRN {
723 724 }
724 725 }
725 726  
  727 + public function atribuirProtocolos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior)
  728 + {
  729 + // 1 - Recupera a lista de protocolos na ordem correta em que aparece no processo
  730 + list($arrIdDocumentosIndexados, $arrIdProcAnexadosIndexados) = $this->listarProtocolos($dblIdProcedimento);
  731 + $arrAuxiliar = (array_keys($arrIdDocumentosIndexados));
  732 +
  733 + // 2 - Constrói todos os metadados de documentos relacionados ao processo principal
  734 + $arrObjDocumentos = array();
  735 +
  736 + foreach ($arrAuxiliar as $k){
  737 + $arrObjDocumentos[$k] = $this->atribuirDocumentosAux($objProcesso, $arrIdDocumentosIndexados[$k], $parObjMetadadosTramiteAnterior);
  738 + }
  739 +
  740 + // 3 - Percorre a lista de protocolos, posicionando-os na ordem correta, seja documento ou procedimento
  741 + $numQuantProtocolos = count($arrIdDocumentosIndexados) + count($arrIdProcAnexadosIndexados);
  742 +
  743 + for($i =0 ; $i<$numQuantProtocolos ; $i++){
  744 + if($arrIdDocumentosIndexados[$i]){
  745 + $arrProtocolosIndexados[$i] = $arrIdDocumentosIndexados[$i];
  746 + }else if($arrIdProcAnexadosIndexados[$i]){
  747 + $arrProtocolosIndexados[$i] = $arrIdProcAnexadosIndexados[$i];
  748 + }
  749 + }
  750 +
  751 +
  752 + if ($numQuantProtocolos != count($arrProtocolosIndexados)){
  753 + throw new InfraException("Inconsistência identificada na atribuição dos documentos e processos anexados");
  754 + }
  755 +
  756 + // 4 - Ordena sequência de protocolos do processo
  757 + $arrNumSequenciaProtocolo = (array_keys($arrProtocolosIndexados));
  758 +
  759 +
  760 + $objProcesso->documento = array();
  761 +
  762 + foreach ($arrNumSequenciaProtocolo as $numSequencia){
  763 + if(array_key_exists($numSequencia, $arrIdDocumentosIndexados)){
  764 +
  765 + $dblIdDocumento = $arrIdDocumentosIndexados[$numSequencia];
  766 +
  767 +// if(!array_key_exists($dblIdDocumento, $arrObjDocumentos))
  768 +// throw new InfraException("Documento $dblIdDocumento não pode ser localizado na montagem do processo");
  769 + $arrObjDocumentos[$numSequencia]->ordem = $numSequencia+1;
  770 + $objProcesso->documento[] = $arrObjDocumentos[$numSequencia];
  771 +
  772 + }
  773 + elseif (array_key_exists($numSequencia, $arrIdProcAnexadosIndexados)){
  774 +
  775 + $objProcessoConstruido = $this->construirProcesso($arrIdProcAnexadosIndexados[$numSequencia]);
  776 + $objProcesso->documento[] = $objProcessoConstruido;
  777 +
  778 + } else {
  779 + throw new InfraException("Inconsistência identificada na atribuição dos documentos e processos anexados");
  780 + }
  781 + }
  782 +
  783 +
  784 + }
726 785 private function atribuirDataHoraDeRegistro($objContexto, $dblIdProcedimento, $dblIdDocumento = null)
727 786 {
728 787 //Validar parâmetro $objContexto
... ... @@ -801,6 +860,41 @@ class ExpedirProcedimentoRN extends InfraRN {
801 860 }
802 861 }
803 862  
  863 + public function listarProtocolos($idProcedimento){
  864 +
  865 + //Recupera toda a lista de protocolos vinculados ao processo
  866 + $arrTipoAssociacao = array(RelProtocoloProtocoloRN::$TA_DOCUMENTO_ASSOCIADO, RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO,RelProtocoloProtocoloRN::$TA_PROCEDIMENTO_ANEXADO);
  867 + $objRelProtocoloProtocoloDTO = new RelProtocoloProtocoloDTO();
  868 + $objRelProtocoloProtocoloDTO->retDblIdRelProtocoloProtocolo();
  869 + $objRelProtocoloProtocoloDTO->retDblIdProtocolo1();
  870 + $objRelProtocoloProtocoloDTO->retDblIdProtocolo2();
  871 + $objRelProtocoloProtocoloDTO->retNumSequencia();
  872 + $objRelProtocoloProtocoloDTO->retStrStaAssociacao();
  873 + $objRelProtocoloProtocoloDTO->setStrStaAssociacao($arrTipoAssociacao, InfraDTO::$OPER_IN);
  874 + $objRelProtocoloProtocoloDTO->setDblIdProtocolo1($idProcedimento);
  875 + $objRelProtocoloProtocoloDTO->setOrdNumSequencia(InfraDTO::$TIPO_ORDENACAO_ASC);
  876 +
  877 + $objRelProtocoloProtocoloRN = new RelProtocoloProtocoloRN();
  878 + $arrObjRelProtocoloProtocoloDTO = $objRelProtocoloProtocoloRN->listarRN0187($objRelProtocoloProtocoloDTO);
  879 +
  880 + $arrIdDocumentos = array();
  881 + $arrIdProcedimentos = array();
  882 +
  883 + foreach($arrObjRelProtocoloProtocoloDTO as $objRelProtocoloProtocoloDTO) {
  884 +
  885 + if ($objRelProtocoloProtocoloDTO->getStrStaAssociacao()==RelProtocoloProtocoloRN::$TA_DOCUMENTO_ASSOCIADO ||
  886 + $objRelProtocoloProtocoloDTO->getStrStaAssociacao()==RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO) {
  887 +
  888 + $arrIdDocumentos[$objRelProtocoloProtocoloDTO->getNumSequencia()] = $objRelProtocoloProtocoloDTO->getDblIdProtocolo2();
  889 + } elseif ($objRelProtocoloProtocoloDTO->getStrStaAssociacao()==RelProtocoloProtocoloRN::$TA_PROCEDIMENTO_ANEXADO){
  890 + $arrIdProcedimentos[$objRelProtocoloProtocoloDTO->getNumSequencia()] = $objRelProtocoloProtocoloDTO->getDblIdProtocolo2();
  891 + }
  892 + }
  893 + return array($arrIdDocumentos, $arrIdProcedimentos);
  894 +
  895 + }
  896 +
  897 +
804 898 private function atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior)
805 899 {
806 900 if(!isset($objProcesso)) {
... ... @@ -927,8 +1021,137 @@ class ExpedirProcedimentoRN extends InfraRN {
927 1021 $documento->idDocumentoSEI = $documentoDTO->getDblIdDocumento();
928 1022 $objProcesso->documento[] = $documento;
929 1023 }
  1024 +
930 1025 }
  1026 + //mudar o nome antes do commit
  1027 + private function atribuirDocumentosAux($objProcesso, $dblIdDocumento, $parObjMetadadosTramiteAnterior)
  1028 + {
  1029 + if(!isset($objProcesso)) {
  1030 + throw new InfraException('Parâmetro $objProcesso não informado.');
  1031 + }
  1032 +
  1033 + //TODO: Passar dados do ProcedimentoDTO via parâmetro j carregado anteriormente
  1034 + $arrDocumentosDTO = $this->listarDocumentosAux($dblIdDocumento);
  1035 +
  1036 + if(!isset($arrDocumentosDTO)) {
  1037 + throw new InfraException('Documentos não encontrados.');
  1038 + }
  1039 +
  1040 +
  1041 + $objDocumentos = array();
  1042 + foreach ($arrDocumentosDTO as $documentoDTO) {
  1043 +
  1044 + //$protocoloDocumentoDTO = $this->consultarProtocoloDocumento($documeto->getDblIdProcedimento());
  1045 + $documento = new stdClass();
  1046 + $objPenRelHipoteseLegalRN = new PenRelHipoteseLegalEnvioRN();
  1047 + //TODO: Atribuir das informações abaixo ao documento
  1048 + //<protocoloDoDocumentoAnexado>123</protocoloDoDocumentoAnexado>
  1049 + //<protocoloDoProcessoAnexado>456</protocoloDoProcessoAnexado>
  1050 + //Retirado
  1051 + //Considera o nmero/nome do documento externo para descrio do documento
  1052 + if($documentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO && $documentoDTO->getStrNumero() != null) {
  1053 + $strDescricaoDocumento = $documentoDTO->getStrNumero();
  1054 + }else{
  1055 + $strDescricaoDocumento = "***";
  1056 + }
  1057 +
  1058 + // Não é um documento externo
  1059 + /*elseif($documentoDTO->isSetNumIdTipoConferencia()){
  1060 +
  1061 + $objTipoProcedimentoDTO = new PenTipoProcedimentoDTO(true);
  1062 + $objTipoProcedimentoDTO->retStrNome();
  1063 + $objTipoProcedimentoDTO->setBolExclusaoLogica(false);
  1064 + $objTipoProcedimentoDTO->setDblIdProcedimento($dblIdProcedimento);
  1065 + $objTipoProcedimentoBD = new TipoProcedimentoBD(BancoSEI::getInstance());
  1066 + $objTipoProcedimentoDTO = $objTipoProcedimentoBD->consultar($objTipoProcedimentoDTO);
  1067 + $strDescricaoDocumento = $objTipoProcedimentoDTO->getStrNome();
  1068 + }*/
931 1069  
  1070 + $documento->retirado = ($documentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) ? true : false;
  1071 + $documento->ordem = $this->ordemDocumento++;
  1072 + $documento->descricao = utf8_encode($strDescricaoDocumento);
  1073 + $documento->nivelDeSigilo = $this->obterNivelSigiloPEN($documentoDTO->getStrStaNivelAcessoLocalProtocolo());
  1074 + if($documentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO){
  1075 + $documento->hipoteseLegal = new stdClass();
  1076 + $documento->hipoteseLegal->identificacao = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($documentoDTO->getNumIdHipoteseLegalProtocolo());
  1077 + //TODO: Adicionar nome da hipótese legal atribuida ao documento
  1078 + }
  1079 + $documento->dataHoraDeProducao = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo());
  1080 + $documento->produtor = new stdClass();
  1081 + $usuarioDTO = $this->consultarUsuario($documentoDTO->getNumIdUsuarioGeradorProtocolo());
  1082 + if(isset($usuarioDTO)) {
  1083 + $documento->produtor->nome = utf8_encode($usuarioDTO->getStrNome());
  1084 + $documento->produtor->numeroDeIdentificacao = $usuarioDTO->getDblCpfContato();
  1085 + //TODO: Obter tipo de pessoa fsica dos contextos/contatos do SEI
  1086 + $documento->produtor->tipo = self::STA_TIPO_PESSOA_FISICA;;
  1087 + }
  1088 +
  1089 + $unidadeDTO = $this->consultarUnidade($documentoDTO->getNumIdUnidadeResponsavel());
  1090 + if(isset($unidadeDTO)) {
  1091 + $documento->produtor->unidade = new stdClass();
  1092 + $documento->produtor->unidade->nome = utf8_encode($unidadeDTO->getStrDescricao());
  1093 + $documento->produtor->unidade->tipo = self::STA_TIPO_PESSOA_ORGAOPUBLICO;
  1094 + //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional)
  1095 + }
  1096 +
  1097 + $documento->produtor->numeroDeIdentificacao = $documentoDTO->getStrProtocoloDocumentoFormatado(); //TODO: Avaliar se informação está correta
  1098 +
  1099 + $this->atribuirDataHoraDeRegistro($documento, $documentoDTO->getDblIdProcedimento(), $documentoDTO->getDblIdDocumento());
  1100 + $this->atribuirEspecieDocumental($documento, $documentoDTO, $parObjMetadadosTramiteAnterior);
  1101 +
  1102 + //TODO: Tratar campos adicionais do documento
  1103 + //Identificao do documento
  1104 + $this->atribuirNumeracaoDocumento($documento, $documentoDTO);
  1105 + if($documento->retirado === true){
  1106 +
  1107 + $penComponenteDigitalDTO = new ComponenteDigitalDTO();
  1108 + $penComponenteDigitalDTO->retTodos();
  1109 + $penComponenteDigitalDTO->setDblIdDocumento($documentoDTO->getDblIdDocumento());
  1110 +
  1111 + $penComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
  1112 +
  1113 + if($penComponenteDigitalBD->contar($penComponenteDigitalDTO) > 0){
  1114 +
  1115 + $arrPenComponenteDigitalDTO = $penComponenteDigitalBD->listar($penComponenteDigitalDTO);
  1116 + $componenteDigital = $arrPenComponenteDigitalDTO[0];
  1117 +
  1118 + $documento->componenteDigital = new stdClass();
  1119 + $documento->componenteDigital->ordem = 1;
  1120 + $documento->componenteDigital->nome = utf8_encode($componenteDigital->getStrNome());
  1121 + $documento->componenteDigital->hash = new SoapVar("<hash algoritmo='{$componenteDigital->getStrAlgoritmoHash()}'>{$componenteDigital->getStrHashConteudo()}</hash>", XSD_ANYXML);
  1122 + $documento->componenteDigital->tamanhoEmBytes = $componenteDigital->getNumTamanho();
  1123 + $documento->componenteDigital->mimeType = $componenteDigital->getStrMimeType();
  1124 + $documento->componenteDigital->tipoDeConteudo = $componenteDigital->getStrTipoConteudo();
  1125 + $documento->componenteDigital->idAnexo = $componenteDigital->getNumIdAnexo();
  1126 +
  1127 +
  1128 + // -------------------------- INICIO DA TAREFA US074 -------------------------------//
  1129 + $documento = $this->atribuirDadosAssinaturaDigital($documentoDTO, $documento, $componenteDigital->getStrHashConteudo());
  1130 + // -------------------------- FIM TAREFA US074 -------------------------------//
  1131 +
  1132 +
  1133 + if($componenteDigital->getStrMimeType() == 'outro'){
  1134 + $documento->componenteDigital->dadosComplementaresDoTipoDeArquivo = 'outro';
  1135 + }
  1136 +
  1137 + }else{
  1138 + $this->atribuirComponentesDigitais($documento, $documentoDTO);
  1139 + }
  1140 + }else{
  1141 + $this->atribuirComponentesDigitais($documento, $documentoDTO);
  1142 + }
  1143 +
  1144 + //TODO: Necessrio tratar informações abaixo
  1145 + //protocoloDoDocumentoAnexado
  1146 + //protocoloDoProcessoAnexado
  1147 + //retirado
  1148 + //protocoloAnterior
  1149 + //historico
  1150 + $documento->idDocumentoSEI = $documentoDTO->getDblIdDocumento();
  1151 + //$objProcesso->documento[] = $documento;
  1152 + }
  1153 + return $documento;
  1154 + }
932 1155 public function atribuirComponentesDigitaisRetirados($documentoDTO){
933 1156  
934 1157 }
... ... @@ -1554,6 +1777,7 @@ class ExpedirProcedimentoRN extends InfraRN {
1554 1777 return $this->objUsuarioRN->consultarRN0489($objUsuarioDTO);
1555 1778 }
1556 1779  
  1780 +
1557 1781 public function listarDocumentos($idProcedimento)
1558 1782 {
1559 1783 if(!isset($idProcedimento)){
... ... @@ -1619,6 +1843,42 @@ class ExpedirProcedimentoRN extends InfraRN {
1619 1843  
1620 1844 return $arrObjDocumentoDTO;
1621 1845 }
  1846 + //mudar o nome antes do commit
  1847 + public function listarDocumentosAux($idDocumento)
  1848 + {
  1849 + if(!isset($idDocumento)){
  1850 + throw new InfraException('Parâmetro $idProcedimento não informado.');
  1851 + }
  1852 +
  1853 +
  1854 + $objDocumentoDTO = new DocumentoDTO();
  1855 + $objDocumentoDTO->retStrDescricaoUnidadeGeradoraProtocolo();
  1856 + $objDocumentoDTO->retNumIdOrgaoUnidadeGeradoraProtocolo();
  1857 + $objDocumentoDTO->retStrSiglaUnidadeGeradoraProtocolo();
  1858 + $objDocumentoDTO->retStrStaNivelAcessoLocalProtocolo();
  1859 + $objDocumentoDTO->retStrProtocoloDocumentoFormatado();
  1860 + $objDocumentoDTO->retStrStaEstadoProtocolo();
  1861 + $objDocumentoDTO->retNumIdUsuarioGeradorProtocolo();
  1862 + $objDocumentoDTO->retStrStaProtocoloProtocolo();
  1863 + $objDocumentoDTO->retNumIdUnidadeResponsavel();
  1864 + $objDocumentoDTO->retStrDescricaoProtocolo();
  1865 + $objDocumentoDTO->retDtaGeracaoProtocolo();
  1866 + $objDocumentoDTO->retDblIdProcedimento();
  1867 + $objDocumentoDTO->retDblIdDocumento();
  1868 + $objDocumentoDTO->retStrNomeSerie();
  1869 + $objDocumentoDTO->retNumIdSerie();
  1870 + $objDocumentoDTO->retStrConteudoAssinatura();
  1871 + $objDocumentoDTO->retStrNumero();
  1872 + $objDocumentoDTO->retNumIdTipoConferencia();
  1873 + $objDocumentoDTO->retStrStaDocumento();
  1874 + $objDocumentoDTO->retNumIdHipoteseLegalProtocolo();
  1875 + $objDocumentoDTO->setDblIdDocumento($idDocumento, InfraDTO::$OPER_IGUAL);
  1876 +
  1877 + $arrObjDocumentoDTOBanco = $this->objDocumentoRN->listarRN0008($objDocumentoDTO);
  1878 + $arrObjDocumentoDTOIndexado = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTOBanco, 'IdDocumento');
  1879 +
  1880 + return $arrObjDocumentoDTOIndexado;
  1881 + }
1622 1882  
1623 1883 /**
1624 1884 * Retorna o nome do documento no PEN
... ...