Exemple #1
0
 public Utenza(TipoUtenza tipo, string numero, Fornitore fornitore, Condominio condominio, DatiBancariCondomini coordinateBancarie)
 {
     Fornitore = fornitore;
     Condominio = condominio;
     Tipo = tipo;
     Numero = numero;
     CoordinateBancarie = coordinateBancarie;
 }
Exemple #2
0
        /// <summary>
        /// Crea un Versamento Condomino valido.
        /// </summary>
        public VersamentoSoggetto(Esercizio esercizio, SoggettoCondominio soggetto, Conto conto, DateTime data, decimal importo, FileCBI file, DatiBancariCondomini contoBancario, LogTransazione logTransazione, TipoVersamentoDopoChiusuraEnum? tipoVersamentoDopoChiusura = null, TipoVersamentoPrimaAperturaEnum? tipoVersamentoPrimaApertura = null)
            : this(esercizio, soggetto, conto, data, importo, 0, TipoVersamentoSoggettoEnum.CBI, logTransazione, tipoVersamentoDopoChiusura, tipoVersamentoPrimaApertura)
        {
            ContoBancario = contoBancario;

            File = file;
            if (File != null)
                File.Versamenti.Add(this);
        }
Exemple #3
0
 /// <summary>
 /// Crea un sollecito valido.
 /// </summary>
 public Sollecito(Esercizio esercizio, Persona persona, DateTime data, DateTime dataLimiteRate, decimal importoLimite, decimal importoDaVersare, DatiBancariCondomini banca, string oggettoLettera, string testoLettera)
 {
     Esercizio = esercizio;
     Persona = persona;
     Data = data;
     DataLimiteRate = dataLimiteRate;
     ImportoLimite = importoLimite;
     ImportoDaVersare = importoDaVersare;
     OggettoLettera = oggettoLettera;
     TestoLettera = testoLettera;
     Banca = banca;
 }
Exemple #4
0
        /// <summary>
        /// Crea un sollecito valido.
        /// </summary>
        public Sollecito(Esercizio esercizio, SoggettoCondominio soggetto, DateTime data, DateTime dataLimiteRate, decimal importoLimite, decimal importoDaVersare, DatiBancariCondomini banca, string oggettoLettera, string testoLettera)
        {
            Esercizio = esercizio;
            Soggetto = soggetto;
            Data = data;
            DataLimiteRate = dataLimiteRate;
            ImportoLimite = importoLimite;
            ImportoDaVersare = importoDaVersare;
            OggettoLettera = oggettoLettera;
            TestoLettera = testoLettera;
            Banca = banca;

            if (Soggetto != null)
                Soggetto.Solleciti.Add(this);
        }
        private void addColumnBanca(ImpostazioneReportDTO impostazioneReportDTO, DatiBancariCondomini banca, int ordine, IDaoFactory daoFactory)
        {
            if (impostazioneReportDTO.Dettaglio.All(itemDettaglio => itemDettaglio.IdBanca != banca.ID))
            {
                var abiCab = daoFactory.GetAbiCabDao().GetByAbiCab(banca.Abi, banca.Cab);
                var groupName = $"{abiCab.DescrizioneAbi} - {abiCab.DescrizioneCab} - {banca.ContoCorrente}";

                // Dare
                var dettaglioDareDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    IdBanca = banca.ID,
                    Conto = "Entrate",
                    ColumnType = ColumnTypeEnum.ImportoBancaDare,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.ImportoBancaDare, ordine)
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioDareDTO);

                // Avere
                ordine++;
                var dettaglioAvereDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    IdBanca = banca.ID,
                    Conto = "Uscite",
                    ColumnType = ColumnTypeEnum.ImportoBancaAvere,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.ImportoBancaAvere, ordine)
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioAvereDTO);

                // Saldo
                ordine++;
                var dettaglioSaldoDTO = new ImpostazioneReportDettaglioDTO
                {
                    GroupName = groupName,
                    IdBanca = banca.ID,
                    Conto = "Saldo",
                    ColumnType = ColumnTypeEnum.ImportoBancaSaldo,
                    PrintPage = 1,
                    OrdineConto = ordine,
                    Width = getColumnWidth(ColumnTypeEnum.ImportoBancaSaldo, ordine)
                };

                impostazioneReportDTO.Dettaglio.Add(dettaglioSaldoDTO);
            }
        }
        public void SetUp()
        {
            _azienda = new Azienda("PROVA", "Azienda di prova") {ID=1};
            _aziendaDestinazione = new Azienda("DEST", "Azienda di destinazione") { ID = 2 };
            _condominio = new Condominio("Condominio ABC", 31, 12, 2015, _azienda)
            {
                ID = 1,
                Codice = "COND01",
                CodiceCUC = "CUC123456",
                CodiceSIA = "SIA12",
                AnnoInizio = 2015,
                CodiceFiscale = "012365477859",
                CodiceCalcoloTariffaAcqua = "TAR01"
            };
            _condominio.Palazzine.Clear();

            _esercizio = new EsercizioDTO
            {
                Descrizione = "Primo Esercizio",
                DataApertura = new DateTime(2016, 6, 1),
                DataChiusura = new DateTime(2017, 5, 31)
            };

            _banca01 = new DatiBancariCondomini("12345", "12345", "123456789012", "A", _condominio) {Iban = "IT02L1234512345123456789012" };
            _banca02 = new DatiBancariCondomini("03268", "10001", "100000000000", "A", _condominio) { Iban = "IT11X03268100001100000000000" };

            _stabile01 = new Palazzina(_condominio, "Stabile 01") {ID=1};
            _stabile01.GruppiStabile.Clear();
            _condominio.Palazzine.Add(_stabile01);

            var comune = new Comune("A944", "Bologna", new Provincia("BO", new Regione("Emilia Romagna")));

            _gruppoStabile01 = new GruppoStabile(_stabile01, "Scala 01") { ID = 1, Ordine = 1, Note = "Note per Scala01", Indirizzo = new Address { Cap = "40131", Civico = "SCA/1", Indirizzo = "Via Scala01", Localita = "Scaletta01", Comune = comune } };
            _gruppoStabile02 = new GruppoStabile(_stabile01, "Scala 02") { ID = 2, Ordine = 2, Note = "Note per Scala02", Indirizzo = new Address { Cap = "40132", Civico = "SCA/2", Indirizzo = "Via Scala02", Localita = "Scaletta02", Comune = comune } };

            _condominio.Indirizzo = new Address
            {
                Indirizzo = "via dei Fiori",
                Cap = "40100",
                Civico = "23",
                Localita = "Pioppa",
                Comune = comune
            };

            var listaTipoUnitaImmobiliare = new List<TipoUnitaImmobiliare>
            {
                new TipoUnitaImmobiliare("Tipo01") {ID = 1},
                new TipoUnitaImmobiliare("Tipo02") {ID = 2}
            };

            var fornitore = new Fornitore(new Persona(TipoPersonaEnum.Giuridica, "Franco", "Livoresi", _azienda.ID, true) {PartitaIva = "01867511204"}, _azienda.ID) {ID =1};
            var fornitore01 = new Fornitore(new Persona(TipoPersonaEnum.Giuridica, "Luigi", "Majorana", _azienda.ID, true) { PartitaIva = "01230460394" }, _azienda.ID) {ID = 2};
            var agenziaAssicurativa = new AgenziaAssicurativa(new Persona(TipoPersonaEnum.Giuridica, "", "Agenzia Bologna", _azienda.ID, true) { PartitaIva = "03211600402" }, fornitore01, "Agenzia BO", _azienda.ID) {ID = 3};
            var tipoContratto = new TipoContratto("Pulizia Scale") {ID=1};
            var tipoContrattoAssicurativo = new TipoContratto("Assicurazione") {ID=2};

            _unitaImmobiliare01 = new UnitaImmobiliare(_gruppoStabile01, listaTipoUnitaImmobiliare[0]) { ID = 1, Descrizione = "Unità 01", Ordine = 1};
            _unitaImmobiliare02 = new UnitaImmobiliare(_gruppoStabile01, new TipoUnitaImmobiliare("Tipo02")) { ID = 2, Descrizione = "Unità 02", Ordine = 2 }; 
            _unitaImmobiliare03 = new UnitaImmobiliare(_gruppoStabile02, listaTipoUnitaImmobiliare[1]) { ID = 3, Descrizione = "Unità 03", Ordine = null }; 
            _unitaImmobiliare04 = new UnitaImmobiliare(_gruppoStabile02, new TipoUnitaImmobiliare("Tipo NEW")) { ID = 4, Descrizione = "Unità 04", Ordine = 4 };

            _unitaImmobiliare01.CondizioniSicurezzaImpianto = new SicurezzaImpianto
            {
                Norma = true,
                Note = "Note01"
            };

            _unitaImmobiliareImpiantistica01 = new UnitaImmobiliareImpiantistica(_unitaImmobiliare01, "TipoImpianto01", true) { ID = 1, Descrizione = "Impianto 01"};
            _unitaImmobiliareImpiantistica02 = new UnitaImmobiliareImpiantistica(_unitaImmobiliare01, "TipoImpianto02", false) {ID = 2, Descrizione = "Impianto 02"};

            _persona01 = new Persona(TipoPersonaEnum.Fisica, "Mario", "Rossi", _azienda.ID, false)
            {
                ID = 1,
                ComuneNascita = comune,
                IndirizzoResidenza =
                    new Address
                    {
                        Indirizzo = "via residenza01",
                        Cap = "40101",
                        Civico = "1",
                        Comune = comune,
                        Localita = "Pioppa 01"
                    },
                Domicilio =
                    new Address
                    {
                        Indirizzo = "via domicilio01",
                        Cap = "40101",
                        Civico = "1",
                        Comune = comune,
                        Localita = "Pioppa 01"
                    },
                Recapito =
                    new Address
                    {
                        Indirizzo = "via recapito01",
                        Cap = "40101",
                        Civico = "1",
                        Comune = comune,
                        Localita = "Pioppa 01"
                    }
            };

            _proprietario01 = new Proprietario(_unitaImmobiliare01, _persona01) {ID = 1, Descrizione = "Mario Rossi", VersamentoMav = true, Consigliere = true, Principale = true};

            _persona02 = new Persona(TipoPersonaEnum.Giuridica, "Giulio", "Verdi", _azienda.ID, false)
            {
                ID = 2,
                ComuneNascita = comune,
                IndirizzoResidenza =
                    new Address
                    {
                        Indirizzo = "via residenza02",
                        Cap = "40102",
                        Civico = "2",
                        Comune = comune,
                        Localita = "Pioppa 02"
                    },
                Domicilio =
                    new Address
                    {
                        Indirizzo = "via domicilio02",
                        Cap = "40102",
                        Civico = "2",
                        Comune = comune,
                        Localita = "Pioppa 02"
                    },
                Recapito =
                    new Address
                    {
                        Indirizzo = "via recapito02",
                        Cap = "40102",
                        Civico = "2",
                        Comune = comune,
                        Localita = "Pioppa 02"
                    }
            };
            _proprietario02 = new Proprietario(_unitaImmobiliare02, _persona02) {ID = 2, Descrizione = "Giulio Verdi", DataInizio = new DateTime(2015, 1, 1)};

            _persona03 = new Persona(TipoPersonaEnum.Fisica, "Franco", "Bianchi", _azienda.ID, false)
            {
                ID = 3,
                IndirizzoResidenza =
                    new Address
                    {
                        Indirizzo = "via residenza03",
                        Cap = "40103",
                        Civico = "3",
                        Comune = comune,
                        Localita = "Pioppa 03"
                    },
                Domicilio =
                    new Address
                    {
                        Indirizzo = "via domicilio03",
                        Cap = "40103",
                        Civico = "3",
                        Comune = comune,
                        Localita = "Pioppa 03"
                    }
            };
            _persona01.Recapito = new Address { Indirizzo = "via recapito03", Cap = "40103", Civico = "3", Comune = comune, Localita = "Pioppa 03" };
            _proprietario03 = new Proprietario(_unitaImmobiliare03, _persona03) {ID = 3, Descrizione = "Franco Bianchi"};

            _proprietario04 = new Proprietario(_unitaImmobiliare04, _persona01)
            {
                ID = 4,
                SoggettoPrincipale = _proprietario01
            };

            _persona04 = new Persona(TipoPersonaEnum.Fisica, "Primo", "Conduttore", _azienda.ID, false)
            {
                ID = 4,
                IndirizzoResidenza =
                    new Address
                    {
                        Indirizzo = "via residenza04",
                        Cap = "40104",
                        Civico = "4",
                        Comune = comune,
                        Localita = "Pioppa 04"
                    },
                Domicilio =
                    new Address
                    {
                        Indirizzo = "via domicilio04",
                        Cap = "40104",
                        Civico = "4",
                        Comune = comune,
                        Localita = "Pioppa 04"
                    },
                Recapito =
                    new Address
                    {
                        Indirizzo = "via recapito04",
                        Cap = "40104",
                        Civico = "4",
                        Comune = comune,
                        Localita = "Pioppa 04"
                    }
            };
            _conduttore01 = new Conduttore(_unitaImmobiliare01, _persona04) {ID = 5, Descrizione = "Primo Conduttore"};

            _persona05 = new Persona(TipoPersonaEnum.Fisica, "Secondo", "Conduttore", _azienda.ID, false)
            {
                ID = 5,
                IndirizzoResidenza =
                    new Address
                    {
                        Indirizzo = "via residenza05",
                        Cap = "40105",
                        Civico = "5",
                        Comune = comune,
                        Localita = "Pioppa 05"
                    },
                Domicilio =
                    new Address
                    {
                        Indirizzo = "via domicilio05",
                        Cap = "40105",
                        Civico = "5",
                        Comune = comune,
                        Localita = "Pioppa 05"
                    },
                Recapito =
                    new Address
                    {
                        Indirizzo = "via recapito05",
                        Cap = "40105",
                        Civico = "5",
                        Comune = comune,
                        Localita = "Pioppa 05"
                    }
            };
            _conduttore02 = new Conduttore(_unitaImmobiliare02, _persona05) {ID = 6, Descrizione = "Secondo Conduttore"};

            _contatto01 = new Email("*****@*****.**", true, _persona01) { ID = 1, Descrizione = "mail principale persona 01"};
            _contatto02 = new Email("*****@*****.**", false, _persona01) { ID = 2, Descrizione = "mail secondaria persona 01" };
            _contatto03 = new Cellulare("1234567890", true, _persona01) { ID = 3, Descrizione = "cellulare principale persona 01" };
            _contatto04 = new Fax("9876543210", false, _persona02) { ID = 4, Descrizione = "fax persona 02" };
            _contatto05 = new Telefono("1357924680", true, _persona03) { ID = 5, Descrizione = "telefono persona 03" }; 
            _contatto06 = new EmailCertificata("*****@*****.**", true, _persona01) { ID = 6, Descrizione = "mail certificata persona 01" };
            _contatto07 = new SitoInternet("www.bianchi.it", false, _persona03) { ID = 7, Descrizione = "sito internet persona03" };
            _contatto08 = new Telefono("3333333333", false, _persona04) { ID = 8, Descrizione = "telefono persona 04" };
            _contatto09 = new Cellulare("9999999999", true, _persona05) { ID = 9, Descrizione = "cellulare persona 05" };
            _contatto10 = new Email("*****@*****.**", false, _persona05) { ID=10 };

            _condominio.PersoneDaNonSollecitare.Add(new PersonaDaNonSollecitare(_persona01, _condominio) { Motivo = "persona01 non paga" });
            _condominio.PersoneDaNonSollecitare.Add(new PersonaDaNonSollecitare(_persona03, _condominio) { Motivo = "persona02 è simpatica" });

            // Contratto Appalto
            _documentocontrattoAppalto01 = new Documento(201, "Appalto", true, _azienda) { ID = 1, CondominioRiferimento = _condominio, Checksum = "CHK001", FileName = "appalto01", FileExtension = "pdf", Descrizione = "Appalto001" };
            _documentocontrattoAppalto02 = new Documento(202, "Appalto", true, _azienda) { ID = 2, CondominioRiferimento = _condominio, Checksum = "CHK002", FileName = "appalto02", FileExtension = "pdf", Descrizione = "Appalto002" };

            _contrattoAppalto = new ContrattoAppalto(tipoContratto, _condominio, fornitore)
            {
                ID = 1,
                NumeroContratto = "CONTRA001",
                Scadenza = new DateTime(2016, 12, 31),
                Descrizione = "Contratto di Appalto di prova",
                Note = "Nota per contratto appalto",
                Documenti = { _documentocontrattoAppalto01, _documentocontrattoAppalto02 }
            };

            _documentocontrattoAppalto01.ContrattoRiferimento = _contrattoAppalto;
            _documentocontrattoAppalto02.ContrattoRiferimento = _contrattoAppalto;

            // Contratto Assicurativo
            _documentocontrattoAssicurativo01 = new Documento(203, "Assicurativo01", true, _azienda) { ID = 3, CondominioRiferimento = _condominio, Checksum = "CHK003", FileName = "assicurazione01", FileExtension = "pdf", Descrizione = "Assicurazione001" };
            _documentocontrattoAssicurativo02 = new Documento(204, "Assicurativo02", true, _azienda) { ID = 4, CondominioRiferimento = _condominio, Checksum = "CHK004", FileName = "assicurazione02", FileExtension = "pdf", Descrizione = "Assicurazione002" };

            _contrattoAssicurativo = new AssicurazioneContratto(new DateTime(2016, 11, 30), new DateTime(2016, 07, 15), tipoContrattoAssicurativo)
            {
                ID = 2,
                FornitoreAttuale = agenziaAssicurativa,
                NumeroContratto = "CONTR_ASS_001",
                Scadenza = new DateTime(2016, 12, 31),
                Descrizione = "Contratto Assicurativo di prova",
                Note = "Nota per contratto assicurativo",
                Documenti = { _documentocontrattoAssicurativo01, _documentocontrattoAssicurativo02 }
            };

            _contrattoAssicurativoGlobale = new GlobaleAssicurazione(new DateTime(2016, 11, 30),
                new DateTime(2016, 07, 15), tipoContrattoAssicurativo)
            {
                ID = 3,
                FornitoreAttuale = agenziaAssicurativa,
                NumeroContratto = "CONTR_GLOB_001",
                Scadenza = new DateTime(2016, 12, 31),
                ImportoLimiteCoseRCT = 50000,
                ImportoMassimaleSinistroRCT = 60000,
                ImportoUnicoRCT = 70000,
                ImportoPremio = 80000,
                Descrizione = "Contratto Globale di prova",
                Note = "Nota per contratto globale",
                FranchigiaDanniAcqua = 90000,
                FranchigiaRicercaGuasto = 100000,
                ValoreRicostruzioneNuovo = 110000,
                DanniAcqua = true,
                RicercaGuasto = true
            };

            _contrattoAssicurativoIncendio = new IncendioAssicurazione(new DateTime(2016, 11, 30), new DateTime(2016, 07, 15), tipoContrattoAssicurativo)
            {
                ID = 4,
                FornitoreAttuale = agenziaAssicurativa,
                NumeroContratto = "CONTR_INC_001",
                ImportoLimiteCoseRCT = 150000,
                ImportoMassimaleSinistroRCT = 160000,
                ImportoUnicoRCT = 170000,
                ImportoPremio = 180000,
                FranchigiaDanniAcqua = 120000,
                FranchigiaRicercaGuasto = 130000,
                ValoreRicostruzioneNuovo = 140000,
                DanniAcqua = true,
                RicercaGuasto = false,
                Scadenza = new DateTime(2016, 12, 31),
                Descrizione = "Contratto Incendio di prova",
                Note = "Nota per contratto incendio"
            };

            _contrattoAssicurativoFurto = new FurtoAssicurazione(new DateTime(2016, 11, 30), new DateTime(2016, 07, 15), tipoContrattoAssicurativo)
            {
                ID = 5,
                FornitoreAttuale = agenziaAssicurativa,
                NumeroContratto = "CONTR_FURTO_001",
                Scadenza = new DateTime(2016, 12, 31),
                Descrizione = "Contratto Furto di prova",
                Note = "Nota per contratto furto"
            };

            _contrattoAssicurativoInfortuni = new InfortuniAssicurazione(new DateTime(2016, 11, 30), new DateTime(2016, 07, 15), tipoContrattoAssicurativo)
            {
                ID = 6,
                FornitoreAttuale = agenziaAssicurativa,
                NumeroContratto = "CONTR_INFORTUNI_001",
                Scadenza = new DateTime(2016, 12, 31),
                Descrizione = "Contratto Infortuni di prova",
                Note = "Nota per contratto infortuni"
            };

            _contrattoAssicurativoResponsabilitaCivile = new ResponsabilitaCivileAssicurazione(new DateTime(2016, 11, 30), new DateTime(2016, 07, 15), tipoContrattoAssicurativo)
            {
                ID = 7,
                FornitoreAttuale = agenziaAssicurativa,
                NumeroContratto = "CONTR_RESPCIV_001",
                Scadenza = new DateTime(2016, 12, 31),
                Descrizione = "Contratto Responsabilità civile di prova",
                Note = "Nota per contratto responsabilità civile"
            };

            _condominio.ContrattiAssicurativi.Add(_contrattoAssicurativo);
            _condominio.ContrattiAssicurativi.Add(_contrattoAssicurativoGlobale);
            _condominio.ContrattiAssicurativi.Add(_contrattoAssicurativoIncendio);
            _condominio.ContrattiAssicurativi.Add(_contrattoAssicurativoFurto);
            _condominio.ContrattiAssicurativi.Add(_contrattoAssicurativoInfortuni);
            _condominio.ContrattiAssicurativi.Add(_contrattoAssicurativoResponsabilitaCivile);

            _contrattoAssicurativo.CondominioRiferimento = _condominio;
            _contrattoAssicurativoGlobale.CondominioRiferimento = _condominio;
            _contrattoAssicurativoIncendio.CondominioRiferimento = _condominio;
            _contrattoAssicurativoFurto.CondominioRiferimento = _condominio;
            _contrattoAssicurativoInfortuni.CondominioRiferimento = _condominio;
            _contrattoAssicurativoResponsabilitaCivile.CondominioRiferimento = _condominio;

            _documentocontrattoAssicurativo01.ContrattoRiferimento = _contrattoAssicurativo;
            _documentocontrattoAssicurativo02.ContrattoRiferimento = _contrattoAssicurativo;
            
            // Conti / Millesimi
            _conto01 = new Conto(_condominio, TipoContoEconomicoEnum.Economico, TipoPeriodoCompetenzaContabile.Esercizio, "SPESE GENERALI PROPRIETA'", true, true, false) {DescrizioneBilancio = "SPE GEN", Codice = "001", ID = 1};
            _conto02 = new Conto(_condominio, TipoContoEconomicoEnum.Economico, TipoPeriodoCompetenzaContabile.Riscaldamento, "SPESE RISCALDAMENTO", true, true, false) { DescrizioneBilancio = "SPE RIS", Codice = "002",  ID = 2 };

            _sottoconto01 = new SottoConto(_conto01, "SPESE SCALA 01") { Codice = "001.001", ID = 1 };
            _sottoconto02 = new SottoConto(_conto01, "SPESE SCALA 02") { Codice = "001.002", ID = 2 };
            _sottoconto03 = new SottoConto(_conto02, "SPESE ABITAZIONI") { Codice = "002.001", ID = 3 };
            _sottoconto04 = new SottoConto(_conto02, "SPESE GARAGE") { Codice = "002.002", ID = 4 };

            _millesimo01 = new Millesimo(_conto01, _unitaImmobiliare01) { ID = 1, Valore = 100 };
            _millesimo02 = new Millesimo(_conto01, _unitaImmobiliare02) { ID = 2, Valore = 200 };
            _millesimo03 = new Millesimo(_conto02, _unitaImmobiliare01) { ID = 3, Valore = 300 };
            _millesimo04 = new Millesimo(_conto02, _unitaImmobiliare02) { ID = 4, Valore = 400 };

            _fascicoloImmobiliare = new FascicoloImmobiliare("Prova Fascicolo", "PRO", "01") {ID=1};
            _fascicoloCondominio = new FascicoloCondominio(_fascicoloImmobiliare, _condominio) { ID =1, Necessario = true, Presente = false };
            _fascicoloCondominio.Documenti.Add(_documentocontrattoAppalto01);
            _fascicoloCondominio.Documenti.Add(_documentocontrattoAssicurativo02);
            _documentocontrattoAppalto01.Fascicoli.Add(_fascicoloCondominio);
            _documentocontrattoAssicurativo02.Fascicoli.Add(_fascicoloCondominio);

            // Stub per IDaoFactory
            _daoFactory = MockRepository.GenerateStub<IDaoFactory>();

            // Stub per azienda
            var aziendaDao = MockRepository.GenerateStub<IAziendaDao>();
            aziendaDao.Stub(x => x.Find(2, false)).Return(_aziendaDestinazione);
            _daoFactory.Stub(x => x.GetAziendaDao()).Return(aziendaDao);

            // Stub per tipo unità immobiliare
            var tipoUnitaImmobiliareDao = MockRepository.GenerateStub<ITipoUnitaImmobiliareDao>();
            tipoUnitaImmobiliareDao.Stub(x => x.GetByAzienda(Arg<int>.Is.Anything)).Return(listaTipoUnitaImmobiliare);
            _daoFactory.Stub(x => x.GetTipoUnitaImmobiliareDao()).Return(tipoUnitaImmobiliareDao);

            // Stub per fornitore
            var fornitoreDao = MockRepository.GenerateStub<IFornitoreDao>();
            fornitoreDao.Stub(x => x.Find(1, false)).Return(fornitore);
            fornitoreDao.Stub(x => x.Find(2, false)).Return(fornitore01);
            fornitoreDao.Stub(x => x.GetByPartitaIva("01867511204", _aziendaDestinazione.ID)).Return(fornitore);
            fornitoreDao.Stub(x => x.GetByPartitaIva("01230460394", _aziendaDestinazione.ID)).Return(fornitore01);
            fornitoreDao.Stub(x => x.GetByPartitaIva("03211600402", _aziendaDestinazione.ID)).Return(agenziaAssicurativa);
            _daoFactory.Stub(x => x.GetFornitoreDao()).Return(fornitoreDao);

            // Stub per tipo contratto
            var tipoContrattoDao = MockRepository.GenerateStub<ITipoContrattoDao>();
            tipoContrattoDao.Stub(x => x.GetByDescrizione("Pulizia Scale", _aziendaDestinazione.ID)).Return(tipoContratto);
            tipoContrattoDao.Stub(x => x.GetByDescrizione("Assicurazione", _aziendaDestinazione.ID)).Return(tipoContrattoAssicurativo);
            _daoFactory.Stub(x => x.GetTipoContrattoDao()).Return(tipoContrattoDao);

            // Stub per Comune
            var comuneDao = MockRepository.GenerateStub<IComuneDao>();
            comuneDao.Stub(x => x.Find(comune.Codice, false)).Return(comune);
            comuneDao.Stub(x => x.Find(null, false)).Throw(new NullReferenceException("Id non può essere null"));
            _daoFactory.Stub(x => x.GetComuneDao()).Return(comuneDao);
            
            // Stub per fascicolo immobiliare
            _fascicoloImmobiliareDao = MockRepository.GenerateStub<IFascicoloImmobiliareDao>();
            _fascicoloImmobiliareDao.Stub(x => x.GetByAzienda(_aziendaDestinazione.ID)).Return(new List<FascicoloImmobiliare> { _fascicoloImmobiliare });
            _daoFactory.Stub(x => x.GetFascicoloImmobiliareDao()).Return(_fascicoloImmobiliareDao);

            _documentService = MockRepository.GenerateStub<IDocumentService>();
            _exportCsvCondominiService = new ExportCsvCondominiService();
            _importCsvCondominiService = new ImportCsvCondominiService(_daoFactory, _documentService);
        }
        public ResultVersamento InsertVersamentoCondomino(Esercizio esercizio, RataSoggetto rata, DatiBancariCondomini banca, Conto contoBancario, CausaleContabile causaleVersamento, Conto contoVersamentoCondomini, DateTime dataVersamento, FileCBI file, LogTransazione logTransazione, TipoVersamentoDopoChiusuraEnum? tipoVersamentoDopoChiusura = null, TipoVersamentoPrimaAperturaEnum? tipoVersamentoPrimaApertura = null)
        {
            int? protocollo = null;
            int? idMovimentoContabile = null;
            var message = string.Empty;
            var descrizione = string.Empty;
            VersamentoSoggetto versamento = null;

            // La richiesta del versamento può avvenire solo se il versamento è successivo alla data di chiusura dell'esercizio
            if (dataVersamento <= esercizio.DataChiusura.GetValueOrDefault())
                tipoVersamentoDopoChiusura = null;

            // La richiesta del versamento prima dell'apertura può avvenire solo se il versamento è precedente alla data di apertura dell'esercizio
            if (dataVersamento >= esercizio.DataApertura.GetValueOrDefault())
                tipoVersamentoPrimaApertura = null;
            try
            {
                // ----------------------------------------------------
                //  Creo Versamento
                // ----------------------------------------------------
                if (string.IsNullOrEmpty(message))
                {
                    var progressivo = _protocolloService.GetProgressivo(TipoProtocollo.VersamentoCondomino, esercizio);
                    if (progressivo.Progressivo != null)
                    {
                        protocollo = progressivo.Progressivo;

                        // ------------------------------------------------------
                        //  Trovo l'esercizio contabile, se non esiste oppure se è chiuso
                        //  interrompo l'operazione di versamento
                        // ------------------------------------------------------
                        var esercizioContabile = esercizio;
                        if (esercizioContabile.Gestione == GestioneEsercizioEnum.Ordinario || (esercizioContabile.Gestione == GestioneEsercizioEnum.Straordinario && (esercizioContabile.Stato == StatoEsercizioEnum.Chiuso || esercizioContabile.DataChiusura.GetValueOrDefault() < dataVersamento)))
                        {
                            esercizioContabile = _daoFactory.GetEsercizioDao().GetEsercizioCompetenza(esercizio.CondominioRiferimento, dataVersamento);
                            if (esercizioContabile == null || esercizioContabile.Stato == StatoEsercizioEnum.Chiuso)
                            {
                                var messageEsercizio = esercizioContabile == null ? "l'esercizio di competenza non è ancora stato aperto" : $"l'esercizio '{esercizioContabile.DisplayName}' è chiuso";
                                return new ResultVersamento(null, null, null, null, null, $"Non è possibile registrare il versamento in data {dataVersamento.ToShortDateString()} perchè {messageEsercizio}.");
                            }
                        }

                        try
                        {
                            versamento = new VersamentoSoggetto(esercizio, rata.Soggetto, contoBancario, dataVersamento, rata.Importo, file, banca, logTransazione, tipoVersamentoDopoChiusura, tipoVersamentoPrimaApertura);
                            _movimentoContabileService.SetMovimentiVersamentoCondomino(null, null, esercizioContabile, versamento, dataVersamento, causaleVersamento, contoVersamentoCondomini, null, file, logTransazione);
                        }
                        catch (InvalidDataException exception)
                        {
                            _log.ErrorFormat("Errore inaspettato nella registrazione del versamento del condomino - {0} - esercizio:{1} - rata:{2}", Utility.GetMethodDescription(), esercizioContabile.ID, rata.ID);
                            if (versamento != null)
                            {
                                if (logTransazione != null)
                                {
                                    logTransazione.Versamenti.Remove(versamento);
                                    versamento.LogTransazione = null;
                                }

                                if (file != null)
                                {
                                    file.Versamenti.Remove(versamento);
                                    versamento.File = null;
                                }

                                esercizio.VersamentiCondomini.Remove(versamento);
                                versamento.Esercizio = null;

                                rata.Soggetto.Versamenti.Remove(versamento);
                                versamento.Soggetto = null;

                                versamento = null;
                            }
                            return new ResultVersamento(null, null, null, null, null, $"Non è possibile registrare il versamento in data {dataVersamento.ToShortDateString()} perchè {exception.Message}.");
                        }
                        
                        setRataVersamentoDopoChiusura(versamento, esercizioContabile, logTransazione);

                        // ---------------------------------------------------------------------
                        // Se la rata non è ancora stata pagata associo il versamento alla rata
                        // ---------------------------------------------------------------------
                        // se la rata è già stata pagata, oppure se l'esercizio di riferimento è chiuso viene registrata come rata fuori piano rateale
                        if (rata.Stato != StatoRataEnum.Pagata && rata.Stato != StatoRataEnum.ParzialmentePagata && rata.Esercizio.Stato == StatoEsercizioEnum.Aperto )
                        {
                            var versamentoRata = new VersamentiRate(versamento, rata, rata.Importo);
                            rata.SetStato();
                        }
                        else
                        {
                            versamento.Causale = $"Versamento fuori piano rateale perchè la rata si trova in stato di {rata.Stato}";
                        }

                        idMovimentoContabile = versamento.MovimentoContabilePatrimoniale.ID;
                        descrizione = getDescrizioneVersamentoConfermato(versamento);
                    }
                    else
                        message += progressivo.Message + Environment.NewLine;
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nel metodo: {0} - rata:{1} - dataVersamento:{2}", ex, Utility.GetMethodDescription(), rata.ID, dataVersamento);
                throw;
            }

            return new ResultVersamento(setVersamentoRicevutaDTO(versamento), null, protocollo, idMovimentoContabile, descrizione, message);
        }
Exemple #8
0
        private RisultatoElaborazioneCBI elaboraMovimento14(string linea, IList<DatiBancariCondomini> datiBancari)
        {
            RisultatoElaborazioneCBI anomalie = null;

            _dataScadenza = convertToData(linea.Substring(22, 6));
            _importo = decimal.Parse(linea.Substring(33, 13))/100;
            _causaleRicezione = linea.Substring(28, 5);

            // Trovo banca di accredito
            var abi = linea.Substring(69, 5);
            var cab = linea.Substring(74, 5);
            var contocorrente = linea.Substring(79, 12);

            var coord = new CoordinateBancarie
            {
                Abi = abi,
                Cab = cab,
                ContoCorrente = contocorrente
            };
            var iban = coord.CalcolaIBAN();
            _banca = datiBancari.FirstOrDefault(item => item.Iban == iban);

            return anomalie;
        }
Exemple #9
0
        private void writeCodaEF(Esercizio esercizio, DatiBancariCondomini banca, StreamWriter sw, int numeroDisposizione, decimal importoTotale, int numeroRighe)
        {
            try
            {
                var sb = new StringBuilder(120);

                // Tipo Record
                sb.Append(" EF");

                // ------------------------------------------------------------------------------------------------
                //  Stessi campi della testata
                // ------------------------------------------------------------------------------------------------
                // Codice SIA
                sb.Append(esercizio.CondominioRiferimento.CodiceSIA.Trim().PadLeft(5, '0'));

                // Codice ABI Banca assuntrice (ABI conto corrente del condominio)
                sb.Append(banca.Abi.Trim().PadLeft(5, '0'));

                // data creazione
                sb.Append(convertData(DateTime.Today));

                // nome supporto - riferimento Disposizione
                sb.Append(getNomeSupporto().PadRight(20, ' '));
                // ------------------------------------------------------------------------------------------------

                // campo a disposizione
                sb.Append(string.Empty.PadLeft(6));

                // Numero Disposizioni presenti nel flusso
                sb.Append(numeroDisposizione.ToString().PadLeft(7, '0'));

                // Totale importi negativi
                sb.Append((Math.Round(importoTotale * 100, 0)).ToString().PadLeft(15, '0'));

                // Totale importi positivi
                sb.Append("0".PadLeft(15, '0'));

                // Numero record
                sb.Append(numeroRighe.ToString().PadLeft(7, '0'));

                // filler
                sb.Append(string.Empty.PadLeft(24));

                // divisa
                sb.Append("E");

                // campo non utilizzabile
                sb.Append(string.Empty.PadLeft(6));

                sw.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione di una singola riga di MAV - {0} - esercizio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), esercizio.ID, esercizio.CondominioRiferimento.Azienda.ID);
                throw;
            }
        }
        public virtual object Clone()
        {
            var newDatiBancari = new DatiBancariCondomini
            {
                Abi = Abi,
                Cab = Cab,
                Cin = Cin,
                ContoCorrente = ContoCorrente,
                Iban = Iban,
                CondominioRiferimento = CondominioRiferimento
            };

            return newDatiBancari;
        }
Exemple #11
0
        private string formattaTestoLettera(Condominio condominio, DatiBancariCondomini banca, string testoNota)
        {
            try
            {
                var testoOutput = string.Empty;
                if (!string.IsNullOrEmpty(testoNota))
                {
                    if (condominio != null)
                    {
                        var comune = string.Empty;
                        var provincia = string.Empty;
                        if (condominio.Indirizzo?.Comune != null)
                        {
                            comune = condominio.Indirizzo.Comune.Descrizione;
                            provincia = condominio.Indirizzo.Comune.ProvinciaAppartenenza.Codice;
                        }

                        var memoryEngine = NVelocityEngineFactory.CreateNVelocityMemoryEngine(true);

                        System.Collections.IDictionary context = new System.Collections.Hashtable();

                        context.Add("condominio", condominio.Descrizione);
                        context.Add("codiceCondominio", condominio.Codice);
                        context.Add("codiceFiscaleCondominio", condominio.CodiceFiscale);
                        context.Add("localitaCondominio", comune + " " + provincia);

                        var bancaPrincipale = banca ?? condominio.DatiBancariPrincipale;
                        if (bancaPrincipale != null)
                        {
                            var abiCab = _daoFactory.GetAbiCabDao().GetByAbiCab(bancaPrincipale.Abi, bancaPrincipale.Cab);

                            context.Add("contoCorrente", bancaPrincipale.ContoCorrente);
                            context.Add("cin", bancaPrincipale.Cin);
                            context.Add("abi", bancaPrincipale.Abi);
                            context.Add("cab", bancaPrincipale.Cab);
                            context.Add("iban", bancaPrincipale.Iban);
                            context.Add("banca", abiCab.DescrizioneAbi + " - " + abiCab.DescrizioneCab);
                        }

                        testoOutput = memoryEngine.Process(context, testoNota);

                    }
                    else
                        testoOutput = testoNota;
                }

                return Conversione.HtmlToReportingServices(testoOutput);

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella formattazione della lettera di sollecito - {0} - testoNota:{1}", ex, Utility.GetMethodDescription(), testoNota);
                throw;
            }
        }
        private string loadCondominio(string codiceCondominio, Azienda azienda, OleDbConnection conn)
        {
            string message = string.Empty;

            // ===========================================================================================================
            //  Lettura Tabelle
            // ===========================================================================================================

            // ----------------------------------------------------------------------------------
            //  Condomini
            // ----------------------------------------------------------------------------------
            var condominioAdapter = new OleDbDataAdapter("SELECT * FROM TabCondomìni WHERE TabCondomìni.Codice = '" + codiceCondominio + "'", conn);

            var dsCondomini = new DataSet("Condomini");
            condominioAdapter.Fill(dsCondomini, "TabCondomìni");

            if (dsCondomini.Tables["TabCondomìni"].Rows.Count > 0)
            {
                var rowCondominio = dsCondomini.Tables["TabCondomìni"].Rows[0];

                var esercizioAdapter = new OleDbDataAdapter("SELECT * FROM TabEsercizi WHERE idCondominio = " + rowCondominio["id"] + " AND TabEsercizi.Attivo = True AND TabEsercizi.Straordinario = False AND (TabEsercizi.Nome LIKE 'ORDINARIO%' OR TabEsercizi.Nome LIKE '0RDINARIO%') ORDER BY DataF DESC", conn);
                esercizioAdapter.Fill(dsCondomini, "TabEsercizi");

                if (dsCondomini.Tables["TabEsercizi"].Rows.Count > 0)
                {
                    var rowEsercizio = dsCondomini.Tables["TabEsercizi"].Rows[0];

                    var dataInizioEsercizio = (DateTime)rowEsercizio["DataI"];
                    var dataFineEsercizio = (DateTime)rowEsercizio["DataF"];

                    Condominio condominio = _daoFactory.GetCondominioDao().GetByCodice(codiceCondominio.PadLeft(3, '0'), azienda.ID);
                    if (condominio == null)
                    {
                        condominio = new Condominio(rowCondominio["Nome"].ToString(), dataFineEsercizio.Day, dataFineEsercizio.Month, dataFineEsercizio.Year + 1, azienda) {Codice = codiceCondominio.PadLeft(3, '0')};
                        _daoFactory.GetCondominioDao().SaveOrUpdate(condominio);
                        addDefault(condominio);
                    }
                    else
                    {
                        // ======================================================================================
                        // Eliminazione vecchi dati
                        // ======================================================================================
                        foreach (UnitaImmobiliare unita in _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(condominio.ID))
                        {
                            foreach (Millesimo mill in unita.Millesimi)
                            {
                                mill.UnitaRiferimento = null;
                                mill.ContoRiferimento = null;
                            }
                            unita.Millesimi.Clear();
                            unita.GruppoStabileRiferimento.UnitaImmobiliari.Remove(unita);
                            _daoFactory.GetUnitaImmobiliareDao().Delete(unita);
                        }

                        foreach (Palazzina stabileDelete in condominio.Palazzine)
                        {
                            foreach (GruppoStabile gruppo in stabileDelete.GruppiStabile)
                                gruppo.PalazzinaRiferimento = null;
                            stabileDelete.CondominioRiferimento = null;
                        }
                        condominio.Palazzine.Clear();

                        var stabileFirst = new Palazzina(condominio, "Stabile A");
                        _daoFactory.GetPalazzinaDao().SaveOrUpdate(stabileFirst);

                        // Dati Bancari
                        foreach (DatiBancariCondomini banca in condominio.DatiBancari)
                        {
                            foreach (MovimentoBancario mov in banca.MovimentiBancari)
                            {
                                mov.Condominio = null;
                                mov.Banca = null;
                                mov.Fornitore = null;
                                mov.Esercizio = null;
                                mov.File = null;
                            }

                            banca.CondominioRiferimento = null;
                        }
                        condominio.DatiBancari.Clear();

                        // Piano Conti
                        foreach (Conto contoDelete in condominio.Conti)
                        {
                            contoDelete.CondominioRiferimento = null;
                            contoDelete.Millesimi.Clear();
                        }
                        condominio.Conti.Clear();

                        // Modelli Ripartizione
                        foreach (ModelloRegistrazioneContabile modello in condominio.ModelliRegistrazioneContabile)
                            modello.CondominioRiferimento = null;
                        condominio.ModelliRegistrazioneContabile.Clear();

                        // Esercizi
                        foreach (Esercizio esercizioDelete in condominio.Esercizi)
                        {
                            esercizioDelete.AnnoGestionale.Esercizi.Remove(esercizioDelete);
                            _daoFactory.GetEsercizioDao().Delete(esercizioDelete);
                        }
                        condominio.Esercizi.Clear();

                        // Anno Gestionale
                        foreach (AnnoGestionale anno in condominio.AnniGestionali)
                            _daoFactory.GetAnnoGestionaleDao().Delete(anno);
                        condominio.AnniGestionali.Clear();
                        // ======================================================================================

                        condominio.Descrizione = rowCondominio["Nome"].ToString();

                        // ======================================================================================
                        //  Default del condominio
                        // ======================================================================================

                        // Conti comuni del Piano dei conti
                        IList<PianoConti> conti = _daoFactory.GetPianoContiDao().GetByAzienda(azienda.ID);
                        foreach (PianoConti pianoConto in conti)
                        {
                            if(pianoConto.IsRequired)
                                pianoConto.ConvertToConto(condominio);
                        }

                        // Nuovo esercizio
                        DateTime inizioEsercizioOld = dataInizioEsercizio;
                        DateTime fineEsercizioOld = dataFineEsercizio;
                        var annoNew = new AnnoGestionale(condominio, inizioEsercizioOld.AddYears(1).Year, fineEsercizioOld.AddYears(1).Year);
                        _daoFactory.GetAnnoGestionaleDao().SaveOrUpdate(annoNew);
                        var esercizioNew = new Esercizio(condominio, inizioEsercizioOld.AddYears(1), fineEsercizioOld.AddYears(1), annoNew, Sfera.Enums.GestioneEsercizioEnum.Ordinario);
                        _daoFactory.GetEsercizioDao().SaveOrUpdate(esercizioNew);
                    }

                    condominio.CodiceImportazione = rowCondominio["id"].ToString().Trim();

                    if (rowCondominio["Note"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["Note"].ToString()))
                        condominio.Note = rowCondominio["Note"].ToString();

                    if (rowCondominio["CF"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["CF"].ToString()))
                        condominio.CodiceFiscale = rowCondominio["CF"].ToString().Trim();

                    // ----------------------------
                    // Banche
                    // ----------------------------
                    var bancheCondominiAdapter = new OleDbDataAdapter("SELECT * FROM TabBanche INNER JOIN TabBanche_Condomìni ON TabBanche.id = TabBanche_Condomìni.idBanca WHERE TabBanche_Condomìni.idCondominio = " + rowCondominio["id"], conn);
                    bancheCondominiAdapter.Fill(dsCondomini, "Banche");

                    foreach (DataRow rowBanca in dsCondomini.Tables["Banche"].Rows)
                    {
                        try
                        {
                            if (rowBanca["TabBanche_Condomìni.Attivo"] != DBNull.Value && (bool)rowBanca["TabBanche_Condomìni.Attivo"])
                            {
                                DatiBancariCondomini datiBancari = null;
                                if (rowBanca["CodSiaOrdinante"] != DBNull.Value && !string.IsNullOrEmpty(rowBanca["CodSiaOrdinante"].ToString()))
                                    condominio.CodiceSIA = rowBanca["CodSiaOrdinante"].ToString().Trim();

                                if (rowBanca["IBAN"] != DBNull.Value && !string.IsNullOrEmpty(rowBanca["IBAN"].ToString()))
                                {
                                    datiBancari = new DatiBancariCondomini(rowBanca["IBAN"].ToString().Trim().Replace(" ", ""), condominio);
                                    condominio.DatiBancari.Add(datiBancari);
                                    _daoFactory.GetDatiBancariCondominiDao().SaveOrUpdate(datiBancari);
                                }
                                else if (rowBanca["Abi"] != DBNull.Value && !string.IsNullOrEmpty(rowBanca["Abi"].ToString()) && rowBanca["Cab"] != DBNull.Value && !string.IsNullOrEmpty(rowBanca["Cab"].ToString()) && rowBanca["CC"] != DBNull.Value && !string.IsNullOrEmpty(rowBanca["CC"].ToString()))
                                {
                                    var coor = new CoordinateBancarie
                                    {
                                        Abi = rowBanca["Abi"].ToString().Trim().PadLeft(5, '0'),
                                        Cab = rowBanca["Cab"].ToString().Trim().PadLeft(5, '0'),
                                        ContoCorrente = rowBanca["CC"].ToString().Trim().PadLeft(12, '0')
                                    };

                                    datiBancari = new DatiBancariCondomini(coor.CalcolaIBAN(), condominio);
                                    condominio.DatiBancari.Add(datiBancari);
                                    _daoFactory.GetDatiBancariCondominiDao().SaveOrUpdate(datiBancari);
                                }
                                if (datiBancari != null && rowBanca["Predefinito"] != DBNull.Value)
                                {
                                    datiBancari.Principale = (bool)rowBanca["Predefinito"];
                                    datiBancari.CodiceImportazione = rowBanca["TabBanche_Condomìni.id"].ToString().Trim();
                                }
                                if (datiBancari != null)
                                    datiBancari.Note = rowBanca["NomeCC"].ToString().Trim();
                            }
                        }
                        catch (Exception ex)
                        {
                            
                            _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Banche) - banca:" + rowBanca["id"], ex);
                            throw;
                        }
                    }

                    // Se ho una sola coordinata bancaria questa è la principale
                    if (condominio.DatiBancari.Count == 1)
                        Library.IesiGenericCollections<DatiBancariCondomini>.GetByIndex(condominio.DatiBancari, 0).Principale = true;

                    // ----------------------------
                    // Stabili/Scale
                    // ----------------------------
                    var stabiliScaleAdapter = new OleDbDataAdapter("SELECT DISTINCT TabIndirizzi.*, TabEdifici.*, TabIndirizzi_Condomìni.idCondominio, TabCodComune.Nome " +
                        "FROM TabEdifici INNER JOIN " +
                        "((TabCodComune INNER JOIN " +
                        "(TabIndirizzi INNER JOIN " +
                        "TabIndirizzi_Condomìni ON TabIndirizzi.id = TabIndirizzi_Condomìni.idIndirizzo) ON TabCodComune.id = TabIndirizzi.idComune) INNER JOIN TabLocali ON TabIndirizzi_Condomìni.id = TabLocali.idIndirizzoCondominio) ON TabEdifici.id = TabLocali.idEdificio " +
                        "WHERE TabIndirizzi_Condomìni.idCondominio = " + rowCondominio["id"] + " " +
                        "ORDER BY TabIndirizzi_Condomìni.idCondominio, TabIndirizzi.id", conn);
                    stabiliScaleAdapter.Fill(dsCondomini, "StabiliScale");

                    int numeroUnitaImmobiliari = 0;
                    bool first = true;
                    var stabile = Library.IesiGenericCollections<Palazzina>.GetByIndex(condominio.Palazzine, 0);
                    var descrizioneStabile = string.Empty;
                    Address indirizzoStabile = null;

                    IList<NameValueDTO<int, string>> listaPersone = _daoFactory.GetPersonaDao().GetByQueryDTO<NameValueDTO<int, string>>("SELECT new NameValueDTOIntString(PERS.ID, PERS.CodiceImportazione) FROM Persona PERS WHERE PERS.AziendaID = :azienda", new[] { new QueryParam("azienda", azienda.ID) });
                    foreach (DataRow rowStabile in dsCondomini.Tables["StabiliScale"].Rows)
                    {
                        try
                        {
                            GruppoStabile newScala;
                            if (first)
                            {
                                newScala = Library.IesiGenericCollections<GruppoStabile>.GetByIndex(stabile.GruppiStabile, 0);
                                newScala.Descrizione = rowStabile["TabEdifici.Nome"].ToString();
                            }
                            else
                            {
                                newScala = new GruppoStabile(stabile, rowStabile["TabEdifici.Nome"].ToString());
                                _daoFactory.GetGruppoStabileDao().SaveOrUpdate(newScala);
                            }

                            newScala.Descrizione = rowStabile["TabEdifici.Nome"].ToString();
                            newScala.Indirizzo = getIndirizzo(rowStabile);
                            
                            newScala.CodiceImportazione = rowStabile["TabEdifici.id"].ToString().Trim();
                            newScala.Note = rowStabile["TabEdifici.Note"].ToString().Trim() + Environment.NewLine + rowStabile["TabIndirizzi.Note"].ToString().Trim();

                            descrizioneStabile += rowStabile["TabIndirizzi.Nome"].ToString().Trim() + " ";
                            if (indirizzoStabile == null)
                                indirizzoStabile = (Address)newScala.Indirizzo.Clone();

                            // Unità Immobiliari
                            message += loadUnitaImmobiliari((int)rowEsercizio["id"], newScala, (int)rowStabile["TabEdifici.id"], dataInizioEsercizio, listaPersone, conn);
                            numeroUnitaImmobiliari += newScala.UnitaImmobiliari.Count;

                            first = false;
                        }
                        catch (Exception ex)
                        {
                            
                            _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Scale) - indirizzo:" + rowStabile["TabIndirizzi.id"], ex);
                            throw;
                        }
                    }
                    stabile.Descrizione = descrizioneStabile.Trim();
                    stabile.Indirizzo = indirizzoStabile;

                    if (stabile.Indirizzo != null) condominio.Indirizzo = 
                        (Address)stabile.Indirizzo.Clone();
                    condominio.NumeroUnitaImmobiliari = numeroUnitaImmobiliari;

                    // ===================================
                    //  Piano dei conti
                    // ===================================
                    var pianoContiAdapter = new OleDbDataAdapter("SELECT TabCapitoli.*, TabEsercizi.idCondominio " +
                        "FROM TabEsercizi INNER JOIN TabCapitoli ON TabEsercizi.id = TabCapitoli.idEsercizio " +
                        "WHERE TabEsercizi.Attivo = true AND TabEsercizi.Straordinario = false AND TabEsercizi.id = " + rowEsercizio["id"] + " " +
                        "ORDER BY TabCapitoli.Codice", conn);
                    pianoContiAdapter.Fill(dsCondomini, "PianoConti");

                    var loadedConti = new List<Conto>();
                    DataTable tbPianoConti = dsCondomini.Tables["PianoConti"];
                    int ordineConto = 0;
                    foreach (DataRow row in tbPianoConti.Rows)
                    {
                        try
                        {
                            var conto = new Conto(condominio, Sfera.Enums.TipoContoEconomicoEnum.Economico, Sfera.Enums.TipoPeriodoCompetenzaContabile.Esercizio, row["Nome"].ToString(), true, true, false);
                            _daoFactory.GetContoDao().SaveOrUpdate(conto);

                            string codice = row["Codice"].ToString().Trim();
                            if (!string.IsNullOrEmpty(codice))
                            {
                                conto.Codice = codice.Length > 2 ? codice.Substring(0, 2).PadLeft(3, '0') : codice.PadLeft(3, '0');
                            }

                            conto.PresenteBilancio = true;
                            conto.CodiceImportazione = row["id"].ToString();
                            ordineConto++;
                            conto.Ordine = ordineConto;
                            loadedConti.Add(conto);

                            dsCondomini = new DataSet();
                            var sottoContiAdapter = new OleDbDataAdapter("SELECT * FROM TabSottoCapitoli WHERE TabSottoCapitoli.idCapitolo = " + row["id"], conn);
                            sottoContiAdapter.Fill(dsCondomini, "SottoConti");
                            var ordineSottoConto = 0;
                            foreach (DataRow rowSottoConto in dsCondomini.Tables["SottoConti"].Rows)
                            {
                                try
                                {
                                    var sottoConto = new SottoConto(conto, rowSottoConto["Nome"].ToString()) {CodiceImportazione = rowSottoConto["id"].ToString()};
                                    ordineSottoConto++;
                                    sottoConto.Codice = conto.Codice + "." + ordineSottoConto.ToString().PadLeft(3, '0');
                                    _daoFactory.GetSottoContoDao().SaveOrUpdate(sottoConto);
                                }
                                catch (Exception ex)
                                {
                                    
                                    _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Sotto Conti) - sottoconto:" + rowSottoConto["id"], ex);
                                    throw;
                                }

                            }
                        }
                        catch (Exception ex)
                        {
                            
                            _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Piano dei conti) - conto:" + row["id"], ex);
                            throw;
                        }
                    }

                    // ===================================
                    //  Millesimi
                    // ===================================
                    try
                    {
                        var unitaCondominio = _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(condominio.ID);
                        foreach (Conto conto in loadedConti)
                        {
                            try
                            {
                                dsCondomini = new DataSet();
                                var millesimiAdapter = new OleDbDataAdapter("SELECT * " +
                                    "FROM (TabMillesimi INNER JOIN TabMillesimiLocali ON TabMillesimi.id = TabMillesimiLocali.idTabMillesimi) INNER JOIN TabCapitoli ON TabMillesimi.id = TabCapitoli.idTabMillesimi " +
                                    "WHERE TabMillesimi.idEsercizio = " + rowEsercizio["id"].ToString().Trim() + " AND TabCapitoli.id = " + conto.CodiceImportazione.Trim() + ";", conn);
                                millesimiAdapter.Fill(dsCondomini, "Millesimi");

                                foreach (DataRow rowMillesimo in dsCondomini.Tables["Millesimi"].Rows)
                                {
                                    try
                                    {
                                        if ((float)rowMillesimo["PercProp"] > 0)
                                        {
                                            //string hql = "FROM UnitaImmobiliare UNI WHERE UNI.CodiceImportazione = :codice";
                                            //IList<UnitaImmobiliare> listaUnita = _daoFactory.GetUnitaImmobiliareDao().GetByQuery(hql, new QueryParam[] { new QueryParam("codice", rowMillesimo["idLocale"].ToString().Trim()) });
                                            IList<UnitaImmobiliare> listaUnita = (from item in unitaCondominio
                                                                                  where item.CodiceImportazione == rowMillesimo["idLocale"].ToString().Trim()
                                                                                  select item).ToList();
                                            if (listaUnita.Count > 0)
                                            {
                                                var newMillesimo = new Millesimo(conto, listaUnita[0])
                                                {
                                                    Valore = Convert.ToDecimal((float) rowMillesimo["Mill"]),
                                                    CodiceImportazione = rowMillesimo["TabMillesimiLocali.id"].ToString().Trim()
                                                };
                                                _daoFactory.GetMillesimoDao().SaveOrUpdate(newMillesimo);

                                                if (listaUnita[0].GetConduttorePrincipale(dataInizioEsercizio) != null)
                                                {
                                                    var percentualeProp = Convert.ToDecimal((float)rowMillesimo["PercProp"]) / 100m;
                                                    new SoggettoCondominioRipartizione(conto, listaUnita[0].GetProprietarioPrincipale(dataInizioEsercizio), percentualeProp);
                                                    new SoggettoCondominioRipartizione(conto, listaUnita[0].GetConduttorePrincipale(dataInizioEsercizio), 1 - percentualeProp);
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        
                                        _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Millesimi) - millesimo:" + rowMillesimo["TabMillesimiLocali.id"].ToString().Trim(), ex);
                                        throw;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                
                                _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Millesimi) - conto:" + conto.CodiceImportazione, ex);
                                throw;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Millesimi) - condominio:" + codiceCondominio, ex);
                        throw;
                    }

                    // ===================================
                    //  Regole di ripartizione
                    // ===================================
                    try
                    {
                        var regoleAdapter = new OleDbDataAdapter("SELECT TabRegoleRipartizione.Nome, TabRegoleRipartizione.Note, TabRegoleRipartizione.idEsercizio, TabDettagliRegoleRipartizione.* " +
                            "FROM TabRegoleRipartizione INNER JOIN TabDettagliRegoleRipartizione ON TabRegoleRipartizione.id = TabDettagliRegoleRipartizione.idRegola " +
                            "WHERE TabRegoleRipartizione.idEsercizio = " + rowEsercizio["id"].ToString().Trim() + ";", conn);
                        regoleAdapter.Fill(dsCondomini, "Regole");

                        int lastIdModello = 0;
                        ModelloRegistrazioneContabile lastModello = null;
                        foreach (DataRow rowRegola in dsCondomini.Tables["Regole"].Rows)
                        {
                            try
                            {
                                var hql = "FROM Conto C WHERE C.CodiceImportazione = :codice";
                                var listaConti = _daoFactory.GetContoDao().GetByQuery(hql, new[] { new QueryParam("codice", rowRegola["idCapitolo"].ToString().Trim()) });
                                if (listaConti.Count > 0)
                                {
                                    var hqlSottoConto = "FROM SottoConto S WHERE S.CodiceImportazione = :codice";
                                    var listaSottoConti = _daoFactory.GetSottoContoDao().GetByQuery(hqlSottoConto, new[] { new QueryParam("codice", rowRegola["idSottoCapitolo"].ToString().Trim()) });
                                    if (listaSottoConti.Count > 0)
                                    {
                                        if ((int)rowRegola["idRegola"] != lastIdModello)
                                        {
                                            var modello = new ModelloRegistrazioneContabile(condominio, rowRegola["Nome"].ToString(), null)
                                            {
                                                CodiceImportazione = rowRegola["idRegola"].ToString().Trim()
                                            };
                                            lastIdModello = (int)rowRegola["idRegola"];
                                            lastModello = modello;
                                            _daoFactory.GetModelloRegistrazioneContabileDao().SaveOrUpdate(modello);
                                        }
                                        var contoModello = new ContiModelloRegistrazioneContabile(lastModello, listaConti[0], listaSottoConti[0], Convert.ToDecimal((float)rowRegola["Perc"])/100m, null) {CodiceImportazione = rowRegola["id"].ToString().Trim()};
                                        _daoFactory.GetContiModelloRegistrazioneContabileDao().SaveOrUpdate(contoModello);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                
                                _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Regole Ripartizione) - regola:" + rowRegola["idRegola"].ToString().Trim(), ex);
                                throw;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " (Regole Ripartizione)", ex);
                        throw;
                    }
                }
                else
                {
                    message = "Non è stato trovato alcun esercizio Ordinario importabile per il condominio: " + codiceCondominio + " - " + rowCondominio["Nome"];
                    
                    _log.Error(message + " - " + Library.Utility.GetMethodDescription());
                }
            }
            else
            {
                message = "Non è stato trovato il condominio: " + codiceCondominio;
                
                _log.Error(message + " - " + Library.Utility.GetMethodDescription());
            }

            return message;
        }
 public DatiBancariDTO GetByDomainEntity(DatiBancariCondomini item)
 {
     try
     {
         return setDto(item);
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nel caricamento dei dati bancari - {0} - id:{1}", ex, Utility.GetMethodDescription(), item.ID);
         throw;
     }
 }
Exemple #14
0
        private void writeMovimento14(DettaglioEmissioneRate dettaglio, DatiBancariCondomini banca, StreamWriter sw, int numeroDisposizione)
        {
            try
            {
                var sb = new StringBuilder(120);

                var rataPrincipale = IesiGenericCollections<RataSoggetto>.GetByIndex(dettaglio.RateCollegate, 0);

                // Tipo Record
                sb.Append(" 14");

                // Numero Disposizione
                sb.Append(numeroDisposizione.ToString().PadLeft(7, '0'));

                // filler
                sb.Append(string.Empty.PadLeft(12));

                // data scadenza
                sb.Append(convertData(rataPrincipale.DataScadenza));

                // causale
                sb.Append("07000");

                // importo
                sb.Append((Math.Round(dettaglio.RateCollegate.Sum(rata => rata.Importo) * 100, 0)).ToString().PadLeft(13, '0'));

                // segno
                sb.Append("-");

                // --------------------------------------------------------------------
                // Coordinate banca assuntrice (banca del condominio)
                // --------------------------------------------------------------------

                // ABI
                sb.Append(banca.Abi);

                // CAB
                sb.Append(banca.Cab);

                // Conto Corrente
                sb.Append(banca.ContoCorrente.PadLeft(12, '0'));

                // filler
                sb.Append(string.Empty.PadLeft(22));

                // --------------------------------------------------------------------
                // Coordinate azienda creditrice (condominio)
                // --------------------------------------------------------------------

                // Codice SIA
                sb.Append(rataPrincipale.Esercizio.CondominioRiferimento.CodiceSIA.Trim().PadLeft(5, ' '));

                // Tipo codice (usato il codice utente del condomino quindi: '1')
                //sb.Append("1");
                sb.Append(" ");

                // Codice (usato il codice utente del condomino)
                //sb.Append(rataPrincipale.Soggetto.Persona.DatiAutenticazione.Username.PadRight(16, ' '));
                sb.Append(string.Empty.PadRight(16));

                // filler
                sb.Append(string.Empty.PadLeft(6));

                // divisa
                sb.Append("E");

                sw.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione di una singola riga di MAV - {0} - condominio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), banca.CondominioRiferimento.ID, banca.CondominioRiferimento.Azienda.ID);
                throw;
            }
        }
Exemple #15
0
        // Coordinate ordinante
        private void writeMovimento16(RataSoggetto rata, DatiBancariCondomini banca, StreamWriter sw, int numeroDisposizione)
        {
            try
            {
                var sb = new StringBuilder(120);

                // Tipo Record
                sb.Append(" 16");

                // Numero Disposizione
                sb.Append(numeroDisposizione.ToString().PadLeft(7, '0'));

                // --------------------------------------------------------------------
                // Coordinate banca ordinante (banca del condominio)
                // --------------------------------------------------------------------
                var coord = new CoordinateBancarie
                {
                    Abi = banca.Abi,
                    Cab = banca.Cab,
                    ContoCorrente = banca.ContoCorrente
                };

                // Codice Paese
                sb.Append("IT");

                // CheckDigit IBAN
                sb.Append(coord.CalcolaCheckIBAN());

                // CIN
                sb.Append(coord.CalcolaCin());

                // ABI
                sb.Append(coord.Abi);

                // CAB
                sb.Append(coord.Cab);

                // Conto Corrente
                sb.Append(coord.ContoCorrente);

                // filler
                sb.Append(string.Empty.PadLeft(83));

                sw.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione di una singola riga di MAV - {0} - condominio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), banca.CondominioRiferimento.ID, banca.CondominioRiferimento.Azienda.ID);
                throw;
            }
        }
Exemple #16
0
        private void writeTestataIM(Esercizio esercizio, DatiBancariCondomini banca, StreamWriter sw)
        {
            try
            {
                var sb = new StringBuilder(120);

                // Tipo Record
                sb.Append(" IM");

                // Codice SIA
                sb.Append(esercizio.CondominioRiferimento.CodiceSIA.Trim().PadLeft(5, '0'));

                // Codice ABI Banca assuntrice (ABI conto corrente del condominio)
                sb.Append(banca.Abi.Trim().PadLeft(5, '0'));

                // data creazione
                sb.Append(convertData(DateTime.Today));

                // nome supporto - riferimento Disposizione
                sb.Append(getNomeSupporto().PadRight(20, ' '));

                // campo a disposizione
                sb.Append(string.Empty.PadLeft(6));

                // filler
                sb.Append(string.Empty.PadLeft(59));

                // qualificatore di flusso
                sb.Append(string.Empty.PadLeft(7));

                // filler
                sb.Append(string.Empty.PadLeft(2));

                // divisa
                sb.Append("E");

                // filler
                sb.Append(string.Empty.PadLeft(1));

                // campo non utilizzabile
                sb.Append(string.Empty.PadLeft(5));

                sw.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione di una singola riga di MAV - {0} - esercizio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), esercizio.ID, esercizio.CondominioRiferimento.Azienda.ID);
                throw;
            }
        }
Exemple #17
0
        // =======================================================================================================================
        //  Azienda Mittente --> Condominio
        //  Banca Assuntrice --> Banca del Condominio che deve ricevere i pagamenti e a cui devovo essere inviare le disposizioni
        //  Destinatario     --> Banca del Fornitore (beneficiario)
        // =======================================================================================================================
        public byte[] EmissioneMav(EmissioneRate testataEmissione, DatiBancariCondomini banca, string intestazioneAzienda)
        {
            _testata = testataEmissione;
            byte[] bytes = null; 
            StreamWriter sw = null;
            try
            {
                _impostazioniAzienda = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(testataEmissione.Esercizio.CondominioRiferimento.Azienda.ID) ?? new ImpostazioniAzienda(testataEmissione.Esercizio.CondominioRiferimento.Azienda) { TipoIndirizzoComunicazioni = TipoIndirizzo.Residenza};
                if(_impostazioniAzienda == null)
                    _log.ErrorFormat("Non sono definite le impostazioni dell'azienda - {0} - azienda:{1}", Utility.GetMethodDescription(), testataEmissione.Esercizio.CondominioRiferimento.Azienda.ID);

                var fileName = Path.GetTempPath() + "\\" + Guid.NewGuid();
                if (ApplicationDeployment.IsNetworkDeployed)
                    fileName = ApplicationDeployment.CurrentDeployment.DataDirectory + "\\" + Guid.NewGuid();
                if (File.Exists(fileName))
                    File.Delete(fileName);

                // =============================================================================================
                // Creo il file
                // =============================================================================================
                using (sw = File.CreateText(fileName))
                {
                    // Creo le riga di testa
                    writeTestataIM(testataEmissione.Esercizio, banca, sw);

                    decimal importoTotale = 0;
                    var numeroRighe = 1;

                    var numeroDisposizione = 0;
                    foreach (var rata in testataEmissione.Rate)
                    {
                        try
                        {
                            var rataPrincipale = rata.RateCollegate.FirstOrDefault(item => item.Soggetto.SoggettoPrincipale == null);
                            if (rataPrincipale == null)
                            {
                                rataPrincipale = rata.RateCollegate.FirstOrDefault();
                                _log.WarnFormat("Non trovata nessun rata principale - {0} - rata:{1}", Utility.GetMethodDescription(), rata.ID);                    
                            }

                            importoTotale += rata.RateCollegate.Sum(rt => rt.Importo);
                            numeroDisposizione++;

                            numeroRighe++;
                            writeMovimento14(rata, banca, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento16(rataPrincipale, banca, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento20(rataPrincipale, sw, numeroDisposizione, intestazioneAzienda);
                            numeroRighe++;
                            writeMovimento30(rataPrincipale, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento40(rataPrincipale, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento50(rataPrincipale, testataEmissione, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento51(rata, sw, numeroDisposizione);
                            numeroRighe++;
                            writeMovimento70(sw, numeroDisposizione);
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore inaspettato durante la elaborazione di una singola riga per la creazione del file CBI dei MAV - {0} - rata:{1}", ex, Utility.GetMethodDescription(), rata.ID);
                            throw;
                        }
                    }

                    numeroRighe++;
                    writeCodaEF(testataEmissione.Esercizio, banca, sw, numeroDisposizione, importoTotale, numeroRighe);
                }

                _notifier.Notify("Il file dei MAV è stato correttamente creato.");

                var infile = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                bytes = new byte[infile.Length];
                infile.Read(bytes, 0, bytes.Length);

                testataEmissione.File = Conversione.ToString(bytes);

                return bytes;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione del file CBI dei MAV - {0}", ex, Utility.GetMethodDescription());
                _notifier.Notify("Si sono verificati problemi inaspettati durante la creazione del file CBI dei MAV." + Environment.NewLine + "Controllare il log per ulteriori dettagli.");
                return bytes;
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                    sw.Dispose();
                }
            }
        }
Exemple #18
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;
        }
        public string LoadCondominioOLD(byte[] database, string codiceCondominio, TipoSaldi tipoSaldi, int idAzienda, string password)
        {
            string message = string.Empty;

            try
            {

                // -----------------------------------------------------------------------------------------------------------
                //  Decompressione del database
                // -----------------------------------------------------------------------------------------------------------
                const string databasePath = @"C:\temp\y.mdb";
                var fsOut = new FileStream(databasePath, FileMode.Create, FileAccess.Write, FileShare.None);
                var gZipStream = new GZipStream(new MemoryStream(database), CompressionMode.Decompress);

                const int bufferSize = 4096;
                var b = new byte[bufferSize];
                
                while (true)
                {
                    int n = gZipStream.Read(b, 0, b.Length);
                    if (n > 0)
                        fsOut.Write(b, 0, n);
                    else
                        break;
                }
                fsOut.Close();
                fsOut.Dispose();

                // ===========================================================================================================
                //  Lettura Tabelle
                // ===========================================================================================================

                // ----------------------------------------------------------------------------------
                //  Condomini
                // ----------------------------------------------------------------------------------
                var conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; User Id=; Jet OLEDB:Database Password="******"; Data Source=" + databasePath);
                var condominioAdapter = new OleDbDataAdapter("SELECT * FROM Stabili WHERE S_COD_STA=" + codiceCondominio, conn);

                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                var dsCondomini = new DataSet("Condomini");
                condominioAdapter.Fill(dsCondomini, "Stabili");

                var rowCondominio = dsCondomini.Tables["Stabili"].Rows[0];
                var dataFineEsercizio = (DateTime)rowCondominio["S_FIN_ESE"];

                var condominio = _daoFactory.GetCondominioDao().GetByCodice(codiceCondominio.PadLeft(3, '0'), azienda.ID);
                if (condominio == null)
                {
                    condominio = new Condominio(rowCondominio["S_NOME"].ToString(), dataFineEsercizio.Day, dataFineEsercizio.Month, dataFineEsercizio.Year + 1, azienda)
                    {
                        Codice = codiceCondominio.PadLeft(3, '0'),
                        Indirizzo =
                            new Address
                                {
                                    Indirizzo = rowCondominio["S_VIA"].ToString(),
                                    Cap = rowCondominio["S_CAP"].ToString()
                                }
                    };

                    // Indirizzo
                    if (rowCondominio["S_LOCALITA"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_LOCALITA"].ToString()))
                    {
                        var comuni = _daoFactory.GetComuneDao().GetByDescrizione(rowCondominio["S_LOCALITA"].ToString().Trim());
                        if (comuni.Count == 1)
                            condominio.Indirizzo.Comune = comuni[0];
                        else
                            condominio.Indirizzo.Localita = rowCondominio["S_LOCALITA"].ToString();
                    }

                    _daoFactory.GetCondominioDao().SaveOrUpdate(condominio);

                    addDefault(condominio, true);
                }
                else
                { 
                    // Eliminazione vecchi dati
                    foreach(var unita in _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(condominio.ID))
                    {
                        foreach (var mill in unita.Millesimi)
                        {
                            mill.ContoRiferimento.Millesimi.Remove(mill);
                            _daoFactory.GetMillesimoDao().Delete(mill);
                        }
                        unita.Millesimi.Clear();
                        unita.GruppoStabileRiferimento.UnitaImmobiliari.Remove(unita);
                        _daoFactory.GetUnitaImmobiliareDao().Delete(unita);
                    }

                    foreach (var stabileDelete in condominio.Palazzine)
                    {
                        foreach (var gruppo in stabileDelete.GruppiStabile)
                        {
                            _daoFactory.GetGruppoStabileDao().Delete(gruppo);
                        }
                        _daoFactory.GetPalazzinaDao().Delete(stabileDelete);
                    }
                    condominio.Palazzine.Clear();

                    var stabileFirst = new Palazzina(condominio, "Stabile A");
                    _daoFactory.GetPalazzinaDao().SaveOrUpdate(stabileFirst);

                    // Dati Bancari
                    foreach (var banca in condominio.DatiBancari)
                    {
                        foreach (var mov in banca.MovimentiBancari)
                            _daoFactory.GetMovimentoBancarioDao().Delete(mov);

                        _daoFactory.GetDatiBancariCondominiDao().Delete(banca);
                    }
                    condominio.DatiBancari.Clear();

                    // Piano Conti
                    foreach (var contoDelete in condominio.Conti)
                        _daoFactory.GetContoDao().Delete(contoDelete);
                    condominio.Conti.Clear();

                    // Esercizi
                    foreach(var esercizioDelete in condominio.Esercizi)
                    {
                        esercizioDelete.AnnoGestionale.Esercizi.Remove(esercizioDelete);
                        _daoFactory.GetEsercizioDao().Delete(esercizioDelete);
                    }
                    condominio.Esercizi.Clear();

                    // Anno Gestionale
                    foreach(var anno in condominio.AnniGestionali)
                        _daoFactory.GetAnnoGestionaleDao().Delete(anno);
                    condominio.AnniGestionali.Clear();

                    // -------------------------------------
                    //  Default del condominio
                    // -------------------------------------

                    // Conti comuni del Piano dei conti
                    var conti = _daoFactory.GetPianoContiDao().GetByAzienda(idAzienda);
                    foreach (var pianoConto in conti)
                        pianoConto.ConvertToConto(condominio);

                    // Nuovo esercizio
                    var inizioEsercizioOld = (DateTime)rowCondominio["S_INI_ESE"];
                    var fineEsercizioOld = (DateTime)rowCondominio["S_FIN_ESE"];
                    var annoNew = new AnnoGestionale(condominio, inizioEsercizioOld.AddYears(1).Year, fineEsercizioOld.AddYears(1).Year);
                    _daoFactory.GetAnnoGestionaleDao().SaveOrUpdate(annoNew);
                    var esercizioNew = new Esercizio(condominio, inizioEsercizioOld.AddYears(1), fineEsercizioOld.AddYears(1), annoNew, GestioneEsercizioEnum.Ordinario);
                    _daoFactory.GetEsercizioDao().SaveOrUpdate(esercizioNew);
                }

                if (rowCondominio["S_NOTE"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_NOTE"].ToString()))
                    condominio.Note = rowCondominio["S_NOTE"].ToString();

                if (rowCondominio["S_COD_SIA"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_COD_SIA"].ToString()))
                    condominio.CodiceSIA = rowCondominio["S_COD_SIA"].ToString().Trim();

                if (rowCondominio["S_COD_FISCALE"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_COD_FISCALE"].ToString()))
                    condominio.CodiceFiscale = rowCondominio["S_COD_FISCALE"].ToString().Trim();

                if (rowCondominio["S_IBAN_COMPLETO"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_IBAN_COMPLETO"].ToString()))
                {
                    var datiBancari = new DatiBancariCondomini(rowCondominio["S_IBAN_COMPLETO"].ToString().Trim(), condominio);
                    condominio.DatiBancari.Add(datiBancari);
                }
                else if (rowCondominio["S_ABI"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_ABI"].ToString()) && rowCondominio["S_CAB"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_CAB"].ToString()) && rowCondominio["S_NR_CC"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_NR_CC"].ToString()))
                {
                    var coor = new CoordinateBancarie
                    {
                        Abi = rowCondominio["S_ABI"].ToString().Trim().PadLeft(5, '0'),
                        Cab = rowCondominio["S_CAB"].ToString().Trim().PadLeft(5, '0'),
                        ContoCorrente = rowCondominio["S_NR_CC"].ToString().Trim().PadLeft(12, '0')
                    };

                    var datiBancari = new DatiBancariCondomini(coor.CalcolaIBAN(), condominio);
                    condominio.DatiBancari.Add(datiBancari);
                }

                // Scale
                var stabile = Library.IesiGenericCollections<Palazzina>.GetByIndex(condominio.Palazzine, 0);
                var scala = Library.IesiGenericCollections<GruppoStabile>.GetByIndex(stabile.GruppiStabile, 0);
                var firstScala = true;

                for(int i=1; i<=52; i++)
                {
                    if (rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')].ToString()))
                    {
                        if(firstScala && scala != null)
                        {
                            scala.Descrizione = rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')].ToString();
                            scala.Indirizzo = new Address {Indirizzo = condominio.Indirizzo.Indirizzo};
                            firstScala = false;
                        }
                        else
                        {
                            var scalaNew = new GruppoStabile(stabile, rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')].ToString()) {Indirizzo = {Indirizzo = condominio.Indirizzo.Indirizzo}};
                            stabile.GruppiStabile.Add(scalaNew);
                            _daoFactory.GetGruppoStabileDao().SaveOrUpdate(scalaNew);
                        }
                    }
                }
                if (firstScala && scala != null)
                {
                    scala.Indirizzo = new Address {Indirizzo = condominio.Indirizzo.Indirizzo};
                }
                
                // ----------------------------------------------------------------------------------
                //  Piano dei conti
                // ----------------------------------------------------------------------------------
                var pianoContiAdapter = new OleDbDataAdapter("SELECT * FROM PiaContS WHERE PS_COD_STA=" + codiceCondominio, conn);
                pianoContiAdapter.Fill(dsCondomini, "PianoConti");

                var loadedConti = new Dictionary<int, Conto>();
                var tbPianoConti = dsCondomini.Tables["PianoConti"];
                Conto conto = null;
                var indexConto = 0;
                foreach (DataRow row in tbPianoConti.Rows)
                {
                    try
                    {
                        conto = loadContoSottoconto(row, condominio, conto, loadedConti, string.Empty, ref indexConto);
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili - (Piano dei conti) - " + Library.Utility.GetMethodDescription() + " - PS_CONTO:" + row["PS_CONTO"] + " - PS_SOTTOC:" + row["PS_SOTTOC"], ex);

                        throw;
                    }
                }

                // ----------------------------------------------------------------------------------
                //  Anagrafiche
                // ----------------------------------------------------------------------------------
                var unitaAdapter = new OleDbDataAdapter("SELECT * FROM Unita WHERE U_COD_STA=" + codiceCondominio, conn);
                var soggettiAdapter = new OleDbDataAdapter("SELECT * FROM Condomini WHERE C_COD_STA=" + codiceCondominio, conn);
                unitaAdapter.Fill(dsCondomini, "Unita");
                soggettiAdapter.Fill(dsCondomini, "Condomini");

                var tbUnita = dsCondomini.Tables["Unita"];
                var tbAnagrafiche = dsCondomini.Tables["Condomini"];

                // Unità Immobiliari
                UnitaImmobiliare lastUnita = null;
                int ordineUnita = 0;
                foreach (DataRow row in tbUnita.Rows)
                {
                    try
                    {
                        var soggetti = tbAnagrafiche.Select("C_COD_STA = " + row["U_COD_STA"] + " AND C_COD_UNITA = " + row["U_COD_UNITA"]);
                        UnitaImmobiliare unitaCorrente;
                        if (soggetti.Length == 1 && isConduttore(soggetti[0]))
                            unitaCorrente = lastUnita;
                        else
                        {
                            var indexScala = 0;
                            if (row["U_NR_CIVICO"] != DBNull.Value && !string.IsNullOrEmpty(row["U_NR_CIVICO"].ToString()))
                                indexScala = int.Parse(row["U_NR_CIVICO"].ToString()) - 1;
                            var scalaCorrente = Library.IesiGenericCollections<GruppoStabile>.GetByIndex(stabile.GruppiStabile, indexScala);
                            ordineUnita++;
                            unitaCorrente = new UnitaImmobiliare(scalaCorrente, _daoFactory.GetTipoUnitaImmobiliareDao().GetById(1, false))
                            {
                                Ordine = ordineUnita,
                                Descrizione = row["U_DESC_UNITA"].ToString(),
                                AziendaID = idAzienda,
                                CodiceImportazione = row["U_COD_STA"] + "&" + row["U_COD_UNITA"]
                            };
                            lastUnita = unitaCorrente;
                            _daoFactory.GetUnitaImmobiliareDao().SaveOrUpdate(unitaCorrente);
                        }

                        var soggettiCondominio = setSoggettiUnita(unitaCorrente, soggetti);

                        if (soggettiCondominio.Count > 0)
                        {
                            // Saldi inizio esercizio
                            setSaldiInizioEsercizio(row, soggettiCondominio, tipoSaldi);

                            // Millesimi
                            setMillesimi(row, unitaCorrente, loadedConti);
                        }
                    }
                    catch(Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili - (Unità Immobiliare) - " + Library.Utility.GetMethodDescription() + " - U_COD_STA:" + row["U_COD_STA"] + " - U_COD_UNITA:" + row["U_COD_UNITA"], ex);

                        throw;
                    }
                }
            }
            catch (OleDbException ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }

            return message;
        }
Exemple #20
0
        private void writeMovimentoRichiamo14(RataSoggetto rata, DatiBancariCondomini banca, StreamWriter sw, int numeroDisposizione)
        {
            try
            {
                var sb = new StringBuilder(120);

                // Tipo Record
                sb.Append(" 14");

                // Numero Disposizione
                sb.Append(numeroDisposizione.ToString().PadLeft(7, '0'));

                // filler
                sb.Append(string.Empty.PadLeft(12));

                // data scadenza
                sb.Append(convertData(rata.DataScadenza));

                // causale
                sb.Append("07000");

                // importo
                sb.Append((Math.Round(rata.Importo * 100, 0)).ToString().PadLeft(13, '0'));

                // segno
                sb.Append("+");

                // --------------------------------------------------------------------
                // Coordinate banca assuntrice (banca del condominio)
                // --------------------------------------------------------------------
                // ABI
                sb.Append(banca.Abi);

                // CAB
                sb.Append(banca.Cab);

                // Conto Corrente
                sb.Append(banca.ContoCorrente.PadLeft(12, '0'));

                // filler
                sb.Append(string.Empty.PadLeft(22));

                // --------------------------------------------------------------------
                // Coordinate azienda creditrice (condominio)
                // --------------------------------------------------------------------

                // Codice SIA
                sb.Append(rata.Esercizio.CondominioRiferimento.CodiceSIA.Trim().PadLeft(5, ' '));

                // Tipo codice (usato il codice fiscale del condominio quindi: '3')
                sb.Append("3");

                // Codice (usato il codice fiscale del condominio)
                sb.Append(rata.Esercizio.CondominioRiferimento.CodiceFiscale.PadRight(16, ' '));

                // filler
                sb.Append(string.Empty.PadLeft(6));

                // divisa
                sb.Append("E");

                sw.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la creazione di una singola riga di MAV - {0} - esercizio:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), rata.Esercizio.ID, rata.Esercizio.CondominioRiferimento.Azienda.ID);
                throw;
            }
        }
        private string loadCondominio(string codiceCondominio, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, Azienda azienda, OleDbConnection conn)
        {
            var message = string.Empty;

            var condominioAdapter = new OleDbDataAdapter("SELECT * FROM Stabili WHERE S_COD_STA=" + codiceCondominio, conn);
            var dsCondomini = new DataSet("Condomini");
            condominioAdapter.Fill(dsCondomini, "Stabili");

            var rowCondominio = dsCondomini.Tables["Stabili"].Rows[0];
            var dataFineEsercizio = (DateTime)rowCondominio["S_FIN_ESE"];

            var condominio = _daoFactory.GetCondominioDao().GetByCodice(codiceCondominio.PadLeft(3, '0'), azienda.ID);
            if (condominio == null)
            {
                condominio = new Condominio(rowCondominio["S_NOME"].ToString(), dataFineEsercizio.Day, dataFineEsercizio.Month, dataFineEsercizio.Year + 1, azienda)
                {
                    Codice = codiceCondominio.PadLeft(3, '0'),
                    Indirizzo = new Address
                                    {
                                        Indirizzo = rowCondominio["S_VIA"].ToString(),
                                        Cap = rowCondominio["S_CAP"].ToString()
                                    }
                };

                // Indirizzo
                if (rowCondominio["S_LOCALITA"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_LOCALITA"].ToString()))
                {
                    var comuni = _daoFactory.GetComuneDao().GetByDescrizione(rowCondominio["S_LOCALITA"].ToString().Trim());
                    if (comuni.Count == 1)
                        condominio.Indirizzo.Comune = comuni[0];
                    else
                        condominio.Indirizzo.Localita = rowCondominio["S_LOCALITA"].ToString();
                }

                _daoFactory.GetCondominioDao().SaveOrUpdate(condominio);
                addDefault(condominio, loadContiStudio);
            }
            else
            {
                // Eliminazione Movimenti Bancari
                _daoFactory.GetMovimentoBancarioDao().ExecuteQuery("DeleteMovimentiBancari", new[] {new QueryParam("IdCondominio", condominio.ID)});

                _daoFactory.GetCondominioDao().ExecuteQuery("DeleteAnagraficaContabilitaCondominio", new[] {new QueryParam("IdCondominio", condominio.ID)});

                // Eliminazione vecchi dati
                foreach (var unita in _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(condominio.ID))
                {
                    foreach (var mill in unita.Millesimi)
                    {
                        mill.ContoRiferimento.Millesimi.Remove(mill);
                        _daoFactory.GetMillesimoDao().Delete(mill);
                    }
                    unita.Millesimi.Clear();

                    IList<SoggettoCondominio> soggetti = unita.Soggetti.ToList();
                    foreach (var sogg in soggetti)
                    {
                        sogg.UnitaImmobiliare.Soggetti.Remove(sogg);
                        _daoFactory.GetSoggettoCondominioDao().Delete(sogg);
                    }
                    unita.Soggetti.Clear();

                    unita.GruppoStabileRiferimento.UnitaImmobiliari.Remove(unita);
                    _daoFactory.GetUnitaImmobiliareDao().Delete(unita);
                }

                foreach (Palazzina stabileDelete in condominio.Palazzine)
                {
                    foreach (GruppoStabile gruppo in stabileDelete.GruppiStabile)
                    {
                        _daoFactory.GetGruppoStabileDao().Delete(gruppo);
                    }
                    _daoFactory.GetPalazzinaDao().Delete(stabileDelete);
                }
                condominio.Palazzine.Clear();

                var stabileFirst = new Palazzina(condominio, "Stabile A");
                _daoFactory.GetPalazzinaDao().SaveOrUpdate(stabileFirst);

                // Dati Bancari
                foreach (DatiBancariCondomini banca in condominio.DatiBancari)
                {
                    foreach (MovimentoBancario mov in banca.MovimentiBancari)
                        _daoFactory.GetMovimentoBancarioDao().Delete(mov);

                    _daoFactory.GetDatiBancariCondominiDao().Delete(banca);
                }
                condominio.DatiBancari.Clear();

                // Piano Conti
                foreach (Conto contoDelete in condominio.Conti)
                    _daoFactory.GetContoDao().Delete(contoDelete);
                condominio.Conti.Clear();

                // Esercizi
                foreach (Esercizio esercizioDelete in condominio.Esercizi)
                {
                    esercizioDelete.AnnoGestionale.Esercizi.Remove(esercizioDelete);
                    _daoFactory.GetEsercizioDao().Delete(esercizioDelete);
                }
                condominio.Esercizi.Clear();

                // Anno Gestionale
                foreach (AnnoGestionale anno in condominio.AnniGestionali)
                    _daoFactory.GetAnnoGestionaleDao().Delete(anno);
                condominio.AnniGestionali.Clear();

                // -------------------------------------
                //  Default del condominio
                // -------------------------------------
                addDefault(condominio, loadContiStudio);
            }

            if (rowCondominio["S_NOTE"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_NOTE"].ToString()))
                condominio.Note = rowCondominio["S_NOTE"].ToString();

            if (rowCondominio["S_COD_SIA"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_COD_SIA"].ToString()))
                condominio.CodiceSIA = rowCondominio["S_COD_SIA"].ToString().Trim();

            if (rowCondominio["S_COD_FISCALE"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_COD_FISCALE"].ToString()))
                condominio.CodiceFiscale = rowCondominio["S_COD_FISCALE"].ToString().Trim();

            if (rowCondominio["S_IBAN_COMPLETO"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_IBAN_COMPLETO"].ToString()))
            {
                var datiBancari = new DatiBancariCondomini(rowCondominio["S_IBAN_COMPLETO"].ToString().Trim(), condominio);
                condominio.DatiBancari.Add(datiBancari);
            }
            else if (rowCondominio["S_ABI"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_ABI"].ToString()) && rowCondominio["S_CAB"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_CAB"].ToString()) && rowCondominio["S_NR_CC"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_NR_CC"].ToString()))
            {
                var coor = new CoordinateBancarie
                {
                    Abi = rowCondominio["S_ABI"].ToString().Trim().PadLeft(5, '0'),
                    Cab = rowCondominio["S_CAB"].ToString().Trim().PadLeft(5, '0'),
                    ContoCorrente = rowCondominio["S_NR_CC"].ToString().Trim().PadLeft(12, '0')
                };

                var datiBancari = new DatiBancariCondomini(coor.CalcolaIBAN(), condominio);
                condominio.DatiBancari.Add(datiBancari);
            }

            // Scale
            var stabile = Library.IesiGenericCollections<Palazzina>.GetByIndex(condominio.Palazzine, 0);
            var scala = Library.IesiGenericCollections<GruppoStabile>.GetByIndex(stabile.GruppiStabile, 0);
            var firstScala = true;

            for (int i = 1; i <= 52; i++)
            {
                if (rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')].ToString()))
                {
                    if (firstScala && scala != null)
                    {
                        scala.Descrizione = rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')].ToString();
                        scala.Indirizzo = new Address {Indirizzo = condominio.Indirizzo.Indirizzo};
                        firstScala = false;
                    }
                    else
                    {
                        var scalaNew = new GruppoStabile(stabile, rowCondominio["S_DES_CIV" + i.ToString().PadLeft(2, '0')].ToString()) {Indirizzo = {Indirizzo = condominio.Indirizzo.Indirizzo}};
                        stabile.GruppiStabile.Add(scalaNew);
                        _daoFactory.GetGruppoStabileDao().SaveOrUpdate(scalaNew);
                    }
                }
            }
            if (firstScala && scala != null)
            {
                scala.Indirizzo = new Address {Indirizzo = condominio.Indirizzo.Indirizzo};
            }

            // ----------------------------------------------------------------------------------
            //  Piano dei conti
            // ----------------------------------------------------------------------------------
            var pianoContiAdapter = new OleDbDataAdapter("SELECT * FROM PiaContS WHERE PS_COD_STA=" + codiceCondominio, conn);
            pianoContiAdapter.Fill(dsCondomini, "PianoConti");

            var loadedConti = new Dictionary<int, Conto>();
            var tbPianoConti = dsCondomini.Tables["PianoConti"];
            Conto conto = null;
            var indexConto = 0;
            foreach (DataRow row in tbPianoConti.Rows)
            {
                try
                {
                    conto = loadContoSottoconto(row, condominio, conto, loadedConti, prefixConto, ref indexConto);
                }
                catch (Exception ex)
                {
                    
                    _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili - (Piano dei conti) - " + Library.Utility.GetMethodDescription() + " - PS_CONTO:" + row["PS_CONTO"] + " - PS_SOTTOC:" + row["PS_SOTTOC"], ex);
                    message = "Errore inaspettato nell'importazione di un condominio da YStabili - " + ex.Message;
                    return message;
                }
            }

            // ----------------------------------------------------------------------------------
            //  Anagrafiche
            // ----------------------------------------------------------------------------------
            var unitaAdapter = new OleDbDataAdapter("SELECT * FROM Unita WHERE U_COD_STA=" + codiceCondominio + " ORDER BY U_COD_UNITA", conn);
            var soggettiAdapter = new OleDbDataAdapter("SELECT * FROM Condomini WHERE C_COD_STA=" + codiceCondominio + " ORDER BY C_COD_UNITA", conn);
            unitaAdapter.Fill(dsCondomini, "Unita");
            soggettiAdapter.Fill(dsCondomini, "Condomini");

            var tbUnita = dsCondomini.Tables["Unita"];
            var tbAnagrafiche = dsCondomini.Tables["Condomini"];

            // Unità Immobiliari
            UnitaImmobiliare lastUnita = null;
            var ordineUnita = 0;
            foreach (DataRow row in tbUnita.Rows)
            {
                try
                {
                    var soggetti = tbAnagrafiche.Select("C_COD_STA = " + row["U_COD_STA"] + " AND C_COD_UNITA = " + row["U_COD_UNITA"]);
                    UnitaImmobiliare unitaCorrente;
                    if (soggetti.All(isConduttore) && isConduttore(soggetti[0]))
                        unitaCorrente = lastUnita;
                    else
                    {
                        var indexScala = 0;
                        if (row["U_NR_CIVICO"] != DBNull.Value && !string.IsNullOrEmpty(row["U_NR_CIVICO"].ToString()))
                            indexScala = int.Parse(row["U_NR_CIVICO"].ToString()) - 1;
                        var scalaCorrente = Library.IesiGenericCollections<GruppoStabile>.GetByIndex(stabile.GruppiStabile, indexScala);
                        ordineUnita++;
                        unitaCorrente = new UnitaImmobiliare(scalaCorrente, _daoFactory.GetTipoUnitaImmobiliareDao().GetById(1, false))
                        {
                            Ordine = ordineUnita,
                            Descrizione = "$proprietario1",
                            AziendaID = azienda.ID,
                            CodiceImportazione = row["U_COD_STA"] + "&" + row["U_COD_UNITA"]
                        };
                        lastUnita = unitaCorrente;
                        _daoFactory.GetUnitaImmobiliareDao().SaveOrUpdate(unitaCorrente);
                    }

                    var soggettiCondominio = setSoggettiUnita(unitaCorrente, soggetti);

                    if (soggettiCondominio.Count > 0)
                    {
                        // Saldi inizio esercizio
                        setSaldiInizioEsercizio(row, soggettiCondominio, tipoSaldi);

                        // Millesimi
                        setMillesimi(row, unitaCorrente, loadedConti);
                    }
                }
                catch (Exception ex)
                {
                    
                    _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili - (Unità Immobiliare) - " + Library.Utility.GetMethodDescription() + " - U_COD_STA:" + row["U_COD_STA"] + " - U_COD_UNITA:" + row["U_COD_UNITA"], ex);
                    
                    message = "Errore inaspettato nell'importazione di un condominio da YStabili - " + ex.Message;
                    return message;
                }
            }

            if (string.IsNullOrEmpty(message))
            {
                
                _log.Info("Caricato il condominio: " + codiceCondominio + " - " + condominio.Descrizione + " -- " + Library.Utility.GetMethodDescription());
            }

            return message;
        }
        private bool update(DatiBancariDTO dto, out DatiBancariCondomini item)
        {
            var result = false;
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = daoFactory.GetDatiBancariCondominiDao().Find(dto.ID, false);

                if (item != null)
                {
                    //// Condizione necessaria per il controllo del fatto che sul DB ho una versione uguale o più vecchia
                    //if (dto.Version == item.Version)
                    //{
                        var abicab = daoFactory.GetAbiCabDao().Find(new AbiCabId(dto.Abi, dto.Cab), false);
                        if (abicab != null)
                        {
                            item.Abi = dto.Abi;
                            item.Cab = dto.Cab;
                            item.Cin = dto.Cin;
                            item.ContoCorrente = dto.ContoCorrente.Truncate(50);
                            item.DataValidita = dto.DataValidita;
                            item.Iban = dto.Iban.Truncate(27);
                            item.Note = dto.Note.Truncate(50);
                            item.Principale = dto.Principale;

                            // Aggiungo ABI e CAB tra i preferiti
                            var abicabPref = daoFactory.GetAbiCabPreferitoDao().GetByAbiCab(item.Abi, item.Cab, item.CondominioRiferimento.Azienda.ID);
                            if (abicabPref == null)
                            {
                                abicabPref = new AbiCabPreferito(abicab, item.CondominioRiferimento.Azienda);
                                daoFactory.GetAbiCabPreferitoDao().SaveOrUpdate(abicabPref);
                            }

                            result = true;
                        }
                        else
                        {
                            _log.WarnFormat("Tentativo di aggiornare dati bancari con ABI CAB inesistente - {0} - id:{1} - ABI:{2} - CAB:{3} - condominio:{4} - IBAN:{5} - azienda:{6}", Utility.GetMethodDescription(), dto.ID, dto.Abi, dto.Cab, dto.IdCondominio, dto.Iban, _info.Azienda);
                            result = true;
                        }  
                    //}
                    //else
                    //{
                    //    // Eccezione: Sul db c'è qualche cosa di più nuovo.
                    //    _log.ErrorFormat("Errore nel salvataggio dei dati bancari il dato sul db è più recente di quello che si vuole salvare - {0} - id:{1} - azienda:{2}", Utility.GetMethodDescription(), dto.ID, _info.Azienda);
                    //}
                }
                else
                {
                    _log.WarnFormat("Tentativo di aggiornare DatiBancari inesistenti - {0} - id:{1} - azienda:{2}", Utility.GetMethodDescription(), dto.ID, _info.Azienda);
                    return true;
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio dei dati bancari - {0} - id:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), dto.ID, _info.Azienda);
                throw;
            }

            return result;
        }
        public MovimentoContabile SetMovimentoBancarioGenerico(DatiBancariCondomini banca, Esercizio esercizioRiferimento, SottoConto sottoconto, decimal importo, string descrizione, DateTime dataRegistrazione, CausaleContabile causale)
        {
            try
            {
                var message = IsAllowDataRegistrazione(new List<int> { esercizioRiferimento.CondominioRiferimento.ID }, esercizioRiferimento, dataRegistrazione);
                if (message.Count > 0)
                {
                    var ex = new InvalidDataException($"La data di registrazione {dataRegistrazione} non è valida");
                    _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - esercizio:{2}", ex,  Utility.GetMethodDescription(), dataRegistrazione, esercizioRiferimento.ID);
                    throw ex;
                }

                var testata = new TestataMovimentoContabile(esercizioRiferimento, dataRegistrazione, TipoTestataMovimentoContabileEnum.Manuale, null)
                {
                    Descrizione = descrizione,
                    IsAbilitataArchiviazioneOttica = false,
                    IsAllowUpdate = true
                };
                _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                // -------------------------------------------------
                // Segno Movimento
                // ------------------------------------------------
                string segnoContoEconomico = "D";
                if (importo > 0)
                    segnoContoEconomico = "A";
                else
                    importo = importo * -1;

                // ------------------------------------------------
                // Conto economico
                // ------------------------------------------------
                var movimentoContoEconomico = new MovimentoContabile(testata, causale, 1, sottoconto, importo, segnoContoEconomico) {Descrizione = descrizione};
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomico);
                _ripartizioneService.SalvaRipartizione(movimentoContoEconomico, esercizioRiferimento.CondominioRiferimento.ID);

                // ------------------------------------------------
                // BANCA
                // ------------------------------------------------
                var movimentoBancario = new MovimentoContabile(testata, causale, 2, _daoFactory.GetContoDao().GetByCodice(esercizioRiferimento.ID, esercizioRiferimento.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoBancario()), importo, invertiSegno(segnoContoEconomico))
                {
                    Descrizione = descrizione, 
                    Stato = StatoMovimentoContabileEnum.Evaso,
                    ContoCorrenteBancario = banca
                };
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoBancario);

                return movimentoBancario;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella contabilizzazione di un movimento bancario - {0} - importo:{1} - descrizione:{2} - data registrazione:{3:d}", ex, Utility.GetMethodDescription(), importo, descrizione, dataRegistrazione);
                throw;
            }
        }
        private bool insert(DatiBancariDTO dto, out DatiBancariCondomini item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            bool result;

            try
            {
                var abiCab = daoFactory.GetAbiCabDao().GetByAbiCab(dto.Abi, dto.Cab);
                if (abiCab != null)
                {
                    item = new DatiBancariCondomini(dto.Iban, daoFactory.GetCondominioDao().GetById(dto.IdCondominio, false))
                    {
                        Abi = dto.Abi,
                        Cab = dto.Cab,
                        Cin = dto.Cin,
                        ContoCorrente = dto.ContoCorrente.Truncate(50),
                        DataValidita = dto.DataValidita,
                        Iban = dto.Iban.Truncate(27),
                        Note = dto.Note.Truncate(50),
                        Principale = dto.Principale
                    };

                    if (string.IsNullOrEmpty(item.Iban) && !string.IsNullOrEmpty(item.Abi) && !string.IsNullOrEmpty(item.Cab) && !string.IsNullOrEmpty(item.ContoCorrente))
                    {
                        var coord = new CoordinateBancarie();
                        try
                        {
                            coord.Abi = item.Abi;
                            coord.Cab = item.Cab;
                            coord.ContoCorrente = item.ContoCorrente;
                            item.Iban = coord.CalcolaIBAN();
                            item.ContoCorrente = coord.ContoCorrente;
                        }
                        catch (Exception ex)
                        {
                            _log.WarnFormat("Errore inaspettato nel calcolo dell'IBAN - {0} - id:{1} - abi:{2} - cab:{3} - c/c:{4}", ex, Utility.GetMethodDescription(), dto.ID, dto.Abi, dto.Cab, dto.ContoCorrente);
                        }

                        if (string.IsNullOrEmpty(item.Cin))
                        {
                            try
                            {
                                item.Cin = coord.CalcolaCin();
                            }
                            catch (Exception ex)
                            {
                                _log.WarnFormat("Errore inaspettato nel calcolo del CIN - {0} - id:{1} - abi:{2} - cab:{3} - c/c:{4}", ex, Utility.GetMethodDescription(), dto.ID, dto.Abi, dto.Cab, dto.ContoCorrente);
                            }
                        }
                    }

                    daoFactory.GetDatiBancariCondominiDao().SaveOrUpdate(item);

                    // Aggiungo ABI e CAB tra i preferiti
                    try
                    {
                        if (item.CondominioRiferimento != null && item.CondominioRiferimento.Azienda != null)
                        {
                            var abicabPref = daoFactory.GetAbiCabPreferitoDao().GetByAbiCab(item.Abi, item.Cab, item.CondominioRiferimento.Azienda.ID);
                            if (abicabPref == null)
                            {
                                var abicab = daoFactory.GetAbiCabDao().Find(new AbiCabId(item.Abi, item.Cab), false);
                                if (abicab != null)
                                {
                                    abicabPref = new AbiCabPreferito(abicab, item.CondominioRiferimento.Azienda);
                                    daoFactory.GetAbiCabPreferitoDao().SaveOrUpdate(abicabPref);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.WarnFormat("Errore nell'inserimento di ABI e CAB preferito - {0} - id:{1} - abi:{2} - cab:{3} - c/c:{4}", ex, Utility.GetMethodDescription(), dto.ID, dto.Abi, dto.Cab, dto.ContoCorrente);
                    }

                }
                else
                {
                    _log.ErrorFormat("Non trovato ABI CAB - {0} - abi:{1} - cab:{2}", Utility.GetMethodDescription(), dto.Abi, dto.Cab);
                    item = null;
                    return false;
                }

                result = true;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nell'inserimento dei dati bancari - {0} - id:{1} - abi:{2} - cab:{3} - c/c:{4}", ex, Utility.GetMethodDescription(), dto.ID, dto.Abi, dto.Cab, dto.ContoCorrente);
                throw;
            }

            return result;
        }
        private DatiBancariDTO setDto(DatiBancariCondomini item)
        {
            var dto = new DatiBancariDTO
            {
                ID = item.ID,
                Abi = item.Abi,
                Cab = item.Cab,
                ContoCorrente = item.ContoCorrente,
                Cin = item.Cin,
                Iban = item.Iban,
                Note = item.Note,
                DataValidita = item.DataValidita,
                Principale = item.Principale,
                IdCondominio = item.CondominioRiferimento.ID
            };

            try
            {
                var abiCab = BancheHelper.GetAbiCabDescription(dto.Abi, dto.Cab, WindsorConfigRepository.GetKey(_info.Azienda));
                dto.Descrizione = $"{abiCab[0]} - {abiCab[1]}";
                dto.DescrizioneAbi = dto.Abi + " - " + abiCab[0];
                dto.DescrizioneCab = dto.Cab + " - " + abiCab[1];
                dto.DisplayName = dto.DescrizioneAbi + " / " + dto.DescrizioneCab;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nella decodifica dei dati bancari - {0} - id:{1} - abi:{2} - cab:{3}", ex, Utility.GetMethodDescription(), item.ID, dto.Abi, dto.Cab);
                throw;
            }

            dto.Version = item.Version;

            return dto;
        }
Exemple #26
0
        public byte[] RichiamoMav(EmissioneRate testataEmissione, DatiBancariCondomini banca, string intestazioneAzienda)
        {
            _testata = testataEmissione;
            byte[] bytes = null;
            StreamWriter sw = null;
            try
            {
                var fileName = Path.GetTempPath() + "\\" + Guid.NewGuid();
                if (ApplicationDeployment.IsNetworkDeployed)
                    fileName = ApplicationDeployment.CurrentDeployment.DataDirectory + "\\" + Guid.NewGuid().ToString();
                if (File.Exists(fileName))
                    File.Delete(fileName);

                // =============================================================================================
                // Creo il file
                // =============================================================================================
                using (sw = File.CreateText(fileName))
                {
                    // Creo le riga di testa
                    writeTestataIM(testataEmissione.Esercizio, banca, sw);

                    decimal importoTotale = 0;
                    int numeroRighe = 1;

                    int numeroDisposizione = 0;
                    foreach (var rata in testataEmissione.Rate)
                    {
                        var rataPrincipale = IesiGenericCollections<RataSoggetto>.GetByIndex(rata.RateCollegate, 0);
                        importoTotale += rata.RateCollegate.Sum(rt => rt.Importo);
                        numeroDisposizione++;

                        numeroRighe++;
                        writeMovimentoRichiamo14(rataPrincipale, banca, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento16(rataPrincipale, banca, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento20(rataPrincipale, sw, numeroDisposizione, intestazioneAzienda);
                        numeroRighe++;
                        writeMovimento30(rataPrincipale, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento40(rataPrincipale, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento50(rataPrincipale, testataEmissione, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimento51(rata, sw, numeroDisposizione);
                        numeroRighe++;
                        writeMovimentoRichiamo70(sw, numeroDisposizione);
                    }

                    numeroRighe++;
                    writeCodaEF(testataEmissione.Esercizio, banca, sw, numeroDisposizione, importoTotale, numeroRighe);
                }

                _notifier.Notify("Il file dei MAV è stato correttamente creato.");

                var infile = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                bytes = new byte[infile.Length];
                infile.Read(bytes, 0, bytes.Length);

                return bytes;
            }
            catch (Exception ex)
            {
                _log.FatalFormat("Errore inaspettato durante la creazione del file CBI per il richiamo dei MAV - {0} - intestazioneAzienda:{1}", ex, Utility.GetMethodDescription(), intestazioneAzienda);
                _notifier.Notify("Si sono verificati problemi inaspettati durante la creazione del file CBI per il richiamo dei MAV." + Environment.NewLine + "Controllare il log per ulteriori dettagli.");
                return bytes;
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                    sw.Dispose();
                }
            }
        }