All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.cnr.contab.incarichi00.bp.CRUDIncarichiEstrazioneFpBP Maven / Gradle / Ivy

/*
 * Copyright (C) 2019  Consiglio Nazionale delle Ricerche
 *
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU Affero General Public License as
 *     published by the Free Software Foundation, either version 3 of the
 *     License, or (at your option) any later version.
 *
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU Affero General Public License for more details.
 *
 *     You should have received a copy of the GNU Affero General Public License
 *     along with this program.  If not, see .
 */

package it.cnr.contab.incarichi00.bp;

import it.cnr.contab.anagraf00.tabter.bulk.NazioneBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_archivioBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorioBulk;
import it.cnr.contab.incarichi00.bulk.V_incarichi_elenco_fpBulk;
import it.cnr.contab.incarichi00.ejb.IncarichiEstrazioneFpComponentSession;
import it.cnr.contab.incarichi00.tabrif.bulk.Tipo_prestazioneBulk;
import it.cnr.contab.incarichi00.xmlfp.Comunicazione;
import it.cnr.contab.incarichi00.xmlfp.Esito;
import it.cnr.contab.incarichi00.xmlfp.EsitoComunicazione;
import it.cnr.contab.incarichi00.xmlfp.ObjectFactory;
import it.cnr.contab.incarichi00.xmlfp.bulk.Incarichi_archivio_xml_fpBulk;
import it.cnr.contab.incarichi00.xmlfp.bulk.Incarichi_comunicati_fpBulk;
import it.cnr.contab.incarichi00.xmlfp.bulk.Incarichi_comunicati_fp_detBulk;
import it.cnr.contab.util.Utility;
import it.cnr.jada.action.ActionContext;
import it.cnr.jada.action.BusinessProcessException;
import it.cnr.jada.action.Config;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.bulk.ValidationException;
import it.cnr.jada.persistency.sql.CompoundFindClause;
import it.cnr.jada.persistency.sql.FindClause;
import it.cnr.jada.persistency.sql.SQLBuilder;
import it.cnr.jada.util.RemoteIterator;
import it.cnr.jada.util.action.ConsultazioniBP;
import it.cnr.jada.util.action.SimpleCRUDBP;
import it.cnr.jada.util.ejb.EJBCommonServices;
import it.cnr.jada.util.upload.UploadedFile;
import it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ConsulenteType.Incarico.RiferimentoNormativo;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;

public class CRUDIncarichiEstrazioneFpBP extends SimpleCRUDBP {
	public CRUDIncarichiEstrazioneFpBP() {
		super();
	}

	public CRUDIncarichiEstrazioneFpBP(String s) {
		super(s);
	}

	public CRUDIncarichiEstrazioneFpBP(String s, OggettoBulk bulk) {
		super(s);
	}

	protected void init(Config config, ActionContext actioncontext) throws BusinessProcessException {
		setTab("tab","tabIncarichiArchivio");
		super.init(config, actioncontext);
	}

	/* 
	 * Necessario per la creazione di una form con enctype di tipo "multipart/form-data"
	 * Sovrascrive quello presente nelle superclassi
	 * 
	*/
	public void openForm(javax.servlet.jsp.PageContext context,String action,String target) throws java.io.IOException,javax.servlet.ServletException {
		openForm(context,action,target,"multipart/form-data");
	}

	protected void resetTabs(ActionContext context) {
		setTab("tab","tabIncarichiArchivio");
	}

	@Override
	public void validate(ActionContext actioncontext) throws ValidationException {
		Incarichi_archivio_xml_fpBulk archivio = (Incarichi_archivio_xml_fpBulk)getModel();
		if (archivio.getFl_merge_perla().equals(Boolean.FALSE))
			caricaValidaXML(actioncontext, archivio);
		else
			caricaValidaCSV(actioncontext, archivio);
		super.validate(actioncontext);
	}
	
	private void caricaValidaXML(ActionContext actioncontext, Incarichi_archivio_xml_fpBulk allegato) throws ValidationException {
		try{
			long LUNGHEZZA_MAX=0x1000000;
	
			UploadedFile fileInviato = ((it.cnr.jada.action.HttpActionContext)actioncontext).getMultipartParameter("main.blob_inv");
			
			if (fileInviato == null || fileInviato.getName().equals(""))
				throw new ValidationException("Attenzione: caricare il File inviato alla Funzione Pubblica.");
	
			if (!(fileInviato == null || fileInviato.getName().equals(""))) { 
				if (fileInviato.length() > LUNGHEZZA_MAX)
					throw new ValidationException("Attenzione: la dimensione del file inviato alla Funzione Pubblica è superiore alla massima consentita (10 Mb).");
	
				allegato.setFile_inv(fileInviato.getFile());
				allegato.setNome_file_inv(Incarichi_archivioBulk.parseFilename(fileInviato.getName()));
				allegato.setToBeUpdated();
				setDirty(true);
			}
			
			UploadedFile fileRicevuto = ((it.cnr.jada.action.HttpActionContext)actioncontext).getMultipartParameter("main.blob_ric");
			
			if (fileRicevuto == null || fileRicevuto.getName().equals(""))
				throw new ValidationException("Attenzione: caricare il File ricevuto dalla Funzione Pubblica.");
	
			if (!(fileRicevuto == null || fileRicevuto.getName().equals(""))) { 
				if (fileRicevuto.length() > LUNGHEZZA_MAX)
					throw new ValidationException("Attenzione: la dimensione del file ricevuto dalla Funzione Pubblica è superiore alla massima consentita (10 Mb).");
	
				allegato.setFile_ric(fileRicevuto.getFile());
				allegato.setNome_file_ric(Incarichi_archivioBulk.parseFilename(fileRicevuto.getName()));
				allegato.setToBeUpdated();
				setDirty(true);
			}
	
			JAXBContext jc;
			if (!allegato.getFl_perla()) {
				try {
					jc = JAXBContext.newInstance("it.cnr.contab.incarichi00.xmlfp");
				} catch (JAXBException e) {
					throw new ValidationException("Errore in fase di inizializzazione di un oggetto JAXB. "+e.getMessage());
				}
			
				Comunicazione comunicazione;
				try{
					comunicazione = (Comunicazione)jc.createUnmarshaller().unmarshal(fileInviato.getFile());
				} catch (ClassCastException e) {
					throw new ValidationException("File inviato alla funzione pubblica non di tipo corretto. "+e.getMessage());
				} catch (JAXBException e) {
					throw new ValidationException("Errore generico in fase di caricamento del file inviato alla funzione pubblica. "+e.getMessage());
				}
					
				EsitoComunicazione esitoComunicazione;
				try{
					esitoComunicazione = (EsitoComunicazione)jc.createUnmarshaller().unmarshal(fileRicevuto.getFile());
				} catch (ClassCastException e) {
					throw new ValidationException("File ricevuto dalla funzione pubblica non di tipo corretto. "+e.getMessage());
				} catch (JAXBException e) {
					throw new ValidationException("Errore generico in fase di caricamento del file ricevuto dalla funzione pubblica. "+e.getMessage());
				}
					
				if (comunicazione==null)
					throw new ValidationException("Errore nel caricamento del file inviato alla Funzione Pubblica.");
				else if (esitoComunicazione==null)
					throw new ValidationException("Errore nel caricamento del file ricevuto dalla Funzione Pubblica.");
				else if (comunicazione.getConsulenti().getNuovoIncarico().size()!=esitoComunicazione.getConsulenti().getNuovoIncarico().size())
					throw new ValidationException("Attenzione: il numero degli incarichi presenti nel file inviato ("+comunicazione.getConsulenti().getNuovoIncarico().size()+") è diverso dal numero degli incarichi presenti nel file ricevuto("+esitoComunicazione.getConsulenti().getNuovoIncarico().size()+").");
			} else {
				try {
					jc = JAXBContext.newInstance(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory.class, it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory.class, it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.ObjectFactory.class);
				} catch (JAXBException e) {
					throw new ValidationException("Errore in fase di inizializzazione di un oggetto JAXB. "+e.getMessage());
				}
			
				JAXBElement comunicazione;
				try{
					comunicazione = (JAXBElement)jc.createUnmarshaller().unmarshal(fileInviato.getFile()); 
				} catch (ClassCastException e) {
					throw new ValidationException("File inviato alla funzione pubblica non di tipo corretto. "+e.getMessage());
				} catch (JAXBException e) {
					throw new ValidationException("Errore generico in fase di caricamento del file inviato alla funzione pubblica. "+e.getMessage());
				}
					
				JAXBElement esitoComunicazione;
				try{
					esitoComunicazione = (JAXBElement)jc.createUnmarshaller().unmarshal(fileRicevuto.getFile()); 
				} catch (ClassCastException e) {
					throw new ValidationException("File ricevuto dalla funzione pubblica non di tipo corretto. "+e.getMessage());
				} catch (JAXBException e) {
					throw new ValidationException("Errore generico in fase di caricamento del file ricevuto dalla funzione pubblica. "+e.getMessage());
				}
					
				if (comunicazione==null)
					throw new ValidationException("Errore nel caricamento del file inviato alla Funzione Pubblica.");
				else if (esitoComunicazione==null)
					throw new ValidationException("Errore nel caricamento del file ricevuto dalla Funzione Pubblica.");
				else {
					if (comunicazione.getDeclaredType().equals(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType.class) &&
						esitoComunicazione.getDeclaredType().equals(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType.class)) {
						if (((it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType)comunicazione.getValue()).getInserimentoIncarichi().getNuoviIncarichi().getConsulente().size()!=((it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType)esitoComunicazione.getValue()).getEsitoInserimentoIncarichi().getEsitoNuoviIncarichi().getConsulente().size())
							throw new ValidationException("Attenzione: il numero degli incarichi presenti nel file inviato ("+((it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType)comunicazione.getValue()).getInserimentoIncarichi().getNuoviIncarichi().getConsulente().size()+") è diverso dal numero degli incarichi presenti nel file ricevuto("+((it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType)esitoComunicazione.getValue()).getEsitoInserimentoIncarichi().getEsitoNuoviIncarichi().getConsulente().size()+").");
						else if (((it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType)esitoComunicazione.getValue()).getEsitoInserimentoIncarichi().getEsitoFile().equals(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.KO))
							throw new ValidationException("Attenzione: il file ricevuto dalla funzione pubblica non è andato a buon fine.");
					} else if (comunicazione.getDeclaredType().equals(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType.class) &&
							   esitoComunicazione.getDeclaredType().equals(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType.class)) {
						if (((it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType)comunicazione.getValue()).getVariazioneIncarichi().getModificaIncarichi().getConsulente().size()!=((it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType)esitoComunicazione.getValue()).getEsitoVariazioneIncarichi().getEsitoModificaIncarichi().getConsulente().size())
							throw new ValidationException("Attenzione: il numero degli incarichi presenti nel file inviato ("+((it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType)comunicazione.getValue()).getVariazioneIncarichi().getModificaIncarichi().getConsulente().size()+") è diverso dal numero degli incarichi presenti nel file ricevuto("+((it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType)esitoComunicazione.getValue()).getEsitoVariazioneIncarichi().getEsitoModificaIncarichi().getConsulente().size()+").");
						else if (((it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType)esitoComunicazione.getValue()).getEsitoVariazioneIncarichi().getEsitoFile().equals(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoType.KO))
							throw new ValidationException("Attenzione: il file ricevuto dalla funzione pubblica non è andato a buon fine.");
					} else 
						throw new ValidationException("Tipologia di file ricevuto dalla Funzione Pubblica non gestita.");
				}
			}
		} catch (ValidationException e){
			throw new ValidationException(e.getMessage());
		}
	}

	private void caricaValidaCSV(ActionContext actioncontext, Incarichi_archivio_xml_fpBulk allegato) throws ValidationException {
		try{
			long LUNGHEZZA_MAX=0x1000000;
	
			UploadedFile fileRicevuto = ((it.cnr.jada.action.HttpActionContext)actioncontext).getMultipartParameter("main.blob_ric");
			
			if (fileRicevuto == null || fileRicevuto.getName().equals(""))
				throw new ValidationException("Attenzione: caricare il File di tipo CSV ottenuto dalla funzione REPORT/Incarichi presente nel sistema PERLA-PA.");
	
			if (!(fileRicevuto == null || fileRicevuto.getName().equals(""))) { 
				if (fileRicevuto.length() > LUNGHEZZA_MAX)
					throw new ValidationException("Attenzione: la dimensione del file è superiore alla massima consentita (10 Mb).");
	
				allegato.setFile_ric(fileRicevuto.getFile());
				allegato.setNome_file_ric(Incarichi_archivioBulk.parseFilename(fileRicevuto.getName()));
				allegato.setToBeUpdated();
				setDirty(true);
			}
		} catch (ValidationException e){
			throw new ValidationException(e.getMessage());
		}
	}

	private EsitoComunicazione.Consulenti.NuovoIncarico getAnomalieNuovoIncaricoFP(ObjectFactory objectFactory, V_incarichi_elenco_fpBulk v_incarico) throws DatatypeConfigurationException{
		EsitoComunicazione.Consulenti.NuovoIncarico nuovoIncaricoAnomalia = objectFactory.createEsitoComunicazioneConsulentiNuovoIncarico();
		EsitoComunicazione.Consulenti.NuovoIncarico.IncaricatoPersona nuovoIncaricatoPersona = objectFactory.createEsitoComunicazioneConsulentiNuovoIncaricoIncaricatoPersona();

		nuovoIncaricoAnomalia.setIncaricatoPersona(nuovoIncaricatoPersona);
		nuovoIncaricoAnomalia.setEsito(Esito.OK);

		Incarichi_repertorioBulk incarico = v_incarico.getIncaricoRepertorio();

		if (incarico.getDt_inizio_validita()==null){
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.setErrDataInizio("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Data Inizio.");
		}	
		if (incarico.getDt_fine_validita()==null){
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.setErrDataFine("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Data Fine.");
		}	
		if (incarico.getTerzo()==null ||incarico.getTerzo().getAnagrafico()==null){
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrCognome("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Terzo.");
		}	
		if (incarico.getTerzo().getAnagrafico().getCodice_fiscale()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrCodiceFiscalePartitaIva("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Codice Fiscale Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getComune_nascita()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrCodiceFiscalePartitaIva("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Comune Nascita Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getCognome()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrCognome("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Cognome Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getNome()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrNome("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Nome Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getDt_nascita()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrDataNascita("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Data Nascita Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getTi_sesso()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.getIncaricatoPersona().setErrSesso("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Tipo Sesso Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getUnita_organizzativa().getId_funzione_pubblica()==null) {
			nuovoIncaricoAnomalia.setEsito(Esito.ERRATO);
			nuovoIncaricoAnomalia.setErrDescrizioneIncarico("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Codice Identificativo Funzione Pubblica sulla UO di appartenenza ("+incarico.getUnita_organizzativa().getCd_unita_organizzativa()+").");
		} 

		return nuovoIncaricoAnomalia;
	}

	private it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoConsulenteType getAnomalieNuovoConsulentePerla(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory objectFactory, V_incarichi_elenco_fpBulk v_incarico) throws DatatypeConfigurationException{
		Incarichi_repertorioBulk incarico = v_incarico.getIncaricoRepertorio();

		//ERRORI INCARICATO
		it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ErroriConsulenteType.Incaricato elementErroriConsulenteTypeIncaricato = objectFactory.createErroriConsulenteTypeIncaricato();
		elementErroriConsulenteTypeIncaricato.setPersonaFisica(objectFactory.createErroriConsulenteTypeIncaricatoPersonaFisica());

		boolean erroreIncaricato = false;
		if (incarico.getTerzo()==null ||incarico.getTerzo().getAnagrafico()==null){
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setCognome("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Terzo.");
		}	
		if (incarico.getTerzo().getAnagrafico().getCodice_fiscale()==null) {
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setCodiceFiscale("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Codice Fiscale Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getComune_nascita()==null) {
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setCodiceFiscale("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Comune Nascita Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getCognome()==null) {
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setCognome("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Cognome Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getNome()==null) {
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setNome("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Nome Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getDt_nascita()==null) {
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setDataNascita("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Data Nascita Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 
		if (incarico.getTerzo().getAnagrafico().getTi_sesso()==null) {
			erroreIncaricato = true;
			elementErroriConsulenteTypeIncaricato.getPersonaFisica().setSesso("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Tipo Sesso Terzo (Cod.Terzo: "+incarico.getTerzo().getCd_terzo()+").");
		} 

		//ERRORI INCARICO
		it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ErroriConsulenteType.Incarico elementErroriConsulenteTypeIncarico = objectFactory.createErroriConsulenteTypeIncarico();

		boolean erroreIncarico = false;
		if (incarico.getDt_inizio_validita()==null){
			erroreIncarico = true;
			elementErroriConsulenteTypeIncarico.setDataInizio("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Data Inizio.");
		}	
		if (incarico.getDt_fine_validita()==null){
			erroreIncarico = true;
			elementErroriConsulenteTypeIncarico.setDataFine("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Data Fine.");
		}	
		if (incarico.getUnita_organizzativa().getId_funzione_pubblica()==null) {
			erroreIncarico = true;
			elementErroriConsulenteTypeIncarico.setDescrizioneIncarico("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Codice Identificativo Funzione Pubblica sulla UO di appartenenza ("+incarico.getUnita_organizzativa().getCd_unita_organizzativa()+").");
		} 

		it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoConsulenteType esitoConsulentePerla = objectFactory.createEsitoConsulenteType();
		
		if (erroreIncaricato || erroreIncarico) {
			esitoConsulentePerla.setEsito(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.KO);
			esitoConsulentePerla.setErrori(objectFactory.createErroriConsulenteType());
			if (erroreIncaricato)
				esitoConsulentePerla.getErrori().setIncaricato(elementErroriConsulenteTypeIncaricato);
			if (erroreIncarico)
				esitoConsulentePerla.getErrori().setIncarico(elementErroriConsulenteTypeIncarico);
		} else {
			esitoConsulentePerla.setEsito(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.OK);
		}
			
		return esitoConsulentePerla;
	}

	private it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoConsulenteType getAnomalieModificaConsulentePerla(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory objectFactory, V_incarichi_elenco_fpBulk v_incarico) throws DatatypeConfigurationException{
		Incarichi_repertorioBulk incarico = v_incarico.getIncaricoRepertorio();

		//ERRORI INCARICO
		it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ErroriConsulenteType.Incarico elementErroriConsulenteTypeIncarico = objectFactory.createErroriConsulenteTypeIncarico();

		boolean erroreIncarico = false;
		if (incarico.getUnita_organizzativa().getId_funzione_pubblica()==null) {
			erroreIncarico = true;
			elementErroriConsulenteTypeIncarico.setDescrizioneIncarico("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Codice Identificativo Funzione Pubblica sulla UO di appartenenza ("+incarico.getUnita_organizzativa().getCd_unita_organizzativa()+").");
		} 

		it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoConsulenteType esitoConsulentePerla = objectFactory.createEsitoConsulenteType();
	
		if (erroreIncarico) {
			esitoConsulentePerla.setEsito(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoType.KO);
			esitoConsulentePerla.setErrori(objectFactory.createErroriConsulenteType());
			esitoConsulentePerla.getErrori().setIncarico(elementErroriConsulenteTypeIncarico);
		} else {
			esitoConsulentePerla.setEsito(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoType.OK);
		}
			
		return esitoConsulentePerla;
	}

	private EsitoComunicazione.Consulenti.ModificaIncarico getAnomalieModificaIncaricoFP(ObjectFactory objectFactory, V_incarichi_elenco_fpBulk v_incarico) throws DatatypeConfigurationException{
		EsitoComunicazione.Consulenti.ModificaIncarico modificaIncaricoAnomalia = objectFactory.createEsitoComunicazioneConsulentiModificaIncarico();

		modificaIncaricoAnomalia.setEsito(Esito.OK);

		Incarichi_repertorioBulk incarico = v_incarico.getIncaricoRepertorio();

		if (incarico.getUnita_organizzativa().getId_funzione_pubblica()==null) {
			modificaIncaricoAnomalia.setEsito(Esito.ERRATO);
			modificaIncaricoAnomalia.setErrDescrizioneIncarico("Incarico: "+incarico.getEsercizio()+"/"+incarico.getPg_repertorio()+" - Manca Codice Identificativo Funzione Pubblica sulla UO di appartenenza ("+incarico.getUnita_organizzativa().getCd_unita_organizzativa()+").");
		} 

		return modificaIncaricoAnomalia;
	}

	private Comunicazione.Consulenti.ModificaIncarico generaModificaIncaricoFP(ObjectFactory objectFactory, Incarichi_comunicati_fpBulk incaricoComunicatoFP, V_incarichi_elenco_fpBulk incaricoElenco) throws DatatypeConfigurationException{
		Comunicazione.Consulenti.NuovoIncarico nuovoIncarico=generaNuovoIncaricoFP(objectFactory,incaricoElenco);
		if (nuovoIncarico==null) return null;

		Comunicazione.Consulenti.ModificaIncarico modificaIncarico = objectFactory.createComunicazioneConsulentiModificaIncarico();
		modificaIncarico.setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));
		boolean isModificato=false;

		//verifico variazione
		if (!Utility.equalsNull(incaricoComunicatoFP.getAttivita_economica(), nuovoIncarico.getAttivitaEconomica())) {
			modificaIncarico.setAttivitaEconomica(nuovoIncarico.getAttivitaEconomica());
			isModificato=true;
		}
		/*eliminato per problemi legati ai caratteri accentati
		if (!Utility.equalsNull(incaricoComunicatoFP.getDescrizione_incarico(), nuovoIncarico.getDescrizioneIncarico())) {
			modificaIncarico.setDescrizioneIncarico(nuovoIncarico.getDescrizioneIncarico());
			isModificato=true;
		}
		*/
		if (!Utility.equalsNull(incaricoComunicatoFP.getModalita_acquisizione(), nuovoIncarico.getModalitaAcquisizione())) {
			modificaIncarico.setModalitaAcquisizione(nuovoIncarico.getModalitaAcquisizione());
			isModificato=true;
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getTipo_rapporto(), nuovoIncarico.getTipoRapporto())) {
			modificaIncarico.setTipoRapporto(nuovoIncarico.getTipoRapporto());
			isModificato=true;
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getVariazioni_incarico(), nuovoIncarico.getVariazioniIncarico())) {
			modificaIncarico.setVariazioniIncarico(nuovoIncarico.getVariazioniIncarico());
			isModificato=true;
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getDt_inizio(), new Timestamp(nuovoIncarico.getDataInizio().toGregorianCalendar().getTime().getTime()))) {
			modificaIncarico.setDataInizio(nuovoIncarico.getDataInizio());
			isModificato=true;
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getDt_fine(), new Timestamp(nuovoIncarico.getDataFine().toGregorianCalendar().getTime().getTime()))) {
			modificaIncarico.setDataFine(nuovoIncarico.getDataFine());
			isModificato=true;
		}
		if (!((incaricoComunicatoFP.getImporto_previsto()==null && nuovoIncarico.getImportoPrevisto()==null) ||
			  (incaricoComunicatoFP.getImporto_previsto()!=null && nuovoIncarico.getImportoPrevisto()!=null &&
			   incaricoComunicatoFP.getImporto_previsto().compareTo(nuovoIncarico.getImportoPrevisto())==0))) {
			modificaIncarico.setImportoPrevisto(nuovoIncarico.getImportoPrevisto());
			isModificato=true;
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getFl_saldo()==null?false:incaricoComunicatoFP.getFl_saldo(), nuovoIncarico.isSaldo())) {
			modificaIncarico.setSaldo(nuovoIncarico.isSaldo());
			isModificato=true;
		}
		if (isModificato) return modificaIncarico;
		return null;
	}

	private Comunicazione.Consulenti.NuovoIncarico generaNuovoIncaricoFP(ObjectFactory objectFactory, V_incarichi_elenco_fpBulk v_incarico) throws DatatypeConfigurationException{
		Incarichi_repertorioBulk incarico = v_incarico.getIncaricoRepertorio();

		java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");

		Comunicazione.Consulenti.NuovoIncarico elementNuovoIncarico = objectFactory.createComunicazioneConsulentiNuovoIncarico();
		
		//ANNO DI RIFERIMENTO
		Calendar dt_inizio = Calendar.getInstance();
		dt_inizio.setTime(incarico.getDt_inizio_validita());
		elementNuovoIncarico.setAnnoRiferimento(new Integer(dt_inizio.get(Calendar.YEAR)).intValue());

		//SEMESTRE DI RIFERIMENTO
		int semestreRiferimento;
		switch (dt_inizio.get(Calendar.MONTH)) {
			case Calendar.JANUARY:
				semestreRiferimento=1;
				break;
			case Calendar.FEBRUARY:
				semestreRiferimento=1;
				break;
			case Calendar.MARCH:
				semestreRiferimento=1;
				break;
			case Calendar.APRIL:
				semestreRiferimento=1;
				break;
			case Calendar.MAY:
				semestreRiferimento=1;
				break;
			case Calendar.JUNE:
				semestreRiferimento=1;
				break;
		default:
			semestreRiferimento=2;
			break;
		}

		elementNuovoIncarico.setSemestreRiferimento(semestreRiferimento);
		
		elementNuovoIncarico.setCodiceEnte(incarico.getUnita_organizzativa().getId_funzione_pubblica());

		//MODALITA' DI ACQUISIZIONE
		String modalitaAcquisizione; //DI NATURA DISCREZIONALE
		if (incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("626")>=0 ||
			incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("230")>=0 ||
			incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("NOTARIL")>=0 ||
			incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("NOTAI")>=0 ||
			incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("AUDIT")>=0)
			modalitaAcquisizione = "M3"; //PREVISTO DA NORME DI LEGGE
		else
			modalitaAcquisizione = "M1"; //DI NATURA DISCREZIONALE

		elementNuovoIncarico.setModalitaAcquisizione(modalitaAcquisizione);
		
		//TIPO DI RAPPORTO
		String tipoRapporto;
		if (incarico.getIncarichi_procedura().getTipo_incarico().getTipoRapporto().getFl_inquadramento().booleanValue())
			tipoRapporto="009"; //COLLABORAZIONE COORDINATA E CONTINUATIVA
		else
			tipoRapporto="008"; //PRESTAZIONE OCCASIONALE

		elementNuovoIncarico.setTipoRapporto(tipoRapporto);
		
		//ATTIVITA ECONOMICA
		String attivitaEconomica;
		if (incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("1") || //Studio
			incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("2") || //Ricerca
			incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("5") || //Studio - in attuazione di progetti di ricerca ed innovazione tecnologica 
			incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("6")) //Ricerca - in attuazione di progetti di ricerca ed innovazione tecnologica 
			attivitaEconomica="963"; //ATTIVITA' DI STUDIO E RICERCA
		else
			attivitaEconomica="956"; //ATTIVITA' DI CONSULENZA TECNICA

		elementNuovoIncarico.setAttivitaEconomica(attivitaEconomica);

		//DESCRIZIONE INCARICO //contiene anche i riferimenti normativi????
		StringBuffer descrizione = new StringBuffer();
		descrizione.append("("+incarico.getEsercizio()+'/'+incarico.getPg_repertorio()+")");
		descrizione.append(" - "+incarico.getIncarichi_procedura().getOggetto());
		elementNuovoIncarico.setDescrizioneIncarico(descrizione.length()>200?descrizione.substring(0, 199):descrizione.toString());
		
		//DATA INIZIO
		GregorianCalendar gcdi = new GregorianCalendar();
		gcdi.setTime(v_incarico.getDt_inizio_validita());
		elementNuovoIncarico.setDataInizio(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(gcdi.get(Calendar.YEAR), gcdi.get(Calendar.MONTH), gcdi.get(Calendar.DAY_OF_MONTH), 0, 0, 0)));
		
		//DATA FINE
		GregorianCalendar gcdf = new GregorianCalendar();
		gcdf.setTime(v_incarico.getDt_fine_validita_variazione()==null?v_incarico.getDt_fine_validita():v_incarico.getDt_fine_validita_variazione());
		elementNuovoIncarico.setDataFine(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(gcdf.get(Calendar.YEAR), gcdf.get(Calendar.MONTH), gcdf.get(Calendar.DAY_OF_MONTH), 0, 0, 0)));
		
		//RIFERIMENTO REGOLAMENTO
		elementNuovoIncarico.setRiferimentoRegolamento(true);

		//IMPORTO PREVISTO
		elementNuovoIncarico.setImportoPrevisto(v_incarico.getImporto_lordo_con_variazioni().setScale(2));
		
		//SALDO
		elementNuovoIncarico.setSaldo(false);
		
		//CREAZIONE TAG INCARICOPERSONA
		Comunicazione.Consulenti.NuovoIncarico.IncaricatoPersona elementIncaricatoPersona = objectFactory.createComunicazioneConsulentiNuovoIncaricoIncaricatoPersona();
		elementNuovoIncarico.setIncaricatoPersona(elementIncaricatoPersona);
	
		elementIncaricatoPersona.setTipologiaConsulente("P1");
			
		try{
			elementIncaricatoPersona.setCodiceFiscalePartitaIva(incarico.getTerzo().getAnagrafico().getCodice_fiscale());
		} catch (NullPointerException e){
		}

		//Se trattasi di consulente estero che ha il codice fiscale valorizzato metto il campo estero a "false" così come indicato dalla Dott.ssa Paola Sarti
		//della Funzione Pubblica altrimenti metto quello corretto
		boolean estero=false;
		if (elementIncaricatoPersona.getCodiceFiscalePartitaIva()==null ||
			elementIncaricatoPersona.getCodiceFiscalePartitaIva().length()!=16){
			try{
				elementIncaricatoPersona.setCodiceFiscalePartitaIva(null);
				estero = !NazioneBulk.ITALIA.equals(incarico.getTerzo().getAnagrafico().getComune_nascita().getTi_italiano_estero());
				elementIncaricatoPersona.setEstero(estero);
			} catch (NullPointerException e){
			}
		}
		elementIncaricatoPersona.setEstero(estero);

		try{
			elementIncaricatoPersona.setCognome(incarico.getTerzo().getAnagrafico().getCognome());
		} catch (NullPointerException e){
		}
			
		try{
			elementIncaricatoPersona.setNome(incarico.getTerzo().getAnagrafico().getNome());
		} catch (NullPointerException e){
		}
			
		try{
			if (estero || incarico.getTerzo().getAnagrafico().getDt_nascita()!=null)
				elementIncaricatoPersona.setDataNascita(formatter.format(incarico.getTerzo().getAnagrafico().getDt_nascita()).toString());
		} catch (NullPointerException e){
		}
			
		try{
			elementIncaricatoPersona.setSesso(incarico.getTerzo().getAnagrafico().getTi_sesso());
		} catch (NullPointerException e){
		}

		return elementNuovoIncarico;
	}
	
	private it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ConsulenteType generaNuovoConsulentePerla(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory objectFactory, V_incarichi_elenco_fpBulk v_incarico) throws DatatypeConfigurationException{
		Incarichi_repertorioBulk incarico = v_incarico.getIncaricoRepertorio();

		it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ConsulenteType elementConsulente = objectFactory.createConsulenteType();
		
		elementConsulente.setIdMittente(incarico.getEsercizio().toString()+'/'+incarico.getPg_repertorio().toString());

		/*
		 * CREAZIONE TAG INCARICO
		 */
		elementConsulente.setIncarico(objectFactory.createConsulenteTypeIncarico());
		
		//SEMESTRE DI RIFERIMENTO
		Calendar dt_inizio = Calendar.getInstance();
		dt_inizio.setTime(incarico.getDt_inizio_validita());
		int semestreRiferimento;
		switch (dt_inizio.get(Calendar.MONTH)) {
			case Calendar.JANUARY:
				semestreRiferimento=1;
				break;
			case Calendar.FEBRUARY:
				semestreRiferimento=1;
				break;
			case Calendar.MARCH:
				semestreRiferimento=1;
				break;
			case Calendar.APRIL:
				semestreRiferimento=1;
				break;
			case Calendar.MAY:
				semestreRiferimento=1;
				break;
			case Calendar.JUNE:
				semestreRiferimento=1;
				break;
		default:
			semestreRiferimento=2;
			break;
		}

		elementConsulente.getIncarico().setSemestreRiferimento(BigInteger.valueOf(semestreRiferimento));
		
		//MODALITA' DI ACQUISIZIONE
		String modalitaAcquisizione; //DI NATURA DISCREZIONALE
		if (incarico.getIncarichi_procedura().getTipo_prestazione()!=null && incarico.getIncarichi_procedura().getTipo_prestazione().getTipo_classificazione()!=null) {
			if (incarico.getIncarichi_procedura().getTipo_prestazione().getTipo_classificazione().equals(Tipo_prestazioneBulk.PREVISTA_DA_NORME_DI_LEGGE))
				modalitaAcquisizione = "1"; //PREVISTO DA NORME DI LEGGE
			else
				modalitaAcquisizione = "10"; //DI NATURA DISCREZIONALE
		} else {
			if (incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("626")>=0 ||
				incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("230")>=0 ||
				incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("NOTARIL")>=0 ||
				incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("NOTAI")>=0 ||
				incarico.getIncarichi_procedura().getOggetto().toUpperCase().indexOf("AUDIT")>=0)
				modalitaAcquisizione = "1"; //PREVISTO DA NORME DI LEGGE
			else
				modalitaAcquisizione = "10"; //DI NATURA DISCREZIONALE
		}
		
		elementConsulente.getIncarico().setModalitaAcquisizione(modalitaAcquisizione);
		
		//TIPO DI RAPPORTO
		String tipoRapporto;
		if (incarico.getIncarichi_procedura().getTipo_incarico().getTipoRapporto().getFl_inquadramento().booleanValue())
			tipoRapporto="2"; //COLLABORAZIONE COORDINATA E CONTINUATIVA
		else
			tipoRapporto="1"; //PRESTAZIONE OCCASIONALE

		elementConsulente.getIncarico().setTipoRapporto(tipoRapporto);
		
		//ATTIVITA ECONOMICA
		String attivitaEconomica;

		Incarichi_archivio_xml_fpBulk archivioXmlPerlaFP = (Incarichi_archivio_xml_fpBulk)getModel();
		if (archivioXmlPerlaFP.getEsercizio().compareTo(new Integer(2010)) == 1){
			if (incarico.getIncarichi_procedura().getTipo_attivita_fp()!=null && incarico.getIncarichi_procedura().getTipo_attivita_fp().getCd_tipo_attivita()!=null)
				attivitaEconomica=incarico.getIncarichi_procedura().getTipo_attivita_fp().getCd_tipo_attivita();
			else
				attivitaEconomica="74"; //ALTRE ATTIVITA' PROFESSIONALI, SCIENTIFICHE E TECNICHE
		} else {
			if (incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("1") || //Studio
				incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("2") || //Ricerca
				incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("5") || //Studio - in attuazione di progetti di ricerca ed innovazione tecnologica 
				incarico.getIncarichi_procedura().getTipo_attivita().getCd_tipo_attivita().equals("6")) //Ricerca - in attuazione di progetti di ricerca ed innovazione tecnologica 
				attivitaEconomica="963"; //ATTIVITA' DI STUDIO E RICERCA
			else
				attivitaEconomica="956"; //ATTIVITA' DI CONSULENZA TECNICA
		}

		elementConsulente.getIncarico().setAttivitaEconomica(attivitaEconomica);

		//DESCRIZIONE INCARICO //contiene anche i riferimenti normativi????
		StringBuffer descrizione = new StringBuffer();
		descrizione.append("("+incarico.getEsercizio()+'/'+incarico.getPg_repertorio()+")");
		descrizione.append(" - "+incarico.getIncarichi_procedura().getOggetto());
		elementConsulente.getIncarico().setDescrizioneIncarico(descrizione.length()>200?descrizione.substring(0, 199):descrizione.toString());
		
		//RIFERIMENTO REGOLAMENTO
		elementConsulente.getIncarico().setRiferimentoRegolamento(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.YesNoType.N);

		//RIFERIMENTO NORMATIVO
		if (incarico.getIncarichi_procedura().getFl_applicazione_norma().equals(Boolean.TRUE) && !incarico.getIncarichi_procedura().getCd_tipo_norma_perla().equals("999")) {
			RiferimentoNormativo riferimentoNormativo = objectFactory.createConsulenteTypeIncaricoRiferimentoNormativo();
			riferimentoNormativo.setArticolo(incarico.getIncarichi_procedura().getTipo_norma_perla().getArticolo_tipo_norma());
			riferimentoNormativo.setComma(incarico.getIncarichi_procedura().getTipo_norma_perla().getComma_tipo_norma());
			riferimentoNormativo.setNumero(incarico.getIncarichi_procedura().getTipo_norma_perla().getNumero_tipo_norma());
			//DATA
			GregorianCalendar dtRif = new GregorianCalendar();
			dtRif.setTime(incarico.getIncarichi_procedura().getTipo_norma_perla().getDt_tipo_norma());
			riferimentoNormativo.setData(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(dtRif.get(Calendar.YEAR), dtRif.get(Calendar.MONTH), dtRif.get(Calendar.DAY_OF_MONTH))));
			riferimentoNormativo.setRiferimento(new BigInteger(incarico.getIncarichi_procedura().getTipo_norma_perla().getCd_tipo_norma_perla()));
			elementConsulente.getIncarico().setRiferimentoNormativo(riferimentoNormativo);
		}

		//DATA AFFIDAMENTO
		GregorianCalendar gcds = new GregorianCalendar(), dtLimite = new GregorianCalendar();
		
		if (archivioXmlPerlaFP.getSemestre().equals(Incarichi_archivio_xml_fpBulk.PRIMO_SEMESTRE))
			dtLimite = new GregorianCalendar((archivioXmlPerlaFP.getEsercizio()-1),GregorianCalendar.JULY,new Integer(1));
		else
			dtLimite = new GregorianCalendar(archivioXmlPerlaFP.getEsercizio(),GregorianCalendar.JANUARY,new Integer(1));

		if (v_incarico.getDt_stipula().before(dtLimite.getTime()) && dtLimite.getTime().before(v_incarico.getDt_inizio_validita()))
			gcds.setTime(dtLimite.getTime());
		else
			gcds.setTime(v_incarico.getDt_stipula());

		elementConsulente.getIncarico().setDataAffidamento(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(gcds.get(Calendar.YEAR), gcds.get(Calendar.MONTH), gcds.get(Calendar.DAY_OF_MONTH))));

		//DATA INIZIO
		GregorianCalendar gcdi = new GregorianCalendar();
		gcdi.setTime(v_incarico.getDt_inizio_validita());
		elementConsulente.getIncarico().setDataInizio(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(gcdi.get(Calendar.YEAR), gcdi.get(Calendar.MONTH), gcdi.get(Calendar.DAY_OF_MONTH))));
		
		//DATA FINE
		GregorianCalendar gcdf = new GregorianCalendar();
		gcdf.setTime(v_incarico.getDt_fine_validita_variazione()==null?v_incarico.getDt_fine_validita():v_incarico.getDt_fine_validita_variazione());
		elementConsulente.getIncarico().setDataFine(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(gcdf.get(Calendar.YEAR), gcdf.get(Calendar.MONTH), gcdf.get(Calendar.DAY_OF_MONTH))));
		
		//INCARICO_SALDATO
		elementConsulente.getIncarico().setIncaricoSaldato(BigInteger.valueOf(2));  //NO

		//TIPO_IMPORTO
		elementConsulente.getIncarico().setTipoImporto(BigInteger.valueOf(1));  //PREVISTO

		//IMPORTO
		elementConsulente.getIncarico().setImporto(v_incarico.getImporto_lordo_con_variazioni().setScale(2));
		
		//NOTE
		elementConsulente.getIncarico().setNote(null);
		
		/*
		 * CREAZIONE TAG INCARICATO
		 */
		elementConsulente.setIncaricato(objectFactory.createConsulenteTypeIncaricato());
		elementConsulente.getIncaricato().setPersonaFisica(objectFactory.createConsulenteTypeIncaricatoPersonaFisica());

		//CODICE FISCALE
		try{
			elementConsulente.getIncaricato().getPersonaFisica().setCodiceFiscale(incarico.getTerzo().getAnagrafico().getCodice_fiscale());
		} catch (NullPointerException e){
		}
	
		//PARTITA IVA
		try{
			if (elementConsulente.getIncaricato().getPersonaFisica().getCodiceFiscale()==null)
				elementConsulente.getIncaricato().getPersonaFisica().setPartitaIva(incarico.getTerzo().getAnagrafico().getPartita_iva());
		} catch (NullPointerException e){
		}
		
		//COGNOME
		try{
			elementConsulente.getIncaricato().getPersonaFisica().setCognome(incarico.getTerzo().getAnagrafico().getCognome());
		} catch (NullPointerException e){
		}
			
		//NOME
		try{
			elementConsulente.getIncaricato().getPersonaFisica().setNome(incarico.getTerzo().getAnagrafico().getNome());
		} catch (NullPointerException e){
		}

		//ESTERO
		//Se trattasi di consulente estero che ha il codice fiscale valorizzato metto il campo estero a "false" così come indicato dalla Dott.ssa Paola Sarti
		//della Funzione Pubblica altrimenti metto quello corretto
		boolean estero=false;
		if (elementConsulente.getIncaricato().getPersonaFisica().getCodiceFiscale()==null ||
			elementConsulente.getIncaricato().getPersonaFisica().getCodiceFiscale().length()!=16){
			try{
				elementConsulente.getIncaricato().getPersonaFisica().setCodiceFiscale(null);
				estero = !NazioneBulk.ITALIA.equals(incarico.getTerzo().getAnagrafico().getComune_nascita().getTi_italiano_estero());
			} catch (NullPointerException e){
			}
		}
		elementConsulente.getIncaricato().getPersonaFisica().setEstero(estero?it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.YesNoType.Y
				                                                             :it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.YesNoType.N);

		//SESSO
		try{
			elementConsulente.getIncaricato().getPersonaFisica().setSesso(incarico.getTerzo().getAnagrafico().getTi_sesso().equals("M")?it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.SessoType.M
					                 																								   :it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.SessoType.F);
		} catch (NullPointerException e){
		}
			
		//DATA NASCITA
		try{
			if (estero || incarico.getTerzo().getAnagrafico().getDt_nascita()!=null) {
				GregorianCalendar gcdn = new GregorianCalendar();
				gcdn.setTime(incarico.getTerzo().getAnagrafico().getDt_nascita());
				elementConsulente.getIncaricato().getPersonaFisica().setDataNascita(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(gcdn.get(Calendar.YEAR), gcdn.get(Calendar.MONTH), gcdn.get(Calendar.DAY_OF_MONTH))));
			}
		} catch (NullPointerException e){
		}
		return elementConsulente;
	}

	private it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType generaModificaConsulentePerla(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory objectFactoryUpd, it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory objectFactoryAdd, Incarichi_comunicati_fpBulk incaricoComunicatoFP, V_incarichi_elenco_fpBulk incaricoElenco) throws DatatypeConfigurationException{
		it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ConsulenteType elementNuovoConsulentePerla = generaNuovoConsulentePerla(objectFactoryAdd,incaricoElenco);
		if (elementNuovoConsulentePerla==null) return null;

		it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType elementModificaConsulentePerla = objectFactoryUpd.createConsulenteType();

		elementModificaConsulentePerla.setIdMittente(incaricoComunicatoFP.getEsercizio_repertorio().toString()+'/'+incaricoComunicatoFP.getPg_repertorio().toString());

		elementModificaConsulentePerla.setIncarico(objectFactoryUpd.createConsulenteTypeIncarico());

		elementModificaConsulentePerla.getIncarico().setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));

		boolean isModificato=false;

		//verifico variazione
		if (incaricoComunicatoFP.getAnno_riferimento().compareTo(Integer.valueOf(2010))==1 || 
			(incaricoComunicatoFP.getAnno_riferimento().compareTo(Integer.valueOf(2010))==0 && incaricoComunicatoFP.getSemestre_riferimento().equals(Incarichi_archivio_xml_fpBulk.SECONDO_SEMESTRE))) {
			/*eliminato perchè nel file di ritorno PERLA non restituisce il valore con la conseguenza che ricreando i file
			 * di modifica li reimposta tutti
			if (incaricoComunicatoFP.getAttivita_economica()!="74" &&
				!Utility.equalsNull(incaricoComunicatoFP.getAttivita_economica(), elementNuovoConsulentePerla.getIncarico().getAttivitaEconomica())) {
				elementModificaConsulentePerla.getIncarico().setAttivitaEconomica(elementNuovoConsulentePerla.getIncarico().getAttivitaEconomica());
				isModificato=true;
			}
			*/
			/*eliminato per problemi legati ai caratteri accentati
			if (!Utility.equalsNull(incaricoComunicatoFP.getDescrizione_incarico(), elementNuovoConsulentePerla.getIncarico().getDescrizioneIncarico())) {
				elementModificaConsulentePerla.getIncarico().setDescrizioneIncarico(elementNuovoConsulentePerla.getIncarico().getDescrizioneIncarico());
				isModificato=true;	
			}
			*/
			if (!Utility.equalsNull(incaricoComunicatoFP.getModalita_acquisizione(), elementNuovoConsulentePerla.getIncarico().getModalitaAcquisizione())) {
				elementModificaConsulentePerla.getIncarico().setModalitaAcquisizione(elementNuovoConsulentePerla.getIncarico().getModalitaAcquisizione());
				isModificato=true;
			}
			if (!Utility.equalsNull(incaricoComunicatoFP.getTipo_rapporto(), elementNuovoConsulentePerla.getIncarico().getTipoRapporto())) {
				elementModificaConsulentePerla.getIncarico().setTipoRapporto(elementNuovoConsulentePerla.getIncarico().getTipoRapporto());
				isModificato=true;
			}
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getDt_fine(), new Timestamp(elementNuovoConsulentePerla.getIncarico().getDataFine().toGregorianCalendar().getTime().getTime()))) {
			elementModificaConsulentePerla.getIncarico().setDataFine(elementNuovoConsulentePerla.getIncarico().getDataFine());
			isModificato=true;
		}
		if (!((incaricoComunicatoFP.getImporto_previsto()==null && elementNuovoConsulentePerla.getIncarico().getImporto()==null) ||
			  (incaricoComunicatoFP.getImporto_previsto()!=null && elementNuovoConsulentePerla.getIncarico().getImporto()!=null &&
			   incaricoComunicatoFP.getImporto_previsto().compareTo(elementNuovoConsulentePerla.getIncarico().getImporto())==0))) {
			elementModificaConsulentePerla.getIncarico().setImporto(elementNuovoConsulentePerla.getIncarico().getImporto());
			isModificato=true;
		}
		if (!Utility.equalsNull(incaricoComunicatoFP.getFl_saldo()==null?BigInteger.valueOf(2):(incaricoComunicatoFP.getFl_saldo()?BigInteger.valueOf(1):BigInteger.valueOf(2)), elementNuovoConsulentePerla.getIncarico().getIncaricoSaldato())) {
			elementModificaConsulentePerla.getIncarico().setIncaricoSaldato(elementNuovoConsulentePerla.getIncarico().getIncaricoSaldato());
			isModificato=true;
		}
		if (isModificato) return elementModificaConsulentePerla;
		return null;
	}

	public void generaXML(ActionContext context) throws BusinessProcessException {
      try{
            Incarichi_archivio_xml_fpBulk archivioXmlFP = (Incarichi_archivio_xml_fpBulk)getModel();
                 
            if (archivioXmlFP==null || archivioXmlFP.getEsercizio()==null || 
            	archivioXmlFP.getSemestre()==null || archivioXmlFP.getTipo_estrazione_pagamenti()==null ||
                (!archivioXmlFP.isFl_crea_file_da_file() && archivioXmlFP.getDt_calcolo()==null)||
                (archivioXmlFP.isFl_crea_file_modifiche() && (archivioXmlFP.getEsercizio_inizio()==null||archivioXmlFP.getSemestre_inizio()==null))) {
               setMessage("Valorizzare tutti i campi di selezione per effettuare l'estrazione.");
               return;
            } else if (archivioXmlFP.isFl_crea_file_da_file()){
               archivioXmlFP.setFile_ric_err(((it.cnr.jada.action.HttpActionContext)context).getMultipartParameter("main.blob_ric_err").getFile());
               if ((archivioXmlFP.getFile_ric_err() == null || archivioXmlFP.getFile_ric_err().getName().equals(""))) {
                  setMessage("Indicare il file di risposta con errori della Funzione Pubblica dal quale estrarre solo gli incarichi corretti.");
                  return;
               }
            }
  
			ConsultazioniBP newBp = null; 
			if (!archivioXmlFP.isFl_crea_file_da_file()) 
				newBp = getConsIncarichiEstrazioneFpBP(context);
		    else {
		    	CompoundFindClause clauses = getCompoundFindClause(context, archivioXmlFP.getFile_ric_err());
		    	if (clauses.getClauses().hasMoreElements())
			    	newBp = getConsIncarichiEstrazioneFpBP(context, getCompoundFindClause(context, archivioXmlFP.getFile_ric_err()));
		    	else {
					setMessage("File indicato senza incarichi corretti. Estrazione non effettuata.");
		    		return;
		    	}
		    }

			if (newBp!=null){
				if (newBp.getIterator()==null || newBp.getIterator().countElements()==0)
					newBp.openIterator(context);
				if (archivioXmlFP.isFl_crea_file_perla())
					generaXMLPerla(context, newBp.getIterator());
				else
					generaXML(context, newBp.getIterator());
				if (((Incarichi_archivio_xml_fpBulk)getModel()).getPathFileZip()==null) {
					setMessage("Nessun Incarico da estrarre. File non prodotto.");
		    		return;
				}
			}
			EJBCommonServices.closeRemoteIterator(context, newBp.detachIterator());
		} catch (Exception e){
			throw handleException(e);
		}
	}

	public ConsultazioniBP getConsIncarichiEstrazioneFpBP(ActionContext context) throws BusinessProcessException {
		Incarichi_archivio_xml_fpBulk archivioXmlFP = (Incarichi_archivio_xml_fpBulk)getModel();

		CompoundFindClause clauses = new CompoundFindClause();
		
		try{
			Timestamp dt_inizio = null, dt_fine = null;
			java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");		
	
			if (archivioXmlFP.isFl_crea_file_modifiche()){
				if (archivioXmlFP.getSemestre_inizio().equals(Incarichi_archivio_xml_fpBulk.PRIMO_SEMESTRE))
					dt_inizio = new Timestamp(sdf.parse("01/01/"+archivioXmlFP.getEsercizio_inizio().intValue()).getTime());
				else
					dt_inizio = new Timestamp(sdf.parse("01/07/"+archivioXmlFP.getEsercizio_inizio().intValue()).getTime());
			} else {				
				if (archivioXmlFP.getSemestre().equals(Incarichi_archivio_xml_fpBulk.PRIMO_SEMESTRE))
					dt_inizio = new Timestamp(sdf.parse("01/01/"+archivioXmlFP.getEsercizio().intValue()).getTime());
				else
					dt_inizio = new Timestamp(sdf.parse("01/07/"+archivioXmlFP.getEsercizio().intValue()).getTime());
			}
			if (archivioXmlFP.getSemestre().equals(Incarichi_archivio_xml_fpBulk.PRIMO_SEMESTRE))
				dt_fine = new Timestamp(sdf.parse("30/06/"+archivioXmlFP.getEsercizio().intValue()).getTime());
			else
				dt_fine = new Timestamp(sdf.parse("31/12/"+archivioXmlFP.getEsercizio().intValue()).getTime());			

			
			if (archivioXmlFP.getDt_calcolo().equals(Incarichi_archivio_xml_fpBulk.DATA_STIPULA)) {
				clauses.addClause("AND","dt_stipula",SQLBuilder.GREATER_EQUALS,dt_inizio);
				clauses.addClause("AND","dt_stipula",SQLBuilder.LESS_EQUALS,dt_fine);
			} else {
				clauses.addClause("AND","dt_inizio_validita",SQLBuilder.GREATER_EQUALS,dt_inizio);
				clauses.addClause("AND","dt_inizio_validita",SQLBuilder.LESS_EQUALS,dt_fine);
			}				
		} catch(Throwable e) {
			throw handleException(e);
		}
		
		return getConsIncarichiEstrazioneFpBP(context, clauses);
	}

	private ConsultazioniBP getConsIncarichiEstrazioneFpBP(ActionContext context, CompoundFindClause clauses) throws BusinessProcessException {
		ConsultazioniBP newBp=null;
		try{
			Incarichi_archivio_xml_fpBulk archivioXmlFP = (Incarichi_archivio_xml_fpBulk)getModel();
			
			if (archivioXmlFP.getEsercizio()!=null && archivioXmlFP.getSemestre()!=null && archivioXmlFP.getDt_calcolo()!=null) {
				newBp = (ConsultazioniBP)context.getUserInfo().createBusinessProcess(
						context,
						"ConsIncarichiEstrazioneFpBP",
						new Object[] {
							"V"
						}
				);
				newBp.setBaseclause(clauses);
			}
		} catch(Throwable e) {
			throw handleException(e);
		}
		return newBp;
	}

	private CompoundFindClause getCompoundFindClause(ActionContext context, File fileErr) throws BusinessProcessException {
		try{
			CompoundFindClause clauses = new CompoundFindClause();
			IncarichiEstrazioneFpComponentSession comp = (IncarichiEstrazioneFpComponentSession)createComponentSession("CNRINCARICHI00_EJB_IncarichiEstrazioneFpComponentSession", IncarichiEstrazioneFpComponentSession.class);
			
			if (getModel()!=null && ((Incarichi_archivio_xml_fpBulk)getModel()).isFl_crea_file_da_file()) {
				JAXBContext jc = JAXBContext.newInstance(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory.class, it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory.class, it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.ObjectFactory.class);

				it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType esitoComunicazione = ((JAXBElement)jc.createUnmarshaller().unmarshal(fileErr)).getValue();
				
				for (Iterator iterator = esitoComunicazione.getEsitoInserimentoIncarichi().getEsitoNuoviIncarichi().getConsulente().iterator(); iterator.hasNext();) {
					it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoConsulenteType nuovoConsulenteEsito = (it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoConsulenteType) iterator.next();

					if (nuovoConsulenteEsito.getEsito().equals(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.OK)) {
						int esercizio_repertorio = new Integer(nuovoConsulenteEsito.getIdMittente().substring(0,4)); 
						Long pg_repertorio = new Long(nuovoConsulenteEsito.getIdMittente().substring(5)); 
						CompoundFindClause parzClause = new CompoundFindClause();
						parzClause.setLogicalOperator(FindClause.OR);
						parzClause.addClause(FindClause.AND,"esercizio",SQLBuilder.EQUALS,esercizio_repertorio);
						parzClause.addClause(FindClause.AND,"pg_repertorio",SQLBuilder.EQUALS,pg_repertorio);
						clauses.addChild(parzClause);
					}
				}
			} else {
				JAXBContext jc = JAXBContext.newInstance("it.cnr.contab.incarichi00.xmlfp");
				
				EsitoComunicazione esitoComunicazione = (EsitoComunicazione)jc.createUnmarshaller().unmarshal(fileErr);
	
				for (Iterator iterator = esitoComunicazione.getConsulenti().getNuovoIncarico().iterator(); iterator.hasNext();) {
					EsitoComunicazione.Consulenti.NuovoIncarico nuovoIncarico = (EsitoComunicazione.Consulenti.NuovoIncarico) iterator.next();
					boolean estrai = true;
					if (nuovoIncarico.getEsito().equals(Esito.ERRATO) || 
						(nuovoIncarico.getIncaricatoPersona()!=null && nuovoIncarico.getIncaricatoPersona().getEsito().equals(Esito.ERRATO))) {
						estrai = false;
					}
					if (estrai) {
						for (Iterator iteratorPag = nuovoIncarico.getNuovoPagamento().iterator(); iteratorPag.hasNext();) {
							EsitoComunicazione.Consulenti.NuovoIncarico.NuovoPagamento pagamento = (EsitoComunicazione.Consulenti.NuovoIncarico.NuovoPagamento) iteratorPag.next();
							if (pagamento.getEsito().equals(Esito.ERRATO)){
								estrai=false;
								break;
							}
						}
					}
					if (estrai) {
						int esercizio_repertorio = new Integer(nuovoIncarico.getDescrizioneIncarico().substring(1,5)); 
						Long pg_repertorio = new Long(nuovoIncarico.getDescrizioneIncarico().substring(6,nuovoIncarico.getDescrizioneIncarico().indexOf(")"))); 
						CompoundFindClause parzClause = new CompoundFindClause();
						parzClause.setLogicalOperator(FindClause.OR);
						parzClause.addClause(FindClause.AND,"esercizio",SQLBuilder.EQUALS,esercizio_repertorio);
						parzClause.addClause(FindClause.AND,"pg_repertorio",SQLBuilder.EQUALS,pg_repertorio);
						clauses.addChild(parzClause);
					}
				}
	
				for (Iterator iterator = esitoComunicazione.getConsulenti().getModificaIncarico().iterator(); iterator.hasNext();) {
					EsitoComunicazione.Consulenti.ModificaIncarico modificaIncarico = (EsitoComunicazione.Consulenti.ModificaIncarico) iterator.next();
					boolean estrai = true;
					if (modificaIncarico.getEsito().equals(Esito.ERRATO))
						estrai = false;
					if (estrai) {
						for (Iterator iteratorPag = modificaIncarico.getNuovoPagamento().iterator(); iteratorPag.hasNext();) {
							EsitoComunicazione.Consulenti.ModificaIncarico.NuovoPagamento pagamento = (EsitoComunicazione.Consulenti.ModificaIncarico.NuovoPagamento) iteratorPag.next();
							if (pagamento.getEsito().equals(Esito.ERRATO)){
								estrai=false;
								break;
							}
						}
					}
					if (estrai) {
						for (Iterator iteratorPag = modificaIncarico.getModificaPagamento().iterator(); iteratorPag.hasNext();) {
							EsitoComunicazione.Consulenti.ModificaIncarico.ModificaPagamento pagamento = (EsitoComunicazione.Consulenti.ModificaIncarico.ModificaPagamento) iteratorPag.next();
							if (pagamento.getEsito().equals(Esito.ERRATO)){
								estrai=false;
								break;
							}
						}
					}
					if (estrai) {
						for (Iterator iteratorPag = modificaIncarico.getCancellaPagamento().iterator(); iteratorPag.hasNext();) {
							EsitoComunicazione.Consulenti.ModificaIncarico.CancellaPagamento pagamento = (EsitoComunicazione.Consulenti.ModificaIncarico.CancellaPagamento) iteratorPag.next();
							if (pagamento.getEsito().equals(Esito.ERRATO)){
								estrai=false;
								break;
							}
						}
					}
					if (estrai) {
						Incarichi_comunicati_fpBulk incarico = new Incarichi_comunicati_fpBulk();
						incarico.setId_incarico(Long.toString(modificaIncarico.getId()));
						
						Incarichi_comunicati_fpBulk incaricoAgg = comp.getIncarichiComunicatiAggFP(context.getUserContext(), incarico); 
						CompoundFindClause parzClause = new CompoundFindClause();
						parzClause.addClause(FindClause.AND,"esercizio",SQLBuilder.EQUALS,incaricoAgg.getEsercizio_repertorio());
						parzClause.addClause(FindClause.AND,"pg_repertorio",SQLBuilder.LESS_EQUALS,incaricoAgg.getPg_repertorio());
						clauses.or(clauses, parzClause);
					}
				}
	
				for (Iterator iterator = esitoComunicazione.getConsulenti().getCancellaIncarico().iterator(); iterator.hasNext();) {
					EsitoComunicazione.Consulenti.CancellaIncarico cancellaIncarico = (EsitoComunicazione.Consulenti.CancellaIncarico) iterator.next();
					boolean estrai = true;
					if (cancellaIncarico.getEsito().equals(Esito.ERRATO))
						estrai = false;
					if (estrai) {
						Incarichi_comunicati_fpBulk incarico = new Incarichi_comunicati_fpBulk();
						incarico.setId_incarico(Long.toString(cancellaIncarico.getId()));
						
						Incarichi_comunicati_fpBulk incaricoAgg = comp.getIncarichiComunicatiAggFP(context.getUserContext(), incarico); 
						CompoundFindClause parzClause = new CompoundFindClause();
						parzClause.addClause(FindClause.AND,"esercizio",SQLBuilder.EQUALS,incaricoAgg.getEsercizio_repertorio());
						parzClause.addClause(FindClause.AND,"pg_repertorio",SQLBuilder.LESS_EQUALS,incaricoAgg.getPg_repertorio());
						clauses.or(clauses, parzClause);
					}
				}
			}
			return clauses;
		} catch (Exception e){
			throw handleException(e);
		}
	}

	public void generaXML(ActionContext context, RemoteIterator sourceIterator) throws BusinessProcessException {
		try{
			List arraylist = new ArrayList();
	        sourceIterator.moveTo(0);
			while(sourceIterator.hasMoreElements()) 
				arraylist.add((V_incarichi_elenco_fpBulk)sourceIterator.nextElement());
			
			generaXML(context, arraylist);
			EJBCommonServices.closeRemoteIterator(context, sourceIterator);
		} catch (Exception e){
			throw handleException(e);
		}
	}

	public void generaXML(ActionContext context, List list) throws BusinessProcessException {
		try{
			Incarichi_archivio_xml_fpBulk archivioXmlFP = (Incarichi_archivio_xml_fpBulk)getModel();
			archivioXmlFP.setMapFileNuovoIncaricoXML(new HashMap());
			archivioXmlFP.setMapFileModificaIncaricoXML(new HashMap());
			archivioXmlFP.setMapFileCancellaIncaricoXML(new HashMap());
			archivioXmlFP.setMapFileAnomalieNuovoIncaricoXML(new HashMap());
			archivioXmlFP.setMapFileAnomalieModificaIncaricoXML(new HashMap());
			archivioXmlFP.setMapFileAnomalieCancellaIncaricoXML(new HashMap());
			archivioXmlFP.setPathFileZip(null);			

			List listFileNuovoIncaricoXML=new ArrayList();
			List listFileModificaIncaricoXML=new ArrayList();
			List listFileCancellaIncaricoXML=new ArrayList();
			List listFileAnomalieNuovoIncaricoXML=new ArrayList();
			List listFileAnomalieModificaIncaricoXML=new ArrayList();

			JAXBContext jc = JAXBContext.newInstance("it.cnr.contab.incarichi00.xmlfp");
			ObjectFactory obj = new ObjectFactory();
			IncarichiEstrazioneFpComponentSession comp = (IncarichiEstrazioneFpComponentSession)createComponentSession("CNRINCARICHI00_EJB_IncarichiEstrazioneFpComponentSession", IncarichiEstrazioneFpComponentSession.class);

			List elencoNuoviIncarichi = new ArrayList();
			List elencoModificheIncarichi = new ArrayList();
			List elencoCancellaIncarichi = new ArrayList();
			
			List elencoAnomalieNuoviIncarichi = new ArrayList(); 
			List elencoAnomalieModificheIncarichi = new ArrayList(); 

			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
				V_incarichi_elenco_fpBulk incaricoElenco = (V_incarichi_elenco_fpBulk)iterator.next();
				incaricoElenco = comp.completaIncaricoElencoFP(context.getUserContext(), incaricoElenco);
					
				Incarichi_comunicati_fpBulk incaricoComunicatoFP = comp.getIncarichiComunicatiAggFP(context.getUserContext(), incaricoElenco);

				if (incaricoComunicatoFP==null || incaricoComunicatoFP.getId_incarico()==null) {
					EsitoComunicazione.Consulenti.NuovoIncarico nuovoIncaricoAnomalia=getAnomalieNuovoIncaricoFP(obj,incaricoElenco);
					if (nuovoIncaricoAnomalia.getEsito().equals(Esito.OK)){
						Comunicazione.Consulenti.NuovoIncarico elementNuovoIncarico=generaNuovoIncaricoFP(obj,incaricoElenco);
						if (elementNuovoIncarico!=null) {
							if (elementNuovoIncarico.getImportoPrevisto().compareTo(BigDecimal.ZERO)!=0) {
								if (archivioXmlFP.getTipo_estrazione_pagamenti().equals(Incarichi_archivio_xml_fpBulk.PAGAMENTI_INCLUDI)){
									//CREAZIONE TAG PAGAMENTO
									List listPagamenti = comp.getPagatoPerSemestre(context.getUserContext(), incaricoElenco.getIncaricoRepertorio());
									for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
										Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDetBulk = (Incarichi_comunicati_fp_detBulk) iterator2.next();
										Comunicazione.Consulenti.NuovoIncarico.NuovoPagamento elementNuovoPagamento = obj.createComunicazioneConsulentiNuovoIncaricoNuovoPagamento();
										elementNuovoPagamento.setAnno(incarichiComunicatiFpDetBulk.getAnno_pag());
										elementNuovoPagamento.setSemestre(incarichiComunicatiFpDetBulk.getSemestre_pag());
										elementNuovoPagamento.setImporto(incarichiComunicatiFpDetBulk.getImporto_pag().setScale(2));
										elementNuovoIncarico.getNuovoPagamento().add(elementNuovoPagamento);
									}
								}
								elencoNuoviIncarichi.add(elementNuovoIncarico);
							}
						} else {
							nuovoIncaricoAnomalia = obj.createEsitoComunicazioneConsulentiNuovoIncarico();
							nuovoIncaricoAnomalia.setErrDescrizioneIncarico("AnomaliaIncarico: "+incaricoElenco.getEsercizio().toString()+"/"+incaricoElenco.getPg_repertorio().toString());
							elencoAnomalieNuoviIncarichi.add(nuovoIncaricoAnomalia);
						}
					} else
						elencoAnomalieNuoviIncarichi.add(nuovoIncaricoAnomalia);
				} else {
					//AGGIORNAMENTO COMUNICAZIONE
					EsitoComunicazione.Consulenti.ModificaIncarico modificaIncaricoAnomalia=getAnomalieModificaIncaricoFP(obj,incaricoElenco);
					if (modificaIncaricoAnomalia.getEsito().equals(Esito.OK)){
						Comunicazione.Consulenti.ModificaIncarico elementModificaIncarico=generaModificaIncaricoFP(obj,incaricoComunicatoFP,incaricoElenco);
						if (archivioXmlFP.getTipo_estrazione_pagamenti().equals(Incarichi_archivio_xml_fpBulk.PAGAMENTI_INCLUDI)){
							//AGGIUNGO MODIFICHE PAGAMENTI
							List listPagamenti = comp.getPagatoPerSemestre(context.getUserContext(), incaricoElenco.getIncaricoRepertorio());
							elementModificaIncarico=generaPagamentiPerModificaIncaricoFP(obj, incaricoComunicatoFP, elementModificaIncarico, listPagamenti);
						}
						if (elementModificaIncarico!=null)
							elencoModificheIncarichi.add(elementModificaIncarico);
					} else {
						modificaIncaricoAnomalia.setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));
						elencoAnomalieModificheIncarichi.add(modificaIncaricoAnomalia);
					}
				}
			}
			
			List incarichiDaEliminare = comp.getIncarichiComunicatiEliminatiFP(context.getUserContext(), archivioXmlFP.getEsercizio(),archivioXmlFP.getSemestre());

			for (Iterator iterator = incarichiDaEliminare.iterator(); iterator.hasNext();) {
				Incarichi_comunicati_fpBulk incaricoComunicatoFP = iterator.next();
				if (incaricoComunicatoFP.getId_incarico()!=null) {
					Comunicazione.Consulenti.CancellaIncarico elementCancellaIncarico = obj.createComunicazioneConsulentiCancellaIncarico();
					elementCancellaIncarico.setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));
					elencoCancellaIncarichi.add(elementCancellaIncarico);					
				}
			}
			
			//creo i file dei nuovi incarichi
			Comunicazione currentComunicazione = null;

			int nrFile=0, nrRighe=0;

			boolean creaNewFile=true;
			for (Iterator iterator = elencoNuoviIncarichi.iterator(); iterator.hasNext();) {
				if (creaNewFile) {
					currentComunicazione = obj.createComunicazione();
					Comunicazione.Consulenti elementConsulenti = obj.createComunicazioneConsulenti();
					currentComunicazione.setConsulenti(elementConsulenti);
					nrRighe=0;
					creaNewFile=false;
				}

				while(iterator.hasNext() && nrRighe iterator = elencoModificheIncarichi.iterator(); iterator.hasNext();) {
				if (creaNewFile) {
					currentComunicazione = obj.createComunicazione();
					Comunicazione.Consulenti elementConsulenti = obj.createComunicazioneConsulenti();
					currentComunicazione.setConsulenti(elementConsulenti);
					nrRighe=0;
					creaNewFile=false;
				}

				while(iterator.hasNext() && nrRighe iterator = elencoCancellaIncarichi.iterator(); iterator.hasNext();) {
				if (creaNewFile) {
					currentComunicazione = obj.createComunicazione();
					Comunicazione.Consulenti elementConsulenti = obj.createComunicazioneConsulenti();
					currentComunicazione.setConsulenti(elementConsulenti);
					nrRighe=0;
					creaNewFile=false;
				}

				while(iterator.hasNext() && nrRighe> hashFileIncaricoXML=new Hashtable>();
			
			if (!(listFileNuovoIncaricoXML.isEmpty() && listFileModificaIncaricoXML.isEmpty() && listFileCancellaIncaricoXML.isEmpty() && 
			 	  listFileAnomalieNuovoIncaricoXML.isEmpty() && listFileAnomalieModificaIncaricoXML.isEmpty())) {
				hashFileIncaricoXML.put("Incarichi Nuovi", listFileNuovoIncaricoXML);
				hashFileIncaricoXML.put("Incarichi Modificati", listFileModificaIncaricoXML);
				hashFileIncaricoXML.put("Incarichi Cancellati", listFileCancellaIncaricoXML);
				hashFileIncaricoXML.put("Anomalie Incarichi Nuovi", listFileAnomalieNuovoIncaricoXML);
				hashFileIncaricoXML.put("Anomalie Incarichi Modificati", listFileAnomalieModificaIncaricoXML);
	
				String fileName = "EstrazioneIncarichiFp"+archivioXmlFP.getEsercizio()+archivioXmlFP.getSemestre()+".zip";
				creaFileZip(hashFileIncaricoXML, fileName);
				archivioXmlFP.setPathFileZip("tmp/"+fileName);
			}
			
			cancellaListaFile(listFileNuovoIncaricoXML, listFileModificaIncaricoXML, listFileCancellaIncaricoXML, listFileAnomalieNuovoIncaricoXML, listFileAnomalieModificaIncaricoXML);
		} catch (Exception e){
			throw handleException(e);
		}
    }
	
	public void generaXMLPerla(ActionContext context, RemoteIterator sourceIterator) throws BusinessProcessException {
		try{
			List arraylist = new ArrayList();
	        sourceIterator.moveTo(0);
			while(sourceIterator.hasMoreElements()) 
				arraylist.add((V_incarichi_elenco_fpBulk)sourceIterator.nextElement());
			
			generaXMLPerla(context, arraylist);
			EJBCommonServices.closeRemoteIterator(context, sourceIterator);
		} catch (Exception e){
			throw handleException(e);
		}
	}
	
	public void generaXMLPerla(ActionContext context, List list) throws BusinessProcessException {
		try{
			Incarichi_archivio_xml_fpBulk archivioXmlPerlaFP = (Incarichi_archivio_xml_fpBulk)getModel();
			archivioXmlPerlaFP.setMapFileNuovoIncaricoXMLPerla(new HashMap>());
			archivioXmlPerlaFP.setMapFileModificaIncaricoXMLPerla(new HashMap>());
			archivioXmlPerlaFP.setMapFileCancellaIncaricoXMLPerla(new HashMap>());
			archivioXmlPerlaFP.setMapFileAnomalieNuovoIncaricoXMLPerla(new HashMap>());
			archivioXmlPerlaFP.setMapFileAnomalieModificaIncaricoXMLPerla(new HashMap>());
			archivioXmlPerlaFP.setMapFileAnomalieCancellaIncaricoXMLPerla(new HashMap>());
			archivioXmlPerlaFP.setPathFileZip(null);			

			List listFileNuovoIncaricoXMLPerla=new ArrayList();
			List listFileModificaIncaricoXMLPerla=new ArrayList();
			List listFileCancellaIncaricoXMLPerla=new ArrayList();
			List listFileAnomalieNuovoIncaricoXMLPerla=new ArrayList();
			List listFileAnomalieModificaIncaricoXMLPerla=new ArrayList();

			JAXBContext jcNew = JAXBContext.newInstance(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory.class);
			JAXBContext jcUpd = JAXBContext.newInstance(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory.class);
			JAXBContext jcDel = JAXBContext.newInstance(it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.ObjectFactory.class);
			
			it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory objAdd = new it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ObjectFactory();
			it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory objUpd = new it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory();
			it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.ObjectFactory objDel = new it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.ObjectFactory();

			IncarichiEstrazioneFpComponentSession comp = (IncarichiEstrazioneFpComponentSession)createComponentSession("CNRINCARICHI00_EJB_IncarichiEstrazioneFpComponentSession", IncarichiEstrazioneFpComponentSession.class);

			Map mapIdFpUo = new HashMap();
			
			Map> mapElencoNuoviConsulentiPerla = new HashMap>();
			Map> mapElencoModificheConsulentiPerla = new HashMap>();
			Map> mapElencoCancellaIncarichiPerla = new HashMap>();
			
			Map> mapElencoAnomalieNuoviConsulentiPerla = new HashMap>();
			Map> mapElencoAnomalieModificheConsulentiPerla = new HashMap>();

			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
				V_incarichi_elenco_fpBulk incaricoElenco = (V_incarichi_elenco_fpBulk)iterator.next();
				incaricoElenco = comp.completaIncaricoElencoFP(context.getUserContext(), incaricoElenco);
					
				Incarichi_comunicati_fpBulk incaricoComunicatoFP = comp.getIncarichiComunicatiAggFP(context.getUserContext(), incaricoElenco);

				if (incaricoComunicatoFP==null || incaricoComunicatoFP.getId_incarico()==null) {
					it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoConsulenteType nuovoConsulenteAnomaliaPerla=getAnomalieNuovoConsulentePerla(objAdd,incaricoElenco);
					if (nuovoConsulenteAnomaliaPerla.getEsito().equals(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.OK)){
						it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ConsulenteType elementNuovoConsulentePerla = generaNuovoConsulentePerla(objAdd,incaricoElenco);
						if (elementNuovoConsulentePerla!=null) {
							if (elementNuovoConsulentePerla.getIncarico().getImporto().compareTo(BigDecimal.ZERO)!=0) {
								if (archivioXmlPerlaFP.getTipo_estrazione_pagamenti().equals(Incarichi_archivio_xml_fpBulk.PAGAMENTI_INCLUDI)){
									//CREAZIONE TAG PAGAMENTO
									List listPagamenti = comp.getPagatoPerSemestre(context.getUserContext(), incaricoElenco.getIncaricoRepertorio());
									
									//Rimuovo i pagamenti di semestri successivi a quello di comunicazione
									List listPagamentiOltreLimite = new ArrayList();
									for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
										Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDetBulk = iterator2.next();
										if (incarichiComunicatiFpDetBulk.getAnno_pag().compareTo(archivioXmlPerlaFP.getEsercizio())==1 ||
											(incarichiComunicatiFpDetBulk.getAnno_pag().compareTo(archivioXmlPerlaFP.getEsercizio())==0 &&
											 incarichiComunicatiFpDetBulk.getSemestre_pag().compareTo(archivioXmlPerlaFP.getSemestre())==1))
											listPagamentiOltreLimite.add(incarichiComunicatiFpDetBulk);
									}
									listPagamenti.removeAll(listPagamentiOltreLimite);

									//scrivo il tag dei pagamenti rimasti
									if (!listPagamenti.isEmpty()) {
										elementNuovoConsulentePerla.setPagamenti(objAdd.createConsulenteTypePagamenti());
										for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
											Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDetBulk = iterator2.next();
											
											it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ConsulenteType.Pagamenti.NuovoPagamento elementNuovoPagamento = objAdd.createConsulenteTypePagamentiNuovoPagamento();
											elementNuovoPagamento.setAnno(BigInteger.valueOf(incarichiComunicatiFpDetBulk.getAnno_pag()));
											elementNuovoPagamento.setSemestre(BigInteger.valueOf(incarichiComunicatiFpDetBulk.getSemestre_pag()));
											elementNuovoPagamento.setImporto(incarichiComunicatiFpDetBulk.getImporto_pag().setScale(2));
											elementNuovoConsulentePerla.getPagamenti().getNuovoPagamento().add(elementNuovoPagamento);
										}
									}
								}
								if (!mapElencoNuoviConsulentiPerla.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
									mapElencoNuoviConsulentiPerla.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), new ArrayList());
								if (!mapIdFpUo.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
									mapIdFpUo.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getCd_unita_organizzativa());
								mapElencoNuoviConsulentiPerla.get(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()).add(elementNuovoConsulentePerla);
							}
						} else {
							nuovoConsulenteAnomaliaPerla = objAdd.createEsitoConsulenteType();
							nuovoConsulenteAnomaliaPerla.setEsito(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.KO);
							nuovoConsulenteAnomaliaPerla.setErrori(objAdd.createErroriConsulenteType());
							nuovoConsulenteAnomaliaPerla.getErrori().setIncarico(objAdd.createErroriConsulenteTypeIncarico());
							nuovoConsulenteAnomaliaPerla.getErrori().getIncarico().setDescrizioneIncarico("AnomaliaIncarico: "+incaricoElenco.getEsercizio().toString()+"/"+incaricoElenco.getPg_repertorio().toString());
							if (!mapElencoAnomalieNuoviConsulentiPerla.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
								mapElencoAnomalieNuoviConsulentiPerla.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), new ArrayList());
							if (!mapIdFpUo.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
								mapIdFpUo.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getCd_unita_organizzativa());
							mapElencoAnomalieNuoviConsulentiPerla.get(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()).add(nuovoConsulenteAnomaliaPerla);
						}
					} else {
						if (!mapElencoAnomalieNuoviConsulentiPerla.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
							mapElencoAnomalieNuoviConsulentiPerla.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), new ArrayList());
						if (!mapIdFpUo.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
							mapIdFpUo.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getCd_unita_organizzativa());
						mapElencoAnomalieNuoviConsulentiPerla.get(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()).add(nuovoConsulenteAnomaliaPerla);
					}
				} else {
					//AGGIORNAMENTO COMUNICAZIONE
					it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoConsulenteType modificaConsulenteAnomaliaPerla=getAnomalieModificaConsulentePerla(objUpd,incaricoElenco);
					if (modificaConsulenteAnomaliaPerla.getEsito().equals(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoType.OK)){
						it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType elementModificaConsulentePerla=generaModificaConsulentePerla(objUpd,objAdd,incaricoComunicatoFP,incaricoElenco);
						if (archivioXmlPerlaFP.getTipo_estrazione_pagamenti().equals(Incarichi_archivio_xml_fpBulk.PAGAMENTI_INCLUDI)){
							//AGGIUNGO MODIFICHE PAGAMENTI
							List listPagamenti = comp.getPagatoPerSemestre(context.getUserContext(), incaricoElenco.getIncaricoRepertorio());
							elementModificaConsulentePerla=generaPagamentiPerModificaConsulentePerla(objUpd, incaricoComunicatoFP, elementModificaConsulentePerla, listPagamenti);
						}
						if (elementModificaConsulentePerla!=null) {
							if (!mapElencoModificheConsulentiPerla.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
								mapElencoModificheConsulentiPerla.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), new ArrayList());
							if (!mapIdFpUo.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
								mapIdFpUo.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getCd_unita_organizzativa());
							mapElencoModificheConsulentiPerla.get(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()).add(elementModificaConsulentePerla);
						}
					} else {
						modificaConsulenteAnomaliaPerla.setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));

						if (!mapElencoAnomalieModificheConsulentiPerla.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
							mapElencoAnomalieModificheConsulentiPerla.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), new ArrayList());
						if (!mapIdFpUo.containsKey(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()))
							mapIdFpUo.put(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica(), incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getCd_unita_organizzativa());
						mapElencoAnomalieModificheConsulentiPerla.get(incaricoElenco.getIncaricoRepertorio().getUnita_organizzativa().getId_funzione_pubblica()).add(modificaConsulenteAnomaliaPerla);
					}
				}
			}
			
			List incarichiDaEliminare = comp.getIncarichiComunicatiEliminatiFP(context.getUserContext(), archivioXmlPerlaFP.getEsercizio(),archivioXmlPerlaFP.getSemestre());

			for (Iterator iterator = incarichiDaEliminare.iterator(); iterator.hasNext();) {
				Incarichi_comunicati_fpBulk incaricoComunicatoFP = iterator.next();
				if (incaricoComunicatoFP.getId_incarico()!=null) {
					it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.IncaricoType elementCancellaIncaricoPerla = objDel.createIncaricoType();
					elementCancellaIncaricoPerla.setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));
					if (!mapElencoCancellaIncarichiPerla.containsKey(incaricoComunicatoFP.getCodice_ente()))
						mapElencoCancellaIncarichiPerla.put(incaricoComunicatoFP.getCodice_ente(), new ArrayList());
					mapElencoCancellaIncarichiPerla.get(incaricoComunicatoFP.getCodice_ente()).add(elementCancellaIncaricoPerla);
				}
			}
			
			//creo i file dei nuovi incarichi
			for (Iterator iteratorKey = mapElencoNuoviConsulentiPerla.keySet().iterator(); iteratorKey.hasNext();) {
				String codiceEnte = iteratorKey.next();

				int nrFile=0;

				for (Iterator iterator = mapElencoNuoviConsulentiPerla.get(codiceEnte).iterator(); iterator.hasNext();) {
					int nrRighe=0;

					it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType currentComunicazioneType = objAdd.createComunicazioneType();
					currentComunicazioneType.setInserimentoIncarichi(objAdd.createComunicazioneTypeInserimentoIncarichi());
					currentComunicazioneType.getInserimentoIncarichi().setAnnoRiferimento(BigInteger.valueOf(archivioXmlPerlaFP.getEsercizio()));
					currentComunicazioneType.getInserimentoIncarichi().setCodiceEnte(Long.valueOf(codiceEnte));
					currentComunicazioneType.getInserimentoIncarichi().setNuoviIncarichi(objAdd.createComunicazioneTypeInserimentoIncarichiNuoviIncarichi());
	
					while(iterator.hasNext() && nrRighe currentComunicazione = objAdd.createComunicazione(currentComunicazioneType);
					jcNew.createMarshaller().marshal(currentComunicazione, fileOutputStream);
					fileOutputStream.flush();
					fileOutputStream.close();
					archivioXmlPerlaFP.getMapFileNuovoIncaricoXMLPerla().put("tmp/"+fileName, currentComunicazione);
					listFileNuovoIncaricoXMLPerla.add(file);
				}
			}

			//creo i file degli incarichi modificati
			for (Iterator iteratorKey = mapElencoModificheConsulentiPerla.keySet().iterator(); iteratorKey.hasNext();) {
				String codiceEnte = iteratorKey.next();

				int nrFile=0;
				
				for (Iterator iterator = mapElencoModificheConsulentiPerla.get(codiceEnte).iterator(); iterator.hasNext();) {
					int nrRighe=0;
					it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType currentComunicazioneType = objUpd.createComunicazioneType();
					currentComunicazioneType.setVariazioneIncarichi(objUpd.createComunicazioneTypeVariazioneIncarichi());
					currentComunicazioneType.getVariazioneIncarichi().setCodiceEnte(Long.valueOf(codiceEnte));
					currentComunicazioneType.getVariazioneIncarichi().setModificaIncarichi(objUpd.createComunicazioneTypeVariazioneIncarichiModificaIncarichi());
	
					while(iterator.hasNext() && nrRighe currentComunicazione = objUpd.createComunicazione(currentComunicazioneType);
					jcUpd.createMarshaller().marshal(currentComunicazione, fileOutputStream);
					fileOutputStream.flush();
					fileOutputStream.close();
					archivioXmlPerlaFP.getMapFileModificaIncaricoXMLPerla().put("tmp/"+fileName, currentComunicazione);
					listFileModificaIncaricoXMLPerla.add(file);
				}
			}
			
			//creo i file degli incarichi eliminati
			for (Iterator iteratorKey = mapElencoCancellaIncarichiPerla.keySet().iterator(); iteratorKey.hasNext();) {
				String codiceEnte = iteratorKey.next();

				int nrFile=0;

				for (Iterator iterator = mapElencoCancellaIncarichiPerla.get(codiceEnte).iterator(); iterator.hasNext();) {
					int nrRighe=0;
					it.perla.accenture.com.anagrafeprestazioni_cancellazioneincarichi.ComunicazioneType currentComunicazioneType = objDel.createComunicazioneType();
					currentComunicazioneType.setCancellazioneIncarichi(objDel.createComunicazioneTypeCancellazioneIncarichi());
					currentComunicazioneType.getCancellazioneIncarichi().setCodiceEnte(Long.valueOf(codiceEnte));
					currentComunicazioneType.getCancellazioneIncarichi().setIncarichi(objDel.createComunicazioneTypeCancellazioneIncarichiIncarichi());

					while(iterator.hasNext() && nrRighe currentComunicazione = objDel.createComunicazione(currentComunicazioneType);
					jcDel.createMarshaller().marshal(currentComunicazione, fileOutputStream);
					fileOutputStream.flush();
					fileOutputStream.close();
					archivioXmlPerlaFP.getMapFileCancellaIncaricoXMLPerla().put("tmp/"+fileName, currentComunicazione);
					listFileCancellaIncaricoXMLPerla.add(file);
				}
			}

			//creo i file delle anomalie nuovi consulenti
			for (Iterator iteratorKey = mapElencoAnomalieNuoviConsulentiPerla.keySet().iterator(); iteratorKey.hasNext();) {
				String codiceEnte = iteratorKey.next();

				it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.ComunicazioneType currentComunicazioneType = objAdd.createComunicazioneType();
				currentComunicazioneType.setEsitoInserimentoIncarichi(objAdd.createComunicazioneTypeEsitoInserimentoIncarichi());
				currentComunicazioneType.getEsitoInserimentoIncarichi().setAnnoRiferimento(BigInteger.valueOf(archivioXmlPerlaFP.getEsercizio()));
				currentComunicazioneType.getEsitoInserimentoIncarichi().setCodiceEnte(codiceEnte!=null?Long.valueOf(codiceEnte):Long.valueOf(0));
				currentComunicazioneType.getEsitoInserimentoIncarichi().setEsitoFile(it.perla.accenture.com.anagrafeprestazioni_inserimentoincarichi.EsitoType.KO);
				currentComunicazioneType.getEsitoInserimentoIncarichi().setEsitoNuoviIncarichi(objAdd.createComunicazioneTypeEsitoInserimentoIncarichiEsitoNuoviIncarichi());
				currentComunicazioneType.getEsitoInserimentoIncarichi().getEsitoNuoviIncarichi().getConsulente().addAll(mapElencoAnomalieNuoviConsulentiPerla.get(codiceEnte));
				
				String fileName = "AnomalieEstrazioneNuoviIncarichiPerla_"+(codiceEnte!=null?mapIdFpUo.get(codiceEnte)+"_"+Long.valueOf(codiceEnte):Long.valueOf(0))+"_"+archivioXmlPerlaFP.getEsercizio()+archivioXmlPerlaFP.getSemestre()+".xml";
				File file = new File(System.getProperty("tmp.dir.SIGLAWeb")+"/tmp/",fileName);
				FileOutputStream fileOutputStream = new FileOutputStream(file);					
				JAXBElement currentComunicazione = objAdd.createComunicazione(currentComunicazioneType);
				jcNew.createMarshaller().marshal(currentComunicazione, fileOutputStream);
				fileOutputStream.flush();
				fileOutputStream.close();
				archivioXmlPerlaFP.getMapFileAnomalieNuovoIncaricoXMLPerla().put("tmp/"+fileName, currentComunicazione);
				listFileAnomalieNuovoIncaricoXMLPerla.add(file);
			}

			//creo i file delle anomalie modifica consulenti
			for (Iterator iteratorKey = mapElencoAnomalieModificheConsulentiPerla.keySet().iterator(); iteratorKey.hasNext();) {
				String codiceEnte = iteratorKey.next();

				it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ComunicazioneType currentComunicazioneType = objUpd.createComunicazioneType();
				currentComunicazioneType.setEsitoVariazioneIncarichi(objUpd.createComunicazioneTypeEsitoVariazioneIncarichi());
				currentComunicazioneType.getEsitoVariazioneIncarichi().setCodiceEnte(codiceEnte!=null?Long.valueOf(codiceEnte):Long.valueOf(0));
				currentComunicazioneType.getEsitoVariazioneIncarichi().setEsitoFile(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.EsitoType.KO);
				currentComunicazioneType.getEsitoVariazioneIncarichi().setEsitoModificaIncarichi(objUpd.createComunicazioneTypeEsitoVariazioneIncarichiEsitoModificaIncarichi());
				currentComunicazioneType.getEsitoVariazioneIncarichi().getEsitoModificaIncarichi().getConsulente().addAll(mapElencoAnomalieModificheConsulentiPerla.get(codiceEnte));

				String fileName = "AnomalieEstrazioneModificheIncarichiPerla"+(codiceEnte!=null?mapIdFpUo.get(codiceEnte)+"_"+Long.valueOf(codiceEnte):Long.valueOf(0))+"_"+archivioXmlPerlaFP.getEsercizio()+archivioXmlPerlaFP.getSemestre()+".xml";
				File file = new File(System.getProperty("tmp.dir.SIGLAWeb")+"/tmp/",fileName);
				FileOutputStream fileOutputStream = new FileOutputStream(file);					
				JAXBElement currentComunicazione = objUpd.createComunicazione(currentComunicazioneType);
				jcUpd.createMarshaller().marshal(currentComunicazione, fileOutputStream);
				fileOutputStream.flush();
				fileOutputStream.close();
				archivioXmlPerlaFP.getMapFileAnomalieModificaIncaricoXMLPerla().put("tmp/"+fileName, currentComunicazione);
				listFileAnomalieModificaIncaricoXMLPerla.add(file);
			}

			Hashtable> hashFileIncaricoXML=new Hashtable>();
			
			if (!(listFileNuovoIncaricoXMLPerla.isEmpty() && listFileModificaIncaricoXMLPerla.isEmpty() && listFileCancellaIncaricoXMLPerla.isEmpty() && 
			 	  listFileAnomalieNuovoIncaricoXMLPerla.isEmpty() && listFileAnomalieModificaIncaricoXMLPerla.isEmpty())) {
				hashFileIncaricoXML.put("Incarichi Nuovi", listFileNuovoIncaricoXMLPerla);
				hashFileIncaricoXML.put("Incarichi Modificati", listFileModificaIncaricoXMLPerla);
				hashFileIncaricoXML.put("Incarichi Cancellati", listFileCancellaIncaricoXMLPerla);
				hashFileIncaricoXML.put("Anomalie Incarichi Nuovi", listFileAnomalieNuovoIncaricoXMLPerla);
				hashFileIncaricoXML.put("Anomalie Incarichi Modificati", listFileAnomalieModificaIncaricoXMLPerla);
	
				String fileName = "EstrazioneIncarichiPerla"+archivioXmlPerlaFP.getEsercizio()+archivioXmlPerlaFP.getSemestre()+".zip";
				creaFileZip(hashFileIncaricoXML, fileName);
				archivioXmlPerlaFP.setPathFileZip("tmp/"+fileName);
			}
			cancellaListaFile(listFileNuovoIncaricoXMLPerla, listFileModificaIncaricoXMLPerla, listFileCancellaIncaricoXMLPerla, listFileAnomalieNuovoIncaricoXMLPerla, listFileAnomalieModificaIncaricoXMLPerla);
		} catch (Exception e){
			throw handleException(e);
		}
    }

	public File creaFileZip(Hashtable> hashFileXML, String fileName) throws BusinessProcessException {
		try {
			byte[] buffer = new byte[18024];
			File fileZip = new File(System.getProperty("tmp.dir.SIGLAWeb")+"/tmp/",fileName==null?"download.zip":fileName);
			ZipOutputStream zipFileOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(fileZip)));

			// Set the compression ratio
			zipFileOut.setLevel(Deflater.DEFAULT_COMPRESSION);
			for (Iterator iterator = hashFileXML.keySet().iterator(); iterator.hasNext();) {
				String directory = iterator.next();

				for (File myFile : hashFileXML.get(directory)) {
					InputStream file = new FileInputStream(myFile);
					// Add ZIP entry to output stream.
					zipFileOut.putNextEntry(new ZipEntry(directory+ "/" + myFile.getName()));
					// Transfer bytes from the current file to the ZIP file
					int len;
					while ((len = file.read(buffer)) > 0) {
						zipFileOut.write(buffer, 0, len);
					}
					// Close the current entry
					zipFileOut.closeEntry();
				}
			}
			zipFileOut.finish();
			zipFileOut.close();
			return fileZip;
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	public void cancellaListaFile(List... listFile){
		for (List list : listFile) {
			for (File file : list) {
				file.delete();
			}
		}
	}
	
	public void clearSelection(ActionContext context, Incarichi_archivio_xml_fpBulk archivioXmlFP) throws BusinessProcessException {
		if (archivioXmlFP==null) 
			archivioXmlFP = (Incarichi_archivio_xml_fpBulk)getModel();
		if (archivioXmlFP!=null){
			archivioXmlFP.setEsercizio(null);
			archivioXmlFP.setSemestre(null);
			archivioXmlFP.setEsercizio_inizio(Integer.valueOf(2009));
			archivioXmlFP.setSemestre_inizio(Integer.valueOf(1));
			archivioXmlFP.setDt_calcolo(Incarichi_archivio_xml_fpBulk.DATA_INIZIO_ATTIVITA);
			archivioXmlFP.setTipo_estrazione_pagamenti(Incarichi_archivio_xml_fpBulk.PAGAMENTI_INCLUDI);
			archivioXmlFP.setFl_crea_file_modifiche(false);
			archivioXmlFP.setFl_crea_file_per_tipologia(true);
			archivioXmlFP.setFl_crea_file_perla(true);
			archivioXmlFP.setNum_max_file_record(Integer.decode("1000"));
			archivioXmlFP.setMapFileNuovoIncaricoXML(null);
			archivioXmlFP.setMapFileModificaIncaricoXML(null);
			archivioXmlFP.setMapFileCancellaIncaricoXML(null);
			archivioXmlFP.setMapFileAnomalieNuovoIncaricoXML(null);
			archivioXmlFP.setMapFileAnomalieModificaIncaricoXML(null);
			archivioXmlFP.setMapFileAnomalieCancellaIncaricoXML(null);
			archivioXmlFP.setMapFileNuovoIncaricoXMLPerla(null);
			archivioXmlFP.setMapFileModificaIncaricoXMLPerla(null);
			archivioXmlFP.setMapFileCancellaIncaricoXMLPerla(null);
			archivioXmlFP.setMapFileAnomalieNuovoIncaricoXMLPerla(null);
			archivioXmlFP.setMapFileAnomalieModificaIncaricoXMLPerla(null);
			archivioXmlFP.setMapFileAnomalieCancellaIncaricoXMLPerla(null);
			archivioXmlFP.setPathFileZip(null);			
		}
	}

	private Comunicazione.Consulenti.ModificaIncarico generaPagamentiPerModificaIncaricoFP(ObjectFactory objectFactory, Incarichi_comunicati_fpBulk incaricoComunicatoFP, Comunicazione.Consulenti.ModificaIncarico modificaIncarico, List listPagamenti) throws DatatypeConfigurationException{
		Comunicazione.Consulenti.ModificaIncarico myModificaIncarico = objectFactory.createComunicazioneConsulentiModificaIncarico();
		myModificaIncarico.setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));

		for (Iterator iterator = incaricoComunicatoFP.getIncarichi_comunicati_fp_detColl().iterator(); iterator.hasNext();) {
			Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDet = (Incarichi_comunicati_fp_detBulk) iterator.next();
			boolean trovato=false;
			for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
				Incarichi_comunicati_fp_detBulk pagamento = (Incarichi_comunicati_fp_detBulk) iterator2.next();
				if (incarichiComunicatiFpDet.getAnno_pag().equals(pagamento.getAnno_pag()) &&
					incarichiComunicatiFpDet.getSemestre_pag().equals(pagamento.getSemestre_pag())) {
					if (!incarichiComunicatiFpDet.getImporto_pag().equals(pagamento.getImporto_pag())) {
						Comunicazione.Consulenti.ModificaIncarico.ModificaPagamento elementModificaPagamento = new Comunicazione.Consulenti.ModificaIncarico.ModificaPagamento();
						elementModificaPagamento.setAnno(pagamento.getAnno_pag());
						elementModificaPagamento.setSemestre(pagamento.getSemestre_pag());
						elementModificaPagamento.setImporto(pagamento.getImporto_pag().setScale(2));
						myModificaIncarico.getModificaPagamento().add(elementModificaPagamento);
					}
					trovato=true;
					break;
				}
			}
			if (!trovato){
				Comunicazione.Consulenti.ModificaIncarico.CancellaPagamento elementCancellaPagamento = new Comunicazione.Consulenti.ModificaIncarico.CancellaPagamento();
				elementCancellaPagamento.setAnno(incarichiComunicatiFpDet.getAnno_pag());
				elementCancellaPagamento.setSemestre(incarichiComunicatiFpDet.getSemestre_pag());
				myModificaIncarico.getCancellaPagamento().add(elementCancellaPagamento);
			}
		}

		for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
			Incarichi_comunicati_fp_detBulk pagamento = (Incarichi_comunicati_fp_detBulk) iterator2.next();

			boolean trovato=false;
			for (Iterator iterator = incaricoComunicatoFP.getIncarichi_comunicati_fp_detColl().iterator(); iterator.hasNext();) {
				Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDet = (Incarichi_comunicati_fp_detBulk) iterator.next();
				if (incarichiComunicatiFpDet.getAnno_pag().equals(pagamento.getAnno_pag()) &&
					incarichiComunicatiFpDet.getSemestre_pag().equals(pagamento.getSemestre_pag())) {
					trovato=true;
					break;
				}
			}
			if (!trovato){
				Comunicazione.Consulenti.ModificaIncarico.NuovoPagamento elementNuovoPagamento = new Comunicazione.Consulenti.ModificaIncarico.NuovoPagamento();
				elementNuovoPagamento.setAnno(pagamento.getAnno_pag());
				elementNuovoPagamento.setSemestre(pagamento.getSemestre_pag());
				elementNuovoPagamento.setImporto(pagamento.getImporto_pag().setScale(2));
				myModificaIncarico.getNuovoPagamento().add(elementNuovoPagamento);
			}
		}
		if (myModificaIncarico.getNuovoPagamento().isEmpty() &&
			myModificaIncarico.getModificaPagamento().isEmpty() &&
			myModificaIncarico.getCancellaPagamento().isEmpty())
			return modificaIncarico;
		else if (modificaIncarico==null)
			return myModificaIncarico;
		else {
			modificaIncarico.getNuovoPagamento().addAll(myModificaIncarico.getNuovoPagamento());
			modificaIncarico.getModificaPagamento().addAll(myModificaIncarico.getModificaPagamento());
			modificaIncarico.getCancellaPagamento().addAll(myModificaIncarico.getCancellaPagamento());
			return modificaIncarico;
		}
	}

	private it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType generaPagamentiPerModificaConsulentePerla(it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ObjectFactory objectFactory, Incarichi_comunicati_fpBulk incaricoComunicatoFP, it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType modificaConsulente, List listPagamenti) throws DatatypeConfigurationException{
		it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType myModificaConsulente = objectFactory.createConsulenteType();
		myModificaConsulente.setIdMittente(incaricoComunicatoFP.getEsercizio_repertorio().toString()+'/'+incaricoComunicatoFP.getPg_repertorio().toString());
		myModificaConsulente.setIncarico(objectFactory.createConsulenteTypeIncarico());
		myModificaConsulente.getIncarico().setId(Long.parseLong(incaricoComunicatoFP.getId_incarico()));
		myModificaConsulente.setPagamenti(objectFactory.createConsulenteTypePagamenti());
		
		for (Iterator iterator = incaricoComunicatoFP.getIncarichi_comunicati_fp_detColl().iterator(); iterator.hasNext();) {
			Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDet = (Incarichi_comunicati_fp_detBulk) iterator.next();
			//lo aggiorno solo se di semestre non successivo a quello richiesto
			if (!(incarichiComunicatiFpDet.getAnno_pag().compareTo(((Incarichi_archivio_xml_fpBulk)getModel()).getEsercizio())==1 ||
			      (incarichiComunicatiFpDet.getAnno_pag().compareTo(((Incarichi_archivio_xml_fpBulk)getModel()).getEsercizio())==0 &&
			       incarichiComunicatiFpDet.getSemestre_pag().compareTo(((Incarichi_archivio_xml_fpBulk)getModel()).getSemestre())==1))) {
				boolean trovato=false;
				for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
					Incarichi_comunicati_fp_detBulk pagamento = (Incarichi_comunicati_fp_detBulk) iterator2.next();
					if (incarichiComunicatiFpDet.getAnno_pag().equals(pagamento.getAnno_pag()) &&
						incarichiComunicatiFpDet.getSemestre_pag().equals(pagamento.getSemestre_pag())) {
						if (!incarichiComunicatiFpDet.getImporto_pag().setScale(2).equals(pagamento.getImporto_pag().setScale(2))) {
							it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType.Pagamenti.ModificaPagamento elementModificaPagamento = new it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType.Pagamenti.ModificaPagamento();
							elementModificaPagamento.setAnno(BigInteger.valueOf(pagamento.getAnno_pag()));
							elementModificaPagamento.setSemestre(BigInteger.valueOf(pagamento.getSemestre_pag()));
							elementModificaPagamento.setImporto(pagamento.getImporto_pag().setScale(2));
							myModificaConsulente.getPagamenti().getModificaPagamento().add(elementModificaPagamento);
						}
						trovato=true;
						break;
					}
				}
				if (!trovato){
					it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType.Pagamenti.CancellaPagamento elementCancellaPagamento = new it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType.Pagamenti.CancellaPagamento();
					elementCancellaPagamento.setAnno(BigInteger.valueOf(incarichiComunicatiFpDet.getAnno_pag()));
					elementCancellaPagamento.setSemestre(BigInteger.valueOf(incarichiComunicatiFpDet.getSemestre_pag()));
					myModificaConsulente.getPagamenti().getCancellaPagamento().add(elementCancellaPagamento);
				}
			}
		}

		for (Iterator iterator2 = listPagamenti.iterator(); iterator2.hasNext();) {
			Incarichi_comunicati_fp_detBulk pagamento = (Incarichi_comunicati_fp_detBulk) iterator2.next();

			//lo aggiorno solo se di semestre non successivo a quello richiesto
			if (!(pagamento.getAnno_pag().compareTo(((Incarichi_archivio_xml_fpBulk)getModel()).getEsercizio())==1 ||
  			      (pagamento.getAnno_pag().compareTo(((Incarichi_archivio_xml_fpBulk)getModel()).getEsercizio())==0 &&
				   pagamento.getSemestre_pag().compareTo(((Incarichi_archivio_xml_fpBulk)getModel()).getSemestre())==1))) {
				boolean trovato=false;
				for (Iterator iterator = incaricoComunicatoFP.getIncarichi_comunicati_fp_detColl().iterator(); iterator.hasNext();) {
					Incarichi_comunicati_fp_detBulk incarichiComunicatiFpDet = (Incarichi_comunicati_fp_detBulk) iterator.next();
					if (incarichiComunicatiFpDet.getAnno_pag().equals(pagamento.getAnno_pag()) &&
						incarichiComunicatiFpDet.getSemestre_pag().equals(pagamento.getSemestre_pag())) {
						trovato=true;
						break;
					}
				}
				if (!trovato){
					it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType.Pagamenti.NuovoPagamento elementNuovoPagamento = new it.perla.accenture.com.anagrafeprestazioni_variazioneincarichi.ConsulenteType.Pagamenti.NuovoPagamento();
					elementNuovoPagamento.setAnno(BigInteger.valueOf(pagamento.getAnno_pag()));
					elementNuovoPagamento.setSemestre(BigInteger.valueOf(pagamento.getSemestre_pag()));
					elementNuovoPagamento.setImporto(pagamento.getImporto_pag().setScale(2));
					myModificaConsulente.getPagamenti().getNuovoPagamento().add(elementNuovoPagamento);
				}
			}
		}
		if (myModificaConsulente.getPagamenti().getNuovoPagamento().isEmpty() &&
			myModificaConsulente.getPagamenti().getModificaPagamento().isEmpty() &&
			myModificaConsulente.getPagamenti().getCancellaPagamento().isEmpty())
			return modificaConsulente;
		else if (modificaConsulente==null)
			return myModificaConsulente;
		else {
			modificaConsulente.setPagamenti(objectFactory.createConsulenteTypePagamenti());
			modificaConsulente.getPagamenti().getNuovoPagamento().addAll(myModificaConsulente.getPagamenti().getNuovoPagamento());
			modificaConsulente.getPagamenti().getModificaPagamento().addAll(myModificaConsulente.getPagamenti().getModificaPagamento());
			modificaConsulente.getPagamenti().getCancellaPagamento().addAll(myModificaConsulente.getPagamenti().getCancellaPagamento());
			return modificaConsulente;
		}
	}

	@Override
	public OggettoBulk initializeModelForInsert(ActionContext actioncontext, OggettoBulk oggettobulk) throws BusinessProcessException {
		oggettobulk =  super.initializeModelForInsert(actioncontext, oggettobulk);
		if (oggettobulk instanceof Incarichi_archivio_xml_fpBulk) {
			((Incarichi_archivio_xml_fpBulk)oggettobulk).setFl_perla(Boolean.TRUE);
			((Incarichi_archivio_xml_fpBulk)oggettobulk).setFl_merge_perla(Boolean.TRUE);
			clearSelection(actioncontext, (Incarichi_archivio_xml_fpBulk)oggettobulk);
		}
		return oggettobulk;
	}
	@Override
	public OggettoBulk initializeModelForEdit(ActionContext actioncontext, OggettoBulk oggettobulk) throws BusinessProcessException {
		oggettobulk =  super.initializeModelForEdit(actioncontext, oggettobulk);
		if (oggettobulk instanceof Incarichi_archivio_xml_fpBulk)
			clearSelection(actioncontext, (Incarichi_archivio_xml_fpBulk)oggettobulk);
		return oggettobulk;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy