it.govpay.web.rs.dars.monitoraggio.rendicontazioni.RendicontazioniHandler.java Source code

Java tutorial

Introduction

Here is the source code for it.govpay.web.rs.dars.monitoraggio.rendicontazioni.RendicontazioniHandler.java

Source

/*
 * GovPay - Porta di Accesso al Nodo dei Pagamenti SPC 
 * http://www.gov4j.it/govpay
 * 
 * Copyright (c) 2014-2017 Link.it srl (http://www.link.it).
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3, as published by
 * the Free Software Foundation.
 *
 * 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package it.govpay.web.rs.dars.monitoraggio.rendicontazioni;

import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipOutputStream;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.UriInfo;

import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.Logger;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
import org.openspcoop2.generic_project.exception.NotFoundException;
import org.openspcoop2.generic_project.exception.ServiceException;
import org.openspcoop2.generic_project.expression.SortOrder;

import it.govpay.bd.BasicBD;
import it.govpay.bd.FilterSortWrapper;
import it.govpay.bd.anagrafica.AnagraficaManager;
import it.govpay.bd.model.Dominio;
import it.govpay.bd.model.Fr;
import it.govpay.bd.model.Pagamento;
import it.govpay.bd.model.Rendicontazione;
import it.govpay.bd.model.SingoloVersamento;
import it.govpay.bd.pagamento.RendicontazioniBD;
import it.govpay.bd.pagamento.filters.RendicontazioneFilter;
import it.govpay.model.Rendicontazione.Anomalia;
import it.govpay.model.Rendicontazione.EsitoRendicontazione;
import it.govpay.model.Rendicontazione.StatoRendicontazione;
import it.govpay.web.rs.dars.anagrafica.domini.Domini;
import it.govpay.web.rs.dars.anagrafica.domini.DominiHandler;
import it.govpay.web.rs.dars.base.DarsHandler;
import it.govpay.web.rs.dars.base.DarsService;
import it.govpay.web.rs.dars.exception.ConsoleException;
import it.govpay.web.rs.dars.exception.DeleteException;
import it.govpay.web.rs.dars.exception.DuplicatedEntryException;
import it.govpay.web.rs.dars.exception.ExportException;
import it.govpay.web.rs.dars.exception.ValidationException;
import it.govpay.web.rs.dars.handler.IDarsHandler;
import it.govpay.web.rs.dars.model.Dettaglio;
import it.govpay.web.rs.dars.model.Elemento;
import it.govpay.web.rs.dars.model.Elenco;
import it.govpay.web.rs.dars.model.InfoForm;
import it.govpay.web.rs.dars.model.InfoForm.Sezione;
import it.govpay.web.rs.dars.model.RawParamValue;
import it.govpay.web.rs.dars.model.Voce;
import it.govpay.web.rs.dars.model.input.ParamField;
import it.govpay.web.rs.dars.model.input.base.InputText;
import it.govpay.web.rs.dars.model.input.base.SelectList;
import it.govpay.web.rs.dars.monitoraggio.pagamenti.Pagamenti;
import it.govpay.web.rs.dars.monitoraggio.pagamenti.PagamentiHandler;
import it.govpay.web.utils.Utils;

public class RendicontazioniHandler extends DarsHandler<Rendicontazione> implements IDarsHandler<Rendicontazione> {

    private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); //  HH:mm  
    //private SimpleDateFormat simpleDateFormatAnno = new SimpleDateFormat("yyyy");

    public RendicontazioniHandler(Logger log, DarsService darsService) {
        super(log, darsService);
    }

    @Override
    public Elenco getElenco(UriInfo uriInfo, BasicBD bd) throws WebApplicationException, ConsoleException {
        String methodName = "getElenco " + this.titoloServizio;
        try {
            // Operazione consentita solo agli utenti che hanno almeno un ruolo consentito per la funzionalita'
            this.darsService.checkDirittiServizio(bd, this.funzionalita);

            Integer offset = this.getOffset(uriInfo);
            Integer limit = this.getLimit(uriInfo);

            this.log.info("Esecuzione " + methodName + " in corso...");

            boolean simpleSearch = this.containsParameter(uriInfo, DarsService.SIMPLE_SEARCH_PARAMETER_ID);
            RendicontazioniBD frBD = new RendicontazioniBD(bd);
            RendicontazioneFilter filter = frBD.newFilter(simpleSearch);
            filter.setOffset(offset);
            filter.setLimit(limit);
            FilterSortWrapper fsw = new FilterSortWrapper();
            fsw.setField(it.govpay.orm.Rendicontazione.model().DATA);
            fsw.setSortOrder(SortOrder.DESC);
            filter.getFilterSortList().add(fsw);

            Set<Long> setDomini = this.darsService.getIdDominiAbilitatiLetturaServizio(bd, this.funzionalita);
            boolean eseguiRicerca = !setDomini.isEmpty();
            List<Long> idDomini = new ArrayList<Long>();

            Map<String, String> params = new HashMap<String, String>();
            String idFlussoId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".idFr.id");
            String idFlusso = this.getParameter(uriInfo, idFlussoId, String.class);
            params.put(idFlussoId, idFlusso);

            if (StringUtils.isNotEmpty(idFlusso)) {
                try {
                    filter.setIdFr(Long.parseLong(idFlusso));
                } catch (Exception e) {
                    filter.setIdFr(-1L);
                    eseguiRicerca = false;
                }
            }

            if (simpleSearch) {
                // simplesearch
                String simpleSearchString = this.getParameter(uriInfo, DarsService.SIMPLE_SEARCH_PARAMETER_ID,
                        String.class);
                params.put(DarsService.SIMPLE_SEARCH_PARAMETER_ID, simpleSearchString);

                if (StringUtils.isNotEmpty(simpleSearchString)) {
                    filter.setSimpleSearchString(simpleSearchString);
                }
            } else {
                String statoId = Utils.getInstance(this.getLanguage())
                        .getMessageFromResourceBundle(this.nomeServizio + ".stato.id");
                String stato = this.getParameter(uriInfo, statoId, String.class);

                if (StringUtils.isNotEmpty(stato))
                    filter.setStato(StatoRendicontazione.valueOf(stato));

                String tipoId = Utils.getInstance(this.getLanguage())
                        .getMessageFromResourceBundle(this.nomeServizio + ".tipo.id");
                String tipo = this.getParameter(uriInfo, tipoId, String.class);

                if (StringUtils.isNotEmpty(tipo))
                    filter.setTipo(tipo);

                String iuvId = Utils.getInstance(this.getLanguage())
                        .getMessageFromResourceBundle(this.nomeServizio + ".iuv.id");
                String iuv = this.getParameter(uriInfo, iuvId, String.class);

                if (StringUtils.isNotEmpty(iuv))
                    filter.setIuv(iuv);
            }

            if (eseguiRicerca && !setDomini.contains(-1L)) {
                List<Long> lstCodDomini = new ArrayList<Long>();
                lstCodDomini.addAll(setDomini);
                idDomini.addAll(setDomini);
                filter.setIdDomini(toListCodDomini(idDomini, bd));
            }

            long count = eseguiRicerca ? frBD.count(filter) : 0;

            // visualizza la ricerca solo se i risultati sono > del limit
            boolean visualizzaRicerca = this.visualizzaRicerca(count, limit);
            InfoForm infoRicerca = this.getInfoRicerca(uriInfo, bd, visualizzaRicerca, params);

            String formatter = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".elenco.formatter");
            String simpleSearchPlaceholder = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".simpleSearch.placeholder");
            Elenco elenco = new Elenco(this.titoloServizio, infoRicerca, this.getInfoCreazione(uriInfo, bd), count,
                    this.getInfoEsportazione(uriInfo, bd, params), this.getInfoCancellazione(uriInfo, bd, params),
                    simpleSearchPlaceholder);

            List<Rendicontazione> findAll = eseguiRicerca ? frBD.findAll(filter) : new ArrayList<Rendicontazione>();

            if (findAll != null && findAll.size() > 0) {
                for (Rendicontazione entry : findAll) {
                    Elemento elemento = this.getElemento(entry, entry.getId(), null, bd);
                    elemento.setFormatter(formatter);
                    elenco.getElenco().add(elemento);
                }
            }

            this.log.info("Esecuzione " + methodName + " completata.");

            return elenco;
        } catch (WebApplicationException e) {
            throw e;
        } catch (Exception e) {
            throw new ConsoleException(e);
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public InfoForm getInfoRicerca(UriInfo uriInfo, BasicBD bd, boolean visualizzaRicerca,
            Map<String, String> parameters) throws ConsoleException {
        URI ricerca = this.getUriRicerca(uriInfo, bd, parameters);
        InfoForm infoRicerca = new InfoForm(ricerca);

        if (visualizzaRicerca) {
            String statoId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".stato.id");
            String tipoId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".tipo.id");
            String iuvId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".iuv.id");

            if (this.infoRicercaMap == null) {
                this.initInfoRicerca(uriInfo, bd);
            }
            Sezione sezioneRoot = infoRicerca.getSezioneRoot();

            // stato
            List<Voce<String>> stati = new ArrayList<Voce<String>>();
            SelectList<String> stato = (SelectList<String>) infoRicercaMap.get(statoId);
            stati.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle("commons.label.qualsiasi"),
                    ""));
            stati.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".stato." + StatoRendicontazione.OK),
                    StatoRendicontazione.OK.toString()));
            stati.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".stato." + StatoRendicontazione.ANOMALA),
                    StatoRendicontazione.ANOMALA.toString()));
            stati.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".stato." + StatoRendicontazione.ALTRO_INTERMEDIARIO),
                    StatoRendicontazione.ALTRO_INTERMEDIARIO.toString()));
            stato.setDefaultValue("");
            stato.setValues(stati);
            sezioneRoot.addField(stato);

            // tipo
            List<Voce<String>> tipi = new ArrayList<Voce<String>>();
            SelectList<String> tipo = (SelectList<String>) infoRicercaMap.get(tipoId);
            tipi.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle("commons.label.qualsiasi"),
                    ""));
            tipi.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".esito." + EsitoRendicontazione.ESEGUITO),
                    EsitoRendicontazione.ESEGUITO.toString()));
            tipi.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".esito." + EsitoRendicontazione.ESEGUITO_SENZA_RPT),
                    EsitoRendicontazione.ESEGUITO_SENZA_RPT.toString()));
            tipi.add(new Voce<String>(
                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".esito." + EsitoRendicontazione.REVOCATO),
                    EsitoRendicontazione.REVOCATO.toString()));
            tipo.setDefaultValue("");
            tipo.setValues(tipi);
            sezioneRoot.addField(tipo);

            // iuv
            InputText iuv = (InputText) infoRicercaMap.get(iuvId);
            iuv.setDefaultValue(null);
            sezioneRoot.addField(iuv);

        }
        return infoRicerca;
    }

    private void initInfoRicerca(UriInfo uriInfo, BasicBD bd) throws ConsoleException {
        if (this.infoRicercaMap == null) {
            this.infoRicercaMap = new HashMap<String, ParamField<?>>();

            String statoId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".stato.id");
            String tipoId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".tipo.id");
            String iuvId = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".iuv.id");

            // iuv
            String iuvLabel = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".iuv.label");
            InputText iuv = new InputText(iuvId, iuvLabel, null, false, false, true, 0, 35);
            this.infoRicercaMap.put(iuvId, iuv);

            List<Voce<String>> stati = new ArrayList<Voce<String>>();
            // stato
            String statoLabel = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".stato.label");
            SelectList<String> stato = new SelectList<String>(statoId, statoLabel, null, false, false, true, stati);
            infoRicercaMap.put(statoId, stato);

            List<Voce<String>> tipi = new ArrayList<Voce<String>>();
            // tipo
            String tipoLabel = Utils.getInstance(this.getLanguage())
                    .getMessageFromResourceBundle(this.nomeServizio + ".tipo.label");
            SelectList<String> tipo = new SelectList<String>(tipoId, tipoLabel, null, false, false, true, tipi);
            infoRicercaMap.put(tipoId, tipo);
        }
    }

    @Override
    public Object getField(UriInfo uriInfo, List<RawParamValue> values, String fieldId, BasicBD bd)
            throws WebApplicationException, ConsoleException {
        return null;
    }

    @Override
    public Object getSearchField(UriInfo uriInfo, List<RawParamValue> values, String fieldId, BasicBD bd)
            throws WebApplicationException, ConsoleException {
        return null;
    }

    @Override
    public Object getDeleteField(UriInfo uriInfo, List<RawParamValue> values, String fieldId, BasicBD bd)
            throws WebApplicationException, ConsoleException {
        return null;
    }

    @Override
    public Object getExportField(UriInfo uriInfo, List<RawParamValue> values, String fieldId, BasicBD bd)
            throws WebApplicationException, ConsoleException {
        return null;
    }

    @Override
    public Dettaglio getDettaglio(long id, UriInfo uriInfo, BasicBD bd)
            throws WebApplicationException, ConsoleException {
        String methodName = "dettaglio " + this.titoloServizio + "." + id;

        try {
            this.log.info("Esecuzione " + methodName + " in corso...");
            // Operazione consentita solo ai ruoli con diritto di lettura
            this.darsService.checkDirittiServizioLettura(bd, this.funzionalita);
            RendicontazioniBD frBD = new RendicontazioniBD(bd);
            Set<Long> setDomini = this.darsService.getIdDominiAbilitatiLetturaServizio(bd, this.funzionalita);
            boolean eseguiRicerca = !setDomini.isEmpty();

            if (eseguiRicerca && !setDomini.contains(-1L)) {
                List<Long> idDomini = new ArrayList<Long>();
                RendicontazioneFilter filter = frBD.newFilter();

                List<Long> lstCodDomini = new ArrayList<Long>();
                lstCodDomini.addAll(setDomini);
                idDomini.addAll(setDomini);
                filter.setIdDomini(toListCodDomini(idDomini, bd));
                List<Long> idRendL = new ArrayList<Long>();
                idRendL.add(id);
                filter.setIdRendicontazione(idRendL);

                long count = eseguiRicerca ? frBD.count(filter) : 0;
                eseguiRicerca = eseguiRicerca && count > 0;
            }

            // recupero oggetto
            Rendicontazione rendicontazione = eseguiRicerca ? frBD.getRendicontazione(id) : null;

            InfoForm infoModifica = null;
            InfoForm infoCancellazione = rendicontazione != null
                    ? this.getInfoCancellazioneDettaglio(uriInfo, bd, rendicontazione)
                    : null;
            InfoForm infoEsportazione = rendicontazione != null
                    ? this.getInfoEsportazioneDettaglio(uriInfo, bd, rendicontazione)
                    : null;

            String titolo = rendicontazione != null ? this.getTitolo(rendicontazione, bd) : "";
            Dettaglio dettaglio = new Dettaglio(titolo, infoEsportazione, infoCancellazione, infoModifica);

            it.govpay.web.rs.dars.model.Sezione root = dettaglio.getSezioneRoot();

            String codDominio = null;
            if (rendicontazione != null) {
                Pagamento pagamento = rendicontazione.getPagamento(bd);
                if (pagamento != null) {
                    codDominio = pagamento.getCodDominio();
                } else {
                    Fr fr = rendicontazione.getFr(bd);
                    codDominio = fr.getCodDominio();
                }

                // dominio
                if (StringUtils.isNotEmpty(codDominio)) {
                    try {
                        Dominio dominio = AnagraficaManager.getDominio(bd, codDominio);
                        Domini dominiDars = new Domini();
                        DominiHandler dominiDarsHandler = (DominiHandler) dominiDars.getDarsHandler();
                        Elemento elemento = dominiDarsHandler.getElemento(dominio, dominio.getId(),
                                dominiDars.getPathServizio(), bd);
                        root.addVoce(
                                Utils.getInstance(this.getLanguage())
                                        .getMessageFromResourceBundle(this.nomeServizio + ".dominio.label"),
                                elemento.getTitolo(), elemento.getUri());
                    } catch (NotFoundException e) {
                    }
                }

                // iur
                if (StringUtils.isNotEmpty(rendicontazione.getIur())) {
                    root.addVoce(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".iur.label"), rendicontazione.getIur());
                }

                if (StringUtils.isNotEmpty(rendicontazione.getIuv())) {
                    root.addVoce(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".iuv.label"), rendicontazione.getIuv());
                }

                if (rendicontazione.getData() != null) {
                    root.addVoce(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".data.label"), this.sdf.format(rendicontazione.getData()));
                }

                BigDecimal importoPagato = rendicontazione.getImporto() != null ? rendicontazione.getImporto()
                        : BigDecimal.ZERO;
                root.addVoce(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                        this.nomeServizio + ".importo.label"), importoPagato.doubleValue() + "");

                StatoRendicontazione stato = rendicontazione.getStato();
                if (stato != null) {
                    root.addVoce(
                            Utils.getInstance(this.getLanguage())
                                    .getMessageFromResourceBundle(this.nomeServizio + ".stato.label"),
                            Utils.getInstance(this.getLanguage())
                                    .getMessageFromResourceBundle(this.nomeServizio + ".stato." + stato.name()));
                }

                EsitoRendicontazione esito = rendicontazione.getEsito();
                if (esito != null) {
                    root.addVoce(
                            Utils.getInstance(this.getLanguage())
                                    .getMessageFromResourceBundle(this.nomeServizio + ".esito.label"),
                            Utils.getInstance(this.getLanguage())
                                    .getMessageFromResourceBundle(this.nomeServizio + ".esito." + esito.name()));
                }

                if (pagamento != null) {
                    Pagamenti pagamentiDars = new Pagamenti();
                    PagamentiHandler pagamentiDarsHandler = (PagamentiHandler) pagamentiDars.getDarsHandler();

                    SingoloVersamento singoloVersamento = pagamento.getSingoloVersamento(bd);
                    if (singoloVersamento != null) {
                        Elemento elemento = pagamentiDarsHandler.getElemento(pagamento, pagamento.getId(),
                                pagamentiDars.getPathServizio(), bd);
                        root.addVoce(
                                Utils.getInstance(this.getLanguage())
                                        .getMessageFromResourceBundle(this.nomeServizio + ".idPagamento.label"),
                                singoloVersamento.getCodSingoloVersamentoEnte(), elemento.getUri());
                    }
                }

                if (rendicontazione.getAnomalie() != null && rendicontazione.getAnomalie().size() > 0) {
                    String etichettaSezioneAnomalie = Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".sezioneAnomalie.label");
                    it.govpay.web.rs.dars.model.Sezione sezioneAnomalie = dettaglio
                            .addSezione(etichettaSezioneAnomalie);

                    for (Anomalia anomalia : rendicontazione.getAnomalie()) {
                        sezioneAnomalie.addVoce(anomalia.getCodice(), anomalia.getDescrizione());
                    }
                }
            }

            this.log.info("Esecuzione " + methodName + " completata.");

            return dettaglio;
        } catch (WebApplicationException e) {
            throw e;
        } catch (Exception e) {
            throw new ConsoleException(e);
        }
    }

    @Override
    public String getTitolo(Rendicontazione entry, BasicBD bd) {
        StringBuilder sb = new StringBuilder();

        String codFlusso = entry.getIur();
        Date dataFlusso = entry.getData();

        sb.append(Utils.getInstance(this.getLanguage()).getMessageWithParamsFromResourceBundle(
                this.nomeServizio + ".label.titolo", codFlusso, this.sdf.format(dataFlusso)));

        return sb.toString();
    }

    @Override
    public String getSottotitolo(Rendicontazione entry, BasicBD bd) {
        StringBuilder sb = new StringBuilder();
        StatoRendicontazione stato = entry.getStato();
        EsitoRendicontazione esito = entry.getEsito();

        sb.append(Utils.getInstance(this.getLanguage()).getMessageWithParamsFromResourceBundle(
                this.nomeServizio + ".label.sottotitolo",
                Utils.getInstance(this.getLanguage())
                        .getMessageFromResourceBundle(this.nomeServizio + ".esito.label." + esito.name()),
                Utils.getInstance(this.getLanguage())
                        .getMessageFromResourceBundle(this.nomeServizio + ".stato." + stato.name())));
        return sb.toString();
    }

    @Override
    public Map<String, Voce<String>> getVoci(Rendicontazione entry, BasicBD bd) throws ConsoleException {
        Map<String, Voce<String>> voci = new HashMap<String, Voce<String>>();

        if (StringUtils.isNotEmpty(entry.getIuv())) {
            voci.put(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".iuv.id"),
                    new Voce<String>(Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".iuv.label"), entry.getIuv()));
        }

        if (StringUtils.isNotEmpty(entry.getIur())) {
            voci.put(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".iur.id"),
                    new Voce<String>(Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".iur.label"), entry.getIur()));
        }

        StatoRendicontazione stato = entry.getStato();
        if (stato != null) {
            voci.put(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".stato.id"),
                    new Voce<String>(this.getSottotitolo(entry, bd), stato.name()));
        }

        EsitoRendicontazione esito = entry.getEsito();
        if (stato != null) {
            voci.put(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".esito.id"),
                    new Voce<String>(esito.name(), esito.getCodifica() + ""));
        }

        if (entry.getData() != null) {
            voci.put(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".data.id"),
                    new Voce<String>(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                            this.nomeServizio + ".data.label"), this.sdf.format(entry.getData())));
        }

        BigDecimal importoPagato = entry.getImporto() != null ? entry.getImporto() : BigDecimal.ZERO;
        voci.put(
                Utils.getInstance(this.getLanguage())
                        .getMessageFromResourceBundle(this.nomeServizio + ".importo.id"),
                new Voce<String>(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                        this.nomeServizio + ".importo.label"), importoPagato.doubleValue() + ""));

        if (entry.getAnomalie() != null && entry.getAnomalie().size() > 0) {
            voci.put(
                    Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".anomalie.id"),
                    new Voce<String>(Utils.getInstance(this.getLanguage())
                            .getMessageFromResourceBundle(this.nomeServizio + ".anomalie.label"), ""));

            for (int i = 0; i < entry.getAnomalie().size(); i++) {
                Anomalia anomalia = entry.getAnomalie().get(i);
                voci.put(
                        Utils.getInstance(this.getLanguage())
                                .getMessageFromResourceBundle(this.nomeServizio + ".anomalie.id") + "_" + i,
                        new Voce<String>(anomalia.getCodice(), anomalia.getDescrizione()));
            }
        }
        try {
            Pagamento pagamento = entry.getPagamento(bd);
            String codDominio = null;
            if (pagamento != null) {
                codDominio = pagamento.getCodDominio();

                SingoloVersamento singoloVersamento = pagamento.getSingoloVersamento(bd);
                if (singoloVersamento != null) {
                    voci.put(
                            Utils.getInstance(this.getLanguage())
                                    .getMessageFromResourceBundle(this.nomeServizio + ".codSingoloVersamento.id"),
                            new Voce<String>(
                                    Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                                            this.nomeServizio + ".codSingoloVersamento.label"),
                                    singoloVersamento.getCodSingoloVersamentoEnte()));
                }

            } else {
                Fr fr = entry.getFr(bd);
                codDominio = fr.getCodDominio();
            }

            if (StringUtils.isNotEmpty(codDominio)) {
                try {
                    Dominio dominio = AnagraficaManager.getDominio(bd, codDominio);
                    Domini dominiDars = new Domini();
                    DominiHandler dominiDarsHandler = (DominiHandler) dominiDars.getDarsHandler();
                    String dominioTitolo = dominiDarsHandler.getTitolo(dominio, bd);
                    voci.put(
                            Utils.getInstance(this.getLanguage())
                                    .getMessageFromResourceBundle(this.nomeServizio + ".dominio.id"),
                            new Voce<String>(Utils.getInstance(this.getLanguage()).getMessageFromResourceBundle(
                                    this.nomeServizio + ".dominio.label"), dominioTitolo));
                } catch (NotFoundException e) {
                }
            }
        } catch (ServiceException e) {

        }

        return voci;

    }

    @Override
    public String esporta(List<Long> idsToExport, List<RawParamValue> rawValues, UriInfo uriInfo, BasicBD bd,
            ZipOutputStream zout) throws WebApplicationException, ConsoleException, ExportException {
        return null;
    }

    @Override
    public String esporta(Long idToExport, List<RawParamValue> rawValues, UriInfo uriInfo, BasicBD bd,
            ZipOutputStream zout) throws WebApplicationException, ConsoleException, ExportException {
        return null;
    }

    /* Creazione/Update non consentiti**/

    @Override
    public InfoForm getInfoCancellazione(UriInfo uriInfo, BasicBD bd, Map<String, String> parameters)
            throws ConsoleException {
        return null;
    }

    @Override
    public InfoForm getInfoCancellazioneDettaglio(UriInfo uriInfo, BasicBD bd, Rendicontazione entry)
            throws ConsoleException {
        return null;
    }

    @Override
    public InfoForm getInfoEsportazione(UriInfo uriInfo, BasicBD bd, Map<String, String> parameters)
            throws ConsoleException {
        InfoForm infoEsportazione = null;
        try {
            if (this.darsService.isServizioAbilitatoLettura(bd, this.funzionalita)) {
                URI esportazione = this.getUriEsportazione(uriInfo, bd);
                infoEsportazione = new InfoForm(esportazione);
            }
        } catch (ServiceException e) {
            throw new ConsoleException(e);
        }
        return infoEsportazione;
    }

    @Override
    public InfoForm getInfoEsportazioneDettaglio(UriInfo uriInfo, BasicBD bd, Rendicontazione entry)
            throws ConsoleException {
        InfoForm infoEsportazione = null;
        try {
            if (this.darsService.isServizioAbilitatoLettura(bd, this.funzionalita)) {
                URI esportazione = this.getUriEsportazioneDettaglio(uriInfo, bd, entry.getId());
                infoEsportazione = new InfoForm(esportazione);
            }
        } catch (ServiceException e) {
            throw new ConsoleException(e);
        }
        return infoEsportazione;
    }

    @Override
    public InfoForm getInfoCreazione(UriInfo uriInfo, BasicBD bd) throws ConsoleException {
        return null;
    }

    @Override
    public InfoForm getInfoModifica(UriInfo uriInfo, BasicBD bd, Rendicontazione entry) throws ConsoleException {
        return null;
    }

    @Override
    public Elenco delete(List<Long> idsToDelete, List<RawParamValue> rawValues, UriInfo uriInfo, BasicBD bd)
            throws WebApplicationException, ConsoleException, DeleteException {
        return null;
    }

    @Override
    public Rendicontazione creaEntry(InputStream is, UriInfo uriInfo, BasicBD bd)
            throws WebApplicationException, ConsoleException {
        return null;
    }

    @Override
    public Dettaglio insert(InputStream is, UriInfo uriInfo, BasicBD bd)
            throws WebApplicationException, ConsoleException, ValidationException, DuplicatedEntryException {
        return null;
    }

    @Override
    public void checkEntry(Rendicontazione entry, Rendicontazione oldEntry) throws ValidationException {
    }

    @Override
    public Dettaglio update(InputStream is, UriInfo uriInfo, BasicBD bd)
            throws WebApplicationException, ConsoleException, ValidationException {
        return null;
    }

    @Override
    public Object uplaod(MultipartFormDataInput input, UriInfo uriInfo, BasicBD bd)
            throws WebApplicationException, ConsoleException, ValidationException {
        return null;
    }
}