package it.valueteam.gnp.manager; import it.valueteam.gnp.dao.db.hb.*; import it.valueteam.gnp.dao.xml.dbcfxgo.dbcfxtodbcfxgo.NOT_NNG_TYPE; import it.valueteam.gnp.systemcontroller.dbcfxgo.DbcfxgoController; import it.valueteam.gnp.utility.DateUtils; import it.valueteam.gnp.utility.StateManager; import org.hibernate.Criteria; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.SimpleExpression; import java.util.ArrayList; import java.util.Date; import java.util.List; public class RequestManagerNngRec { final static String PROCESSO_RECIPIENT_NNG = "NNG_REC"; final static String PROCESSO_RESTITUZIONE_OLO = "RESTITUZIONE_OLO"; // quando è 1 è recipient public static void createFenpRichiesteOut(GnpDbcfxgoInNng103 dbcfxgoInRec, GnpRichiesteNngRec richiesta) throws Exception { GnpNngFenpRichOut fenpRichiesteOut = new GnpNngFenpRichOut(); GnpFenpRichiesteOutDAO fenpOutDAO = new GnpFenpRichiesteOutDAO(); GnpNngFenpRichOutDAO outRichDAO = new GnpNngFenpRichOutDAO(); fenpRichiesteOut.setDaProcessare(1L); fenpRichiesteOut.setDataCreazione(new Date()); if (dbcfxgoInRec.getTipoComunicazione() == 3 || dbcfxgoInRec.getTipoComunicazione() == 5 || dbcfxgoInRec.getTipoComunicazione() == 12) { fenpRichiesteOut.setTipoNotifica("NNGBROAD"); } else if (dbcfxgoInRec.getTipoComunicazione() == 7 || dbcfxgoInRec.getTipoComunicazione() == 8){ fenpRichiesteOut.setTipoNotifica("NNGDOUBLE"); } else { fenpRichiesteOut.setTipoNotifica("NPNNG"); } String tipoComunicazione = String.valueOf(dbcfxgoInRec.getTipoComunicazione()); fenpRichiesteOut.setCodOpRecipient(richiesta.getOpRecipient()); fenpRichiesteOut.setTipoComunicazione(tipoComunicazione); fenpRichiesteOut.setDataOrdine(richiesta.getDataOperazione()); fenpRichiesteOut.setNng(richiesta.getNng()); fenpRichiesteOut.setDac(richiesta.getDac()); fenpRichiesteOut.setCodOp(dbcfxgoInRec.getCodOperatore()); fenpRichiesteOut.setCodOpDonating(richiesta.getCow()); fenpRichiesteOut.setCodiceProgetto(richiesta.getCodiceProgetto()); fenpRichiesteOut.setIdRichiesta(richiesta.getIdRichiesta()); if (tipoComunicazione.equals("4") || tipoComunicazione.equals("5") || tipoComunicazione.equals("6")) { fenpRichiesteOut.setDataEspletamento(dbcfxgoInRec.getDataEspletamento()); } if (tipoComunicazione.equals("5") || tipoComunicazione.equals("6")) { fenpRichiesteOut.setStatoOrdine(String.valueOf(dbcfxgoInRec.getStato())); } if (tipoComunicazione.equals("1")){ fenpRichiesteOut.setTipoServizio(richiesta.getTipoServizio()); fenpRichiesteOut.setCodFiscale(richiesta.getCodiceFiscale()); fenpRichiesteOut.setPartitaIva(richiesta.getPartitaIva()); fenpRichiesteOut.setCodOpRecipient("TLC"); //schiantato TLC per recipient } if (tipoComunicazione.equals("7")) { fenpRichiesteOut.setDac(richiesta.getDac()); fenpRichiesteOut.setRdac(dbcfxgoInRec.getRdac()); } if (tipoComunicazione.equals("9") || tipoComunicazione.equals("12") ) { fenpRichiesteOut.setCodOpReturning(richiesta.getOpRecipient()); } if (tipoComunicazione.equals("12") ) { fenpRichiesteOut.setCodOp(dbcfxgoInRec.getCodOperatore()); fenpRichiesteOut.setStatoOrdine("3"); } if (tipoComunicazione.equals("1") || tipoComunicazione.equals("9")) { fenpRichiesteOut.setCodiceOrdine(fenpOutDAO.getNewCodiceOrdine()); } else if (tipoComunicazione.equals("7") || tipoComunicazione.equals("8")) { List criterion = new ArrayList(); criterion.add(Restrictions.eq(GnpNngFenpRichOutDAO.HB_TIPO_COMUNICAZIONE, "1")); criterion.add(Restrictions.eq(GnpNngFenpRichOutDAO.HB_ID_RICHIESTA, richiesta.getIdRichiesta())); if (outRichDAO.findByCriteria(criterion) != null && outRichDAO.findByCriteria(criterion).size() > 0) { GnpNngFenpRichOut tc1 = (GnpNngFenpRichOut) outRichDAO.findByCriteria(criterion).get(0); fenpRichiesteOut.setCodOpDonating(tc1.getCodOpDonating()); fenpRichiesteOut.setCodiceProgetto(tc1.getCodiceProgetto()); fenpRichiesteOut.setCodiceOrdine(tc1.getCodiceOrdine()); } } else { fenpRichiesteOut.setCodiceOrdine(dbcfxgoInRec.getCodiceOrdine()); } if (fenpRichiesteOut.getTipoNotifica().equals("NNGDOUBLE")){ // SALVA 2 COPIE PER DOPPIO INVIO GnpNngFenpRichOut copiaRichiesta = new GnpNngFenpRichOut(); copiaRichiesta.setIdRichiesta(richiesta.getIdRichiesta()); copiaRichiesta.setDataOrdine(fenpRichiesteOut.getDataOrdine()); copiaRichiesta.setCodiceOrdine(fenpRichiesteOut.getCodiceOrdine()); copiaRichiesta.setCodiceProgetto(fenpRichiesteOut.getCodiceProgetto()); copiaRichiesta.setCodOpDonating(fenpRichiesteOut.getCodOpDonating()); copiaRichiesta.setCodOp(fenpRichiesteOut.getCodOp()); copiaRichiesta.setTipoComunicazione(fenpRichiesteOut.getTipoComunicazione()); copiaRichiesta.setDataCreazione(fenpRichiesteOut.getDataCreazione()); copiaRichiesta.setDaProcessare(1L); copiaRichiesta.setNng(fenpRichiesteOut.getNng()); copiaRichiesta.setCodOpRecipient(fenpRichiesteOut.getCodOpRecipient()); copiaRichiesta.setDac(richiesta.getDac()); copiaRichiesta.setRdac(dbcfxgoInRec.getRdac()); fenpRichiesteOut.setTipoNotifica("NPNNG"); outRichDAO.save(fenpRichiesteOut); copiaRichiesta.setTipoNotifica("NNGBROAD"); outRichDAO.save(copiaRichiesta); } else { outRichDAO.save(fenpRichiesteOut); //SAVE } } // avanzamento da DBCFXGOController public static void avanzamentoNngRec(GnpDbcfxgoInNng103 dbcfxgoInRec, String mail) throws Exception { GnpRichiesteNngRecDAO nngRecDAO = new GnpRichiesteNngRecDAO(); GnpDbcfxgoInNng103DAO nngDao = new GnpDbcfxgoInNng103DAO(); if (dbcfxgoInRec.getTipoComunicazione() == 1){ //creo nuova NNG REC GnpRichiesteNngRec nuovaRec = avanzaStatoInInserita(dbcfxgoInRec, PROCESSO_RECIPIENT_NNG); nuovaRec.setEmail(mail); nngRecDAO.save(nuovaRec); dbcfxgoInRec.setIdRichiesta(nuovaRec.getIdRichiesta()); createFenpRichiesteOut(dbcfxgoInRec, nuovaRec); } else if (dbcfxgoInRec.getTipoComunicazione() == 9) { GnpRichiesteNngRec nuovaRestituzione = avanzaStatoInInserita(dbcfxgoInRec, PROCESSO_RESTITUZIONE_OLO); nuovaRestituzione.setEmail(mail); nngRecDAO.save(nuovaRestituzione); dbcfxgoInRec.setIdRichiesta(nuovaRestituzione.getIdRichiesta()); createFenpRichiesteOut(dbcfxgoInRec, nuovaRestituzione); } else { ArrayList criterion = new ArrayList(); criterion.add(Restrictions.eq(GnpRichiesteNngRecDAO.HIB_ID_ESIGENZA, dbcfxgoInRec.getIdEsigenza())); GnpRichiesteNngRec richiesta = (GnpRichiesteNngRec) nngRecDAO.findByCriteria(criterion).get(0); if (richiesta != null) { dbcfxgoInRec.setIdRichiesta(richiesta.getIdRichiesta()); if ((5 == dbcfxgoInRec.getTipoComunicazione()) || (6 == dbcfxgoInRec.getTipoComunicazione())) { dbcfxgoInRec.setDataEspletamento(dbcfxgoInRec.getDataEspletamento()); } if (6 == dbcfxgoInRec.getTipoComunicazione()) { avanzaStatoInEspletata(richiesta); } if (dbcfxgoInRec.getTipoComunicazione()==8) { avanzaStatoInAnnullata(richiesta); } if (dbcfxgoInRec.getTipoComunicazione()==7) { if (dbcfxgoInRec.getRdac().before(richiesta.getDac()) || dbcfxgoInRec.getRdac().equals(richiesta.getDac())) { //ignorata } else { createFenpRichiesteOut(dbcfxgoInRec, richiesta); richiesta.setDac(dbcfxgoInRec.getRdac()); } } else { createFenpRichiesteOut(dbcfxgoInRec, richiesta); } nngRecDAO.merge(richiesta); } else { // se per sbaglio è entrata una Donating, andiamo a cercarla là RequestManagerNngDon.avanzamentoNngDon(dbcfxgoInRec); } } dbcfxgoInRec.setDaScodare(0L); // aggiorna la scodata nngDao.merge(dbcfxgoInRec); } public static GnpRichiesteNngRec avanzaStatoInInserita(GnpDbcfxgoInNng103 dbcfxgoInRec, String processo) throws Exception{ GnpRichiesteNngRec richiesta = new GnpRichiesteNngRec(); int statoPartenza = StateManager.RICHIESTA_NON_PRESENTE; richiesta.setProcesso(processo); richiesta.setIdEsigenza(dbcfxgoInRec.getIdEsigenza()); richiesta.setStato(Long.valueOf(1)); richiesta.setDaInviare(Long.valueOf(1)); richiesta.setNng(dbcfxgoInRec.getNng()); richiesta.setDataOperazione(dbcfxgoInRec.getDataOrdine()); richiesta.setCodiceProgetto(dbcfxgoInRec.getCodiceProgetto()); if (dbcfxgoInRec.getTipoServizio() != null) { richiesta.setTipoServizio(String.valueOf(dbcfxgoInRec.getTipoServizio())); } if (processo.equals(PROCESSO_RECIPIENT_NNG)) { richiesta.setOpRecipient(dbcfxgoInRec.getCor()); richiesta.setPartitaIva(dbcfxgoInRec.getPartitaIva()); richiesta.setCodiceFiscale(dbcfxgoInRec.getCodFiscale()); richiesta.setCow(dbcfxgoInRec.getCow()); richiesta.setDac(dbcfxgoInRec.getDac()); } else { richiesta.setOpRecipient(dbcfxgoInRec.getCor()); richiesta.setCow(dbcfxgoInRec.getCow()); } return richiesta; } public static void avanzamentoNngRec(GnpRichiesteNngRec richiesta, GnpNngFenpRichIn fenpRichIn) throws Exception { GnpRichiesteNngRecDAO richDAO = new GnpRichiesteNngRecDAO(); String tipoComunicazione = fenpRichIn.getTipoComunicazione(); if (richiesta != null) { if ("2".equals(tipoComunicazione)) { if ("1".equals(fenpRichIn.getStatoOrdine())){ richiesta.setCodRifiuto(fenpRichIn.getCodMotivoRifiuto()); richiesta.setDescRifiuto(fenpRichIn.getDescMotivoRifiuto()); avanzaStatoInRifiutata(richiesta); } else { avanzaStatoInAccettata(richiesta); } } else if ("10".equals(tipoComunicazione)) { richiesta.setCodRifiuto(fenpRichIn.getCodMotivoRifiuto()); richiesta.setDescRifiuto(fenpRichIn.getDescMotivoRifiuto()); avanzaStatoInRifiutata(richiesta); } else if ("11".equals(tipoComunicazione)) { richiesta.setCow(fenpRichIn.getCodOpDonating()); avanzaStatoInAccettata(richiesta); } richDAO.merge(richiesta); // invio GO DbcfxgoController.getInstance().inviaNotificaDbcfxGo(richiesta, fenpRichIn); } } //triggerato da OLO CONTROLLER public static void avanzaStatoInInviataFenp(GnpRichiesteNngRec richiesta) { richiesta.setStato(Long.valueOf(2)); } public static void avanzaStatoInAccettata(GnpRichiesteNngRec richiesta) { richiesta.setStato(Long.valueOf(3)); } public static void avanzaStatoInRifiutata(GnpRichiesteNngRec richiesta) { richiesta.setStato(Long.valueOf(4)); } private static void avanzaStatoInAnnullata(GnpRichiesteNngRec richiesta) { richiesta.setStato(Long.valueOf(7)); } //triggerato da DbcfxGoController public static void avanzaStatoInInviataGo(GnpRichiesteNngRec richiesta) { richiesta.setStato(Long.valueOf(5)); new GnpRichiesteNngRecDAO().merge(richiesta); } public static void avanzaStatoInEspletata(GnpRichiesteNngRec richiesta) { richiesta.setStato(Long.valueOf(6)); } }