Пример #1
0
        private RisultatoElaborazioneCBI confermaMovimento(IList<MovimentiBancariControlloDuplicatiDTO> listaMovimentiBancari)
        {
            try
            {
                RisultatoElaborazioneCBI anomalie = null;

                if (_importo > 0 && _valuta != null && _dataContabile != null)
                {
                    try
                    {
                        var alreadyLoaded = isMovimentoAlreadyLoaded(_importo.GetValueOrDefault(), _segno, _valuta.GetValueOrDefault(), _dataContabile.GetValueOrDefault(), _descrizione, _descrizioneBreve, _causale, _abi, _cab, _contoCorrente, listaMovimentiBancari);
                        if (!alreadyLoaded)
                        {
                            var mov = new MovimentoBancario(_abi, _cab, _contoCorrente, _importo, _segno, _valuta, _dataContabile, _causale, _file)
                            {
                                NumeroAssegno = _numeroAssegno,
                                NumeroCRO = _numeroCRO,
                                NumeroDistinta = _numeroDistinta,
                                Descrizione = _descrizione,
                                DescrizioneBreve = _descrizioneBreve,
                                AbiFornitore = _abiFornitore,
                                CabFornitore = _cabFornitore,
                                NomeFornitore = _nomeFornitore,
                                AbiOrdinante = _abiOrdinante,
                                CabOrdinante = _cabOrdinante,
                                NomeOrdinante = _nomeOrdinante
                            };

                            var coord = new CoordinateBancarie {Abi = _abi, Cab = _cab, ContoCorrente = _contoCorrente};
                            mov.Banca = _daoFactory.GetDatiBancariCondominiDao().GetByIban(coord.CalcolaIBAN());

                            // -----------------------------------------------------
                            //  Movimenti inseriti come già evasi
                            // -----------------------------------------------------
                            if (mov.Causale == "56")
                                mov.Stato = StatoMovimentoBancarioEnum.Contabilizzato;

                            // -----------------------------------------------------
                            //  Condominio
                            // -----------------------------------------------------
                            if (mov.Banca != null)
                            {
                                mov.Condominio = mov.Banca.CondominioRiferimento;

                                // -------------------------------------------------
                                // Cerco di proporre un esercizio
                                // -------------------------------------------------
                                var esercizio = mov.Condominio.GetEsercizioByData(mov.DataValuta.GetValueOrDefault()) ?? mov.Condominio.GetCurrentEsercizioOrdinario();
                                if (esercizio != null)
                                    mov.Esercizio = esercizio;
                            }

                            checkMovimento(mov);

                            // -----------------------------------------------------
                            //  Cerco di proporre un fornitore
                            // -----------------------------------------------------
                            if (!string.IsNullOrEmpty(mov.NomeFornitore))
                            {
                                var fornitori = (from fornitore in _fornitori where fornitore.DisplayName.Replace(" ", "").ToUpper().Contains(mov.NomeFornitore.Replace(" ", "").ToUpper()) select fornitore).ToList();
                                if (fornitori.Count == 1)
                                    mov.Fornitore = _daoFactory.GetFornitoreDao().GetById(fornitori.First().ID, false);
                            }

                            // -----------------------------------------------------
                            //  Cerco di proporre un condomino
                            // -----------------------------------------------------
                            if (!string.IsNullOrEmpty(mov.NomeOrdinante))
                            {
                                SoggettoCondominio condomino = null;
                                IList<PersonaListaDTO> personeDto = (from persona in _personeAzienda where persona.DisplayName.Replace(" ", "").ToUpper().Contains(mov.NomeOrdinante.Replace(" ", "").ToUpper()) select persona).ToList();
                                foreach (var persona in personeDto)
                                {
                                    var soggettiCondominio = _daoFactory.GetSoggettoCondominioDao().GetByPersona(persona.ID);
                                    if (soggettiCondominio.Count == 1)
                                        condomino = soggettiCondominio[0];
                                }

                                if (condomino != null)
                                    mov.CodiceSoggetto = condomino.ID;
                            }

                            listaMovimentiBancari.Add(new MovimentiBancariControlloDuplicatiDTO(0, mov.Importo, mov.Segno, mov.DataValuta, mov.DataContabile, mov.DescrizioneBreve, mov.Descrizione, mov.Causale, mov.Abi, mov.Cab, mov.ContoCorrente));
                        }
                        else
                        {
                            anomalie = new RisultatoElaborazioneCBI();
                            anomalie.Warning += string.Format("E' stato <strong>SCARTATO</strong> perchè già presente in archivio il movimento importo: <strong>{0:c}</strong> - abi: <strong>{1}</strong> cab: <strong>{2}</strong> - conto: <strong>{3}</strong><br/>", _importo.GetValueOrDefault(), _abi, _cab, _contoCorrente);
                            anomalie.Riga = _descrizioneBreve + _descrizione;
                        }

                        _causale = null;
                        _valuta = null;
                        _dataContabile = null;
                        _segno = null;
                        _importo = null;
                        _numeroAssegno = null;
                        _numeroCRO = null;
                        _numeroDistinta = null;
                        _descrizione = null;
                        _descrizioneBreve = null;

                        _abiFornitore = null;
                        _cabFornitore = null;
                        _nomeFornitore = null;
                        _abiOrdinante = null;
                        _cabOrdinante = null;
                        _nomeOrdinante = null;
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("La creazione del movimento bancario si è interrotta inaspettatamente - {0}", ex, Utility.GetMethodDescription());
                        anomalie = new RisultatoElaborazioneCBI { Anomalie = "La creazione del movimento bancario si è interrotta inaspettatamente." };
                    }
                }

                return anomalie;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la conferma del movimento bancario - {0}", ex, Utility.GetMethodDescription());
                throw;
            }
        }
Пример #2
0
        public IEnumerable<RisultatoElaborazioneCBI> ContabilizzazioneMovimenti(List<MovimentiBancariDTO> movimenti)
        {
            try
            {
                var result = new List<RisultatoElaborazioneCBI>();

                // ========================================================
                //  Controlli di validità
                // ========================================================
                foreach (var mov in movimenti)
                {
                    RisultatoElaborazioneCBI resultMovimento = null;

                    if (mov.CodiceEsercizio != null)
                    {
                        var dataRegistrazione = DateTime.Now;
                        if (mov.DataContabile != null)
                            dataRegistrazione = mov.DataContabile.Value;

                        var condominio = _daoFactory.GetEsercizioDao().GetById(mov.CodiceEsercizio.Value, false).CondominioRiferimento;
                        var esercizio = getEsercizioCompetenza(condominio, dataRegistrazione);
                        if (esercizio == null || esercizio.Stato == StatoEsercizioEnum.Chiuso)
                        {
                            resultMovimento = new RisultatoElaborazioneCBI();
                            resultMovimento.Fatal += $"Non è stato trovato nessun esercizio aperto per il condominio '{condominio.DisplayName}' per registrare il movimento bancario per {mov.Importo:c} in data <b>{dataRegistrazione:d}</b>.{Environment.NewLine}";
                        }
                        else
                        {
                            var messageList = _movimentiContabiliService.IsAllowDataRegistrazione(new List<int> { mov.CodiceCondominio.GetValueOrDefault() }, esercizio, dataRegistrazione);
                            if (messageList.Count > 0)
                            {
                                resultMovimento = new RisultatoElaborazioneCBI();
                                resultMovimento.Anomalie += $"Data registrazione: {dataRegistrazione:d} - {Math.Abs(mov.Importo.GetValueOrDefault()):c} - {messageList.Aggregate(resultMovimento.Anomalie, (current, mess) => current + (mess + Environment.NewLine))}";
                            }
                        }
                    }

                    if (resultMovimento != null)
                       result.Add(resultMovimento);
                }
                if (result.Count > 0)
                    return result;

                // ========================================================
                //  Contabilizzazione dei movimenti
                // ========================================================
                foreach (var mov in movimenti)
                {
                    if (mov.CodiceEsercizio != null)
                    {
                        try
                        {
                            var banca = _daoFactory.GetDatiBancariCondominiDao().GetById(mov.CodiceBanca.GetValueOrDefault(), false);

                            var condominio = _daoFactory.GetEsercizioDao().GetById(mov.CodiceEsercizio.Value, false).CondominioRiferimento;
                            var esercizio = getEsercizioCompetenza(condominio, mov.DataContabile.GetValueOrDefault());
                            
                            // Descrizione movimento
                            var descrizione = string.Empty;
                            if (!string.IsNullOrEmpty(mov.DescrizioneBreve))
                                descrizione = mov.DescrizioneBreve.Trim();
                            if (!string.IsNullOrEmpty(mov.Descrizione))
                            {
                                if (!string.IsNullOrEmpty(descrizione))
                                    descrizione += " ";
                                descrizione += mov.Descrizione.Trim();
                            }
                            if (descrizione.Length > 1000)
                                descrizione = descrizione.Substring(0, 1000);

                            var dataRegistrazione = DateTime.Now;
                            if (mov.DataContabile != null)
                                dataRegistrazione = mov.DataContabile.Value;

                            var causaleSottoConto = _daoFactory.GetCausaleACBISottocontoDao().GetByCausaleCondominio(_causaliACBI[mov.Causale].ID, esercizio.CondominioRiferimento.ID);
                            var causaleAzienda = _daoFactory.GetCausaleACBIAziendaDao().GetByCausaleAzienda(_causaliACBI[mov.Causale].ID, esercizio.CondominioRiferimento.Azienda.ID);
                            if (causaleSottoConto != null && causaleAzienda?.CausaleContabile != null)
                            {
                                var sottoconto = causaleSottoConto.SottoConto;

                                if (sottoconto != null)
                                {
                                    var movimentoPatrimoniale = _movimentiContabiliService.SetMovimentoBancarioGenerico(banca, esercizio, sottoconto, mov.Importo.GetValueOrDefault(), descrizione, dataRegistrazione, causaleAzienda.CausaleContabile);
                                    if (movimentoPatrimoniale != null)
                                    {
                                        SetContabilizzato(mov, movimentoPatrimoniale.ID);

                                        // Protocollo di archiviazione
                                        if (movimentoPatrimoniale.Testata.NumeroProtocollo == null)
                                        {

                                            var progressivo = _protocolloService.GetProgressivo(TipoProtocollo.Fattura, esercizio.DataApertura.GetValueOrDefault().Year, movimentoPatrimoniale.Testata.EsercizioRiferimento.CondominioRiferimento);
                                            if (progressivo.Progressivo != null)
                                            {
                                                var protocollo = progressivo.Progressivo.Value;
                                                movimentoPatrimoniale.Testata.NumeroProtocollo = protocollo;
                                                movimentoPatrimoniale.Testata.AnnoArchiviazioneOttica =
                                                    esercizio.DataApertura.GetValueOrDefault().Year;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        _log.WarnFormat("Movimento patrimoniale a NULL - {0} - movimento:{1}", Utility.GetMethodDescription(), mov.ID);
                                    }
                                }
                            }
                            else
                            {
                                var message = string.Empty;
                                if(causaleSottoConto == null)
                                    message = $"NON trovato sottoconto con legato alla causale bancaria: {_causaliACBI[mov.Causale].DescrizioneCompleta} nel condominio {esercizio.CondominioRiferimento.DisplayName}";
                                else if(causaleAzienda?.CausaleContabile == null)
                                    message = $"NON trovata la causale contabile legata alla causale bancaria: {_causaliACBI[mov.Causale].DescrizioneCompleta} nel condominio {esercizio.CondominioRiferimento.DisplayName}";

                                if (!string.IsNullOrEmpty(message))
                                {
                                    result.Add(new RisultatoElaborazioneCBI {Anomalie = message});
                                
                                    _log.ErrorFormat("Errore {0} - {1} - id:{2}", message, Utility.GetMethodDescription(), mov.ID);
                                    _persistenceContext.RollbackAndCloseSession(Login.Instance.CurrentLogin().LoginName);
                                    _persistenceContext.BeginTransaction(Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                                }
                            }

                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la contabilizzazione del movimento bancario - SINGOLO MOVIMENTO - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), mov.ID);
                            throw;
                        }
                    }
                }

                return result;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la contabilizzazione dei movimenti bancari - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
                throw;
            }
        }
Пример #3
0
        private RisultatoElaborazioneCBI elaboraMovimento62(string linea)
        {
            try
            {
                _valuta = convertToData(linea.Substring(13, 6));
                _dataContabile = convertToData(linea.Substring(19, 6));
                _segno = linea.Substring(25, 1);
                _importo = decimal.Parse(linea.Substring(26, 15));
                _numeroAssegno = linea.Substring(45, 15).Trim();
                _causale = linea.Substring(41, 2);
                _descrizioneBreve = linea.Substring(86, 34);

                if (_valuta == null)
                {
                    var anomalie = new RisultatoElaborazioneCBI();
                    anomalie.Warning += string.Format("E' stato <strong>SCARTATO</strong> un movimento perchè la data valuta non è corretta - importo: <strong>{0:c}</strong> - data:{1}<br/>", _importo.GetValueOrDefault(), linea.Substring(13, 6));
                    anomalie.Riga = string.Format("{0}<br/>{1}{2}", linea, _descrizioneBreve, _descrizione);
                    return anomalie;
                }

                return null;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante l'importazione della riga di movimento bancario 62 - {0} - linea:{1}", ex, Utility.GetMethodDescription(), linea);
                throw;
            }
        }
Пример #4
0
        private RisultatoElaborazioneCBI confermaMovimento(IList<Conto> contiBancari, IList<Conto> contiVersamentiCondomini, CausaleContabile causaleVersamento, LogTransazione logTransazione)
        {
            RisultatoElaborazioneCBI anomalie = null;

            if (_idDettaglioEmissioneRata != null)
            {
                var dettaglioEmissione = _daoFactory.GetDettaglioEmissioneRateDao().Find(_idDettaglioEmissioneRata.Value, false);
                if (dettaglioEmissione != null)
                {
                    if (string.IsNullOrEmpty(dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.Deleted))
                    {
                        var contoBancario = contiBancari.FirstOrDefault(item => item.CondominioRiferimento.ID == dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.ID);
                        if (contoBancario == null)
                        {
                            contoBancario = _daoFactory.GetContoDao().GetByCodice(dettaglioEmissione.TestataEmissioneRate.Esercizio.ID, dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.ID, "902");
                            if(contoBancario != null)
                                contiBancari.Add(contoBancario);                            
                        }

                        if (contoBancario != null)
                        {

                            // Controllo eventuali anomalie
                            var importoRate = dettaglioEmissione.RateCollegate.Sum(item => item.Importo);
                            if (importoRate != _importo)
                                anomalie = new RisultatoElaborazioneCBI { Warning = $"L'importo del versamento non corrisponde all'importo della rata, <strong><i>verificare se si tratta di una rata annullata manualmente</i></strong> senza usare l'apposita funzionalità presente in Sfera - <strong>Condomino: {_nomeDebitore}</strong> - Importo: <strong>{_importo.GetValueOrDefault():c}</strong> - Importo rata: <strong>{importoRate:c}</strong><br/>", Riga = _linea14 };

                            // Se non presenti anomalie elaboro la conferma
                            if (anomalie == null)
                            {
                                foreach (var rata in dettaglioEmissione.RateCollegate)
                                {
                                    if (rata != null)
                                    {
                                        if (_causaleRicezione == "07000" || _causaleRicezione == "07011")
                                        {
                                            if (rata.Versamenti.Count > 0)
                                                anomalie = new RisultatoElaborazioneCBI { Anomalie = $"La rata del condomino: <strong>{_nomeDebitore}</strong> <i>({rata.Esercizio.CondominioRiferimento.DisplayName})</i> - Importo: <strong>{_importo.Value}</strong> - Data scadenza: {rata.DataScadenza:d} è già stata <strong>SALDATA</strong>.<br/>", Riga = _linea14 };

                                            if (rata.Esercizio.Stato == StatoEsercizioEnum.Chiuso)
                                                anomalie = new RisultatoElaborazioneCBI { Anomalie = $"La rata del condomino: <strong>{_nomeDebitore}</strong> <i>({rata.Esercizio.CondominioRiferimento.DisplayName})</i> - Importo: <strong>{_importo.Value}</strong> - Data scadenza: {rata.DataScadenza} è relativa ad un <strong>ESERCIZIO CHIUSO</strong>.<br/>",Riga = _linea14 };

                                            // Se non ho trovato la banca di accredito uso la banca principale del condominio
                                            if (_banca == null)
                                                _banca = rata.Esercizio.CondominioRiferimento.DatiBancariPrincipale;

                                            // --------------------------------------------------------------------------------------------
                                            //  ATTENZIONE: Non viene usata la data di valuta perchè inaffidabile, nel CBI della BPER
                                            //              la data valuta corrisponde, erroneamente, alla data di scadenza
                                            // --------------------------------------------------------------------------------------------

                                            // Data di registrazione
                                            if (_dataVersamento == null)
                                                _dataVersamento = DateTime.Today.AddDays(-2);
                                            var esercizioCompetenza = rata.Esercizio;

                                            // -------------------------------------------------------------------
                                            //  Esercizio CHIUSO recupero quello di competenza
                                            // -------------------------------------------------------------------
                                            if (esercizioCompetenza.Stato == StatoEsercizioEnum.Chiuso)
                                                esercizioCompetenza = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(esercizioCompetenza.CondominioRiferimento, _dataVersamento.GetValueOrDefault());

                                            // -------------------------------------------------------------------
                                            //  Validazione KO - Non trovato esercizio di competenza
                                            // -------------------------------------------------------------------
                                            // Anche se sono presenti anomalie elaboro la conferma, i versamenti saranno registrati come: Versamenti fuori piano rateale
                                            if (esercizioCompetenza == null || esercizioCompetenza.Stato == StatoEsercizioEnum.Chiuso)
                                            {
                                                if (anomalie == null)
                                                    anomalie = new RisultatoElaborazioneCBI();
                                                anomalie.Fatal += $"Non è stato trovato nessun esercizio aperto per il condominio '{rata.Esercizio.CondominioRiferimento.DisplayName}' per registrare il versamento di {rata.Soggetto.DisplayName} per {rata.Importo:c} in data <b>{_dataVersamento.GetValueOrDefault():d}</b>.<br/>";
                                            }
                                            else
                                            {
                                                TipoVersamentoDopoChiusuraEnum? tipoVersamentoDopoChiusura = null;
                                                if (_dataVersamento.GetValueOrDefault() > esercizioCompetenza.DataChiusura.GetValueOrDefault())
                                                    tipoVersamentoDopoChiusura = esercizioCompetenza.CondominioRiferimento.TipoVersamentoDopoChiusura;

                                                TipoVersamentoPrimaAperturaEnum? tipoVersamentoPrimaApertura = null;
                                                if (_dataVersamento.GetValueOrDefault() < esercizioCompetenza.DataApertura.GetValueOrDefault())
                                                    tipoVersamentoPrimaApertura = esercizioCompetenza.CondominioRiferimento.TipoVersamentoPrimaApertura;
                                                
                                                // Trovo conto versamenti corretto
                                                var contoVersamentoCondomini = contiVersamentiCondomini.FirstOrDefault(item => item.EsercizioRiferimento != null && item.EsercizioRiferimento.ID == rata.Esercizio.ID) ??
                                                    contiVersamentiCondomini.FirstOrDefault(item => item.EsercizioRiferimento == null && item.CondominioRiferimento.ID == rata.Esercizio.CondominioRiferimento.ID);

                                                var resultVersamento =
                                                    _versamentiCondominiService.InsertVersamentoCondomino(
                                                        esercizioCompetenza, rata, _banca, contoBancario, causaleVersamento,
                                                        contoVersamentoCondomini, _dataVersamento.GetValueOrDefault(), _file,
                                                        logTransazione, tipoVersamentoDopoChiusura, tipoVersamentoPrimaApertura);
                                                if (!string.IsNullOrEmpty(resultVersamento.Message))
                                                {
                                                    anomalie = new RisultatoElaborazioneCBI
                                                    {
                                                        Anomalie = $"La rata del condomino: <strong>{_nomeDebitore}</strong> <i>({rata.Esercizio.CondominioRiferimento.DisplayName})</i> - Importo: <strong>{_importo.Value:c}</strong> - Data scadenza: {rata.DataScadenza:d} <strong>NON è stata registrata</strong>:<br/><strong>{resultVersamento.Message}</strong><br/>",
                                                        Riga = _linea14
                                                    };
                                                    break;
                                                }

                                                switch (_causaleRicezione)
                                                {
                                                    case "07000":
                                                        rata.Emissione.Stato = StatoMavEnum.Pagato;
                                                        break;
                                                    case "07011":
                                                        rata.Emissione.Stato = StatoMavEnum.PagatoDopoRadiazione;
                                                        break;
                                                }
                                            }
                                        }

                                    }
                                    else if (_causaleRicezione == "07008")
                                    {
                                        anomalie = new RisultatoElaborazioneCBI
                                        {
                                            Anomalie = $"La rata del condomino: <strong>{_nomeDebitore}</strong> <i>({rata.Esercizio.CondominioRiferimento.DisplayName})</i> - Importo: <strong>{_importo.Value:c}</strong> - Data scadenza: {rata.DataScadenza:d} è stata <strong>RICHIAMATA</strong><br/>",
                                            Riga = _linea14
                                        };
                                        rata.SetStato(StatoRataEnum.Richiamata);
                                        rata.DaRichiamare = false;
                                        _movimentiContabiliService.SetMovimentiRichiamoRata(rata, logTransazione);
                                        rata.Emissione.Stato = StatoMavEnum.Richiamato;
                                    }
                                    else if (_causaleRicezione == "07010")
                                    {
                                        anomalie = new RisultatoElaborazioneCBI
                                        {
                                            Anomalie = $"La rata del condomino: <strong>{_nomeDebitore}</strong> <i>({rata.Esercizio.CondominioRiferimento.DisplayName})</i> - Importo: <strong>{_importo.Value:c}</strong> - Data scadenza: {rata.DataScadenza:d} è stata <strong>RADIATA</strong> per mancato pagamento del condomino<br/>",
                                            Riga = _linea14
                                        };
                                        rata.Emissione.Stato = StatoMavEnum.Radiato;
                                    }
                                    else if (_causaleRicezione == "07006")
                                    {
                                        anomalie = new RisultatoElaborazioneCBI
                                        {
                                            Anomalie = $"La rata del condomino: <strong>{_nomeDebitore}</strong> <i>({rata.Esercizio.CondominioRiferimento.DisplayName})</i> - Importo: <strong>{_importo.Value:c}</strong> - Data scadenza: {rata.DataScadenza:d} è stata <strong>RESA</strong> perché formalmente irregolare o comunque non idonea al trattamento<br/>",
                                            Riga = _linea14
                                        };
                                        rata.Emissione.Stato = StatoMavEnum.Resa;
                                    }
                                }
                            }
                        }
                        else
                        {
                            anomalie = new RisultatoElaborazioneCBI
                            {
                                Anomalie = $"Le rata del condominio: <strong>{dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.DisplayName}</strong> non possono essere caricate perchè non è stato trovato il conto corrente bancario<br/>",
                                Riga = _linea14
                            };

                            _log.ErrorFormat("Non è stato trovato il conto corrente bancario per il condominio - {0} - condominio:{1} - azienda:{2}", Utility.GetMethodDescription(), dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.ID, dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.Azienda.ID);
                        }                        
                    }
                    else
                    {
                        anomalie = new RisultatoElaborazioneCBI
                        {
                            Anomalie = $"Le rata del condominio: <strong>{dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.DisplayName}</strong> non possono essere caricate perchè non è stato trovato il condominio è annullato<br/>",
                            Riga = _linea14
                        };

                        _log.ErrorFormat("Condominio annullato - {0} - condominio:{1} - azienda:{2}", Utility.GetMethodDescription(), dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.ID, dettaglioEmissione.TestataEmissioneRate.Esercizio.CondominioRiferimento.Azienda.ID);
                    }
                }
                else
                {
                    anomalie = new RisultatoElaborazioneCBI
                    {
                        Warning = $"Emissione NON trovata - Condomino: <strong>{_nomeDebitore}</strong> - Importo: <strong>{_importo.GetValueOrDefault():c}</strong><br/>",
                        Riga = _linea14
                    };
                }
           }

            _idDettaglioEmissioneRata = null;
            _importo = null;
            _banca = null;
            _dataScadenza = null;
            _nomeDebitore = null;

            return anomalie;
        }