Skip to content

Commit

Permalink
Altera modo de criação de tarja de assinatura
Browse files Browse the repository at this point in the history
Devido alterações no SEI4, a tarja de assinatura estava causando erros de hash nos trâmites

Closes #130
  • Loading branch information
fe-neto committed Jan 14, 2022
1 parent db6575a commit 5f1a976
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 2 deletions.
91 changes: 91 additions & 0 deletions src/rn/AssinaturaHashRN.php
Original file line number Diff line number Diff line change
Expand Up @@ -219,4 +219,95 @@ protected function montarTarjasURL403Conectado($dados) {
}
}


protected function montarTarjasLegadoConectado($objDocumentoDTO) {
//utilizado ate a versao 4.0.2 do SEI, sem alterar URL
try {

$strRet = '';

$objAssinaturaDTO = new AssinaturaDTO();
$objAssinaturaDTO->retStrNome();
$objAssinaturaDTO->retNumIdAssinatura();
$objAssinaturaDTO->retNumIdTarjaAssinatura();
$objAssinaturaDTO->retStrTratamento();
$objAssinaturaDTO->retStrStaFormaAutenticacao();
$objAssinaturaDTO->retStrNumeroSerieCertificado();
$objAssinaturaDTO->retDthAberturaAtividade();

$objAssinaturaDTO->setDblIdDocumento($objDocumentoDTO->getDblIdDocumento());

$objAssinaturaDTO->setOrdNumIdAssinatura(InfraDTO::$TIPO_ORDENACAO_ASC);

$arrObjAssinaturaDTO = $this->listarRN1323($objAssinaturaDTO);

if (count($arrObjAssinaturaDTO)) {

$objTarjaAssinaturaDTO = new TarjaAssinaturaDTO();
$objTarjaAssinaturaDTO->setBolExclusaoLogica(false);
$objTarjaAssinaturaDTO->retNumIdTarjaAssinatura();
$objTarjaAssinaturaDTO->retStrStaTarjaAssinatura();
$objTarjaAssinaturaDTO->retStrTexto();
$objTarjaAssinaturaDTO->retStrLogo();
$objTarjaAssinaturaDTO->setNumIdTarjaAssinatura(array_unique(InfraArray::converterArrInfraDTO($arrObjAssinaturaDTO,'IdTarjaAssinatura')),InfraDTO::$OPER_IN);

$objTarjaAssinaturaRN = new TarjaAssinaturaRN();
$arrObjTarjaAssinaturaDTO = InfraArray::indexarArrInfraDTO($objTarjaAssinaturaRN->listar($objTarjaAssinaturaDTO),'IdTarjaAssinatura');

foreach ($arrObjAssinaturaDTO as $objAssinaturaDTO) {

if (!isset($arrObjTarjaAssinaturaDTO[$objAssinaturaDTO->getNumIdTarjaAssinatura()])) {
throw new InfraException('Tarja associada com a assinatura "' . $objAssinaturaDTO->getNumIdAssinatura() . '" não encontrada.');
}

$objTarjaAutenticacaoDTOAplicavel = $arrObjTarjaAssinaturaDTO[$objAssinaturaDTO->getNumIdTarjaAssinatura()];

$strTarja = $objTarjaAutenticacaoDTOAplicavel->getStrTexto();
$strTarja = preg_replace("/@logo_assinatura@/s", '<img alt="logotipo" src="data:image/png;base64,' . $objTarjaAutenticacaoDTOAplicavel->getStrLogo() . '" />', $strTarja);
$strTarja = preg_replace("/@nome_assinante@/s", $objAssinaturaDTO->getStrNome(), $strTarja);
$strTarja = preg_replace("/@tratamento_assinante@/s", $objAssinaturaDTO->getStrTratamento(), $strTarja);
$strTarja = preg_replace("/@data_assinatura@/s", substr($objAssinaturaDTO->getDthAberturaAtividade(), 0, 10), $strTarja);
$strTarja = preg_replace("/@hora_assinatura@/s", substr($objAssinaturaDTO->getDthAberturaAtividade(), 11, 5), $strTarja);
$strTarja = preg_replace("/@codigo_verificador@/s", $objDocumentoDTO->getStrProtocoloDocumentoFormatado(), $strTarja);
$strTarja = preg_replace("/@crc_assinatura@/s", $objDocumentoDTO->getStrCrcAssinatura(), $strTarja);
$strTarja = preg_replace("/@numero_serie_certificado_digital@/s", $objAssinaturaDTO->getStrNumeroSerieCertificado(), $strTarja);
$strTarja = preg_replace("/@tipo_conferencia@/s", InfraString::transformarCaixaBaixa($objDocumentoDTO->getStrDescricaoTipoConferencia()), $strTarja);
$strRet .= $strTarja;
}

$objTarjaAssinaturaDTO = new TarjaAssinaturaDTO();
$objTarjaAssinaturaDTO->retStrTexto();
$objTarjaAssinaturaDTO->setStrStaTarjaAssinatura(TarjaAssinaturaRN::$TT_INSTRUCOES_VALIDACAO);

$objTarjaAssinaturaDTO = $objTarjaAssinaturaRN->consultar($objTarjaAssinaturaDTO);

if ($objTarjaAssinaturaDTO != null){

$strLinkAcessoExterno = '';
if (strpos($objTarjaAssinaturaDTO->getStrTexto(),'@link_acesso_externo_processo@')!==false){
$objEditorRN = new EditorRN();
$strLinkAcessoExterno = $objEditorRN->recuperarLinkAcessoExterno($objDocumentoDTO);
}


$strTarja = $objTarjaAssinaturaDTO->getStrTexto();
$strTarja = preg_replace("/@qr_code@/s", '<img align="center" alt="QRCode Assinatura" title="QRCode Assinatura" src="data:image/png;base64,' . $objDocumentoDTO->getStrQrCodeAssinatura() . '" />', $strTarja);
$strTarja = preg_replace("/@codigo_verificador@/s", $objDocumentoDTO->getStrProtocoloDocumentoFormatado(), $strTarja);
$strTarja = preg_replace("/@crc_assinatura@/s", $objDocumentoDTO->getStrCrcAssinatura(), $strTarja);
$strTarja = preg_replace("/@link_acesso_externo_processo@/s", $strLinkAcessoExterno, $strTarja);
$strRet .= $strTarja;


}
}

return EditorRN::converterHTML($strRet);

} catch (Exception $e) {
throw new InfraException('Erro montando tarja de assinatura.',$e);
}
}



}
6 changes: 6 additions & 0 deletions src/rn/Editor3011RN.php
Original file line number Diff line number Diff line change
Expand Up @@ -1563,6 +1563,7 @@ protected function consultarHtmlVersaoConectado($dados)
$parObjEditorDTO=$dados["parObjEditorDTO"];
$montarTarja=$dados["montarTarja"];
$controleURL=$dados["controleURL"];
$bolTarjaLegada402=$dados["bolTarjaLegada402"];


if ($parObjEditorDTO->getDblIdDocumento()!=null) {
Expand Down Expand Up @@ -1739,8 +1740,13 @@ protected function consultarHtmlVersaoConectado($dados)

if ($objDocumentoDTO!=null) {
if(!$montarTarja){
if($bolTarjaLegada402){
$objAssinaturaRN = new AssinaturaHashRN();
$strHtml .= $objAssinaturaRN->montarTarjasLegado($objDocumentoDTO);
}else{
$objAssinaturaRN = new AssinaturaRN();
$strHtml .= $objAssinaturaRN->montarTarjas($objDocumentoDTO);
}
}else{
$objAssinaturaRN = new AssinaturaHashRN();
$dados=[
Expand Down
7 changes: 7 additions & 0 deletions src/rn/EditorSEI4RN.php
Original file line number Diff line number Diff line change
Expand Up @@ -1836,6 +1836,7 @@ protected function consultarHtmlVersaoConectado($dados)
$parObjEditorDTO=$dados["parObjEditorDTO"];
$montarTarja=$dados["montarTarja"];
$controleURL=$dados["controleURL"];
$bolTarjaLegada402=$dados["bolTarjaLegada402"];

$dblIdProcedimento=null;
if ($parObjEditorDTO->getDblIdDocumento()!=null) {
Expand Down Expand Up @@ -2019,8 +2020,14 @@ protected function consultarHtmlVersaoConectado($dados)

if ($objDocumentoDTO!=null) {
if(!$montarTarja){
if($bolTarjaLegada402){
$objAssinaturaRN = new AssinaturaHashRN();
$strHtml .= $objAssinaturaRN->montarTarjasLegado($objDocumentoDTO);

}else{
$objAssinaturaRN = new AssinaturaRN();
$strHtml .= $objAssinaturaRN->montarTarjas($objDocumentoDTO);
}
}else{
$objAssinaturaRN = new AssinaturaHashRN();
$dados=[
Expand Down
29 changes: 27 additions & 2 deletions src/rn/ExpedirProcedimentoRN.php
Original file line number Diff line number Diff line change
Expand Up @@ -1340,6 +1340,18 @@ private function obterDadosArquivo(DocumentoDTO $objDocumentoDTO, $paramStrStaAs
$strConteudoAssinatura = $this->obterConteudoInternoAssinatura($objDocumentoDTO->getDblIdDocumento(),false,true);
}

//Caso o hash ainda esteja inconsistente testaremos o caso de uso envio SEI4 e atualizado pra SEI4.0.3
$hashDoComponenteDigital = base64_encode(hash(self::ALGORITMO_HASH_DOCUMENTO, $strConteudoAssinatura, true));
if(isset($hashDoComponenteDigitalAnterior) && $hashDoComponenteDigital <> $hashDoComponenteDigitalAnterior){
$strConteudoAssinatura = $this->obterConteudoInternoAssinatura($objDocumentoDTO->getDblIdDocumento(),false,false,null,true,true);
}

//Caso o hash ainda esteja inconsistente testaremos o caso de uso envio SEI3 e atualizado pra SEI4.0.3
$hashDoComponenteDigital = base64_encode(hash(self::ALGORITMO_HASH_DOCUMENTO, $strConteudoAssinatura, true));
if(isset($hashDoComponenteDigitalAnterior) && $hashDoComponenteDigital <> $hashDoComponenteDigitalAnterior){
$strConteudoAssinatura = $this->obterConteudoInternoAssinatura($objDocumentoDTO->getDblIdDocumento(),false,false,null,false,true);
}

//Caso o hash ainda esteja inconsistente teremos que forcar a geracao do arquivo usando as funções do sei 3.0.11
$hashDoComponenteDigital = base64_encode(hash(self::ALGORITMO_HASH_DOCUMENTO, $strConteudoAssinatura, true));
if(isset($hashDoComponenteDigitalAnterior) && $hashDoComponenteDigital <> $hashDoComponenteDigitalAnterior){
Expand Down Expand Up @@ -1456,7 +1468,7 @@ private function obterDadosArquivo(DocumentoDTO $objDocumentoDTO, $paramStrStaAs
* @param boolean $bolFormatoLegado Flag indicando se a forma antiga de recuperação de conteúdo para envio deverá ser utilizada
* @return String Conteúdo completo do documento para envio
*/
private function obterConteudoInternoAssinatura($parDblIdDocumento, $bolFormatoLegado=false, $bolFormatoLegado3011=false, $dadosURL=null, $bolSeiVersao4=false)
private function obterConteudoInternoAssinatura($parDblIdDocumento, $bolFormatoLegado=false, $bolFormatoLegado3011=false, $dadosURL=null, $bolSeiVersao4=false,$bolTarjaLegada402=false)
{
$objEditorDTO = new EditorDTO();
$objEditorDTO->setDblIdDocumento($parDblIdDocumento);
Expand Down Expand Up @@ -1489,7 +1501,8 @@ private function obterConteudoInternoAssinatura($parDblIdDocumento, $bolFormatoL
$dados=[
"parObjEditorDTO" => $objEditorDTO,
"montarTarja" => $dadosURL==null?false:true,
"controleURL" => $dadosURL
"controleURL" => $dadosURL,
"bolTarjaLegada402" => $bolTarjaLegada402
];

if($dadosURL!=null && $bolSeiVersao4==false){
Expand All @@ -1503,6 +1516,18 @@ private function obterConteudoInternoAssinatura($parDblIdDocumento, $bolFormatoL
$strResultado = $objEditorRN->consultarHtmlVersao($dados);
return $strResultado;
}

if($bolSeiVersao4 && $bolTarjaLegada402){
$objEditorRN = new EditorSEI4RN();
$strResultado = $objEditorRN->consultarHtmlVersao($dados);
return $strResultado;
}

if(!$bolSeiVersao4 && $bolTarjaLegada402){
$objEditorRN = new Editor3011RN();
$strResultado = $objEditorRN->consultarHtmlVersao($dados);
return $strResultado;
}


//fix-107. Gerar doc exatamente da forma como estava na v3.0.11
Expand Down

0 comments on commit 5f1a976

Please sign in to comment.