private MovimentoContabileListaDTO setListaDto(MovimentoContabile item, bool importiNegativi, IArchiviazioneOtticaService archiviazioneService)
        {
            try
            {
                var dto = new MovimentoContabileListaDTO
                {
                    ID = item.ID,
                    IdTestata = item.Testata.ID,
                    Data = item.Testata.DataRegistrazione.GetValueOrDefault(),
                    Causale = item.Causale.DescrizioneCompleta,
                    IdCondominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.ID,
                    Condominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.DisplayName,
                    IdEsercizio = item.Testata.EsercizioRiferimento.ID,
                    Esercizio = item.Testata.EsercizioRiferimento.DisplayName,
                    IdConto = item.ContoRiferimento.ID,
                    Conto = item.ContoRiferimento.Descrizione,
                    TipoConto = item.ContoRiferimento.Tipo.ToString(),
                    Descrizione = item.GetDescrizione(),
                    Importo = !importiNegativi ? item.GetImportoSenzaSegno() : item.GetImportoConSegno(),
                    ImportoResiduoEvasione = item.GetImportoSenzaSegno(),
                    Stato = item.Stato
                };

                if(item.ImportoEvasioneTransitorio != null)
                    dto.ImportoResiduoEvasione -= item.ImportoEvasioneTransitorio;

                dto.Segno = item.Segno;

                dto.Note = item.Note;
                dto.NumeroRegistrazione = item.NumeroRegistrazione;
                dto.NumeroAssegno = item.NumeroAssegno;
                dto.NumeroRiga = item.NumeroRiga;

                if (item.EvasioneBancaria != null)
                    dto.IdEvasioneBancaria = item.EvasioneBancaria.ID;

                if (item.FornitoreRiferimento != null)
                {
                    dto.IdFornitore = item.FornitoreRiferimento.ID;
                    dto.Nominativo = item.FornitoreRiferimento.DisplayName;
                }

                if (item.CondominoRiferimento != null)
                {
                    dto.IdCondomino = item.CondominoRiferimento.ID;
                    dto.Nominativo = item.CondominoRiferimento.Persona.DisplayName;
                }

                if(item.DettaglioRiferimento != null)
                    dto.IdDettaglio = item.DettaglioRiferimento.ID;
                if (item.SottoContoRiferimento != null)
                {
                    dto.IdSottoConto = item.SottoContoRiferimento.ID;
                    dto.SottoConto = item.SottoContoRiferimento.GetDescrizione(item.Testata.EsercizioRiferimento, null, item);
                }
                else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoBancario() && item.ContoCorrenteBancario != null)
                {
                    dto.IdSottoConto = item.ContoCorrenteBancario.ID * -1;
                    dto.SottoConto = item.ContoCorrenteBancario.DisplayName;
                }
                else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoFornitori() && item.FornitoreRiferimento != null)
                {
                    dto.IdSottoConto = item.FornitoreRiferimento.ID * -1;
                    dto.SottoConto = item.FornitoreRiferimento.DisplayName;
                }

                var spesaRiferimento = item.Testata.SpesaRiferimento;
                if (spesaRiferimento == null && item.DettaglioRiferimento != null)
                    spesaRiferimento = item.DettaglioRiferimento.SpesaRiferimento;

                // =============================================================================================
                //  Commentato rendeva troppo lenta la ricerca dei movimenti - bugid#2967
                // =============================================================================================
                //if(spesaRiferimento == null)
                //{
                //    Pagamento pagamento = null;
                //    if(pagamenti == null)
                //        pagamento = daoFactory.GetPagamentoDao().GetByMovimentoContabile(item);
                //    else
                //        pagamento = pagamenti.FirstOrDefault(itemPagamento => itemPagamento.MovimentoContabile != null && itemPagamento.MovimentoContabile.ID == item.ID);
                //    if (pagamento != null)
                //        spesaRiferimento = pagamento.ScadenzaRiferimento.SpesaRiferimento;
                //}
                // =============================================================================================

                if (spesaRiferimento != null)
                {
                    dto.IdSpesa = spesaRiferimento.ID;
                    dto.NumeroProtocollo = spesaRiferimento.NumeroProtocollo;
                    dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(spesaRiferimento, true);
                    dto.StatoSpesa = spesaRiferimento.Stato;
                    dto.TipoDocumentoSpesa = spesaRiferimento.TipoDocumento;
                }
                else
                {
                    dto.NumeroProtocollo = item.Testata.NumeroProtocollo;
                    if (dto.NumeroProtocollo > 0)
                        dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(item.Testata);
                    else if (item.DettaglioRiferimento != null && item.DettaglioRiferimento.SpesaRiferimento != null)
                        dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(item.DettaglioRiferimento.SpesaRiferimento, true);
                }
                
                dto.IsAllowOpenDettaglio = item.Testata.NumeroProtocollo > 0 || dto.IdSpesa > 0;

                return dto;
            }
            catch (Exception ex)
            {
                if (item != null)
                {
                    
                    _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - id:" + item.ID, ex);
                }
                else
                {
                    
                    _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - Movimento --> null", ex);
                }
                throw;
            }
        }
        private MovimentoContabileGenericoDTO setGenericoDto(MovimentoContabile item)
        {
            try
            {
                var dto = new MovimentoContabileGenericoDTO
                {
                    ID = item.ID,
                    IdTestata = item.Testata.ID,
                    IdEsercizio = item.Testata.EsercizioRiferimento.ID,
                    IdCondominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.ID,
                    IdConto = item.ContoRiferimento.ID,
                    Note = item.Note,
                    NumeroRiga = item.NumeroRiga,
                    NumeroRegistrazione = item.NumeroRegistrazione,
                    NumeroAssegno = item.NumeroAssegno,
                    Segno = item.Segno,
                    Descrizione = item.Descrizione
                };

                // Importo
                switch (item.Segno)
                {
                    case "D":
                        dto.ImportoDare = item.GetImportoSenzaSegno();
                        break;
                    case "A":
                        dto.ImportoAvere = item.GetImportoSenzaSegno();
                        break;
                }

                // SottoConto
                if (item.SottoContoRiferimento != null)
                    dto.IdSottoConto = item.SottoContoRiferimento.ID;
                else if (item.ContoCorrenteBancario != null)
                    dto.IdSottoConto = item.ContoCorrenteBancario.ID * -1;
                else if ((item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoFornitori() || item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoRitenuta()) && item.FornitoreRiferimento != null)
                    dto.IdSottoConto = item.FornitoreRiferimento.ID * -1;
                
                // Soggetti
                if (item.FornitoreRiferimento != null)
                    dto.IdFornitore = item.FornitoreRiferimento.ID;
                if (item.CondominoRiferimento != null)
                    dto.IdCondomino = item.CondominoRiferimento.ID;

                // Spesa
                if (item.Testata.SpesaRiferimento != null)
                {
                    dto.IdSpesa = item.Testata.SpesaRiferimento.ID;
                    dto.StatoSpesa = item.Testata.SpesaRiferimento.Stato;
                    dto.TipoDocumentoSpesa = item.Testata.SpesaRiferimento.TipoDocumento;
                }

                // Evasione Bancaria
                if (item.EvasioneBancaria != null)
                    dto.IdEvasioneBancaria = item.EvasioneBancaria.ID;

                dto.IsAllowOpenDettaglio = item.Testata.NumeroProtocollo > 0 || dto.IdSpesa > 0;

                return dto;
            }
            catch (Exception ex)
            {
                if (item != null)
                {
                    
                    _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - id:" + item.ID, ex);
                }
                else
                {
                    
                    _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - Movimento --> null", ex);
                }
                throw;
            }
        }