Search in sources :

Example 1 with FatturaElettronicaPassivaComponentSession

use of it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession in project sigla-main by consiglionazionaledellericerche.

the class CaricaFatturaPassivaElettronicaAction method doAllineaNotifiche.

@SuppressWarnings("unchecked")
public Forward doAllineaNotifiche(ActionContext actioncontext) {
    TipoIntegrazioneSDI tipoIntegrazioneSDI = TipoIntegrazioneSDI.PEC;
    CaricaFatturaElettronicaBP caricaPassivaElettronicaBP = (CaricaFatturaElettronicaBP) actioncontext.getBusinessProcess();
    FatturazioneElettronicaClient client = SpringUtil.getBean("fatturazioneElettronicaClient", FatturazioneElettronicaClient.class);
    UploadedFile fileFattureRicevute = ((it.cnr.jada.action.HttpActionContext) actioncontext).getMultipartParameter("main.fileFattureRicevute");
    if (fileFattureRicevute.getFile() == null) {
        caricaPassivaElettronicaBP.setMessage("Valorizzare il file!");
        return actioncontext.findDefaultForward();
    }
    try {
        String integrazioneSDI = Utility.createConfigurazioneCnrComponentSession().getVal01(actioncontext.getUserContext(), null, null, Configurazione_cnrBulk.PK_INTEGRAZIONE_SDI, Configurazione_cnrBulk.SK_INTEGRAZIONE_SDI);
        if (integrazioneSDI != null)
            tipoIntegrazioneSDI = TipoIntegrazioneSDI.valueOf(integrazioneSDI);
        FatturaElettronicaPassivaComponentSession fatturaElettronicaPassivaComponentSession = (FatturaElettronicaPassivaComponentSession) EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaElettronicaPassivaComponentSession");
        JAXBElement<MonitoraggioFlussiType> fattureRicevuteType = ((JAXBElement<MonitoraggioFlussiType>) client.getUnmarshaller().unmarshal(new StreamSource(fileFattureRicevute.getFile())));
        List<Long> identificativi = new ArrayList<Long>();
        for (FattureRicevuteType.Flusso flusso : fattureRicevuteType.getValue().getFattureRicevute().getFlusso()) {
            if (!flusso.getStato().equalsIgnoreCase("SF00")) {
                logger.info("Inizio controllo identificativo:" + flusso.getIdSdI());
                identificativi.add(Long.valueOf(flusso.getIdSdI()));
                fatturaElettronicaPassivaComponentSession.allineaEsitoCommitente(actioncontext.getUserContext(), Long.valueOf(flusso.getIdSdI()), flusso.getStato(), tipoIntegrazioneSDI);
                logger.info("Fine controllo identificativo:" + flusso.getIdSdI());
            }
        }
        fatturaElettronicaPassivaComponentSession.allineaEsitoCommitente(actioncontext.getUserContext(), identificativi, tipoIntegrazioneSDI);
        caricaPassivaElettronicaBP.setMessage("Notifiche allineate correttamente.");
    } catch (XmlMappingException e) {
        return handleException(actioncontext, e);
    } catch (IOException e) {
        return handleException(actioncontext, e);
    } catch (ComponentException e) {
        return handleException(actioncontext, e);
    }
    return actioncontext.findDefaultForward();
}
Also used : TipoIntegrazioneSDI(it.cnr.contab.docamm00.fatturapa.bulk.TipoIntegrazioneSDI) MonitoraggioFlussiType(it.gov.fatturapa.sdi.monitoraggio.v1.MonitoraggioFlussiType) FattureRicevuteType(it.gov.fatturapa.sdi.monitoraggio.v1.FattureRicevuteType) StreamSource(javax.xml.transform.stream.StreamSource) ArrayList(java.util.ArrayList) UploadedFile(it.cnr.jada.util.upload.UploadedFile) CaricaFatturaElettronicaBP(it.cnr.contab.docamm00.bp.CaricaFatturaElettronicaBP) FatturaElettronicaPassivaComponentSession(it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession) ComponentException(it.cnr.jada.comp.ComponentException) FatturazioneElettronicaClient(it.cnr.contab.pdd.ws.client.FatturazioneElettronicaClient) HttpActionContext(it.cnr.jada.action.HttpActionContext) XmlMappingException(org.springframework.oxm.XmlMappingException)

Example 2 with FatturaElettronicaPassivaComponentSession

use of it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession in project sigla-main by consiglionazionaledellericerche.

the class CaricaFatturaPassivaElettronicaAction method doControllaFatture.

@SuppressWarnings("unchecked")
public Forward doControllaFatture(ActionContext actioncontext) throws java.rmi.RemoteException {
    CaricaFatturaElettronicaBP caricaPassivaElettronicaBP = (CaricaFatturaElettronicaBP) actioncontext.getBusinessProcess();
    FatturazioneElettronicaClient client = SpringUtil.getBean("fatturazioneElettronicaClient", FatturazioneElettronicaClient.class);
    UploadedFile fileFattureRicevute = ((it.cnr.jada.action.HttpActionContext) actioncontext).getMultipartParameter("main.fileFattureRicevute");
    if (fileFattureRicevute.getFile() == null) {
        caricaPassivaElettronicaBP.setMessage("Valorizzare il file!");
        return actioncontext.findDefaultForward();
    }
    try {
        FatturaElettronicaPassivaComponentSession fatturaElettronicaPassivaComponentSession = (FatturaElettronicaPassivaComponentSession) caricaPassivaElettronicaBP.createComponentSession("CNRDOCAMM00_EJB_FatturaElettronicaPassivaComponentSession");
        List<FattureRicevuteType.Flusso> results = new ArrayList<FattureRicevuteType.Flusso>();
        JAXBElement<MonitoraggioFlussiType> fattureRicevuteType = ((JAXBElement<MonitoraggioFlussiType>) client.getUnmarshaller().unmarshal(new StreamSource(fileFattureRicevute.getFile())));
        for (FattureRicevuteType.Flusso flusso : fattureRicevuteType.getValue().getFattureRicevute().getFlusso()) {
            if (!flusso.getStato().equalsIgnoreCase("SF00")) {
                if (!fatturaElettronicaPassivaComponentSession.existsIdentificativo(actioncontext.getUserContext(), Long.valueOf(flusso.getIdSdI()))) {
                    results.add(flusso);
                }
            }
        }
        if (results.isEmpty()) {
            caricaPassivaElettronicaBP.setMessage("Non ci sono anomalie.");
        } else {
            caricaPassivaElettronicaBP.setAnomalie(results);
            caricaPassivaElettronicaBP.setMessage("Non sono presenti " + results.size() + " fatture, controllare il dettaglio!");
        }
    } catch (XmlMappingException e) {
        return handleException(actioncontext, e);
    } catch (IOException e) {
        return handleException(actioncontext, e);
    } catch (BusinessProcessException e) {
        return handleException(actioncontext, e);
    } catch (ComponentException e) {
        return handleException(actioncontext, e);
    }
    return actioncontext.findDefaultForward();
}
Also used : FattureRicevuteType(it.gov.fatturapa.sdi.monitoraggio.v1.FattureRicevuteType) MonitoraggioFlussiType(it.gov.fatturapa.sdi.monitoraggio.v1.MonitoraggioFlussiType) StreamSource(javax.xml.transform.stream.StreamSource) ArrayList(java.util.ArrayList) BusinessProcessException(it.cnr.jada.action.BusinessProcessException) UploadedFile(it.cnr.jada.util.upload.UploadedFile) CaricaFatturaElettronicaBP(it.cnr.contab.docamm00.bp.CaricaFatturaElettronicaBP) FatturaElettronicaPassivaComponentSession(it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession) ComponentException(it.cnr.jada.comp.ComponentException) FatturazioneElettronicaClient(it.cnr.contab.pdd.ws.client.FatturazioneElettronicaClient) HttpActionContext(it.cnr.jada.action.HttpActionContext) XmlMappingException(org.springframework.oxm.XmlMappingException)

Example 3 with FatturaElettronicaPassivaComponentSession

use of it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession in project sigla-main by consiglionazionaledellericerche.

the class CRUDFatturaPassivaElettronicaAction method doConfirmCompilaFattura.

public Forward doConfirmCompilaFattura(ActionContext context, it.cnr.jada.util.action.OptionBP option) throws FillException, BusinessProcessException {
    if (option.getOption() == it.cnr.jada.util.action.OptionBP.YES_BUTTON) {
        CRUDFatturaPassivaElettronicaBP fatturaPassivaElettronicaBP = (CRUDFatturaPassivaElettronicaBP) context.getBusinessProcess();
        DocumentoEleTestataBulk bulk = (DocumentoEleTestataBulk) fatturaPassivaElettronicaBP.getModel();
        CRUDFatturaPassivaAction action = new CRUDFatturaPassivaAction();
        CRUDFatturaPassivaBP nbp = null;
        try {
            nbp = (CRUDFatturaPassivaBP) context.createBusinessProcess("CRUDFatturaPassivaBP", new Object[] { "M" });
            String mode = it.cnr.contab.utenze00.action.GestioneUtenteAction.getComponentSession().validaBPPerUtente(context.getUserContext(), ((CNRUserInfo) context.getUserInfo()).getUtente(), ((CNRUserInfo) context.getUserInfo()).getUtente().isUtenteComune() ? ((CNRUserInfo) context.getUserInfo()).getUnita_organizzativa().getCd_unita_organizzativa() : "*", "CRUDFatturaPassivaBP");
            if (mode == null || mode.equals("V"))
                throw new it.cnr.jada.action.MessageToUser("Accesso non consentito alla mappa di creazione delle fatture. Impossibile continuare.");
            if (bulk.getTipoDocumentoSIGLA().equalsIgnoreCase(Fattura_passivaBulk.TIPO_NOTA_DI_CREDITO)) {
                if (bulk.getModalitaPagamento() == null)
                    throw new it.cnr.jada.action.MessageToUser("Prima di procedere indicare la modalità di pagamento!");
            }
            context.addHookForward("default", this, "doBringBackCompilaFattura");
            nbp = (CRUDFatturaPassivaBP) context.addBusinessProcess(nbp);
            if (bulk.getTipoDocumentoSIGLA().equalsIgnoreCase(Fattura_passivaBulk.TIPO_NOTA_DI_CREDITO) || bulk.getTipoDocumentoSIGLA().equalsIgnoreCase(Fattura_passivaBulk.TIPO_NOTA_DI_DEBITO)) {
                Fattura_passivaBulk fatturaPassivaBulk = ((FatturaElettronicaPassivaComponentSession) fatturaPassivaElettronicaBP.createComponentSession()).cercaFatturaPassivaForNota(context.getUserContext(), bulk);
                nbp.edit(context, fatturaPassivaBulk);
                nbp.setFromFatturaElettronica(Boolean.TRUE);
                CRUDFatturaPassivaBP notaBp = null;
                if (bulk.getTipoDocumentoSIGLA().equalsIgnoreCase(Fattura_passivaBulk.TIPO_NOTA_DI_CREDITO))
                    notaBp = (CRUDFatturaPassivaBP) action.doGeneraNotaDiCredito(context);
                else if (bulk.getTipoDocumentoSIGLA().equalsIgnoreCase(Fattura_passivaBulk.TIPO_NOTA_DI_DEBITO))
                    notaBp = (CRUDFatturaPassivaBP) action.doGeneraNotaDiDebito(context);
                notaBp.setModel(context, fatturaPassivaElettronicaBP.completaFatturaPassiva(context, (Fattura_passivaBulk) notaBp.getModel(), notaBp, fatturaPassivaBulk));
            } else {
                Fattura_passivaBulk fatturaPassivaBulk = (Fattura_passivaBulk) nbp.getModel();
                nbp.setModel(context, fatturaPassivaElettronicaBP.completaFatturaPassiva(context, fatturaPassivaBulk, nbp, null));
            }
            return nbp;
        } catch (Throwable e) {
            if (nbp != null) {
                context.closeBusinessProcess(nbp);
                if (nbp.getMessage() != null)
                    throw new it.cnr.jada.action.MessageToUser(nbp.getMessage());
            }
            return handleException(context, e);
        }
    }
    return context.findDefaultForward();
}
Also used : DocumentoEleTestataBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataBulk) Fattura_passivaBulk(it.cnr.contab.docamm00.docs.bulk.Fattura_passivaBulk) FatturaElettronicaPassivaComponentSession(it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession) it.cnr.jada.util.action(it.cnr.jada.util.action) it.cnr.jada.action(it.cnr.jada.action) CRUDFatturaPassivaBP(it.cnr.contab.docamm00.bp.CRUDFatturaPassivaBP) CRUDFatturaPassivaElettronicaBP(it.cnr.contab.docamm00.bp.CRUDFatturaPassivaElettronicaBP)

Example 4 with FatturaElettronicaPassivaComponentSession

use of it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession in project sigla-main by consiglionazionaledellericerche.

the class CRUDFatturaPassivaElettronicaAction method doVisualizzaFattura.

public Forward doVisualizzaFattura(ActionContext context) throws FillException, BusinessProcessException {
    CRUDFatturaPassivaElettronicaBP fatturaPassivaElettronicaBP = (CRUDFatturaPassivaElettronicaBP) context.getBusinessProcess();
    DocumentoEleTestataBulk bulk = (DocumentoEleTestataBulk) fatturaPassivaElettronicaBP.getModel();
    try {
        CRUDFatturaPassivaBP nbp = (CRUDFatturaPassivaBP) context.createBusinessProcess(bulk.getBusinessProcessFattura(), new Object[] { "M" });
        nbp = (CRUDFatturaPassivaBP) context.addBusinessProcess(nbp);
        nbp.edit(context, ((FatturaElettronicaPassivaComponentSession) fatturaPassivaElettronicaBP.createComponentSession()).cercaFatturaPassiva(context.getUserContext(), bulk));
        return nbp;
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
Also used : DocumentoEleTestataBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataBulk) CRUDFatturaPassivaBP(it.cnr.contab.docamm00.bp.CRUDFatturaPassivaBP) CRUDFatturaPassivaElettronicaBP(it.cnr.contab.docamm00.bp.CRUDFatturaPassivaElettronicaBP)

Example 5 with FatturaElettronicaPassivaComponentSession

use of it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession in project sigla-main by consiglionazionaledellericerche.

the class RicezioneFatture method elaboraFattura.

private void elaboraFattura(FatturaElettronicaType fatturaElettronicaType, BigInteger identificativoSdI, String nomeFile, String replyTo, String path) throws ApplicationException {
    FatturaElettronicaPassivaComponentSession component = (FatturaElettronicaPassivaComponentSession) EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaElettronicaPassivaComponentSession");
    UserContext userContext = createUserContext();
    DatiTrasmissioneType datiTrasmissione = fatturaElettronicaType.getFatturaElettronicaHeader().getDatiTrasmissione();
    IdFiscaleType idTrasmittente = datiTrasmissione.getIdTrasmittente();
    CessionarioCommittenteType committente = fatturaElettronicaType.getFatturaElettronicaHeader().getCessionarioCommittente();
    CedentePrestatoreType cedentePrestatore = fatturaElettronicaType.getFatturaElettronicaHeader().getCedentePrestatore();
    RappresentanteFiscaleType rappresentante = fatturaElettronicaType.getFatturaElettronicaHeader().getRappresentanteFiscale();
    TerzoIntermediarioSoggettoEmittenteType intermediario = fatturaElettronicaType.getFatturaElettronicaHeader().getTerzoIntermediarioOSoggettoEmittente();
    DocumentoEleTrasmissioneBulk docTrasmissione = new DocumentoEleTrasmissioneBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue());
    docTrasmissione.setProgressivoInvio(datiTrasmissione.getProgressivoInvio());
    if (datiTrasmissione.getFormatoTrasmissione() != null)
        docTrasmissione.setFormatoTrasmissione(datiTrasmissione.getFormatoTrasmissione().value());
    else
        docTrasmissione.setFormatoTrasmissione(FormatoTrasmissioneType.FPA_12.value());
    docTrasmissione.setCodiceDestinatario(datiTrasmissione.getCodiceDestinatario());
    docTrasmissione.setCodiceUnivocoSdi(identificativoSdI.longValue());
    docTrasmissione.setDataRicezione(EJBCommonServices.getServerTimestamp());
    docTrasmissione.setNomeFile(nomeFile);
    StoreService storeService = SpringUtil.getBean("storeService", StoreService.class);
    docTrasmissione.setCmisNodeRef(storeService.getStorageObjectByPath(path).getKey());
    if (fatturaElettronicaType.getFatturaElettronicaHeader().getSoggettoEmittente() != null)
        docTrasmissione.setSoggettoEmittente(fatturaElettronicaType.getFatturaElettronicaHeader().getSoggettoEmittente().name());
    if (committente != null) {
        if (committente.getDatiAnagrafici() != null) {
            docTrasmissione.setCommittenteCodicefiscale(committente.getDatiAnagrafici().getCodiceFiscale());
            if (committente.getDatiAnagrafici().getIdFiscaleIVA() != null) {
                docTrasmissione.setCommittenteCodice(committente.getDatiAnagrafici().getIdFiscaleIVA().getIdCodice());
                docTrasmissione.setCommittentePaese(committente.getDatiAnagrafici().getIdFiscaleIVA().getIdPaese());
            }
            if (committente.getDatiAnagrafici().getAnagrafica() != null) {
                docTrasmissione.setCommittenteCognome(committente.getDatiAnagrafici().getAnagrafica().getCognome());
                docTrasmissione.setCommittenteNome(committente.getDatiAnagrafici().getAnagrafica().getNome());
                docTrasmissione.setCommittenteDenominazione(committente.getDatiAnagrafici().getAnagrafica().getDenominazione());
                docTrasmissione.setCommittenteTitolo(committente.getDatiAnagrafici().getAnagrafica().getTitolo());
                docTrasmissione.setCommittenteCodeori(committente.getDatiAnagrafici().getAnagrafica().getCodEORI());
            }
        }
        if (committente.getSede() != null) {
            docTrasmissione.setCommittenteCap(committente.getSede().getCAP());
            docTrasmissione.setCommittenteComune(committente.getSede().getComune());
            docTrasmissione.setCommittenteIndirizzo(committente.getSede().getIndirizzo());
            docTrasmissione.setCommittenteNazione(committente.getSede().getNazione());
            docTrasmissione.setCommittenteNumerocivico(committente.getSede().getNumeroCivico());
            docTrasmissione.setCommittenteProvincia(committente.getSede().getProvincia());
        }
    }
    if (intermediario != null) {
        if (intermediario.getDatiAnagrafici() != null) {
            docTrasmissione.setIntermediarioCodicefiscale(intermediario.getDatiAnagrafici().getCodiceFiscale());
            if (intermediario.getDatiAnagrafici().getIdFiscaleIVA() != null) {
                docTrasmissione.setIntermediarioCodice(intermediario.getDatiAnagrafici().getIdFiscaleIVA().getIdCodice());
                docTrasmissione.setIntermediarioPaese(intermediario.getDatiAnagrafici().getIdFiscaleIVA().getIdPaese());
            }
            if (intermediario.getDatiAnagrafici().getAnagrafica() != null) {
                docTrasmissione.setIntermediarioCodeori(intermediario.getDatiAnagrafici().getAnagrafica().getCodEORI());
                docTrasmissione.setIntermediarioCognome(intermediario.getDatiAnagrafici().getAnagrafica().getCognome());
                docTrasmissione.setIntermediarioDenominazione(intermediario.getDatiAnagrafici().getAnagrafica().getDenominazione());
                docTrasmissione.setIntermediarioNome(intermediario.getDatiAnagrafici().getAnagrafica().getNome());
                docTrasmissione.setIntermediarioTitolo(intermediario.getDatiAnagrafici().getAnagrafica().getTitolo());
            }
        }
    }
    if (cedentePrestatore != null) {
        docTrasmissione.setRiferimentoAmministrazione(cedentePrestatore.getRiferimentoAmministrazione());
        if (cedentePrestatore.getDatiAnagrafici() != null) {
            if (cedentePrestatore.getDatiAnagrafici().getDataIscrizioneAlbo() != null)
                docTrasmissione.setDataiscrizionealbo(convert(cedentePrestatore.getDatiAnagrafici().getDataIscrizioneAlbo()));
            docTrasmissione.setAlboprofessionale(cedentePrestatore.getDatiAnagrafici().getAlboProfessionale());
            docTrasmissione.setProvinciaalbo(cedentePrestatore.getDatiAnagrafici().getProvinciaAlbo());
            docTrasmissione.setNumeroalbo(cedentePrestatore.getDatiAnagrafici().getNumeroIscrizioneAlbo());
            docTrasmissione.setPrestatoreCodicefiscale(cedentePrestatore.getDatiAnagrafici().getCodiceFiscale());
            if (cedentePrestatore.getDatiAnagrafici().getIdFiscaleIVA() != null) {
                docTrasmissione.setPrestatoreCodice(cedentePrestatore.getDatiAnagrafici().getIdFiscaleIVA().getIdCodice());
                docTrasmissione.setPrestatorePaese(cedentePrestatore.getDatiAnagrafici().getIdFiscaleIVA().getIdPaese());
            }
            if (cedentePrestatore.getDatiAnagrafici().getAnagrafica() != null) {
                docTrasmissione.setPrestatoreCognome(cedentePrestatore.getDatiAnagrafici().getAnagrafica().getCognome());
                docTrasmissione.setPrestatoreNome(cedentePrestatore.getDatiAnagrafici().getAnagrafica().getNome());
                docTrasmissione.setPrestatoreDenominazione(cedentePrestatore.getDatiAnagrafici().getAnagrafica().getDenominazione());
                docTrasmissione.setPrestatoreTitolo(cedentePrestatore.getDatiAnagrafici().getAnagrafica().getTitolo());
                docTrasmissione.setPrestatoreCodeori(cedentePrestatore.getDatiAnagrafici().getAnagrafica().getCodEORI());
            }
            if (cedentePrestatore.getDatiAnagrafici().getRegimeFiscale() != null) {
                docTrasmissione.setRegimefiscale(cedentePrestatore.getDatiAnagrafici().getRegimeFiscale().name());
            }
        }
        if (cedentePrestatore.getSede() != null) {
            docTrasmissione.setPrestatoreCap(cedentePrestatore.getSede().getCAP());
            docTrasmissione.setPrestatoreComune(cedentePrestatore.getSede().getComune());
            docTrasmissione.setPrestatoreIndirizzo(cedentePrestatore.getSede().getIndirizzo());
            docTrasmissione.setPrestatoreNazione(cedentePrestatore.getSede().getNazione());
            docTrasmissione.setPrestatoreNumerocivico(cedentePrestatore.getSede().getNumeroCivico());
            docTrasmissione.setPrestatoreProvincia(cedentePrestatore.getSede().getProvincia());
        }
        if (cedentePrestatore.getStabileOrganizzazione() != null) {
            docTrasmissione.setStabileorgCap(cedentePrestatore.getStabileOrganizzazione().getCAP());
            docTrasmissione.setStabileorgComune(cedentePrestatore.getStabileOrganizzazione().getComune());
            docTrasmissione.setStabileorgIndirizzo(cedentePrestatore.getStabileOrganizzazione().getIndirizzo());
            docTrasmissione.setStabileorgNazione(cedentePrestatore.getStabileOrganizzazione().getNazione());
            docTrasmissione.setStabileorgNumerocivico(cedentePrestatore.getStabileOrganizzazione().getNumeroCivico());
            docTrasmissione.setStabileorgProvincia(cedentePrestatore.getStabileOrganizzazione().getProvincia());
        }
        if (cedentePrestatore.getContatti() != null) {
            docTrasmissione.setPrestatoreEmail(cedentePrestatore.getContatti().getEmail());
            docTrasmissione.setPrestatoreFax(cedentePrestatore.getContatti().getFax());
            docTrasmissione.setPrestatoreTelefono(cedentePrestatore.getContatti().getTelefono());
        }
        if (cedentePrestatore.getIscrizioneREA() != null) {
            docTrasmissione.setReaCapitalesociale(cedentePrestatore.getIscrizioneREA().getCapitaleSociale());
            docTrasmissione.setReaNumerorea(cedentePrestatore.getIscrizioneREA().getNumeroREA());
            if (cedentePrestatore.getIscrizioneREA().getSocioUnico() != null)
                docTrasmissione.setReaSociounico(cedentePrestatore.getIscrizioneREA().getSocioUnico().name());
            if (cedentePrestatore.getIscrizioneREA().getStatoLiquidazione() != null)
                docTrasmissione.setReaStatoliquidazione(cedentePrestatore.getIscrizioneREA().getStatoLiquidazione().name());
            docTrasmissione.setReaUfficio(cedentePrestatore.getIscrizioneREA().getUfficio());
        }
    }
    if (rappresentante != null) {
        if (rappresentante.getDatiAnagrafici() != null) {
            docTrasmissione.setRappresentanteCodicefiscale(rappresentante.getDatiAnagrafici().getCodiceFiscale());
            if (rappresentante.getDatiAnagrafici().getAnagrafica() != null) {
                docTrasmissione.setRappresentanteCodeori(rappresentante.getDatiAnagrafici().getAnagrafica().getCodEORI());
                docTrasmissione.setRappresentanteCognome(rappresentante.getDatiAnagrafici().getAnagrafica().getCognome());
                docTrasmissione.setRappresentanteDenominazione(rappresentante.getDatiAnagrafici().getAnagrafica().getDenominazione());
                docTrasmissione.setRappresentanteNome(rappresentante.getDatiAnagrafici().getAnagrafica().getNome());
                docTrasmissione.setRappresentanteTitolo(rappresentante.getDatiAnagrafici().getAnagrafica().getTitolo());
            }
            if (rappresentante.getDatiAnagrafici().getIdFiscaleIVA() != null) {
                docTrasmissione.setRappresentanteCodice(rappresentante.getDatiAnagrafici().getIdFiscaleIVA().getIdCodice());
                docTrasmissione.setRappresentantePaese(rappresentante.getDatiAnagrafici().getIdFiscaleIVA().getIdPaese());
            }
        }
    }
    docTrasmissione.setTrasmittenteEmail(docTrasmissione.getTrasmittenteEmail());
    docTrasmissione.setTrasmittenteTelefono(docTrasmissione.getTrasmittenteTelefono());
    docTrasmissione.setReplyTo(replyTo);
    docTrasmissione.setToBeCreated();
    for (int progressivoTestata = 0; progressivoTestata < fatturaElettronicaType.getFatturaElettronicaBody().size(); progressivoTestata++) {
        FatturaElettronicaBodyType fatturaElettronicaBody = fatturaElettronicaType.getFatturaElettronicaBody().get(progressivoTestata);
        DocumentoEleTestataBulk docTestata = new DocumentoEleTestataBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata);
        if (fatturaElettronicaBody.getDatiGenerali() != null) {
            if (fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento() != null) {
                docTestata.setTipoDocumento(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getTipoDocumento().value());
                docTestata.setDivisa(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getDivisa());
                docTestata.setDataDocumento(convert(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getData()));
                docTestata.setNumeroDocumento(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getNumero());
                if (fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getDatiBollo() != null) {
                    DatiBolloType datiBollo = fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getDatiBollo();
                    docTestata.setBolloVirtuale(datiBollo.getBolloVirtuale().value());
                    docTestata.setImportoBollo(truncBigDecimal(datiBollo.getImportoBollo()));
                }
                docTestata.setImportoDocumento(truncBigDecimal(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getImportoTotaleDocumento()));
                docTestata.setArrotondamento(truncBigDecimal(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getArrotondamento()));
                String causale = StringUtils.join(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getCausale().toArray(), ",");
                docTestata.setCausale(causale.length() > 2000 ? causale.substring(0, 2000) : causale);
                if (fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getArt73() != null)
                    docTestata.setArt73(fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getArt73().value());
            }
            if (fatturaElettronicaBody.getDatiGenerali().getDatiTrasporto() != null) {
                DatiTrasportoType datiTrasporto = fatturaElettronicaBody.getDatiGenerali().getDatiTrasporto();
                if (datiTrasporto.getDatiAnagraficiVettore() != null) {
                    docTestata.setVettoreCodicefiscale(datiTrasporto.getDatiAnagraficiVettore().getCodiceFiscale());
                    docTestata.setVettoreNumerolicenza(datiTrasporto.getDatiAnagraficiVettore().getNumeroLicenzaGuida());
                    if (datiTrasporto.getDatiAnagraficiVettore().getAnagrafica() != null) {
                        docTestata.setVettoreDenominazione(datiTrasporto.getDatiAnagraficiVettore().getAnagrafica().getDenominazione());
                        docTestata.setVettoreNome(datiTrasporto.getDatiAnagraficiVettore().getAnagrafica().getNome());
                        docTestata.setVettoreCognome(datiTrasporto.getDatiAnagraficiVettore().getAnagrafica().getCognome());
                        docTestata.setVettoreTitolo(datiTrasporto.getDatiAnagraficiVettore().getAnagrafica().getTitolo());
                        docTestata.setVettoreCodeori(datiTrasporto.getDatiAnagraficiVettore().getAnagrafica().getCodEORI());
                    }
                    if (datiTrasporto.getDatiAnagraficiVettore().getIdFiscaleIVA() != null) {
                        docTestata.setVettorePaese(datiTrasporto.getDatiAnagraficiVettore().getIdFiscaleIVA().getIdPaese());
                        docTestata.setVettoreCodice(datiTrasporto.getDatiAnagraficiVettore().getIdFiscaleIVA().getIdCodice());
                    }
                }
                docTestata.setMezzoTrasporto(datiTrasporto.getMezzoTrasporto());
                docTestata.setCausaleTrasporto(datiTrasporto.getCausaleTrasporto());
                docTestata.setNumeroColli(datiTrasporto.getNumeroColli());
                docTestata.setDescrizioneTrasporto(datiTrasporto.getDescrizione());
                docTestata.setUnitaMisurapeso(datiTrasporto.getUnitaMisuraPeso());
                docTestata.setPesoLordo(truncBigDecimal(datiTrasporto.getPesoLordo()));
                docTestata.setPesoNetto(truncBigDecimal(datiTrasporto.getPesoNetto()));
                docTestata.setDataoraRitiro(convert(datiTrasporto.getDataOraRitiro()));
                docTestata.setDatainizioTrasporto(convert(datiTrasporto.getDataInizioTrasporto()));
                docTestata.setTipoResa(datiTrasporto.getTipoResa());
                if (datiTrasporto.getIndirizzoResa() != null) {
                    docTestata.setResaIndirizzo(datiTrasporto.getIndirizzoResa().getIndirizzo());
                    docTestata.setResaNumerocivico(datiTrasporto.getIndirizzoResa().getNumeroCivico());
                    docTestata.setResaCap(datiTrasporto.getIndirizzoResa().getCAP());
                    docTestata.setResaComune(datiTrasporto.getIndirizzoResa().getComune());
                    docTestata.setResaProvincia(datiTrasporto.getIndirizzoResa().getProvincia());
                    docTestata.setResaNazione(datiTrasporto.getIndirizzoResa().getNazione());
                }
                docTestata.setDataoraConsegna(convert(datiTrasporto.getDataOraConsegna()));
            }
            if (fatturaElettronicaBody.getDatiGenerali().getFatturaPrincipale() != null) {
                docTestata.setNumeroFatturaprincipale(fatturaElettronicaBody.getDatiGenerali().getFatturaPrincipale().getNumeroFatturaPrincipale());
                docTestata.setDataFatturaprincipale(convert(fatturaElettronicaBody.getDatiGenerali().getFatturaPrincipale().getDataFatturaPrincipale()));
            }
            if (fatturaElettronicaBody.getDatiVeicoli() != null) {
                docTestata.setTotalePercorsoveicolo(fatturaElettronicaBody.getDatiVeicoli().getTotalePercorso());
                docTestata.setDataImmatricolazioneveicolo(convert(fatturaElettronicaBody.getDatiVeicoli().getData()));
            }
            if (fatturaElettronicaBody.getDatiPagamento() != null && !fatturaElettronicaBody.getDatiPagamento().isEmpty()) {
                if (fatturaElettronicaBody.getDatiPagamento().size() > 1) {
                    docTestata.setAnomalie("Sono presenti piu di un dettaglio di Pagamento!");
                } else {
                    DatiPagamentoType datiPagamento = fatturaElettronicaBody.getDatiPagamento().get(0);
                    docTestata.setCodicePagamento(datiPagamento.getCondizioniPagamento().value());
                    if (datiPagamento.getDettaglioPagamento() != null && !datiPagamento.getDettaglioPagamento().isEmpty()) {
                        if (datiPagamento.getDettaglioPagamento().size() > 1) {
                            docTestata.setAnomalie("Sono presenti piu di un dettaglio di Pagamento!");
                        } else {
                            DettaglioPagamentoType dettaglioPagamento = datiPagamento.getDettaglioPagamento().get(0);
                            docTestata.setBeneficiarioPagamento(dettaglioPagamento.getBeneficiario());
                            docTestata.setBeneficiarioModPag(dettaglioPagamento.getModalitaPagamento().value());
                            docTestata.setDataterminiPagamento(convert(dettaglioPagamento.getDataRiferimentoTerminiPagamento()));
                            docTestata.setGiorniterminiPagamento(dettaglioPagamento.getGiorniTerminiPagamento());
                            docTestata.setDatascadenzaPagamento(convert(dettaglioPagamento.getDataScadenzaPagamento()));
                            docTestata.setImportoPagamento(truncBigDecimal(dettaglioPagamento.getImportoPagamento()));
                            docTestata.setCodufficiopostale(dettaglioPagamento.getCodUfficioPostale());
                            docTestata.setCognomeQuietanzante(dettaglioPagamento.getCognomeQuietanzante());
                            docTestata.setNomeQuietanzante(dettaglioPagamento.getNomeQuietanzante());
                            docTestata.setIstitutoFinanziario(dettaglioPagamento.getIstitutoFinanziario());
                            docTestata.setIban(dettaglioPagamento.getIBAN());
                            docTestata.setAbi(dettaglioPagamento.getABI());
                            docTestata.setCab(dettaglioPagamento.getCAB());
                            docTestata.setBic(dettaglioPagamento.getBIC());
                            docTestata.setScontoPagamentoAnt(truncBigDecimal(dettaglioPagamento.getScontoPagamentoAnticipato()));
                            docTestata.setDatalimitePagamentoAnt(convert(dettaglioPagamento.getDataLimitePagamentoAnticipato()));
                            docTestata.setPenalitaPagRitardati(truncBigDecimal(dettaglioPagamento.getPenalitaPagamentiRitardati()));
                            docTestata.setDataRicorrenzapenale(convert(dettaglioPagamento.getDataDecorrenzaPenale()));
                        }
                    }
                }
            }
        }
        docTestata.setStatoDocumento(StatoDocumentoEleEnum.INIZIALE.name());
        docTestata.setFlDecorrenzaTermini("N");
        docTestata.setFlIrregistrabile("N");
        docTestata.setToBeCreated();
        docTrasmissione.addToDocEleTestataColl(docTestata);
        if (fatturaElettronicaBody.getDatiBeniServizi() != null) {
            if (fatturaElettronicaBody.getDatiBeniServizi().getDettaglioLinee() != null) {
                final List<Integer> numeroLineas = fatturaElettronicaBody.getDatiBeniServizi().getDettaglioLinee().stream().map(DettaglioLineeType::getNumeroLinea).collect(Collectors.toList());
                Set<Integer> duplicates = numeroLineas.stream().filter(numeroLinea -> Collections.frequency(numeroLineas, numeroLinea) > 1).collect(Collectors.toSet());
                for (DettaglioLineeType dettaglioLinea : fatturaElettronicaBody.getDatiBeniServizi().getDettaglioLinee()) {
                    DocumentoEleLineaBulk docEleLinea = new DocumentoEleLineaBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, dettaglioLinea.getNumeroLinea());
                    /**
                     * FIX duplicate numero linea
                     */
                    if (!duplicates.isEmpty())
                        docEleLinea.setNumeroLinea(fatturaElettronicaBody.getDatiBeniServizi().getDettaglioLinee().indexOf(dettaglioLinea));
                    if (dettaglioLinea.getTipoCessionePrestazione() != null)
                        docEleLinea.setTipoCessione(dettaglioLinea.getTipoCessionePrestazione().value());
                    List<String> anomalie = new ArrayList<String>();
                    if (dettaglioLinea.getCodiceArticolo() != null && !dettaglioLinea.getCodiceArticolo().isEmpty()) {
                        if (dettaglioLinea.getCodiceArticolo().size() > 1) {
                            anomalie.add("Sono presenti piu di un dettaglio di Articolo!");
                        } else {
                            docEleLinea.setArticoloTipo(dettaglioLinea.getCodiceArticolo().get(0).getCodiceTipo());
                            docEleLinea.setArticoloValore(dettaglioLinea.getCodiceArticolo().get(0).getCodiceValore());
                        }
                    }
                    docEleLinea.setLineaDescrizione(dettaglioLinea.getDescrizione());
                    docEleLinea.setLineaQuantita(truncBigDecimal(dettaglioLinea.getQuantita()));
                    docEleLinea.setLineaUnitamisura(dettaglioLinea.getUnitaMisura());
                    docEleLinea.setInizioDatacompetenza(convert(dettaglioLinea.getDataInizioPeriodo()));
                    docEleLinea.setFineDatacompetenza(convert(dettaglioLinea.getDataFinePeriodo()));
                    docEleLinea.setLineaPrezzounitario(truncBigDecimal(dettaglioLinea.getPrezzoUnitario(), 6));
                    if (dettaglioLinea.getScontoMaggiorazione() != null && !dettaglioLinea.getScontoMaggiorazione().isEmpty()) {
                        if (dettaglioLinea.getScontoMaggiorazione().size() == 1) {
                            if (dettaglioLinea.getScontoMaggiorazione().get(0).getTipo() != null)
                                docEleLinea.setTipoScontomag(dettaglioLinea.getScontoMaggiorazione().get(0).getTipo().value());
                            docEleLinea.setPercentualeScontomag(truncBigDecimal(dettaglioLinea.getScontoMaggiorazione().get(0).getPercentuale()));
                            docEleLinea.setImportoScontomag(truncBigDecimal(dettaglioLinea.getScontoMaggiorazione().get(0).getImporto()));
                        } else {
                            BigDecimal scontoMaggiorazioneImporto = BigDecimal.ZERO;
                            for (ScontoMaggiorazioneType scontoMaggiorazione : dettaglioLinea.getScontoMaggiorazione()) {
                                if (scontoMaggiorazione.getTipo() != null)
                                    docEleLinea.setTipoScontomag(scontoMaggiorazione.getTipo().value());
                                if (scontoMaggiorazione.getImporto() != null)
                                    scontoMaggiorazioneImporto = scontoMaggiorazioneImporto.add(scontoMaggiorazione.getImporto());
                            }
                            docEleLinea.setImportoScontomag(truncBigDecimal(scontoMaggiorazioneImporto));
                        }
                    }
                    docEleLinea.setLineaPrezzototale(truncBigDecimal(dettaglioLinea.getPrezzoTotale()));
                    docEleLinea.setLineaAliquotaiva(truncBigDecimal(dettaglioLinea.getAliquotaIVA()));
                    if (dettaglioLinea.getRitenuta() != null)
                        docEleLinea.setLineaRitenuta(dettaglioLinea.getRitenuta().value());
                    if (dettaglioLinea.getNatura() != null)
                        docEleLinea.setLineaNatura(dettaglioLinea.getNatura().value());
                    docEleLinea.setLineaRiferimentoamm(dettaglioLinea.getRiferimentoAmministrazione());
                    if (dettaglioLinea.getAltriDatiGestionali() != null && !dettaglioLinea.getAltriDatiGestionali().isEmpty()) {
                        if (dettaglioLinea.getAltriDatiGestionali().size() > 1) {
                            anomalie.add("Sono presenti piu di un dettaglio di Dati Gestionali!");
                        } else {
                            final AltriDatiGestionaliType altriDatiGestionaliType = dettaglioLinea.getAltriDatiGestionali().stream().findAny().orElse(null);
                            docEleLinea.setTipoDato(altriDatiGestionaliType.getTipoDato());
                            docEleLinea.setRiferimentoTesto(altriDatiGestionaliType.getRiferimentoTesto());
                            docEleLinea.setRiferimentoNumero(Optional.ofNullable(altriDatiGestionaliType.getRiferimentoNumero()).map(bigDecimal -> bigDecimal.setScale(2)).orElse(BigDecimal.ZERO));
                            docEleLinea.setRiferimentodata(convert(altriDatiGestionaliType.getRiferimentoData()));
                        }
                    }
                    if (!anomalie.isEmpty())
                        docEleLinea.setAnomalie(StringUtils.join(anomalie.toArray(), " - "));
                    docEleLinea.setToBeCreated();
                    docTestata.addToDocEleLineaColl(docEleLinea);
                }
            }
            if (fatturaElettronicaBody.getDatiBeniServizi().getDatiRiepilogo() != null && !fatturaElettronicaBody.getDatiBeniServizi().getDatiRiepilogo().isEmpty()) {
                List<String> anomalie = new ArrayList<String>();
                int indexIva = 0;
                for (DatiRiepilogoType datiRiepilogo : fatturaElettronicaBody.getDatiBeniServizi().getDatiRiepilogo()) {
                    DocumentoEleIvaBulk docEleIVA = new DocumentoEleIvaBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, (long) ++indexIva);
                    docEleIVA.setAliquotaIva(datiRiepilogo.getAliquotaIVA());
                    if (datiRiepilogo.getNatura() != null)
                        docEleIVA.setNatura(datiRiepilogo.getNatura().value());
                    docEleIVA.setSpeseAccessorie(truncBigDecimal(datiRiepilogo.getSpeseAccessorie()));
                    docEleIVA.setArrotondamento(truncBigDecimal(datiRiepilogo.getArrotondamento()));
                    docEleIVA.setImponibileImporto(truncBigDecimal(datiRiepilogo.getImponibileImporto()));
                    docEleIVA.setImposta(datiRiepilogo.getImposta());
                    if (datiRiepilogo.getEsigibilitaIVA() != null)
                        docEleIVA.setEsigibilitaIva(datiRiepilogo.getEsigibilitaIVA().value());
                    docEleIVA.setRiferimentoNormativo(datiRiepilogo.getRiferimentoNormativo());
                    if (!anomalie.isEmpty())
                        docEleIVA.setAnomalie(StringUtils.join(anomalie.toArray(), " - "));
                    docEleIVA.setToBeCreated();
                    docTestata.addToDocEleIVAColl(docEleIVA);
                }
            }
        }
        if (fatturaElettronicaBody.getAllegati() != null && !fatturaElettronicaBody.getAllegati().isEmpty()) {
            int progressivoAllegato = 0;
            for (AllegatiType allegato : fatturaElettronicaBody.getAllegati()) {
                progressivoAllegato++;
                List<String> anomalie = new ArrayList<String>();
                String nomeAllegato = progressivoAllegato + "-" + allegato.getNomeAttachment();
                DocumentoEleAllegatiBulk docAllegato = new DocumentoEleAllegatiBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, nomeAllegato);
                docAllegato.setAlgoritmoCompressione(allegato.getAlgoritmoCompressione());
                docAllegato.setFormatoAttachment(allegato.getFormatoAttachment());
                docAllegato.setDescrizioneAttachment(allegato.getDescrizioneAttachment());
                try {
                    Map<String, Object> fileProperties = new HashMap<String, Object>();
                    fileProperties.put(StoragePropertyNames.OBJECT_TYPE_ID.value(), "D:sigla_fatture_attachment:document");
                    fileProperties.put(StoragePropertyNames.NAME.value(), storeService.sanitizeFilename(nomeAllegato));
                    fileProperties.put(StoragePropertyNames.SECONDARY_OBJECT_TYPE_IDS.value(), Arrays.asList("P:sigla_commons_aspect:utente_applicativo_sigla"));
                    fileProperties.put("sigla_commons_aspect:utente_applicativo", "SDI");
                    byte[] bytes = allegato.getAttachment();
                    try {
                        if (Base64.isArrayByteBase64(bytes))
                            bytes = Base64.decodeBase64(bytes);
                    } catch (ArrayIndexOutOfBoundsException _ex) {
                    }
                    StorageObject storageObject = SpringUtil.getBean("storeService", StoreService.class).storeSimpleDocument(new ByteArrayInputStream(bytes), "application/" + allegato.getFormatoAttachment(), path, fileProperties);
                    docAllegato.setCmisNodeRef(storageObject.getKey());
                } catch (Exception _ex) {
                    anomalie.add("Errore nel salvataggio dell'allegato sul documentale! Identificativo:" + identificativoSdI + " " + _ex.getMessage());
                    LOGGER.error("Errore nel salvataggio dell'allegato sul documentale! Identificativo:" + identificativoSdI, _ex);
                    java.io.StringWriter sw = new java.io.StringWriter();
                    _ex.printStackTrace(new java.io.PrintWriter(sw));
                    SendMail.sendErrorMail("Errore nel salvataggio dell'allegato sul documentale!Identificativo:" + identificativoSdI, sw.toString());
                }
                if (!anomalie.isEmpty())
                    docAllegato.setAnomalie(StringUtils.join(anomalie.toArray(), " - "));
                docAllegato.setToBeCreated();
                docTestata.addToDocEleAllegatiColl(docAllegato);
            }
        }
        /**
         * Carico le Ritenute/Contributi
         */
        if (fatturaElettronicaBody.getDatiGenerali() != null && fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento() != null) {
            DatiGeneraliDocumentoType datiGeneraliDocumento = fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento();
            int indexTributo = 0;
            if (datiGeneraliDocumento.getDatiRitenuta() != null) {
                List<String> anomalie = new ArrayList<String>();
                for (DatiRitenutaType ritenutaType : datiGeneraliDocumento.getDatiRitenuta()) {
                    indexTributo++;
                    DocumentoEleTributiBulk docTributo = new DocumentoEleTributiBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, (long) indexTributo);
                    docTributo.setTipoRiga("RIT");
                    if (ritenutaType.getTipoRitenuta() != null)
                        docTributo.setTipoTributo(ritenutaType.getTipoRitenuta().value());
                    docTributo.setImporto(truncBigDecimal(ritenutaType.getImportoRitenuta()));
                    docTributo.setAliquota(truncBigDecimal(ritenutaType.getAliquotaRitenuta()));
                    if (ritenutaType.getCausalePagamento() != null)
                        docTributo.setCausalePagamento(ritenutaType.getCausalePagamento().value());
                    if (!anomalie.isEmpty())
                        docTributo.setAnomalie(StringUtils.join(anomalie.toArray(), " - "));
                    docTributo.setToBeCreated();
                    docTestata.addToDocEleTributiColl(docTributo);
                }
            }
            if (datiGeneraliDocumento.getDatiCassaPrevidenziale() != null && !datiGeneraliDocumento.getDatiCassaPrevidenziale().isEmpty()) {
                for (DatiCassaPrevidenzialeType datiCassaPrevidenziale : datiGeneraliDocumento.getDatiCassaPrevidenziale()) {
                    List<String> anomalie = new ArrayList<String>();
                    indexTributo++;
                    DocumentoEleTributiBulk docTributo = new DocumentoEleTributiBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, (long) indexTributo);
                    docTributo.setTipoRiga("CAS");
                    if (datiCassaPrevidenziale.getTipoCassa() != null)
                        docTributo.setTipoTributo(datiCassaPrevidenziale.getTipoCassa().value());
                    docTributo.setImporto(truncBigDecimal(datiCassaPrevidenziale.getImportoContributoCassa()));
                    docTributo.setAliquota(truncBigDecimal(datiCassaPrevidenziale.getAlCassa()));
                    docTributo.setImponibileCassa(truncBigDecimal(datiCassaPrevidenziale.getImponibileCassa()));
                    docTributo.setAliquotaIva(truncBigDecimal(datiCassaPrevidenziale.getAliquotaIVA()));
                    if (datiCassaPrevidenziale.getRitenuta() != null)
                        docTributo.setRitenutaCassa(datiCassaPrevidenziale.getRitenuta().value());
                    if (datiCassaPrevidenziale.getNatura() != null)
                        docTributo.setNatura(datiCassaPrevidenziale.getNatura().value());
                    docTributo.setRiferimentoAmministrazione(datiCassaPrevidenziale.getRiferimentoAmministrazione());
                    if (!anomalie.isEmpty())
                        docTributo.setAnomalie(StringUtils.join(anomalie.toArray(), " - "));
                    docTributo.setToBeCreated();
                    docTestata.addToDocEleTributiColl(docTributo);
                }
            }
        }
        /**
         * Carico lo sconto
         */
        if (fatturaElettronicaBody.getDatiGenerali() != null && fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento() != null) {
            if (fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getScontoMaggiorazione() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getScontoMaggiorazione().isEmpty()) {
                int indexSconto = 0;
                for (ScontoMaggiorazioneType scontoMaggiorazione : fatturaElettronicaBody.getDatiGenerali().getDatiGeneraliDocumento().getScontoMaggiorazione()) {
                    indexSconto++;
                    List<String> anomalie = new ArrayList<String>();
                    DocumentoEleScontoMaggBulk docSconto = new DocumentoEleScontoMaggBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, (long) indexSconto);
                    if (scontoMaggiorazione.getTipo() != null)
                        docSconto.setTipoScontomagg(scontoMaggiorazione.getTipo().value());
                    docSconto.setPercentualeScontomagg(truncBigDecimal(scontoMaggiorazione.getPercentuale()));
                    docSconto.setImportoScontomagg(truncBigDecimal(scontoMaggiorazione.getImporto()));
                    if (!anomalie.isEmpty())
                        docSconto.setAnomalie(StringUtils.join(anomalie.toArray(), " - "));
                    docSconto.setToBeCreated();
                    docTestata.addToDocEleScontoMaggColl(docSconto);
                }
            }
        }
        /**
         * Carico l'ordine di acquistoresponsabile2
         */
        List<DocumentoEleAcquistoBulk> acquisti = new ArrayList<DocumentoEleAcquistoBulk>();
        if (fatturaElettronicaBody.getDatiGenerali() != null) {
            if (fatturaElettronicaBody.getDatiGenerali().getDatiOrdineAcquisto() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiOrdineAcquisto().isEmpty()) {
                for (DatiDocumentiCorrelatiType datiOrdineAcquisto : fatturaElettronicaBody.getDatiGenerali().getDatiOrdineAcquisto()) {
                    acquisti.addAll(caricaAcquisti(datiOrdineAcquisto, TipoAcquistoEnum.Ordine.name(), idTrasmittente, datiTrasmissione, (long) progressivoTestata, identificativoSdI.longValue()));
                }
            }
            if (fatturaElettronicaBody.getDatiGenerali().getDatiContratto() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiContratto().isEmpty()) {
                for (DatiDocumentiCorrelatiType datiOrdineAcquisto : fatturaElettronicaBody.getDatiGenerali().getDatiContratto()) {
                    acquisti.addAll(caricaAcquisti(datiOrdineAcquisto, TipoAcquistoEnum.Contratto.name(), idTrasmittente, datiTrasmissione, (long) progressivoTestata, identificativoSdI.longValue()));
                }
            }
            if (fatturaElettronicaBody.getDatiGenerali().getDatiConvenzione() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiConvenzione().isEmpty()) {
                for (DatiDocumentiCorrelatiType datiOrdineAcquisto : fatturaElettronicaBody.getDatiGenerali().getDatiConvenzione()) {
                    acquisti.addAll(caricaAcquisti(datiOrdineAcquisto, TipoAcquistoEnum.Convenzione.name(), idTrasmittente, datiTrasmissione, (long) progressivoTestata, identificativoSdI.longValue()));
                }
            }
            if (fatturaElettronicaBody.getDatiGenerali().getDatiRicezione() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiRicezione().isEmpty()) {
                for (DatiDocumentiCorrelatiType datiOrdineAcquisto : fatturaElettronicaBody.getDatiGenerali().getDatiRicezione()) {
                    acquisti.addAll(caricaAcquisti(datiOrdineAcquisto, TipoAcquistoEnum.Ricezione.name(), idTrasmittente, datiTrasmissione, (long) progressivoTestata, identificativoSdI.longValue()));
                }
            }
            if (fatturaElettronicaBody.getDatiGenerali().getDatiFattureCollegate() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiFattureCollegate().isEmpty()) {
                for (DatiDocumentiCorrelatiType datiOrdineAcquisto : fatturaElettronicaBody.getDatiGenerali().getDatiFattureCollegate()) {
                    acquisti.addAll(caricaAcquisti(datiOrdineAcquisto, TipoAcquistoEnum.Fatture_Collegate.name(), idTrasmittente, datiTrasmissione, (long) progressivoTestata, identificativoSdI.longValue()));
                }
            }
            int progressivoAcquisto = 0;
            for (DocumentoEleAcquistoBulk docAcquisto : acquisti) {
                docAcquisto.setProgressivoAcquisto(new Long(progressivoAcquisto++));
                docAcquisto.setToBeCreated();
                docTestata.addToDocEleAcquistoColl(docAcquisto);
            }
        }
        /**
         * Carico il documento di trasporto
         */
        if (fatturaElettronicaBody.getDatiGenerali() != null) {
            if (fatturaElettronicaBody.getDatiGenerali().getDatiDDT() != null && !fatturaElettronicaBody.getDatiGenerali().getDatiDDT().isEmpty()) {
                int progressivoDdt = 0;
                for (DatiDDTType datiDDTT : fatturaElettronicaBody.getDatiGenerali().getDatiDDT()) {
                    progressivoDdt++;
                    for (Integer numeroLinea : datiDDTT.getRiferimentoNumeroLinea()) {
                        progressivoDdt++;
                        DocumentoEleDdtBulk docDDT = new DocumentoEleDdtBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, (long) progressivoDdt);
                        docDDT.setNumeroLinea(numeroLinea);
                        docDDT.setDdtNumero(datiDDTT.getNumeroDDT());
                        docDDT.setDdtData(convert(datiDDTT.getDataDDT()));
                        docDDT.setToBeCreated();
                        docTestata.addToDocEleDdtColl(docDDT);
                    }
                    if (datiDDTT.getRiferimentoNumeroLinea().isEmpty()) {
                        DocumentoEleDdtBulk docDDT = new DocumentoEleDdtBulk(idTrasmittente.getIdPaese(), idTrasmittente.getIdCodice(), identificativoSdI.longValue(), (long) progressivoTestata, (long) progressivoDdt);
                        docDDT.setDdtNumero(datiDDTT.getNumeroDDT());
                        docDDT.setDdtData(convert(datiDDTT.getDataDDT()));
                        docDDT.setToBeCreated();
                        docTestata.addToDocEleDdtColl(docDDT);
                    }
                }
            }
        }
        /**
         * Gestione del caso in cui arriva una fattura con dettaglio linea senza il numero linea progressivo
         * ma sempre uguale
         */
        List<Integer> numeroLinee = new ArrayList<Integer>();
        for (int i = 0; i < docTestata.getDocEleLineaColl().size(); i++) {
            DocumentoEleLineaBulk documentoEleLinea = docTestata.getDocEleLineaColl().get(i);
            if (numeroLinee.contains(documentoEleLinea.getNumeroLinea())) {
                documentoEleLinea.setNumeroLinea(i + 1);
                documentoEleLinea.setAnomalie("Documento da rifiutare, il numero delle linee non è progressivo.");
            }
            numeroLinee.add(documentoEleLinea.getNumeroLinea());
        }
    }
    // END FOR LOOP Fattura Elettronica Body
    try {
        docTrasmissione = (DocumentoEleTrasmissioneBulk) component.creaDocumento(userContext, docTrasmissione);
        component.completaDocumento(userContext, docTrasmissione);
    } catch (CRUDDuplicateKeyException _ex) {
        LOGGER.warn("WS della ricezione delle fatture fattura gia presente !Identificativo: {}", identificativoSdI);
        try {
            DocumentoEleTrasmissioneBulk doc = (DocumentoEleTrasmissioneBulk) component.findByPrimaryKey(userContext, docTrasmissione);
            doc.setToBeUpdated();
            doc.setCmisNodeRef(storeService.getStorageObjectByPath(path).getKey());
            component.modificaConBulk(userContext, doc);
        } catch (ComponentException | RemoteException e) {
            LOGGER.error("Errore nel WS della ricezione delle fatture!Identificativo:{}", identificativoSdI, e);
        }
    } catch (Exception e) {
        LOGGER.error("Errore nel WS della ricezione delle fatture!Identificativo:{}", identificativoSdI, e);
        java.io.StringWriter sw = new java.io.StringWriter();
        e.printStackTrace(new java.io.PrintWriter(sw));
        SendMail.sendErrorMail("Errore nel WS della ricezione delle fatture!Identificativo:" + identificativoSdI, sw.toString());
    }
}
Also used : Message(javax.mail.Message) Transformer(javax.xml.transform.Transformer) WSUserContext(it.cnr.contab.utenze00.bp.WSUserContext) Name(javax.xml.soap.Name) StringUtils(org.apache.commons.lang.StringUtils) FileSdIConMetadatiType(it.gov.fatturapa.FileSdIConMetadatiType) SOAPException(javax.xml.soap.SOAPException) StreamResult(javax.xml.transform.stream.StreamResult) LoggerFactory(org.slf4j.LoggerFactory) StatoDocumentoEleEnum(it.cnr.contab.docamm00.fatturapa.bulk.StatoDocumentoEleEnum) SendMail(it.cnr.jada.util.SendMail) DateTimeFormatterRegistrar(org.springframework.format.datetime.standard.DateTimeFormatterRegistrar) SOAPConstants(javax.xml.soap.SOAPConstants) Base64(org.apache.commons.codec.binary.Base64) DocumentoEleAcquistoBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleAcquistoBulk) BigDecimal(java.math.BigDecimal) RispostaRiceviFattureType(it.gov.fatturapa.RispostaRiceviFattureType) StorageException(it.cnr.si.spring.storage.StorageException) ByteArrayInputStream(java.io.ByteArrayInputStream) SOAPBinding(javax.jws.soap.SOAPBinding) it.gov.agenziaentrate.ivaservizi.docs.xsd.fatture.v1(it.gov.agenziaentrate.ivaservizi.docs.xsd.fatture.v1) DocumentoEleTestataBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataBulk) BigInteger(java.math.BigInteger) SOAPFault(javax.xml.soap.SOAPFault) RoundingMode(java.math.RoundingMode) WebService(javax.jws.WebService) FileSdIType(it.gov.fatturapa.FileSdIType) Stateless(javax.ejb.Stateless) StorageObject(it.cnr.si.spring.storage.StorageObject) DocumentoEleScontoMaggBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleScontoMaggBulk) StorePath(it.cnr.contab.spring.service.StorePath) EJBCommonServices(it.cnr.jada.util.ejb.EJBCommonServices) Collectors(java.util.stream.Collectors) RemoteException(java.rmi.RemoteException) DocumentoEleLineaBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleLineaBulk) ScartoEsitoCommittenteType(it.gov.fatturapa.sdi.messaggi.v1.ScartoEsitoCommittenteType) IOUtils(org.apache.commons.io.IOUtils) StorageDriver(it.cnr.si.spring.storage.StorageDriver) SOAPFaultException(javax.xml.ws.soap.SOAPFaultException) StoragePropertyNames(it.cnr.si.spring.storage.config.StoragePropertyNames) SpringUtil(it.cnr.contab.service.SpringUtil) UserContext(it.cnr.jada.UserContext) java.util(java.util) DocumentoEleAllegatiBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleAllegatiBulk) ByteArrayOutputStream(java.io.ByteArrayOutputStream) TransformerException(javax.xml.transform.TransformerException) StreamSource(javax.xml.transform.stream.StreamSource) CMSException(org.bouncycastle.cms.CMSException) Source(javax.xml.transform.Source) SIGLAStoragePropertyNames(it.cnr.contab.util.SIGLAStoragePropertyNames) DataHandler(javax.activation.DataHandler) TipoAcquistoEnum(it.cnr.contab.docamm00.fatturapa.bulk.TipoAcquistoEnum) MessageFactory(javax.xml.soap.MessageFactory) NotificaDecorrenzaTerminiType(it.gov.fatturapa.sdi.messaggi.v1.NotificaDecorrenzaTerminiType) SOAPBody(javax.xml.soap.SOAPBody) StoreService(it.cnr.si.spring.storage.StoreService) JAXBContext(javax.xml.bind.JAXBContext) DocumentoEleTrasmissioneBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTrasmissioneBulk) ApplicationException(it.cnr.jada.comp.ApplicationException) Logger(org.slf4j.Logger) StorageDocAmmAspect(it.cnr.contab.docamm00.storage.StorageDocAmmAspect) JAXBElement(javax.xml.bind.JAXBElement) DocumentoEleTributiBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTributiBulk) IOException(java.io.IOException) XMLGregorianCalendar(javax.xml.datatype.XMLGregorianCalendar) CRUDDuplicateKeyException(it.cnr.jada.comp.CRUDDuplicateKeyException) CMSTypedData(org.bouncycastle.cms.CMSTypedData) DocumentoEleIvaBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleIvaBulk) EsitoRicezioneType(it.gov.fatturapa.EsitoRicezioneType) StorageFolderFatturaPassiva(it.cnr.contab.docamm00.storage.StorageFolderFatturaPassiva) FatturaElettronicaPassivaComponentSession(it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession) DocumentoEleDdtBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleDdtBulk) TransformerFactory(javax.xml.transform.TransformerFactory) SOAPMessage(javax.xml.soap.SOAPMessage) CMSSignedData(org.bouncycastle.cms.CMSSignedData) ComponentException(it.cnr.jada.comp.ComponentException) SOAPFactory(javax.xml.soap.SOAPFactory) InputStream(java.io.InputStream) DocumentoEleIvaBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleIvaBulk) DocumentoEleTestataBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataBulk) DocumentoEleAcquistoBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleAcquistoBulk) ByteArrayInputStream(java.io.ByteArrayInputStream) FatturaElettronicaPassivaComponentSession(it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession) StorageObject(it.cnr.si.spring.storage.StorageObject) DocumentoEleLineaBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleLineaBulk) CRUDDuplicateKeyException(it.cnr.jada.comp.CRUDDuplicateKeyException) DocumentoEleDdtBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleDdtBulk) DocumentoEleTributiBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTributiBulk) DocumentoEleScontoMaggBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleScontoMaggBulk) DocumentoEleAllegatiBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleAllegatiBulk) StorageObject(it.cnr.si.spring.storage.StorageObject) WSUserContext(it.cnr.contab.utenze00.bp.WSUserContext) UserContext(it.cnr.jada.UserContext) StoreService(it.cnr.si.spring.storage.StoreService) BigDecimal(java.math.BigDecimal) SOAPException(javax.xml.soap.SOAPException) StorageException(it.cnr.si.spring.storage.StorageException) RemoteException(java.rmi.RemoteException) SOAPFaultException(javax.xml.ws.soap.SOAPFaultException) TransformerException(javax.xml.transform.TransformerException) CMSException(org.bouncycastle.cms.CMSException) ApplicationException(it.cnr.jada.comp.ApplicationException) IOException(java.io.IOException) CRUDDuplicateKeyException(it.cnr.jada.comp.CRUDDuplicateKeyException) ComponentException(it.cnr.jada.comp.ComponentException) DocumentoEleTrasmissioneBulk(it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTrasmissioneBulk) BigInteger(java.math.BigInteger)

Aggregations

FatturaElettronicaPassivaComponentSession (it.cnr.contab.docamm00.ejb.FatturaElettronicaPassivaComponentSession)8 DocumentoEleTestataBulk (it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTestataBulk)7 ComponentException (it.cnr.jada.comp.ComponentException)7 WSUserContext (it.cnr.contab.utenze00.bp.WSUserContext)5 UserContext (it.cnr.jada.UserContext)5 ApplicationException (it.cnr.jada.comp.ApplicationException)5 CRUDDuplicateKeyException (it.cnr.jada.comp.CRUDDuplicateKeyException)5 StorageException (it.cnr.si.spring.storage.StorageException)5 IOException (java.io.IOException)5 RemoteException (java.rmi.RemoteException)5 SOAPException (javax.xml.soap.SOAPException)5 TransformerException (javax.xml.transform.TransformerException)5 SOAPFaultException (javax.xml.ws.soap.SOAPFaultException)5 CMSException (org.bouncycastle.cms.CMSException)5 DocumentoEleTrasmissioneBulk (it.cnr.contab.docamm00.fatturapa.bulk.DocumentoEleTrasmissioneBulk)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 JAXBElement (javax.xml.bind.JAXBElement)3 StreamSource (javax.xml.transform.stream.StreamSource)3 CRUDFatturaPassivaBP (it.cnr.contab.docamm00.bp.CRUDFatturaPassivaBP)2 CRUDFatturaPassivaElettronicaBP (it.cnr.contab.docamm00.bp.CRUDFatturaPassivaElettronicaBP)2