package net.conselldemallorca.helium.jbpm3.handlers;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import net.conselldemallorca.helium.jbpm3.handlers.tipus.DadesNotificacioElectronica;
import net.conselldemallorca.helium.jbpm3.handlers.tipus.DadesRegistreNotificacio;
import net.conselldemallorca.helium.jbpm3.handlers.tipus.DocumentInfo;
import net.conselldemallorca.helium.jbpm3.handlers.tipus.RespostaRegistre;
import net.conselldemallorca.helium.jbpm3.integracio.Jbpm3HeliumBridge;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto;
import org.jbpm.JbpmException;
import org.jbpm.graph.exe.ExecutionContext;
import org.springframework.security.crypto.codec.Base64;
/**
* Handler per a interactuar amb el registre de sortida.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@SuppressWarnings({"serial", "unused"})
public class ZonaperEventNotificacioHandler extends BasicActionHandler implements RegistreSortidaHandlerInterface, AccioExternaRetrocedirHandler {
private String representatNif;
private String varRepresentatNif;
private String representatNom;
private String varRepresentatNom;
private String oficina;
private String varOficina;
private String oficinaFisica;
private String varOficinaFisica;
private String remitentCodiEntitat;
private String varRemitentCodiEntitat;
private String remitentNomEntitat;
private String varRemitentNomEntitat;
private String remitentCodiGeografic;
private String varRemitentCodiGeografic;
private String remitentNomGeografic;
private String varRemitentNomGeografic;
private String remitentRegistreNumero;
private String varRemitentRegistreNumero;
private String remitentRegistreAny;
private String varRemitentRegistreAny;
private String destinatariCodiEntitat;
private String varDestinatariCodiEntitat;
private String destinatariNomEntitat;
private String varDestinatariNomEntitat;
private String destinatariCodiGeografic;
private String varDestinatariCodiGeografic;
private String destinatariNomGeografic;
private String varDestinatariNomGeografic;
private String destinatariRegistreNumero;
private String varDestinatariRegistreNumero;
private String destinatariRegistreAny;
private String varDestinatariRegistreAny;
private String documentTipus;
private String varDocumentTipus;
private String documentIdiomaDocument;
private String varDocumentIdiomaDocument;
private String documentIdiomaExtracte;
private String varDocumentIdiomaExtracte;
private String document;
private String varDocument;
private String varNumeroRegistre;
private String varNumeroAnyRegistre;
private String varDataRegistre;
private String varData;
private String varReferenciaRDSJustificanteClave;
private String varReferenciaRDSJustificanteCodigo;
private String unitatAdministrativa;
private String varUnitatAdministrativa;
private String avisTitol;
private String varAvisTitol;
private String varAvisText;
private String avisText;
private String notificacioOficiTitol;
private String varNotificacioOficiTitol;
private String notificacioOficiText;
private String varNotificacioOficiText;
private String notificacioSubsanacioTramitIdentificador;
private String varNotificacioSubsanacioTramitIdentificador;
private int notificacioSubsanacioTramitVersio;
private String varNotificacioSubsanacioTramitVersio;
private String notificacioSubsanacioTramitDescripcio;
private String varNotificacioSubsanacioTramitDescripcio;
public void execute(ExecutionContext executionContext) throws Exception {
ExpedientDto expedient = getExpedientActual(executionContext);
expedient.setTramitExpedientIdentificador(expedient.getIdentificador());
if (expedient.getTramitExpedientIdentificador() == null)
throw new JbpmException(
"El expediente " + expedient.getIdentificador() + " no tiene número de sistra asociado."
+ "Una notificación tiene que generarse dentro de un expediente, por tanto un paso "
+ "previo a generar una notificación es haber publicado el expediente en la zona "
+ "personal.");
DadesRegistreNotificacio anotacio = new DadesRegistreNotificacio();
String identificador = expedient.getNumeroIdentificador();
String clau = new Long(System.currentTimeMillis()).toString();
anotacio.setExpedientIdentificador(identificador);
anotacio.setExpedientClau(clau);
String ua = (String)getValorOVariable(
executionContext,
unitatAdministrativa,
varUnitatAdministrativa);
if (ua != null)
anotacio.setExpedientUnitatAdministrativa(ua);
else if (expedient.getUnitatAdministrativa() != null)
anotacio.setExpedientUnitatAdministrativa(String.valueOf(expedient.getUnitatAdministrativa()));
anotacio.setInteressatNif((String)getValorOVariable(
executionContext,
representatNif,
varRepresentatNif));
anotacio.setInteressatNomAmbCognoms(
(String)getValorOVariable(
executionContext,
representatNom,
varRepresentatNom));
anotacio.setOrganCodi((String)getValorOVariable(
executionContext,
remitentCodiEntitat,
varRemitentCodiEntitat));
anotacio.setOficinaCodi((String)getValorOVariable(
executionContext,
oficina,
varOficina) + "-" + (String)getValorOVariable(
executionContext,
oficinaFisica,
varOficinaFisica));
anotacio.setInteressatEntitatCodi(
(String)getValorOVariable(
executionContext,
destinatariCodiEntitat,
varDestinatariCodiEntitat));
anotacio.setInteressatMunicipiCodi(
(String)getValorOVariable(
executionContext,
destinatariCodiGeografic,
varDestinatariCodiGeografic));
anotacio.setInteressatMunicipiNom(
(String)getValorOVariable(
executionContext,
destinatariNomGeografic,
varDestinatariNomGeografic));
String idiomaExtracte = (String)getValorOVariable(
executionContext,
documentIdiomaExtracte,
varDocumentIdiomaExtracte);
anotacio.setAnotacioIdiomaCodi(
(idiomaExtracte != null) ? idiomaExtracte : "ca");
anotacio.setAnotacioTipusAssumpte(
(String)getValorOVariable(
executionContext,
documentTipus,
varDocumentTipus));
anotacio.setNotificacioJustificantRecepcio(true);
DocumentInfo documentInfo = null;
List<DocumentInfo> annexos = new ArrayList<DocumentInfo>();
String doc = (String)getValorOVariable(
executionContext,
document,
varDocument);
if (doc != null && !doc.isEmpty()) {
documentInfo = getDocumentInfo(executionContext, doc, true);
if (documentInfo != null) {
anotacio.setAnotacioAssumpte(expedient.getIdentificador() + ": " + documentInfo.getTitol());
annexos.add(documentInfo);
} else {
throw new JbpmException("No existia ningún documento con documentCodi: " + varDocument + ".");
}
}
anotacio.setNotificacioOficiTitol(
(String)getValorOVariable(
executionContext,
notificacioOficiTitol,
varNotificacioOficiTitol));
anotacio.setNotificacioOficiText(
(String)getValorOVariable(
executionContext,
notificacioOficiText,
varNotificacioOficiText));
anotacio.setNotificacioAvisTitol(
(String)getValorOVariable(
executionContext,
avisTitol,
varAvisTitol));
anotacio.setNotificacioAvisText(
(String)getValorOVariable(
executionContext,
avisText,
varAvisText));
if (varNotificacioSubsanacioTramitIdentificador != null && !varNotificacioSubsanacioTramitIdentificador.isEmpty()) {
anotacio.setNotificacioSubsanacioTramitIdentificador(
(String)getValorOVariable(
executionContext,
notificacioSubsanacioTramitIdentificador,
varNotificacioSubsanacioTramitIdentificador));
anotacio.setNotificacioSubsanacioTramitVersio(
getValorOVariableInteger(
executionContext,
notificacioSubsanacioTramitVersio,
varNotificacioSubsanacioTramitVersio));
anotacio.setNotificacioSubsanacioTramitDescripcio(
(String)getValorOVariable(
executionContext,
notificacioSubsanacioTramitDescripcio,
varNotificacioSubsanacioTramitDescripcio));
}
RespostaRegistre resposta = registreNotificacio(executionContext,anotacio,annexos);
if (resposta != null) {
Jbpm3HeliumBridge.getInstanceService().notificacioGuardar(
expedient.getId(),
resposta.getNumero(),
resposta.getData(),
resposta.getReferenciaRDSJustificante().getClave(),
resposta.getReferenciaRDSJustificante().getCodigo());
List<String> parametres = new ArrayList<String>();
DadesNotificacioElectronica dadesNotificacioElectronica = new DadesNotificacioElectronica();
dadesNotificacioElectronica.setAnotacio(anotacio);
dadesNotificacioElectronica.setAnnexos(annexos);
parametres.add(toString(dadesNotificacioElectronica));
guardarParametresPerRetrocedir(executionContext,parametres);
if (varNumeroRegistre != null)
executionContext.setVariable(
varNumeroRegistre,
resposta.getNumero());
if (varDataRegistre != null)
executionContext.setVariable(
varDataRegistre,
resposta.getData());
if (varReferenciaRDSJustificanteClave != null)
executionContext.setVariable(
varReferenciaRDSJustificanteClave,
resposta.getReferenciaRDSJustificante().getClave());
if (varReferenciaRDSJustificanteCodigo != null)
executionContext.setVariable(
varReferenciaRDSJustificanteCodigo,
resposta.getReferenciaRDSJustificante().getCodigo());
}
}
@Override
public void retrocedir(ExecutionContext executionContext, List<String> parametres) throws Exception {
try {
DadesNotificacioElectronica dadesNotificacioElectronica = (DadesNotificacioElectronica) fromString(parametres.get(0));
dadesNotificacioElectronica.getAnotacio().setNotificacioAvisText("La notificación que se realizó anteriormente no es correcta.");
RespostaRegistre resposta = registreNotificacio(executionContext,dadesNotificacioElectronica.getAnotacio(),dadesNotificacioElectronica.getAnnexos());
if (resposta != null) {
boolean borrado = Jbpm3HeliumBridge.getInstanceService().notificacioEsborrar(
resposta.getNumero(),
resposta.getReferenciaRDSJustificante().getClave(),
resposta.getReferenciaRDSJustificante().getCodigo());
if (!borrado)
throw new JbpmException("No se ha podido borrar la notificación electrónica del expediente");
}
} catch (Exception ex) {
throw new JbpmException("No se ha podido retroceder la notificación electrónica del expediente", ex);
}
}
private Object fromString(String s) throws IOException, ClassNotFoundException {
byte[] data = Base64.decode(s.getBytes());
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Object o = ois.readObject();
ois.close();
return o;
}
private String toString(Serializable o) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
return new String(Base64.encode(baos.toByteArray()));
}
public void setNotificacioOficiTitol(String notificacioOficiTitol) {
this.notificacioOficiTitol = notificacioOficiTitol;
}
public void setVarNotificacioOficiTitol(String varNotificacioOficiTitol) {
this.varNotificacioOficiTitol = varNotificacioOficiTitol;
}
public void setNotificacioOficiText(String notificacioOficiText) {
this.notificacioOficiText = notificacioOficiText;
}
public void setVarNotificacioOficiText(String varNotificacioOficiText) {
this.varNotificacioOficiText = varNotificacioOficiText;
}
public void setNotificacioSubsanacioTramitIdentificador(String notificacioSubsanacioTramitIdentificador) {
this.notificacioSubsanacioTramitIdentificador = notificacioSubsanacioTramitIdentificador;
}
public void setVarNotificacioSubsanacioTramitIdentificador(String varNotificacioSubsanacioTramitIdentificador) {
this.varNotificacioSubsanacioTramitIdentificador = varNotificacioSubsanacioTramitIdentificador;
}
public void setNotificacioSubsanacioTramitVersio(int notificacioSubsanacioTramitVersio) {
this.notificacioSubsanacioTramitVersio = notificacioSubsanacioTramitVersio;
}
public void setVarUnitatAdministrativa(String varUnitatAdministrativa) {
this.varUnitatAdministrativa = varUnitatAdministrativa;
}
public void setUnitatAdministrativa(String unitatAdministrativa) {
this.unitatAdministrativa = unitatAdministrativa;
}
public void setVarNotificacioSubsanacioTramitVersio(String varNotificacioSubsanacioTramitVersio) {
this.varNotificacioSubsanacioTramitVersio = varNotificacioSubsanacioTramitVersio;
}
public void setNotificacioSubsanacioTramitDescripcio(String notificacioSubsanacioTramitDescripcio) {
this.notificacioSubsanacioTramitDescripcio = notificacioSubsanacioTramitDescripcio;
}
public void setVarNotificacioSubsanacioTramitDescripcio(String varNotificacioSubsanacioTramitDescripcio) {
this.varNotificacioSubsanacioTramitDescripcio = varNotificacioSubsanacioTramitDescripcio;
}
public void setRepresentatNif(String representatNif) {
this.representatNif = representatNif;
}
public void setVarAvisTitol(String varAvisTitol) {
this.varAvisTitol = varAvisTitol;
}
public void setVarAvisText(String varAvisText) {
this.varAvisText = varAvisText;
}
public String getDocument() {
return document;
}
public void setDocument(String document) {
this.document = document;
}
public void setVarRepresentatNif(String varRepresentatNif) {
this.varRepresentatNif = varRepresentatNif;
}
public String getRepresentatNom() {
return representatNom;
}
public void setRepresentatNom(String representatNom) {
this.representatNom = representatNom;
}
public String getVarRepresentatNom() {
return varRepresentatNom;
}
public void setVarRepresentatNom(String varRepresentatNom) {
this.varRepresentatNom = varRepresentatNom;
}
public void setOficina(String oficina) {
this.oficina = oficina;
}
public void setVarOficina(String varOficina) {
this.varOficina = varOficina;
}
public void setOficinaFisica(String oficinaFisica) {
this.oficinaFisica = oficinaFisica;
}
public void setVarOficinaFisica(String varOficinaFisica) {
this.varOficinaFisica = varOficinaFisica;
}
public void setRemitentCodiEntitat(String remitentCodiEntitat) {
this.remitentCodiEntitat = remitentCodiEntitat;
}
public void setVarRemitentCodiEntitat(String varRemitentCodiEntitat) {
this.varRemitentCodiEntitat = varRemitentCodiEntitat;
}
public void setRemitentNomEntitat(String remitentNomEntitat) {
this.remitentNomEntitat = remitentNomEntitat;
}
public void setVarRemitentNomEntitat(String varRemitentNomEntitat) {
this.varRemitentNomEntitat = varRemitentNomEntitat;
}
public void setRemitentCodiGeografic(String remitentCodiGeografic) {
this.remitentCodiGeografic = remitentCodiGeografic;
}
public void setVarRemitentCodiGeografic(String varRemitentCodiGeografic) {
this.varRemitentCodiGeografic = varRemitentCodiGeografic;
}
public void setRemitentNomGeografic(String remitentNomGeografic) {
this.remitentNomGeografic = remitentNomGeografic;
}
public void setVarRemitentNomGeografic(String varRemitentNomGeografic) {
this.varRemitentNomGeografic = varRemitentNomGeografic;
}
public void setRemitentRegistreNumero(String remitentRegistreNumero) {
this.remitentRegistreNumero = remitentRegistreNumero;
}
public void setVarRemitentRegistreNumero(String varRemitentRegistreNumero) {
this.varRemitentRegistreNumero = varRemitentRegistreNumero;
}
public void setRemitentRegistreAny(String remitentRegistreAny) {
this.remitentRegistreAny = remitentRegistreAny;
}
public void setVarRemitentRegistreAny(String varRemitentRegistreAny) {
this.varRemitentRegistreAny = varRemitentRegistreAny;
}
public void setDestinatariCodiEntitat(String destinatariCodiEntitat) {
this.destinatariCodiEntitat = destinatariCodiEntitat;
}
public void setVarDestinatariCodiEntitat(String varDestinatariCodiEntitat) {
this.varDestinatariCodiEntitat = varDestinatariCodiEntitat;
}
public void setDestinatariNomEntitat(String destinatariNomEntitat) {
this.destinatariNomEntitat = destinatariNomEntitat;
}
public void setVarDestinatariNomEntitat(String varDestinatariNomEntitat) {
this.varDestinatariNomEntitat = varDestinatariNomEntitat;
}
public void setDestinatariCodiGeografic(String destinatariCodiGeografic) {
this.destinatariCodiGeografic = destinatariCodiGeografic;
}
public void setVarDestinatariCodiGeografic(String varDestinatariCodiGeografic) {
this.varDestinatariCodiGeografic = varDestinatariCodiGeografic;
}
public void setDestinatariNomGeografic(String destinatariNomGeografic) {
this.destinatariNomGeografic = destinatariNomGeografic;
}
public void setVarDestinatariNomGeografic(String varDestinatariNomGeografic) {
this.varDestinatariNomGeografic = varDestinatariNomGeografic;
}
public void setAvisTitol(String avisTitol) {
this.avisTitol = avisTitol;
}
public void setAvisText(String avisText) {
this.avisText = avisText;
}
public void setDestinatariRegistreNumero(String destinatariRegistreNumero) {
this.destinatariRegistreNumero = destinatariRegistreNumero;
}
public void setVarDestinatariRegistreNumero(String varDestinatariRegistreNumero) {
this.varDestinatariRegistreNumero = varDestinatariRegistreNumero;
}
public void setDestinatariRegistreAny(String destinatariRegistreAny) {
this.destinatariRegistreAny = destinatariRegistreAny;
}
public void setVarDestinatariRegistreAny(String varDestinatariRegistreAny) {
this.varDestinatariRegistreAny = varDestinatariRegistreAny;
}
public void setDocumentTipus(String documentTipus) {
this.documentTipus = documentTipus;
}
public void setVarDocumentTipus(String varDocumentTipus) {
this.varDocumentTipus = varDocumentTipus;
}
public void setDocumentIdiomaDocument(String documentIdiomaDocument) {
this.documentIdiomaDocument = documentIdiomaDocument;
}
public void setVarDocumentIdiomaDocument(String varDocumentIdiomaDocument) {
this.varDocumentIdiomaDocument = varDocumentIdiomaDocument;
}
public void setDocumentIdiomaExtracte(String documentIdiomaExtracte) {
this.documentIdiomaExtracte = documentIdiomaExtracte;
}
public void setVarDocumentIdiomaExtracte(String varDocumentIdiomaExtracte) {
this.varDocumentIdiomaExtracte = varDocumentIdiomaExtracte;
}
public void setVarDocument(String varDocument) {
this.varDocument = varDocument;
}
public void setVarNumeroRegistre(String varNumeroRegistre) {
this.varNumeroRegistre = varNumeroRegistre;
}
public void setVarNumeroAnyRegistre(String varNumeroAnyRegistre) {
this.varNumeroAnyRegistre = varNumeroAnyRegistre;
}
public void setVarDataRegistre(String varDataRegistre) {
this.varDataRegistre = varDataRegistre;
}
public void setVarData(String varData) {
this.varData = varData;
}
public void setVarReferenciaRDSJustificanteClave(String varReferenciaRDSJustificanteClave) {
this.varReferenciaRDSJustificanteClave = varReferenciaRDSJustificanteClave;
}
public void setVarReferenciaRDSJustificanteCodigo(String varReferenciaRDSJustificanteCodigo) {
this.varReferenciaRDSJustificanteCodigo = varReferenciaRDSJustificanteCodigo;
}
}