Commit e86975eb5c51afdac3a5988abe8f5018c21a0f6e
1 parent
95623c9d
Exists in
feature-envio-processo-anexado
[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 | ... | ... |