use of it.gov.agenziaentrate.ivaservizi.docs.xsd.fatture.v1.ContattiTrasmittenteType in project sigla-main by consiglionazionaledellericerche.
the class DocAmmFatturazioneElettronicaComponent method preparaFattura.
public FatturaElettronicaType preparaFattura(UserContext userContext, Fattura_attivaBulk fattura) throws ComponentException {
try {
ObjectFactory factory = new ObjectFactory();
FatturaElettronicaType fatturaType = factory.createFatturaElettronicaType();
fatturaType.setSistemaEmittente(Utility.APPLICATION_TITLE.substring(0, 5));
fatturaType.setVersione(fattura.getCodiceUnivocoUfficioIpa() == null ? FormatoTrasmissioneType.FPR_12 : FormatoTrasmissioneType.FPA_12);
FatturaElettronicaHeaderType fatturaHeaderType = factory.createFatturaElettronicaHeaderType();
TerzoBulk terzoCnr = ((TerzoHome) getHome(userContext, TerzoBulk.class)).findTerzoEnte();
TerzoBulk cliente = fattura.getCliente();
TerzoBulk terzoUo = fattura.getTerzo_uo();
if (terzoCnr != null) {
DatiTrasmissioneType datiTrasmissione = factory.createDatiTrasmissioneType();
datiTrasmissione.setIdTrasmittente(impostaIdTrasmittente(userContext, factory, terzoCnr));
datiTrasmissione.setProgressivoInvio(fattura.getEsercizio().toString() + Utility.lpad(fattura.getProgrUnivocoAnno().toString(), 6, '0'));
if (fattura.getCodiceUnivocoUfficioIpa() != null) {
datiTrasmissione.setCodiceDestinatario(fattura.getCodiceUnivocoUfficioIpa());
} else {
if (fattura.getCodiceDestinatarioFatt() != null) {
datiTrasmissione.setCodiceDestinatario(fattura.getCodiceDestinatarioFatt());
} else {
if (fattura.isFatturaEstera()) {
datiTrasmissione.setCodiceDestinatario(CODICE_DESTINATARIO_ESTERO);
} else {
datiTrasmissione.setCodiceDestinatario(CODICE_DESTINATARIO_CON_PEC_O_NON_REGISTRATO);
}
datiTrasmissione.setPECDestinatario(fattura.getPecFatturaElettronica());
}
}
ContattiTrasmittenteType contattiTrasmittenteType = factory.createContattiTrasmittenteType();
String eMailReferente = Utility.createConfigurazioneCnrComponentSession().getVal01(userContext, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FATTURAZIONE_ELETTRONICA, Configurazione_cnrBulk.SK_MAIL_REFERENTE_TECNICO);
contattiTrasmittenteType.setEmail(eMailReferente);
String telefonoReferente = Utility.createConfigurazioneCnrComponentSession().getVal01(userContext, it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FATTURAZIONE_ELETTRONICA, Configurazione_cnrBulk.SK_TELEFONO_REFERENTE_TECNICO);
contattiTrasmittenteType.setTelefono(telefonoReferente);
datiTrasmissione.setContattiTrasmittente(contattiTrasmittenteType);
datiTrasmissione.setFormatoTrasmissione(fattura.getCodiceUnivocoUfficioIpa() == null ? FormatoTrasmissioneType.FPR_12 : FormatoTrasmissioneType.FPA_12);
fatturaHeaderType.setDatiTrasmissione(datiTrasmissione);
CedentePrestatoreType cedentePrestatoreType = factory.createCedentePrestatoreType();
DatiAnagraficiCedenteType anagraficiCedenteType = factory.createDatiAnagraficiCedenteType();
if (terzoCnr.getAnagrafico() == null || terzoCnr.getAnagrafico().getPartita_iva() == null)
throw new ApplicationException("Impossibile Procedere! Manca la Partita Iva per il codice Anagrafica: " + terzoCnr.getCd_anag() + " del terzo: " + terzoCnr.getCd_terzo());
anagraficiCedenteType.setIdFiscaleIVA(impostaIdFiscale(userContext, factory, terzoCnr, null));
if (terzoCnr.getAnagrafico().getCodice_fiscale() == null)
throw new ApplicationException("Impossibile Procedere! Manca il Codice Fiscale per il codice Anagrafica: " + terzoCnr.getCd_anag() + " del terzo: " + terzoCnr.getCd_terzo());
anagraficiCedenteType.setCodiceFiscale(terzoCnr.getAnagrafico().getCodice_fiscale());
anagraficiCedenteType.setAnagrafica(impostaAnagrafica(factory, terzoCnr));
anagraficiCedenteType.setRegimeFiscale(RegimeFiscaleType.RF_01);
cedentePrestatoreType.setDatiAnagrafici(anagraficiCedenteType);
cedentePrestatoreType.setSede(impostaIndirizzo(userContext, factory, terzoUo));
// TODO: Per il momento non lo gestiamo. Il dato non รจ obbligatorio.
// ContattiType contattiCedente = factory.createContattiType();
// contattiCedente.setEmail(value);
// cedentePrestatoreType.setContatti(contattiCedente);
fatturaHeaderType.setCedentePrestatore(cedentePrestatoreType);
CessionarioCommittenteType clienteType = factory.createCessionarioCommittenteType();
DatiAnagraficiCessionarioType datiAnagraficiClienteType = factory.createDatiAnagraficiCessionarioType();
datiAnagraficiClienteType.setAnagrafica(impostaAnagrafica(factory, cliente));
if (fattura.getFl_intra_ue() && cliente.getAnagrafico().isPersonaGiuridica() && cliente.getCodiceUnivocoUfficioIpa() == null && cliente.getAnagrafico().getPartita_iva() == null) {
throw new ApplicationException("Impossibile Procedere! E' necessario indicare la partita IVA");
}
if ((!fattura.isFatturaEstera() || !cliente.getAnagrafico().isPersonaGiuridica()) && (fattura.getCodice_fiscale() == null && !cliente.getAnagrafico().isGruppoIVA())) {
throw new ApplicationException("Impossibile Procedere! Manca il Codice Fiscale per la Fattura: " + fattura.getEsercizio() + "-" + fattura.getPg_fattura_attiva());
}
if (!fattura.isFatturaEstera()) {
datiAnagraficiClienteType.setCodiceFiscale(fattura.getCodice_fiscale());
}
if (cliente.getAnagrafico() != null && cliente.getAnagrafico().getPartita_iva() != null && (!cliente.getAnagrafico().isEntePubblico() || cliente.getAnagrafico().isPartitaIvaVerificata() || (fattura.getCodice_fiscale() != null && cliente.getAnagrafico().getPartita_iva().compareTo(fattura.getCodice_fiscale()) != 0))) {
datiAnagraficiClienteType.setIdFiscaleIVA(impostaIdFiscale(userContext, factory, cliente, fattura));
} else if (!StringUtils.hasLength(datiAnagraficiClienteType.getCodiceFiscale())) {
datiAnagraficiClienteType.setIdFiscaleIVA(impostaIdFiscale(userContext, factory, cliente, fattura));
} else if (fattura.isFatturaEstera() && cliente.getAnagrafico().isPersonaFisica()) {
IdFiscaleType idFiscale = factory.createIdFiscaleType();
idFiscale.setIdCodice("99999999999");
idFiscale.setIdPaese(impostaCodicePaese(userContext, cliente));
datiAnagraficiClienteType.setIdFiscaleIVA(idFiscale);
}
if (!StringUtils.hasLength(datiAnagraficiClienteType.getCodiceFiscale()) && !StringUtils.hasLength(datiAnagraficiClienteType.getIdFiscaleIVA().getIdCodice())) {
datiAnagraficiClienteType.getIdFiscaleIVA().setIdCodice("99999999999");
}
clienteType.setDatiAnagrafici(datiAnagraficiClienteType);
clienteType.setSede(impostaIndirizzo(userContext, factory, cliente, fattura));
fatturaHeaderType.setCessionarioCommittente(clienteType);
fatturaType.setFatturaElettronicaHeader(fatturaHeaderType);
FatturaElettronicaBodyType fatturaBodyType = factory.createFatturaElettronicaBodyType();
DatiGeneraliType datiGenerali = factory.createDatiGeneraliType();
DatiGeneraliDocumentoType datiGeneraliDocumento = factory.createDatiGeneraliDocumentoType();
datiGeneraliDocumento.setTipoDocumento(tipoDocumento.get(fattura.getTi_fattura()));
datiGeneraliDocumento.setDivisa("EUR");
datiGeneraliDocumento.setData(convertDateToXmlGregorian(it.cnr.jada.util.ejb.EJBCommonServices.getServerDate()));
datiGeneraliDocumento.setNumero(fattura.recuperoIdFatturaAsString());
List list = (List) ((FatturaAttivaSingolaComponentSession) it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession", FatturaAttivaSingolaComponentSession.class)).findDettagli(userContext, fattura);
if (list != null) {
BulkList dettaglio = new BulkList(list);
if (dettaglio == null || dettaglio.isEmpty()) {
throw new ApplicationException("Impossibile Procedere! La Fattura: " + fattura.getEsercizio() + "-" + fattura.getPg_fattura_attiva() + " non ha dettagli");
}
Boolean esisteBollo = gestioneBollo(userContext, factory, datiGeneraliDocumento, fattura, dettaglio);
datiGeneraliDocumento.setImportoTotaleDocumento(fattura.getIm_totale_fattura().setScale(2));
String descrizione = "";
if (fattura.getDs_fattura_attiva() != null) {
descrizione = fattura.getDs_fattura_attiva();
}
List<String> listaCausali = new ArrayList<String>();
if (fattura.getRiferimento_ordine() != null && fattura.getDt_ordine() == null) {
if (!descrizione.equals("")) {
descrizione += " ";
}
descrizione += "Riferimento ordine:" + fattura.getRiferimento_ordine();
}
int lunghezzaStringaCausale = 200;
int numeroCaratteriFinali = 0;
for (int i = 0; i <= descrizione.length() / lunghezzaStringaCausale; i++) {
int numeroCaratteri = i * lunghezzaStringaCausale;
int numeroCaratteriOccorrenti = (numeroCaratteri + lunghezzaStringaCausale);
if (numeroCaratteriOccorrenti > descrizione.length()) {
numeroCaratteriFinali = numeroCaratteri + (descrizione.length() - numeroCaratteri);
} else {
numeroCaratteriFinali = numeroCaratteri + lunghezzaStringaCausale;
}
if (numeroCaratteri < numeroCaratteriFinali) {
String causale = descrizione.substring(numeroCaratteri, numeroCaratteriFinali);
listaCausali.add(RemoveAccent.convert(causale));
}
}
datiGeneraliDocumento.getCausale().addAll(listaCausali);
datiGenerali.setDatiGeneraliDocumento(datiGeneraliDocumento);
DatiBeniServiziType datiBeniServizi = factory.createDatiBeniServiziType();
List<DettaglioLineeType> listaDettagli = new ArrayList<DettaglioLineeType>();
List<RiepilogoPerAliquotaIVA> listaRiepilogo = new ArrayList<DocAmmFatturazioneElettronicaComponent.RiepilogoPerAliquotaIVA>();
HashMap<ContrattoBulk, List<Integer>> mappaContratti = new HashMap<ContrattoBulk, List<Integer>>();
HashMap<Fattura_attivaBulk, List<Integer>> dettagliNoteSenzaContratto = new HashMap<Fattura_attivaBulk, List<Integer>>();
HashMap<Fattura_attivaBulk, HashMap<ContrattoBulk, List<Integer>>> mappaDocumentiCollegati = new HashMap<Fattura_attivaBulk, HashMap<ContrattoBulk, List<Integer>>>();
List<Integer> listaTutteLinee = new ArrayList<>();
for (Iterator<Fattura_attiva_rigaBulk> i = dettaglio.iterator(); i.hasNext(); ) {
Fattura_attiva_rigaBulk riga = (Fattura_attiva_rigaBulk) i.next();
listaTutteLinee.add(riga.getProgressivo_riga().intValue());
DettaglioLineeType rigaFattura = factory.createDettaglioLineeType();
rigaFattura.setNumeroLinea(riga.getProgressivo_riga().intValue());
if (riga.getDs_riga_fattura() != null) {
rigaFattura.setDescrizione(RemoveAccent.convert(riga.getDs_riga_fattura().replaceAll("\\u20AC", "E")));
} else {
rigaFattura.setDescrizione("Descrizione");
}
rigaFattura.setQuantita(riga.getQuantita().setScale(2));
if (riga.getTariffario() != null && riga.getTariffario().getCd_tariffario() != null) {
if (riga.getTariffario().getUnita_misura() == null)
riga.setTariffario((TariffarioBulk) findByPrimaryKey(userContext, riga.getTariffario()));
rigaFattura.setUnitaMisura(riga.getTariffario().getUnita_misura());
}
rigaFattura.setDataInizioPeriodo(convertDateToXmlGregorian(riga.getDt_da_competenza_coge()));
rigaFattura.setDataFinePeriodo(convertDateToXmlGregorian(riga.getDt_a_competenza_coge()));
rigaFattura.setPrezzoUnitario(riga.getPrezzo_unitario().setScale(2));
rigaFattura.setPrezzoTotale(rigaFattura.getPrezzoUnitario().multiply(rigaFattura.getQuantita()).setScale(2));
if (riga.getVoce_iva() != null && riga.getVoce_iva().getCd_voce_iva() != null && riga.getVoce_iva().getPercentuale() == null)
riga.setVoce_iva((Voce_ivaBulk) findByPrimaryKey(userContext, riga.getVoce_iva()));
rigaFattura.setAliquotaIVA(Utility.nvl(riga.getVoce_iva().getPercentuale()).setScale(2));
rigaFattura.setNatura(impostaDatiNatura(riga.getVoce_iva().getNaturaOperNonImpSdi()));
listaDettagli.add(rigaFattura);
if (fattura.getTi_fattura().equals(Fattura_attivaBulk.TIPO_NOTA_DI_CREDITO)) {
impostaDatiPerNoteCredito(userContext, mappaDocumentiCollegati, riga, dettagliNoteSenzaContratto);
}
preparaDatiContratto(userContext, mappaContratti, riga);
impostaDatiPerRiepilogoDatiIva(listaRiepilogo, riga);
}
datiBeniServizi.getDettaglioLinee().addAll(listaDettagli);
impostaDatiContratto(factory, datiGenerali, mappaContratti);
impostaDatiDocumentiCollegati(factory, datiGenerali, mappaDocumentiCollegati, dettagliNoteSenzaContratto);
if (!fattura.isFatturaEstera() && fattura.getRiferimento_ordine() != null && fattura.getDt_ordine() != null) {
DatiDocumentiCorrelatiType datiOrdineAcquisto = factory.createDatiDocumentiCorrelatiType();
datiOrdineAcquisto.getRiferimentoNumeroLinea().addAll(listaTutteLinee);
datiOrdineAcquisto.setData(convertDateToXmlGregorian(fattura.getDt_ordine()));
datiOrdineAcquisto.setIdDocumento(substring(fattura.getRiferimento_ordine(), 20));
String soggettoOrdine = null;
if (!fattura.getFl_ordine_elettronico()) {
soggettoOrdine = "#NO#";
} else {
if (fattura.getCodiceUnivocoUfficioIpa() != null) {
soggettoOrdine = "#0201:" + fattura.getCodiceUnivocoUfficioIpa() + "#";
} else {
if (fattura.getPartita_iva() != null) {
soggettoOrdine = "#9906:";
} else {
soggettoOrdine = "#9907:";
}
if (fattura.getCodiceDestinatarioFatt() != null) {
soggettoOrdine += fattura.getCodiceDestinatarioFatt();
} else if (fattura.getPecFatturaElettronica() != null) {
soggettoOrdine += fattura.getPecFatturaElettronica();
} else {
soggettoOrdine += datiTrasmissione.getCodiceDestinatario();
}
soggettoOrdine += "#";
}
}
datiOrdineAcquisto.setCodiceCommessaConvenzione(soggettoOrdine);
datiGenerali.getDatiOrdineAcquisto().add(datiOrdineAcquisto);
}
fatturaBodyType.setDatiGenerali(datiGenerali);
List<DatiRiepilogoType> listaRiepilogoType = new ArrayList<DatiRiepilogoType>();
for (Iterator<RiepilogoPerAliquotaIVA> i = listaRiepilogo.iterator(); i.hasNext(); ) {
RiepilogoPerAliquotaIVA riepilogo = (RiepilogoPerAliquotaIVA) i.next();
DatiRiepilogoType datiRiepilogo = factory.createDatiRiepilogoType();
datiRiepilogo.setAliquotaIVA(riepilogo.getAliquota());
if (fattura.getFl_liquidazione_differita()) {
datiRiepilogo.setEsigibilitaIVA(fattura.getEsercizio() > 2014 ? EsigibilitaIVAType.S : EsigibilitaIVAType.D);
} else {
datiRiepilogo.setEsigibilitaIVA(EsigibilitaIVAType.I);
}
datiRiepilogo.setImponibileImporto(riepilogo.getImponibile().setScale(2));
datiRiepilogo.setImposta(riepilogo.getImposta().setScale(2));
impostaDatiNonImponibile(fattura, riepilogo, datiRiepilogo);
listaRiepilogoType.add(datiRiepilogo);
}
datiBeniServizi.getDatiRiepilogo().addAll(listaRiepilogoType);
fatturaBodyType.setDatiBeniServizi(datiBeniServizi);
DatiPagamentoType datiPagamento = factory.createDatiPagamentoType();
datiPagamento.setCondizioniPagamento(CondizioniPagamentoType.TP_02);
List<DettaglioPagamentoType> listaDettagliPagamento = new ArrayList<DettaglioPagamentoType>();
if (fattura.getTi_fattura().equals(Fattura_attivaBulk.TIPO_NOTA_DI_CREDITO)) {
for (Iterator<Fattura_attivaBulk> y = mappaDocumentiCollegati.keySet().iterator(); y.hasNext(); ) {
Fattura_attivaBulk fatturaCollegata = y.next();
listaDettagliPagamento.add(impostaDatiPagamento(userContext, terzoCnr, factory, fatturaCollegata));
}
} else {
DettaglioPagamentoType dettaglioPagamento = impostaDatiPagamento(userContext, terzoCnr, factory, fattura);
dettaglioPagamento.setCodicePagamento(fattura.recuperoIdFatturaAsString());
listaDettagliPagamento.add(dettaglioPagamento);
}
datiPagamento.getDettaglioPagamento().addAll(listaDettagliPagamento);
List<DatiPagamentoType> listaDatiPagamento = new ArrayList<DatiPagamentoType>();
listaDatiPagamento.add(datiPagamento);
fatturaBodyType.getDatiPagamento().addAll(listaDatiPagamento);
List<FatturaElettronicaBodyType> listaFattureBody = new ArrayList<FatturaElettronicaBodyType>();
listaFattureBody.add(fatturaBodyType);
fatturaType.getFatturaElettronicaBody().addAll(listaFattureBody);
}
}
return fatturaType;
} catch (Exception e) {
throw handleException(e);
}
}
Aggregations