Subversion Repositories Sigmater

Rev

Blame | Last modification | View Log | Download | RSS feed

package it.liguriadigitale.sxcrj.console.business.dbi.impl;

import it.liguriadigitale.framework.business.BusinessHelper;
import it.liguriadigitale.framework.business.exceptions.BusinessException;
import it.liguriadigitale.framework.business.util.DateUtil;
import it.liguriadigitale.framework.integration.dao.SequenceDAO;
import it.liguriadigitale.sxcrj.console.business.dbi.impl.level1.ClientSoap;
import it.liguriadigitale.sxcrj.console.business.dbi.services.DbiService;
import it.liguriadigitale.sxcrj.console.business.staging.impl.level1.caricamento.fornitura.xsd.parser.ParserFactory;
import it.liguriadigitale.sxcrj.console.business.staging.impl.level1.caricamento.fornitura.xsd.parser.util.FirmaUtil;
import it.liguriadigitale.sxcrj.console.business.util.CalcoloDateUtil;
import it.liguriadigitale.sxcrj.console.integration.dao.common.ProvinciaDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.common.StatoScarico;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.FornituraCatastaleDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.RicercaNomeFornituraDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.RicercaPeriodoValdiazioneDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.RicercaSezioniDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.scarico.RicercaDatiServizioDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.scarico.RicercaScarichiFlussiDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.schedulazioni.RicercaFlussiIncrementaliSchedulabiliDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.ricerca.schedulazioni.RicercaUltimoTentativoScaricoDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti01ComuniDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti02ServiziDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti04ServizidettaglioDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti05ErrlogDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti06PeriodicitaDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti09CatalogostatoDAO;
import it.liguriadigitale.sxcrj.console.integration.dao.dbi.table.S3Ti11FileinterscambioDAO;
import it.liguriadigitale.sxcrj.console.pojo.common.Provincia;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti01Comuni;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti02Servizi;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti03Servizirichiesti;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti04Servizidettaglio;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti05Errlog;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti06Periodicita;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti07Protocolli;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti09Catalogostato;
import it.liguriadigitale.sxcrj.console.pojo.dbi.S3Ti11Fileinterscambio;
import it.liguriadigitale.sxcrj.console.pojo.dbi.scarico.DatiScarico;
import it.liguriadigitale.sxcrj.console.pojo.dbi.scarico.RichiestaScarico;
import it.liguriadigitale.sxcrj.console.pojo.dbi.schedulazioni.DatiSchedulazione;
import it.liguriadigitale.sxcrj.console.pojo.fornitura.FornituraImpiantoCatastale;
import it.liguriadigitale.sxcrj.console.pojo.impianto.censuario.DateValidazione;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.sql.rowset.serial.SerialException;
import javax.xml.bind.JAXBException;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import javax.xml.stream.XMLStreamException;
import javax.xml.transform.TransformerException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class DbiServiceImpl implements DbiService{

        protected Log           log                                                             = LogFactory.getLog(this.getClass());


        @SuppressWarnings("unchecked")
        @Override
        public List<FornituraImpiantoCatastale> getForniture(String nomeFornitura) throws BusinessException {
                FornituraCatastaleDAO fornituraDAO = new FornituraCatastaleDAO(nomeFornitura);
                BusinessHelper helper = new BusinessHelper(fornituraDAO);
                return helper.cercaOggetti();
        }

        @SuppressWarnings("unchecked")
        @Override
        public List<Provincia> getProvince() throws BusinessException {
                ProvinciaDAO dao = new ProvinciaDAO();
                BusinessHelper helper = new BusinessHelper(dao);
                return helper.cercaOggetti();
        }

        @SuppressWarnings("unchecked")
        @Override
        public List<S3Ti01Comuni> getComuni() throws BusinessException {
                S3Ti01ComuniDAO dao = new S3Ti01ComuniDAO(new S3Ti01Comuni());
                BusinessHelper helper = new BusinessHelper(dao);
                return helper.cercaOggetti();
        }

        @SuppressWarnings("unchecked")
        @Override
        public List<S3Ti01Comuni> getComuni(String provincia) throws BusinessException {
                S3Ti01Comuni comune = new S3Ti01Comuni();
                comune.setTi01Prov(provincia);
                S3Ti01ComuniDAO dao = new S3Ti01ComuniDAO(comune);
                BusinessHelper helper = new BusinessHelper(dao);
                return helper.cercaOggetti();
        }

        @SuppressWarnings("unchecked")
        @Override
        public List<S3Ti09Catalogostato> getStatoSchedulazioni() throws BusinessException {
                S3Ti09Catalogostato stato = new S3Ti09Catalogostato();
                S3Ti09CatalogostatoDAO dao = new S3Ti09CatalogostatoDAO(stato);
                BusinessHelper helper = new BusinessHelper(dao);
                return helper.cercaOggetti();
        }

        @SuppressWarnings("unchecked")
        @Override
        public List<S3Ti02Servizi> getServiziAgenzia() throws BusinessException {
                S3Ti02ServiziDAO dao = new S3Ti02ServiziDAO(new S3Ti02Servizi());
                BusinessHelper helper = new BusinessHelper(dao);
                return helper.cercaOggetti();
        }

        @Override
        @SuppressWarnings("unchecked")
        public List<String> getSezioniComuni(S3Ti01Comuni comuni) throws BusinessException {
                S3Ti01Comuni comune = new S3Ti01Comuni();
                comune.setTi01Keycom(comuni.getTi01Keycom());
                RicercaSezioniDAO dao = new RicercaSezioniDAO(comuni);
                BusinessHelper helper = new BusinessHelper(dao);
                List<String> listaSezioni = helper.cercaOggetti();
                List<String> listaSezioniValide = new ArrayList<String>();
                for(String sezione : listaSezioni){
                        if(sezione != null && sezione.isEmpty()){
                                listaSezioniValide.add(sezione);
                        }
                }
                return listaSezioniValide;
        }

        @SuppressWarnings("unchecked")
        @Override
        public List<S3Ti06Periodicita> getPeriodicitĂ () throws BusinessException {
                S3Ti06Periodicita periodicita = new S3Ti06Periodicita();
                S3Ti06PeriodicitaDAO dao = new S3Ti06PeriodicitaDAO(periodicita);
                BusinessHelper helper = new BusinessHelper(dao);
                return helper.cercaOggetti();
        }

        @SuppressWarnings("unchecked")
        @Override
        public boolean schedulaRichiesteFlussiIncrementali() throws BusinessException {
                boolean execute = true;
                RicercaFlussiIncrementaliSchedulabiliDAO dao = new RicercaFlussiIncrementaliSchedulabiliDAO();
                BusinessHelper helper = new BusinessHelper(dao);
                List<S3Ti03Servizirichiesti> listaFlussiSchedulabili = helper.cercaOggetti();
                for(S3Ti03Servizirichiesti flussiSchedulabili : listaFlussiSchedulabili){
                        DatiSchedulazione schedulazione = calcolaPeriodo(flussiSchedulabili.getTi03Periodicita().longValue(),flussiSchedulabili.getTi03Dataunatantum());
                        if(schedulazione.isSchedulabile()){
                                int numeroIscrizioni = (flussiSchedulabili.getTi03Progiscrizioneass() != null) ? 2 : 1;
                                for(int iscrizione = 0; iscrizione < numeroIscrizioni; iscrizione ++){
                                        RicercaUltimoTentativoScaricoDAO ricercaUtilmoTentativoDAO = new RicercaUltimoTentativoScaricoDAO(flussiSchedulabili,schedulazione);
                                        helper.setDao(ricercaUtilmoTentativoDAO);
                                        int maxDettaglio = (int) helper.cercaOggetto();
                                        if(maxDettaglio == 0){
                                                int giorno = DateUtil.formatDayAsInt(new Date());
                                                if(giorno >= flussiSchedulabili.getTi03Inislot().intValue() && giorno <= flussiSchedulabili.getTi03Finslot().intValue()){
                                                        int numeroTentativo = maxDettaglio +1;
                                                        S3Ti04Servizidettaglio dettaglioSchedulazione = new S3Ti04Servizidettaglio();
                                                        dettaglioSchedulazione.setTi04Progiscrizione(flussiSchedulabili.getTi03Progiscrizione());
                                                        dettaglioSchedulazione.setTi04Keydett(new Long(numeroTentativo));
                                                        dettaglioSchedulazione.setTi04FlagAss(iscrizione>0);
                                                        dettaglioSchedulazione.setTi04Codstato(StatoScarico.IN_SCHEDULAZIONE.getId());
                                                        dettaglioSchedulazione.setTi04PeriodoA(schedulazione.getPeriodoA());
                                                        dettaglioSchedulazione.setTi04PeriodoDa(schedulazione.getPeriodoDa());
                                                        dettaglioSchedulazione.setTi04DatatimeSched(new Date());
                                                        dettaglioSchedulazione.setTi04Progiscrizioneass(flussiSchedulabili.getTi03Progiscrizioneass());
                                                        dettaglioSchedulazione.setTi04NFile(0L);
                                                        dettaglioSchedulazione.setTi04NFileTot(0L);
                                                        dettaglioSchedulazione.setTi04Riavvio(0L);
                                                        dettaglioSchedulazione.setTi04PresenzaFile(false);
                                                        S3Ti04ServizidettaglioDAO dettaglioSchedulazioneDao = new S3Ti04ServizidettaglioDAO(dettaglioSchedulazione);
                                                        helper.setDao(dettaglioSchedulazioneDao);
                                                        helper.inserisciOggetto();
                                                }
                                        } else {
                                                S3Ti04Servizidettaglio dettaglioSchedulazione = new S3Ti04Servizidettaglio();
                                                dettaglioSchedulazione.setTi04Progiscrizione(flussiSchedulabili.getTi03Progiscrizione());
                                                dettaglioSchedulazione.setTi04Keydett(new Long(maxDettaglio));
                                                dettaglioSchedulazione.setTi04FlagAss(iscrizione>0);
                                                dettaglioSchedulazione.setTi04PeriodoA(schedulazione.getPeriodoA());
                                                dettaglioSchedulazione.setTi04PeriodoDa(schedulazione.getPeriodoDa());
                                                S3Ti04ServizidettaglioDAO dettaglioSchedulazioneDao = new S3Ti04ServizidettaglioDAO(dettaglioSchedulazione);
                                                helper.setDao(dettaglioSchedulazioneDao);
                                                S3Ti04Servizidettaglio ultimaSchedulazione = (S3Ti04Servizidettaglio) helper.cercaOggettoByKey();
                                                if(ultimaSchedulazione != null){
                                                        if(ultimaSchedulazione.getTi04Codstato().longValue() == StatoScarico.ERRORE_WEB_SERVICE.getId() && 
                                                                        CalcoloDateUtil.calcoloNumeroGiorni(ultimaSchedulazione.getTi04DatatimeSched(), new Date())> 0){
                                                                int numeroTentativo = ultimaSchedulazione.getTi04Keydett().intValue() +1;
                                                                S3Ti04Servizidettaglio nuovaSchedulazione = new S3Ti04Servizidettaglio();
                                                                nuovaSchedulazione.setTi04Progiscrizione(flussiSchedulabili.getTi03Progiscrizione());
                                                                nuovaSchedulazione.setTi04Keydett(new Long(numeroTentativo));
                                                                nuovaSchedulazione.setTi04FlagAss(iscrizione>0);
                                                                nuovaSchedulazione.setTi04Codstato(StatoScarico.IN_SCHEDULAZIONE.getId());
                                                                nuovaSchedulazione.setTi04PeriodoA(schedulazione.getPeriodoA());
                                                                nuovaSchedulazione.setTi04PeriodoDa(schedulazione.getPeriodoDa());
                                                                nuovaSchedulazione.setTi04DatatimeSched(new Date());
                                                                nuovaSchedulazione.setTi04Progiscrizioneass(flussiSchedulabili.getTi03Progiscrizioneass());
                                                                nuovaSchedulazione.setTi04NFile(0L);
                                                                nuovaSchedulazione.setTi04NFileTot(0L);
                                                                nuovaSchedulazione.setTi04Riavvio(0L);
                                                                nuovaSchedulazione.setTi04PresenzaFile(false);
                                                                S3Ti04ServizidettaglioDAO nuovaSchedulazioneDao = new S3Ti04ServizidettaglioDAO(nuovaSchedulazione);
                                                                helper.setDao(nuovaSchedulazioneDao);
                                                                helper.inserisciOggetto();
                                                        } else if (ultimaSchedulazione.getTi04Codstato().longValue() == StatoScarico.ERRORE_WEB_SERVICE_RIAVVIABILE.getId()){
                                                                ultimaSchedulazione.setTi04Riavvio(ultimaSchedulazione.getTi04Riavvio().longValue() + 1L);
                                                                ultimaSchedulazione.setTi04Codstato(StatoScarico.IN_SCHEDULAZIONE.getId());
                                                                S3Ti04ServizidettaglioDAO nuovaSchedulazioneDao = new S3Ti04ServizidettaglioDAO(ultimaSchedulazione);
                                                                helper.setDao(nuovaSchedulazioneDao);
                                                                helper.aggiornaOggettoByKey();
                                                        }
                                                } else {
                                                        log.error("Errore nessuna schedulazione trovata per progressivo " + flussiSchedulabili.getTi03Progiscrizione());
                                                        execute = false;
                                                }
                                        }
                                }
                        }
                }
                return execute;
        }



        @Override
        @SuppressWarnings("unchecked")
        public boolean scaricaFlussiIncrementali() throws BusinessException {
                boolean execute = true;
                RicercaScarichiFlussiDAO daoScarico = new RicercaScarichiFlussiDAO();
                BusinessHelper helper = new BusinessHelper(daoScarico);
                List<RichiestaScarico> richiesteScarico = helper.cercaOggetti();
                for(RichiestaScarico richiestaScarico : richiesteScarico){
                        richiestaScarico.setTi04Codstato(StatoScarico.SCHEDULATO.getId());
                        S3Ti04ServizidettaglioDAO daoServizio = new S3Ti04ServizidettaglioDAO(richiestaScarico);
                        helper.setDao(daoServizio);
                        helper.aggiornaOggettoByKey();
                        RicercaDatiServizioDAO daoDatiScarico = new RicercaDatiServizioDAO(richiestaScarico);
                        helper.setDao(daoDatiScarico);
                        DatiScarico datiScarico = (DatiScarico) helper.cercaOggetto();
                        if(datiScarico == null){
                                log.error("Nessun servizio configurato");
                                throw new BusinessException("Nessun servizio configurato");
                        }
                        if(richiestaScarico.getTi04Riavvio().longValue() == 0L){
                                richiestaScarico.setTi04NFile(1L);
                        } else if (!richiestaScarico.getTi04PresenzaFile()){
                                if(richiestaScarico.getTi04NFile().longValue() == 0L)
                                        richiestaScarico.setTi04NFile(1L);
                        } else {
                                S3Ti11Fileinterscambio fileinterscambio = new S3Ti11Fileinterscambio();
                                fileinterscambio.setTi11Progiscrizione(richiestaScarico.getTi04Progiscrizione());
                                fileinterscambio.setTi11PeriodoA(richiestaScarico.getTi04PeriodoA());
                                fileinterscambio.setTi11PeriodoDa((richiestaScarico.getTi04PeriodoDa()));
                                fileinterscambio.setTi11FlagAss(richiestaScarico.getTi04FlagAss());
                                fileinterscambio.setTi11Keydett(richiestaScarico.getTi04Keydett());
                                fileinterscambio.setTi11Idfile(richiestaScarico.getTi04NFile());
                                S3Ti11FileinterscambioDAO daoFileInterscambio = new S3Ti11FileinterscambioDAO(fileinterscambio);
                                helper.setDao(daoFileInterscambio);
                                helper.deleteOggettoByKey();
                                richiestaScarico.setTi04PresenzaFile(Boolean.FALSE);
                                S3Ti04ServizidettaglioDAO daoServizioDettaglio = new S3Ti04ServizidettaglioDAO(richiestaScarico);
                                helper.setDao(daoServizioDettaglio);
                                helper.aggiornaOggettoByKey();
                        }
                        String codiceUfficio = richiestaScarico.getTi04Progiscrizione().substring(0, 2);
                        long numeroFile = richiestaScarico.getTi04NFile().longValue();
                        long numeroFileTotale = numeroFile;
                        do{
                                String nomeFile = richiestaScarico.getTi04Progiscrizione()+"_" + richiestaScarico.getPeriodoDaXML() +   numeroFile;
                                if(richiestaScarico.getTi04FlagAss()){
                                        nomeFile = richiestaScarico.getTi04Progiscrizioneass()+"_" + richiestaScarico.getPeriodoDaXML() +       numeroFile;
                                }
                                ClientSoap clientSoap = new ClientSoap(codiceUfficio);
                                try {
                                        SOAPMessage risposta = clientSoap.inviaRichiestaScarico(datiScarico, richiestaScarico,numeroFile);
                                        File fornituraZip = clientSoap.creaFileZipDaSalvare(nomeFile, risposta,richiestaScarico.getTi04FlagAss());
                                        clientSoap.aggiornaTraccia(fornituraZip);
                                        
                                        FileInputStream fornituraZipStream = new FileInputStream(fornituraZip);
                                        byte[] fileBlob = IOUtils.toByteArray(fornituraZipStream);
                                        IOUtils.closeQuietly(fornituraZipStream);
                                        S3Ti11Fileinterscambio fileinterscambio = new S3Ti11Fileinterscambio();
                                        fileinterscambio.setTi11Progiscrizione(richiestaScarico.getTi04Progiscrizione());
                                        fileinterscambio.setTi11PeriodoA(richiestaScarico.getTi04PeriodoA());
                                        fileinterscambio.setTi11PeriodoDa((richiestaScarico.getTi04PeriodoDa()));
                                        fileinterscambio.setTi11FlagAss(richiestaScarico.getTi04FlagAss());
                                        fileinterscambio.setTi11Keydett(richiestaScarico.getTi04Keydett());
                                        fileinterscambio.setTi11Idfile(numeroFile);
                                        fileinterscambio.setTi11Progiscrizioneass(richiestaScarico.getTi04Progiscrizioneass());
                                        fileinterscambio.setFornituraZip(fileBlob);
                                        S3Ti11FileinterscambioDAO daoFornitura = new S3Ti11FileinterscambioDAO(fileinterscambio);
                                        helper.setDao(daoFornitura);
                                        helper.inserisciOggetto();
                                        Long idStato = StatoScarico.WEB_SERVICE_TERMINATO_CORRETTAMENTE.getId();
                                        SOAPFault fault = risposta.getSOAPBody().getFault();
                                        if(fault != null){
                                                S3Ti05Errlog logError = new S3Ti05Errlog();
                                                logError.setTi05Keyerrore(20006L);
                                                logError.setTi05Erroredett("(20006)" + fault.getFaultString());
                                                logError.setTi05Datetime(new Date());
                                                logError.setTi05Progiscrizione(richiestaScarico.getTi04Progiscrizione());
                                                logError.setTi05Keydett(richiestaScarico.getTi04Keydett());
                                                logError.setTi05FlagAss(richiestaScarico.getTi04FlagAss());
                                                logError.setTi05PeriodoA(richiestaScarico.getTi04PeriodoA());
                                                logError.setTi05PeriodoDa(richiestaScarico.getTi04PeriodoDa());
                                                logError.setTi05Progiscrizioneass(richiestaScarico.getTi04Progiscrizioneass());
                                                logError.setTi05NFile(richiestaScarico.getTi04NFile());
                                                logError.setTi05IdTraccia(clientSoap.getTracciaRichieste().getTi17IdTraccia());
                                                inserisciErrore(logError);
                                                idStato = StatoScarico.ERRORE_WEB_SERVICE.getId();
                                                log.error("(20006)" + fault.getFaultString());
                                                execute = false;
                                        }
                                        numeroFileTotale = getNumeroFileDaScaricare(risposta, datiScarico,richiestaScarico.getTi04FlagAss().booleanValue());
                                        richiestaScarico.setTi04NFile(numeroFile);
                                        richiestaScarico.setTi04NFileTot(numeroFileTotale);
                                        richiestaScarico.setTi04PresenzaFile(Boolean.TRUE);
                                        richiestaScarico.setTi04DatatimeInizio(new Date());
                                        richiestaScarico.setTi04DatatimeFine(new Date());
                                        S3Ti04ServizidettaglioDAO daoServizioDettaglio = new S3Ti04ServizidettaglioDAO(richiestaScarico);
                                        richiestaScarico.setTi04Codstato(idStato);
                                        helper.setDao(daoServizioDettaglio);
                                        helper.aggiornaOggettoByKey();
                                        numeroFile = numeroFile +1;
                                } catch (SOAPException | XMLStreamException | JAXBException | IOException | TransformerException e) {
                                        log.error("Errore durante chiamata al web service Agenzia " + e.getMessage(),e);
                                        e.printStackTrace();
                                        S3Ti05Errlog logError = new S3Ti05Errlog();
                                        logError.setTi05Keyerrore(20015L);
                                        logError.setTi05Erroredett("(20015)" + e.getMessage());
                                        logError.setTi05Datetime(new Date());
                                        logError.setTi05Progiscrizione(richiestaScarico.getTi04Progiscrizione());
                                        logError.setTi05Keydett(richiestaScarico.getTi04Keydett());
                                        logError.setTi05FlagAss(richiestaScarico.getTi04FlagAss());
                                        logError.setTi05PeriodoA(richiestaScarico.getTi04PeriodoA());
                                        logError.setTi05PeriodoDa(richiestaScarico.getTi04PeriodoDa());
                                        logError.setTi05Progiscrizioneass(richiestaScarico.getTi04Progiscrizioneass());
                                        logError.setTi05NFile(richiestaScarico.getTi04NFile());
                                        logError.setTi05IdTraccia(clientSoap.getTracciaRichieste().getTi17IdTraccia());
                                        inserisciErrore(logError);
                                        richiestaScarico.setTi04Codstato(StatoScarico.ERRORE_WEB_SERVICE_RIAVVIABILE.getId());
                                        S3Ti04ServizidettaglioDAO daoServizioDettaglio = new S3Ti04ServizidettaglioDAO(richiestaScarico);
                                        helper.setDao(daoServizioDettaglio);
                                        helper.aggiornaOggettoByKey();
                                        break;
                                }
                        } while(numeroFile <= numeroFileTotale);
                }
                return execute; 
        }

        





        private DatiSchedulazione calcolaPeriodo(Long periodicita, Date dataUnaTantum) {

                DatiSchedulazione datiSchedulazione = new DatiSchedulazione();
                int numeroMesi=0;
                switch (periodicita.intValue()) {
                case 0:
                        numeroMesi = 0;
                        break;  

                case 1:
                        numeroMesi = 12;                                
                        break;  

                case 2:
                        numeroMesi = 6;                 
                        break;  

                case 3:
                        numeroMesi = 4;                         
                        break;  

                case 4:
                        numeroMesi = 3;                         
                        break;  

                case 5:
                        numeroMesi = 2;                         
                        break;  

                case 6:
                        numeroMesi = 1;                         
                        break;  
                }
                if (numeroMesi != 0) {
                        Date periodoA = CalcoloDateUtil.calcolaUltimoDelMese(CalcoloDateUtil.addMonthsToDate(new Date(),-1));
                        datiSchedulazione.setPeriodoA(periodoA);
                        int mese = CalcoloDateUtil.getMese(periodoA);
                        if ((mese % numeroMesi) != 0) {
                                datiSchedulazione.setSchedulabile(false);
                        } else {
                                datiSchedulazione.setSchedulabile(true);
                                Date periodoDa = CalcoloDateUtil.calcolaPrimoDelMese(periodoA);
                                datiSchedulazione.setPeriodoDa(periodoDa);
                        }
                } else {
                        Date periodoDa = CalcoloDateUtil.calcolaPrimoDelMese(dataUnaTantum);
                        Date periodoA = CalcoloDateUtil.calcolaUltimoDelMese(dataUnaTantum);
                        datiSchedulazione.setPeriodoA(periodoA);
                        datiSchedulazione.setPeriodoDa(periodoDa);
                        datiSchedulazione.setSchedulabile(true);
                }
                return datiSchedulazione;
        }


        private int getNumeroFileDaScaricare(SOAPMessage risposta,DatiScarico dati,boolean isAssociato) throws BusinessException{
                int numeroFileTotali=0;
                try{
                        Iterator<?> filesInviati = risposta.getAttachments();
                        while (filesInviati.hasNext()) {
                                AttachmentPart  filePart = (AttachmentPart) filesInviati.next();
                                if(filePart.getContentType().toLowerCase().contains("text")){
                                        byte[] byteFileXML = filePart.getRawContentBytes();
                                        ByteArrayInputStream fileXML = new ByteArrayInputStream(byteFileXML);
                                        String xml = FirmaUtil.getXML(fileXML);
                                        numeroFileTotali=ParserFactory.getInstance().getNumeroFileDaScaricare(xml, Long.parseLong(dati.getServizio()),isAssociato);
                                        break;
                                } 
                        }
                        return numeroFileTotali;
                } catch(XMLStreamException |SOAPException | NumberFormatException | JAXBException e){
                        log.error("Errore parsing xml richiesta " + e.getMessage(),e);
                        throw new BusinessException(e);
                }  
        }

        @Override
        @SuppressWarnings("unchecked")
        public S3Ti01Comuni getComune(String codiceComune,String sezione) throws BusinessException{
                S3Ti01Comuni comune = new S3Ti01Comuni();
                comune.setTi01Keycom(codiceComune);
                comune.setTi01Keysez(sezione);
                S3Ti01ComuniDAO dao = new S3Ti01ComuniDAO(comune);
                BusinessHelper helper = new BusinessHelper(dao);
                List<S3Ti01Comuni> listaComuni = helper.cercaOggetti();
                return listaComuni.size() > 0 ? listaComuni.get(0) : null;
        }

        @Override
        public InputStream getDatiZip(S3Ti11Fileinterscambio fileInterscambio)  throws BusinessException {
                try {
                        S3Ti11FileinterscambioDAO dao = new S3Ti11FileinterscambioDAO(fileInterscambio);
                        BusinessHelper helper = new BusinessHelper(dao);
                        S3Ti11Fileinterscambio scarico = (S3Ti11Fileinterscambio) helper.cercaOggettoByKey();
                        return scarico.getTi11Blob().getBinaryStream();
                } catch (SerialException e) {
                        log.error("Errore dato zip " + e.getMessage());
                        throw new BusinessException(e);
                }
        }
        
        
        @Override
        public DateValidazione getPeriodoValidazione(String codComune) throws BusinessException {
                S3Ti01Comuni comune = new S3Ti01Comuni();
                comune.setTi01Keycom(codComune);
                RicercaPeriodoValdiazioneDAO ricercaDAO = new RicercaPeriodoValdiazioneDAO(comune);
                BusinessHelper helper = new BusinessHelper(ricercaDAO);
                return (DateValidazione) helper.cercaOggetto();
        }
        
        @Override
        public S3Ti07Protocolli getNomeFornitura(String nomeFornitura) throws BusinessException {
                S3Ti07Protocolli protocolli = new S3Ti07Protocolli();
                protocolli.setTi07NomeFornitura(nomeFornitura);
                RicercaNomeFornituraDAO ricercaDAO = new RicercaNomeFornituraDAO(protocolli);
                BusinessHelper helper = new BusinessHelper(ricercaDAO);
                return (S3Ti07Protocolli) helper.cercaOggetto();
        }
        
        
        public void inserisciErrore(S3Ti05Errlog errore) throws BusinessException{
                SequenceDAO sequenceDAO  = new SequenceDAO("TI05_SEQ");
                BusinessHelper helper = new BusinessHelper(sequenceDAO);
                Long id = (Long)helper.cercaOggetto();
                errore.setTi05Id(new BigDecimal(id));
                S3Ti05ErrlogDAO daoErrrore = new S3Ti05ErrlogDAO(errore);
                helper.setDao(daoErrrore);
                helper.inserisciOggetto();
        }
        

}