예제 #1
0
        /// <summary>
        /// Crea uno Dato bancario valido
        /// </summary>
        public DatiBancariCondomini(string iban, Condominio stabile)
        {
            if (stabile != null)
            {
                _condominioRiferimento = stabile;
                _iban = iban;

                CoordinateBancarie coor = new CoordinateBancarie();
                coor.SetIBAN(iban);
                Abi = coor.Abi;
                Cab = coor.Cab;
                ContoCorrente = coor.ContoCorrente;
                Cin = coor.Cin;

                _condominioRiferimento.DatiBancari.Add(this);
            }
        }
예제 #2
0
        /// <summary>
        /// Crea uno Dato bancario valido
        /// </summary>
        public DatiBancariCondomini(string abi, string cab, string contoCorrente, string cin, Condominio stabile)
        {
            if (stabile != null)
            {
                CondominioRiferimento = stabile;
                Abi = abi;
                Cab = cab;
                ContoCorrente = contoCorrente;
                Cin = cin;

                CoordinateBancarie coor = new CoordinateBancarie();
                coor.Abi = Abi;
                coor.Cab = Cab;
                coor.ContoCorrente = ContoCorrente;
                Iban = coor.IBAN;

                _condominioRiferimento.DatiBancari.Add(this);
            }
        }
예제 #3
0
        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;
        }
예제 #4
0
        public string LoadFornitori(string key, int idAzienda, string password) 
        {
            string message = string.Empty;

            try
            {
                var databasePath = saveDatabase(key);
                var conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; User Id=; Jet OLEDB:Database Password="******"; Data Source=" + databasePath);
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                var ds = new DataSet();

                var fornitoriAdapter = new OleDbDataAdapter("SELECT * FROM Fornitori " +
                "ORDER BY Fornitori.F_RAG_SOC, Fornitori.F_TITOLARE", conn);
                fornitoriAdapter.Fill(ds, "Fornitori");
                ds.Tables["Fornitori"].PrimaryKey = new[] { ds.Tables["Fornitori"].Columns["F_COD"] };

                foreach (DataRow row in ds.Tables["Fornitori"].Rows)
                {
                    try
                    {
                        // ===========================
                        // Persona
                        // ===========================
                        Persona persona;
                        var fornitore = _daoFactory.GetFornitoreDao().GetByCodiceImportazione(row["F_COD"].ToString().Trim(), azienda.ID);
                        if (fornitore == null)
                        {
                            var tipoPersona = TipoPersonaEnum.Giuridica;
                            if ((bool)row["F_PERSONA"])
                                tipoPersona = TipoPersonaEnum.Fisica;
                            persona = new Persona(tipoPersona, string.Empty, row["F_TITOLARE"].ToString().Trim(), idAzienda, false);
                        }
                        else
                            persona = fornitore.PersonaRiferimento;

                        persona.RagioneSociale = row["F_RAG_SOC"].ToString().Trim();

                        if (persona.Nome != null && persona.Nome.Length > 50)
                            persona.Nome = persona.Nome.Substring(0, 50);
                        if (persona.Cognome != null && persona.Cognome.Length > 50)
                            persona.Cognome = persona.Cognome.Substring(0, 50);
                        if (persona.RagioneSociale != null && persona.RagioneSociale.Length > 100)
                            persona.RagioneSociale = persona.RagioneSociale.Substring(0, 100);

                        if (persona.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica && row["F_SESSO_PF"] != DBNull.Value)
                        {
                            if (row["F_SESSO_PF"].ToString().Trim() == "M")
                                persona.Sesso = SessoEnum.Maschio;
                            else if(row["F_SESSO_PF"].ToString().Trim() == "F")
                                persona.Sesso = SessoEnum.Femmina;
                        }

                        if (row["F_COD_FISC"] != DBNull.Value && !string.IsNullOrEmpty(row["F_COD_FISC"].ToString().Trim()))
                            persona.CodiceFiscale = row["F_COD_FISC"].ToString().Trim();
                        if (row["F_PIVA"] != DBNull.Value && !string.IsNullOrEmpty(row["F_PIVA"].ToString().Trim()))
                            persona.PartitaIva = row["F_PIVA"].ToString().Trim();
                        if (row["F_NOTE"] != DBNull.Value && !string.IsNullOrEmpty(row["F_NOTE"].ToString().Trim()))
                            persona.Note = row["F_NOTE"].ToString().Trim();

                        persona.IndirizzoResidenza = new Address();
                        if (row["F_LOCALITA"] != DBNull.Value && !string.IsNullOrEmpty(row["F_LOCALITA"].ToString()))
                        {
                            var comuni = _daoFactory.GetComuneDao().GetByDescrizione(row["F_LOCALITA"].ToString().Trim());
                            if (comuni.Count == 1)
                                persona.IndirizzoResidenza.Comune = comuni[0];

                            else
                                persona.IndirizzoResidenza.Localita = row["F_LOCALITA"].ToString();
                        }
                        if(row["F_CAP"] != DBNull.Value)
                            persona.IndirizzoResidenza.Cap = row["F_CAP"].ToString().Trim();
                        if (row["F_VIA"] != DBNull.Value)
                            persona.IndirizzoResidenza.Indirizzo = row["F_VIA"].ToString().Trim();

                        if (row["F_LOCALITA_NASC"] != DBNull.Value && !string.IsNullOrEmpty(row["F_LOCALITA_NASC"].ToString()))
                        {
                            var comuni = _daoFactory.GetComuneDao().GetByDescrizione(row["F_LOCALITA_NASC"].ToString().Trim());
                            if (comuni.Count == 1)
                                persona.ComuneNascita = comuni[0];
                        }
                        if (row["F_DT_NASC"] != DBNull.Value && (DateTime)row["F_DT_NASC"] > new DateTime(1800, 1, 1) && (DateTime)row["F_DT_NASC"] < new DateTime(2050, 12, 31))
                            persona.DataNascita = (DateTime)row["F_DT_NASC"];

                        // ---------
                        // Contatti
                        // ---------
                        persona.Contatti.Clear();
                        if (row["F_TEL"] != DBNull.Value && !string.IsNullOrEmpty((string)row["F_TEL"]))
                        {
                            var contatto = new Telefono(row["F_TEL"].ToString(), true, persona) {CodiceImportazione = row["F_COD"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["F_TELEFONINO"] != DBNull.Value && !string.IsNullOrEmpty((string)row["F_TELEFONINO"]))
                        {
                            var contatto = new Cellulare(row["F_TELEFONINO"].ToString(), true, persona) {CodiceImportazione = row["F_COD"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["F_EMAIL"] != DBNull.Value && !string.IsNullOrEmpty((string)row["F_EMAIL"]))
                        {
                            var contatto = new Email(row["F_EMAIL"].ToString(), true, persona) {CodiceImportazione = row["F_COD"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["F_FAX"] != DBNull.Value && !string.IsNullOrEmpty((string)row["F_FAX"]))
                        {
                            var contatto = new Fax(row["F_FAX"].ToString(), true, persona) {CodiceImportazione = row["F_COD"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        persona.CodiceImportazione = row["F_COD"].ToString().Trim();

                        // ===========================
                        // Fornitore
                        // ===========================
                        if(fornitore == null)
                            fornitore = new Fornitore(persona, idAzienda);

                        if (row["F_ALQ_RIT_ACC"] != DBNull.Value)
                            fornitore.AliquotaRitenutaAcconto = Convert.ToDecimal((float)row["F_ALQ_RIT_ACC"]) / 100m;
                        if (row["F_ALQ_IVA"] != DBNull.Value)
                            fornitore.AliquotaIva = row["F_ALQ_IVA"].ToString().Trim();
                        if (row["F_ALQ_CASSAP"] != DBNull.Value)
                            fornitore.AliquotaCassaProfessionisti = Convert.ToDecimal((float)row["F_ALQ_CASSAP"]) / 100m;
                        if (row["F_MAG_CASP_IVA"] != DBNull.Value && row["F_MAG_CASP_IVA"].ToString() == "B")
                            fornitore.IsRitenutaCalcolataImponibile = true;

                        if (row["F_TRIBUTO"] != DBNull.Value && !string.IsNullOrEmpty(row["F_TRIBUTO"].ToString().Trim()))
                            fornitore.CodiceTributo = row["F_TRIBUTO"].ToString().Trim();

                        fornitore.CodiceImportazione = row["F_COD"].ToString().Trim();
                        fornitore.Qualita = new ValutazioneQualita();

                        if (row["F_TIPO_PAG"] != DBNull.Value && row["F_TIPO_PAG"].ToString() == "BON")
                            fornitore.ModalitaPagamento = _daoFactory.GetModalitaPagamentoDao().GetById(4, false);

                        if (row["F_TIPO_FORN"] != DBNull.Value)
                            fornitore.Tipo = _daoFactory.GetTipoFornitoreDao().GetByCodice(row["F_TIPO_FORN"].ToString());

                        //-----------------------------
                        // Banche
                        //-----------------------------
                        if (row["F_IBAN_COMPLETO"] != DBNull.Value || (row["F_ABI"] != DBNull.Value && row["F_CAB"] != DBNull.Value))
                        {
                            if (row["F_IBAN_COMPLETO"] != DBNull.Value && !string.IsNullOrEmpty(row["F_IBAN_COMPLETO"].ToString()))
                            {
                                var coor = new CoordinateBancarie();
                                if (coor.CheckIBAN(row["F_IBAN_COMPLETO"].ToString().Trim().Replace(" ", "")))
                                {
                                    persona.Iban = row["F_IBAN_COMPLETO"].ToString().Trim().Replace(" ", "");
                                    coor.SetIBAN(persona.Iban);
                                    persona.Abi = coor.Abi;
                                    persona.Cab = coor.Cab;
                                    persona.ContoCorrente = coor.ContoCorrente;
                                    persona.Cin = coor.Cin;
                                }
                            }
                            else
                            {
                                var coor = new CoordinateBancarie
                                {
                                    Abi = row["F_ABI"].ToString().Trim().PadLeft(5, '0'),
                                    Cab = row["F_CAB"].ToString().Trim().PadLeft(5, '0'),
                                    ContoCorrente = row["F_NR_CC"].ToString().Trim().PadLeft(12, '0')
                                };
                                persona.Iban = coor.CalcolaIBAN();
                            }
                        }

                        _daoFactory.GetFornitoreDao().SaveOrUpdate(fornitore);
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato l'importazione di un fornitore da YStabili: " + Library.Utility.GetMethodDescription() + " (Fornitore) - idFornitore:" + row["F_COD"] + " - nome:" + row["F_RAG_SOC"] + " - cognome:" + row["F_TITOLARE"], ex);
                        throw;
                    }
                }
            }
            catch (OleDbException ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione dei fornitori da YStabili: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione dei fornitori da YStabili: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }

            return message;
        }
예제 #5
0
        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;
        }
예제 #6
0
 private void ibanValidatorValidating(object sender, Windows.Forms.CustomValidation.CustomValidator.ValidatingCancelEventArgs e)
 {
     if (!string.IsNullOrEmpty(iban.Text))
     {
         var coord = new CoordinateBancarie();
         e.Valid = coord.SetIBAN(iban.Text);
     }
     else
         e.Valid = true;
 }
예제 #7
0
        private void setDatiBancari(CabDTO cabDto)
        {
            abi.Value = cabDto.Abi;
            cab.Value = cabDto.Cab;
            descrizioneAbi.Text = cabDto.DescrizioneAbi;
            descrizioneCab.Text = cabDto.DescrizioneCab;
            Fornitore.PersonaRiferimento.Abi = cabDto.Abi;
            Fornitore.PersonaRiferimento.Cab = cabDto.Cab;

            var coord = new CoordinateBancarie {Abi = cabDto.Abi, Cab = cabDto.Cab, ContoCorrente = contoCorrente.Text};
            iban.Text = coord.CalcolaIBAN();
            Fornitore.PersonaRiferimento.Iban = iban.Text;

            cin.Text = coord.CalcolaCin();
            Fornitore.PersonaRiferimento.Cin = cin.Text;
        }
예제 #8
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;
            }
        }
예제 #9
0
        private void listaBancheAfterCellUpdate(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
        {
            if (getAbiCabService().IsValidableIBAN())
            {
                var datiBancariDTO = (DatiBancariDTO)e.Cell.Row.ListObject;

                if (datiBancariDTO != null)
                {
                    // ----------------------------------------------------------
                    // Decodifica ABI
                    // ----------------------------------------------------------
                    if (e.Cell.Value != null && e.Cell.Column.Key == "DescrizioneAbi")
                    {
                        if (Utility.IsInteger(e.Cell.Value.ToString()))
                        {
                            string abi = e.Cell.Value.ToString().PadLeft(5, '0');
                            if (!string.IsNullOrEmpty(abi))
                            {
                                var abiDTO = getAbiCabService().GetAbiByCodice(abi);
                                if (abiDTO != null)
                                {
                                    datiBancariDTO.Abi = abi;
                                    datiBancariDTO.DescrizioneAbi = abiDTO.Codice + " - " + abiDTO.Descrizione;
                                }

                                if (!string.IsNullOrEmpty(datiBancariDTO.Cab))
                                {
                                    var cabDTO = getAbiCabService().GetCabByCodice(datiBancariDTO.Abi, datiBancariDTO.Cab);
                                    if (cabDTO != null)
                                    {
                                        datiBancariDTO.Cab = datiBancariDTO.Cab;
                                        datiBancariDTO.DescrizioneCab = cabDTO.DescrizioneCabCompleta;
                                    }
                                }
                            }
                        }
                        else
                            return;
                    }

                    // ----------------------------------------------------------
                    // Decodifica CAB
                    // ----------------------------------------------------------
                    if (e.Cell.Column.Key == "DescrizioneCab")
                    {
                        if (e.Cell.Value != null && Utility.IsInteger(e.Cell.Value.ToString()))
                        {
                            var cab = e.Cell.Value.ToString().PadLeft(5, '0');
                            if (!string.IsNullOrEmpty(cab))
                            {
                                var cabDTO = getAbiCabService().GetCabByCodice(datiBancariDTO.Abi, cab);
                                if (cabDTO != null)
                                {
                                    datiBancariDTO.Cab = cab;
                                    datiBancariDTO.DescrizioneCab = cabDTO.DescrizioneCabCompleta;
                                }
                            }
                        }
                        else
                            return;
                    }

                    // ----------------------------------------------------------
                    // Calcolo IBAN e CIN
                    // ----------------------------------------------------------
                    if (e.Cell.Column.Key == "DescrizioneAbi" || e.Cell.Column.Key == "DescrizioneCab" || e.Cell.Column.Key == "ContoCorrente")
                    {
                        if (!string.IsNullOrEmpty(datiBancariDTO.Abi) &&
                            !string.IsNullOrEmpty(datiBancariDTO.Cab) &&
                            !string.IsNullOrEmpty(datiBancariDTO.ContoCorrente))
                        {
                            var coor = new CoordinateBancarie
                            {
                                Abi = datiBancariDTO.Abi,
                                Cab = datiBancariDTO.Cab,
                                ContoCorrente = datiBancariDTO.ContoCorrente
                            };
                            coor.Cin = coor.CalcolaCin();

                            datiBancariDTO.Cin = coor.Cin;
                            datiBancariDTO.Iban = coor.CalcolaIBAN();
                        }
                    }

                    // ----------------------------------------------------------
                    // Calcolo ABI, CAB, ContoCorrente e CIN
                    // ----------------------------------------------------------
                    if (e.Cell.Column.Key == "Iban")
                    {
                        if (!string.IsNullOrEmpty(datiBancariDTO.Iban))
                        {
                            var coor = new CoordinateBancarie();
                            coor.SetIBAN(datiBancariDTO.Iban);

                            datiBancariDTO.Abi = coor.Abi;
                            datiBancariDTO.Cab = coor.Cab;
                            datiBancariDTO.ContoCorrente = coor.ContoCorrente;
                            datiBancariDTO.Cin = coor.Cin;

                            var cabDTO = getAbiCabService().GetCabByCodice(datiBancariDTO.Abi, datiBancariDTO.Cab);
                            if (cabDTO != null)
                            {
                                datiBancariDTO.DescrizioneAbi = cabDTO.DescrizioneAbiCompleta;
                                datiBancariDTO.DescrizioneCab = cabDTO.DescrizioneCabCompleta;
                            }
                        }
                    }
                }
            }
        }
예제 #10
0
        private string validateDatiBancari()
        {
            var msgErrore = string.Empty;

            if (getAbiCabService().IsValidableIBAN())
            {
                var coor = new CoordinateBancarie();
                var contoCorrenteErrato = false;
                var cinErrato = false;
                var ibanErrato = false;
                var campoObbligatorioVuoto = false;
                foreach (var t in _condominio.DatiBancari)
                {
                    if (t.Abi == "" || t.Cab == "" || t.ContoCorrente == null)
                        campoObbligatorioVuoto = true;

                    string valore = t.ContoCorrente;
                    var objAlphaNumericPattern = new Regex("[^a-zA-Z0-9]");
                    if (!string.IsNullOrEmpty(valore))
                        contoCorrenteErrato = objAlphaNumericPattern.IsMatch(valore);

                    //settare altri parametri
                    coor.Abi = t.Abi;
                    coor.Cab = t.Cab;
                    coor.ContoCorrente = t.ContoCorrente;
                    coor.Cin = t.Cin;
                    coor.IBAN = t.Iban;
                    if (!coor.VerificaCin())
                        cinErrato = true;
                    if (!coor.CheckIBAN())
                        ibanErrato = true;
                }
                if (contoCorrenteErrato)
                    msgErrore = "Il conto corrente inserito non è valido, sono ammessi sono numeri o lettere. \n";
                if (cinErrato)
                    msgErrore = "Il valore Cin inserito non è corretto. \n";
                if (ibanErrato)
                    msgErrore += "Il valore Iban inserito non è corretto. \n";
                if (campoObbligatorioVuoto)
                    msgErrore += "Abi, Cab e ContoCorrente non ammettono valori vuoti. \n";
            }

            return msgErrore;
        }
예제 #11
0
        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;
        }
예제 #12
0
        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;
        }
예제 #13
0
        public string LoadFornitori(string key, int idAzienda, string password)
        {
            string message = string.Empty;

            try
            {
                var databasePath = saveDatabase(key);
                var conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; User Id=; Jet OLEDB:Database Password="******"; Data Source=" + databasePath);

                var ds = new DataSet();

                var fornitoriAdapter = new OleDbDataAdapter("SELECT * FROM TabFornitori " +
                "INNER JOIN TabCodComune ON TabCodComune.id = TabFornitori.idComune " +
                "ORDER BY TabFornitori.Cognome, TabFornitori.Nome", conn);
                fornitoriAdapter.Fill(ds, "Fornitori");
                ds.Tables["Fornitori"].PrimaryKey = new[] { ds.Tables["Fornitori"].Columns["TabFornitori.id"] };

                var bancheAdapter = new OleDbDataAdapter("SELECT TabBanche_Fornitori.*, TabBanche.Abi, TabBanche.Cab " +
                    "FROM TabBanche INNER JOIN TabBanche_Fornitori ON TabBanche.id = TabBanche_Fornitori.idBanca " +
                    "WHERE TabBanche.Attivo = True AND TabBanche_Fornitori.Attivo=True " +
                    "ORDER BY TabBanche_Fornitori.Predefinito", conn);
                bancheAdapter.Fill(ds, "Banche");
                ds.Tables["Banche"].PrimaryKey = new[] { ds.Tables["Fornitori"].Columns["id"] };

                // Relazioni
                ds.Relations.Add(new DataRelation("Fornitori_Banche", ds.Tables["Fornitori"].Columns["TabFornitori.id"], ds.Tables["Banche"].Columns["idFornitore"]));

                foreach (DataRow row in ds.Tables["Fornitori"].Rows)
                {
                    try
                    {
                        // ===========================
                        // Persona
                        // ===========================
                        var tipoPersona = Sfera.Enums.TipoPersonaEnum.Giuridica;
                        if((bool)row["Persona"])
                            tipoPersona = Sfera.Enums.TipoPersonaEnum.Fisica;
                        var persona = new Persona(tipoPersona, row["TabFornitori.Nome"].ToString().Trim(), row["Cognome"].ToString().Trim(), idAzienda, false);
                        if (tipoPersona == Sfera.Enums.TipoPersonaEnum.Giuridica)
                        {
                            persona.RagioneSociale = row["Cognome"].ToString().Trim();
                            if (string.IsNullOrEmpty(row["TabFornitori.Nome"].ToString().Trim()))
                                persona.Cognome = null;
                        }
                        if (persona.Nome != null && persona.Nome.Length > 50)
                            persona.Nome = persona.Nome.Substring(0, 50);
                        if (persona.Cognome != null && persona.Cognome.Length > 50)
                            persona.Cognome = persona.Cognome.Substring(0, 50);
                        if (persona.RagioneSociale != null && persona.RagioneSociale.Length > 100)
                            persona.RagioneSociale = persona.RagioneSociale.Substring(0, 100);

                        persona.Sesso = Sfera.Enums.SessoEnum.Femmina;
                        if (!(bool)row["Maschio"])
                            persona.Sesso = Sfera.Enums.SessoEnum.Maschio;

                        if (row["CF"] != DBNull.Value && !string.IsNullOrEmpty(row["CF"].ToString().Trim()))
                            persona.CodiceFiscale = row["CF"].ToString().Trim();
                        if (row["PIVA"] != DBNull.Value && !string.IsNullOrEmpty(row["PIVA"].ToString().Trim()))
                            persona.PartitaIva = row["PIVA"].ToString().Trim();
                        if (row["Note"] != DBNull.Value && !string.IsNullOrEmpty(row["Note"].ToString().Trim()))
                            persona.Note = row["Note"].ToString().Trim();

                        if (row["idComuneNasc"] != DBNull.Value && !string.IsNullOrEmpty(row["idComuneNasc"].ToString().Trim()))
                            persona.ComuneNascita = getCodiceComuneById((int)row["idComuneNasc"], conn);
                        if (row["DataNasc"] != DBNull.Value)
                            persona.DataNascita = (DateTime)row["DataNasc"];

                        persona.IndirizzoResidenza = getIndirizzo(row);
                        persona.Recapito = getIndirizzoFiscale(row, conn);

                        // ---------
                        // Contatti
                        // ---------
                        if (row["Tel1"] != DBNull.Value && !string.IsNullOrEmpty((string)row["Tel1"]))
                        {
                            var contatto = new Telefono(row["Tel1"].ToString(), true, persona) {CodiceImportazione = row["TabFornitori.id"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["Tel2"] != DBNull.Value && !string.IsNullOrEmpty((string)row["Tel2"]))
                        {
                            var contatto = new Telefono(row["Tel2"].ToString(), false, persona) {CodiceImportazione = row["TabFornitori.id"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["Cell"] != DBNull.Value && !string.IsNullOrEmpty((string)row["Cell"]))
                        {
                            var contatto = new Cellulare(row["Cell"].ToString(), true, persona) {CodiceImportazione = row["TabFornitori.id"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["Email"] != DBNull.Value && !string.IsNullOrEmpty((string)row["Email"]))
                        {
                            var contatto = new Email(row["Email"].ToString(), true, persona) {CodiceImportazione = row["TabFornitori.id"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        if (row["Fax"] != DBNull.Value && !string.IsNullOrEmpty((string)row["Fax"]))
                        {
                            var contatto = new Fax(row["Fax"].ToString(), true, persona) {CodiceImportazione = row["TabFornitori.id"].ToString().Trim()};
                            persona.Contatti.Add(contatto);
                        }

                        persona.CodiceImportazione = row["TabFornitori.id"].ToString().Trim();

                        // ===========================
                        // Fornitore
                        // ===========================
                        var fornitore = new Fornitore(persona, idAzienda);

                        if (row["PercRitAcconto"] != DBNull.Value)
                            fornitore.AliquotaRitenutaAcconto = Convert.ToDecimal((float)row["PercRitAcconto"])/100m;
                        if (row["PercIVA"] != DBNull.Value)
                            fornitore.AliquotaIva = row["PercIVA"].ToString().Trim();
                        if (row["PercRitPrev"] != DBNull.Value)
                            fornitore.AliquotaCassaProfessionisti = Convert.ToDecimal((float)row["PercRitPrev"]) / 100m;
                        if (row["RitAccSuRitPrev"] != DBNull.Value)
                         fornitore.IsRitenutaCalcolataImponibile = (bool)row["RitAccSuRitPrev"];

                        if (row["InElencoFornitori"] != DBNull.Value)
                            fornitore.ElencoFornitori = (bool)row["InElencoFornitori"];
                        if (row["CodiceTributoF24"] != DBNull.Value && !string.IsNullOrEmpty(row["CodiceTributoF24"].ToString().Trim()))
                            fornitore.CodiceTributo = row["CodiceTributoF24"].ToString().Trim();

                        fornitore.CodiceImportazione = row["TabFornitori.id"].ToString().Trim();
                        fornitore.Qualita = new ValutazioneQualita();

                        //-----------------------------
                        // Banche
                        //-----------------------------
                        if (row.GetChildRows("Fornitori_Banche").Count() > 0)
                        {
                            DataRow rowBanca = row.GetChildRows("Fornitori_Banche")[0];

                            if (rowBanca["IBAN"] != DBNull.Value && !string.IsNullOrEmpty(rowBanca["IBAN"].ToString()))
                            {
                                var coor = new CoordinateBancarie();
                                if (coor.CheckIBAN(rowBanca["IBAN"].ToString().Trim().Replace(" ", "")))
                                {
                                    persona.Iban = rowBanca["IBAN"].ToString().Trim().Replace(" ", "");
                                    coor.SetIBAN(persona.Iban);
                                    persona.Abi = coor.Abi;
                                    persona.Cab = coor.Cab;
                                    persona.ContoCorrente = coor.ContoCorrente;
                                    persona.Cin = coor.Cin;
                                }
                            }
                            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')
                                };
                                persona.Iban = coor.CalcolaIBAN();
                            }
                        }

                        _daoFactory.GetFornitoreDao().SaveOrUpdate(fornitore);
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato l'importazione di un fornitore da GeCo: " + Library.Utility.GetMethodDescription() + " (Fornitore) - idFornitore:" + row["TabFornitori.id"] + " - nome:" + row["TabFornitori.Nome"] + " - cognome:" + row["Cognome"], ex);
                        throw;
                    }
                }
            }
            catch (OleDbException ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione dei fornitori da GeCo: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione dei fornitori da GeCo: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }

            if (!string.IsNullOrEmpty(message))
            {
                _persistenceContext.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                _persistenceContext.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
            }

            return message;
        }
예제 #14
0
        private RisultatoElaborazioneCBI confermaMovimento(IList<MovimentiBancariControlloDuplicatiDTO> listaMovimentiBancari)
        {
            try
            {
                RisultatoElaborazioneCBI anomalie = null;

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

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

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

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

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

                            checkMovimento(mov);

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

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

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

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

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

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

                return anomalie;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la conferma del movimento bancario - {0}", ex, Utility.GetMethodDescription());
                throw;
            }
        }
예제 #15
0
        public string RielaborazioneMovimentiBancari(int azienda)
        {
            try
            {
                var message = string.Empty;
                var personeAzienda = PreLoadedCollection.Instance.GetPersone(azienda);

                // ===================================================================
                //  Movimenti orfani cioè non asosciati a nessun condominio
                // ===================================================================
                var movimenti = _daoFactory.GetMovimentoBancarioDao().GetOrfaniByAzienda(azienda);
                foreach (var mov in movimenti)
                {
                    try
                    {
                        var coord = new CoordinateBancarie { Abi = mov.Abi, Cab = mov.Cab, ContoCorrente = mov.ContoCorrente };
                        mov.Banca = _daoFactory.GetDatiBancariCondominiDao().GetByIban(coord.CalcolaIBAN());

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

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

                        checkMovimento(mov);

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

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

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

                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante la rielaborazione dei movimenti bancari - SINGOLO MOVIMENTO - {0} - movimento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), mov.ID, azienda);
                        throw;
                    }
                }

                // ===================================================================
                // Controllo i movimenti da verificare per eventuali cambiamenti di stato
                // ===================================================================
                movimenti = _daoFactory.GetMovimentoBancarioDao().GetDaVerificareByAzienda(azienda);
                foreach (var mov in movimenti)
                {
                    try
                    {
                        checkMovimento(mov);
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato durante la rielaborazione dei movimenti bancari DA VERIFICARE - SINGOLO MOVIMENTO - {0} - movimento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), mov.ID, azienda);
                        throw;
                    }
                }

                return message;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante la rielaborazione dei movimenti bancari - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), azienda);
                throw;
            }
        }
예제 #16
0
        private bool update(PersonaDTO dto, out Persona item)
        {
            bool result = false;
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = daoFactory.GetPersonaDao().GetById(dto.ID, false);

                // Condizione necessare per il controllo del fatto che sul DB ho una versione uguale o più vecchia
                // Per non viene più eseguito il controllo
                if (dto.Version == item.Version || true)
                {
                    item.AziendaID = dto.Azienda;
                    item.CodiceFiscale = dto.CodiceFiscale;
                    item.Cognome = dto.Cognome;

                    if (dto.DataNascita != null)
                    {
                        if (!Conversione.IsSqlSmallDateTime(dto.DataNascita.GetValueOrDefault()))
                            _log.WarnFormat("ATTENZIONE: Tentativo di memorizzare una data di nascita non corretta - {0} - persona:{1} - data:{2}", Utility.GetMethodDescription(), dto.ID, dto.DataNascita.GetValueOrDefault());
                        else
                            item.DataNascita = dto.DataNascita;
                    }
                    
                    item.Nome = dto.Nome;
                    item.Note = dto.Note;
                    item.PartitaIva = dto.PartitaIva;
                    item.RagioneSociale = dto.RagioneSociale;
                    item.Sesso = dto.Sesso;
                    item.TipoPersona = dto.TipoPersona;
                    item.Titolo = dto.Titolo;

                    if (!string.IsNullOrEmpty(dto.Username))
                    {
                        if (item.DatiAutenticazione == null)
                            item.DatiAutenticazione = new DatiAutenticazionePersona();

                        item.DatiAutenticazione.Username = dto.Username;
                        item.DatiAutenticazione.Password = dto.Password;
                    }

                    item.Iban = dto.Iban;
                    // Se iban è valorizzato i dati singoli devono sempre essere estrapolati dall'IBAN
                    if (!string.IsNullOrEmpty(item.Iban))
                    {
                        var coord = new CoordinateBancarie();
                        coord.SetIBAN(item.Iban);
                        item.Abi = coord.Abi;
                        item.Cab = coord.Cab;
                        item.ContoCorrente = coord.ContoCorrente;
                        item.Cin = coord.Cin;
                    }
                    else
                    {
                        item.Abi = dto.Abi;
                        item.Cab = dto.Cab;
                        item.ContoCorrente = dto.ContoCorrente;
                        item.Cin = dto.Cin;
                    }

                    if (dto.IndirizzoResidenza != null)
                    {
                        if (item.IndirizzoResidenza == null)
                            item.IndirizzoResidenza = new Address();
                        item.IndirizzoResidenza.Cap = dto.IndirizzoResidenza.Cap;
                        item.IndirizzoResidenza.Civico = dto.IndirizzoResidenza.Civico;
                        item.IndirizzoResidenza.Indirizzo = dto.IndirizzoResidenza.Indirizzo;
                        item.IndirizzoResidenza.Localita = dto.IndirizzoResidenza.Localita;
                        item.IndirizzoResidenza.Presso = dto.IndirizzoResidenza.Presso;
                        item.IndirizzoResidenza.Comune = dto.IndirizzoResidenza.CodiceComune != null ? daoFactory.GetComuneDao().Find(dto.IndirizzoResidenza.CodiceComune, false) : null;
                    }

                    if (dto.Domicilio != null)
                    {
                        if (item.Domicilio == null)
                            item.Domicilio = new Address();
                        item.Domicilio.Cap = dto.Domicilio.Cap;
                        item.Domicilio.Civico = dto.Domicilio.Civico;
                        item.Domicilio.Indirizzo = dto.Domicilio.Indirizzo;
                        item.Domicilio.Localita = dto.Domicilio.Localita;
                        item.Domicilio.Presso = dto.Domicilio.Presso;
                        item.Domicilio.Comune = dto.Domicilio.CodiceComune != null ? daoFactory.GetComuneDao().Find(dto.Domicilio.CodiceComune, false) : null;
                    }

                    if (dto.Recapito != null)
                    {
                        if (item.Recapito == null)
                            item.Recapito = new Address();
                        item.Recapito.Cap = dto.Recapito.Cap;
                        item.Recapito.Civico = dto.Recapito.Civico;
                        item.Recapito.Indirizzo = dto.Recapito.Indirizzo;
                        item.Recapito.Localita = dto.Recapito.Localita;
                        item.Recapito.Presso = dto.Recapito.Presso;
                        item.Recapito.Comune = dto.Recapito.CodiceComune != null ? daoFactory.GetComuneDao().GetById(dto.Recapito.CodiceComune, false) : null;
                    }

                    if (dto.ComuneNascita != null)
                    {
                        _idComune = dto.ComuneNascita.ID;
                        item.ComuneNascita = daoFactory.GetComuneDao().GetById(_idComune, false);
                    }
                    else
                        item.ComuneNascita = null;

                    // Lista Contatti
                    item.Contatti.Clear();
                    foreach (var t in dto.Contatti)
                    {
                        _id = t.ID;
                        if (t.Stato != string.Empty)
                            _id = getContattoRepository(item).ManageDomainEntity(t, false);

                        var contatto = daoFactory.GetContattoDao().Find(_id.GetValueOrDefault(), false);
                        if(contatto != null)
                            item.Contatti.Add(contatto);
                    }

                    // Lista Gruppi
                    var gruppi = item.Gruppi.ToArray();
                    foreach (var personaGruppo in gruppi)
                    {
                        personaGruppo.Gruppo.Persone.Remove(personaGruppo);
                        personaGruppo.Persona.Gruppi.Remove(personaGruppo);
                        personaGruppo.Gruppo = null;
                        personaGruppo.Persona = null;
                    }
                    item.Gruppi.Clear();
                    foreach (var idGruppo in dto.Gruppi)
                    {
                        var gruppo = daoFactory.GetGruppoDao().Find(idGruppo, false);
                        if(gruppo != null)
                        {
                            var personaGruppo = new PersonaGruppo(item, gruppo);
                            daoFactory.GetPersonaGruppoDao().SaveOrUpdate(personaGruppo);
                        }
                    }

                    // Unità Immobiliari
                    var unitaImmobiliari = daoFactory.GetUnitaImmobiliareDao().GetByPersona(item.ID);
                    foreach (var unitaImmobiliare in unitaImmobiliari)
                    {
                        unitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(unitaImmobiliare);
                    }

                    daoFactory.GetPersonaDao().Update(item);

                    result = true;
                }
                else
                {
                    // Eccezione: Sul db c'è qualche cosa di più nuovo.
                    _log.ErrorFormat("Errore nel salvataggio della persona - {0} id:{1} - il dato sul db è più recente di quello che si vuole salvare", Utility.GetMethodDescription(), dto.ID);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio della persona - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID);
                throw;
            }

            return result;
        }
예제 #17
0
        private bool insert(PersonaDTO dto, out Persona item)
        {
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                if (dto.DataNascita != null)
                {
                    if (!Conversione.IsSqlSmallDateTime(dto.DataNascita.GetValueOrDefault()))
                    {
                        dto.DataNascita = null;
                        _log.WarnFormat("ATTENZIONE: Tentativo di memorizzare una data di nascita non corretta - {0} - persona:{1} - data:{2}", Utility.GetMethodDescription(), dto.ID, dto.DataNascita.GetValueOrDefault());                        
                    }
                }

                item = new Persona(dto.TipoPersona, dto.Nome, dto.Cognome, dto.Azienda, true)
                {
                    AziendaID = dto.Azienda,
                    CodiceFiscale = dto.CodiceFiscale,
                    Cognome = dto.Cognome,
                    DataNascita = dto.DataNascita,
                    Nome = dto.Nome,
                    Note = dto.Note,
                    PartitaIva = dto.PartitaIva,
                    RagioneSociale = dto.RagioneSociale,
                    Sesso = dto.Sesso,
                    Titolo = dto.Titolo,
                    Iban = dto.Iban
                };

                if(!string.IsNullOrEmpty(dto.Username))
                    item.DatiAutenticazione = new DatiAutenticazionePersona {Username = dto.Username, Password = dto.Password};
                
                // Se iban è valorizzato i dati singoli devono sempre essere estrapolati dall'IBAN
                if (!string.IsNullOrEmpty(item.Iban))
                {
                    var coord = new CoordinateBancarie();
                    if (coord.SetIBAN(item.Iban))
                    {
                        item.Abi = coord.Abi;
                        item.Cab = coord.Cab;
                        item.ContoCorrente = coord.ContoCorrente;
                        item.Cin = coord.Cin;
                    }
                }
                else
                {
                    item.Abi = dto.Abi;
                    item.Cab = dto.Cab;
                    item.ContoCorrente = dto.ContoCorrente;
                    item.Cin = dto.Cin;
                }

                if (dto.IndirizzoResidenza != null)
                {
                    if (item.IndirizzoResidenza == null)
                        item.IndirizzoResidenza = new Address();
                    item.IndirizzoResidenza.Cap = dto.IndirizzoResidenza.Cap;
                    item.IndirizzoResidenza.Civico = dto.IndirizzoResidenza.Civico;
                    item.IndirizzoResidenza.Indirizzo = dto.IndirizzoResidenza.Indirizzo;
                    item.IndirizzoResidenza.Localita = dto.IndirizzoResidenza.Localita;
                    item.IndirizzoResidenza.Presso = dto.IndirizzoResidenza.Presso;
                    if (dto.IndirizzoResidenza.CodiceComune != null)
                        item.IndirizzoResidenza.Comune = daoFactory.GetComuneDao().Find(dto.IndirizzoResidenza.CodiceComune, false);
                }

                if (dto.Domicilio != null)
                {
                    if (item.Domicilio == null)
                        item.Domicilio = new Address();
                    item.Domicilio.Cap = dto.Domicilio.Cap;
                    item.Domicilio.Civico = dto.Domicilio.Civico;
                    item.Domicilio.Indirizzo = dto.Domicilio.Indirizzo;
                    item.Domicilio.Localita = dto.Domicilio.Localita;
                    item.Domicilio.Presso = dto.Domicilio.Presso;
                    if (dto.Domicilio.CodiceComune != null)
                        item.Domicilio.Comune = daoFactory.GetComuneDao().Find(dto.Domicilio.CodiceComune, false);
                }
                
                if (dto.Recapito != null)
                {
                    if (item.Recapito == null)
                        item.Recapito = new Address();
                    item.Recapito.Cap = dto.Recapito.Cap;
                    item.Recapito.Civico = dto.Recapito.Civico;
                    item.Recapito.Indirizzo = dto.Recapito.Indirizzo;
                    item.Recapito.Localita = dto.Recapito.Localita;
                    item.Recapito.Presso = dto.Recapito.Presso;
                    if (dto.Recapito.CodiceComune != null)
                        item.Recapito.Comune = daoFactory.GetComuneDao().GetById(dto.Recapito.CodiceComune, false);
                }

                if (dto.ComuneNascita != null)
                {
                    _idComune = dto.ComuneNascita.ID;
                    item.ComuneNascita = daoFactory.GetComuneDao().GetById(_idComune, false);
                }
                else
                    item.ComuneNascita = null;

                //Lista Contatti
                item.Contatti.Clear();
                foreach (var t in dto.Contatti)
                {
                    _id = t.ID;
                    if (t.Stato != string.Empty)
                        _id = getContattoRepository(item).ManageDomainEntity(t, false);

                    item.Contatti.Add(daoFactory.GetContattoDao().GetById(_id.GetValueOrDefault(), false));
                }

                // Lista Gruppi
                item.Gruppi.Clear();
                foreach (var idGruppo in dto.Gruppi)
                {
                    var gruppo = daoFactory.GetGruppoDao().Find(idGruppo, false);
                    if (gruppo != null)
                    {
                        var personaGruppo = new PersonaGruppo(item, gruppo);
                        daoFactory.GetPersonaGruppoDao().SaveOrUpdate(personaGruppo);
                    }
                }
                    
                daoFactory.GetPersonaDao().SaveOrUpdate(item);

                // Dati autenticazione (solo ora perchè necessita dell'ID)
                if(item.DatiAutenticazione == null || string.IsNullOrEmpty(item.DatiAutenticazione.Username))
                {
                    if(item.DatiAutenticazione == null)
                        item.DatiAutenticazione = new DatiAutenticazionePersona();
                    var service = _windsorRepository.GetContainer(_info.Azienda).Resolve<IPersonaService>();
                    service.SetDatiAutenticazione(item);
                }

                // Unità Immobiliari
                var unitaImmobiliari = daoFactory.GetUnitaImmobiliareDao().GetByPersona(item.ID);
                foreach (var unitaImmobiliare in unitaImmobiliari)
                {
                    unitaImmobiliare.Descrizione = daoFactory.GetUnitaImmobiliareDao().GetUnitaImmobiliareDescrizione(unitaImmobiliare);
                }

            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nell'inserimento delle persone: " + Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
                throw;
            }

            return true;
        }
예제 #18
0
 private void contoCorrenteLeave(object sender, EventArgs e)
 {
     if (abi.Value != null && cab.Value != null && contoCorrente.Value != null)
     {
         iban.Leave -= ibanLeave;
         var coord = new CoordinateBancarie
                         {
                             Abi = abi.Value.ToString(),
                             Cab = cab.Value.ToString(),
                             ContoCorrente = contoCorrente.Value.ToString()
                         };
         if (contoCorrente.Value.ToString().Length < 12)
             Fornitore.PersonaRiferimento.ContoCorrente = coord.NormalizzaContoCorrente(contoCorrente.Value.ToString());
         Fornitore.PersonaRiferimento.Cin = coord.CalcolaCin();
         Fornitore.PersonaRiferimento.Iban = coord.CalcolaIBAN();
         iban.Leave += ibanLeave;
     }
 }
예제 #19
0
        private void ibanLeave(object sender, EventArgs e)
        {
            if (iban.Value != null)
            {
                Fornitore.PersonaRiferimento.Iban = iban.Value.ToString();

                var coord = new CoordinateBancarie();
                if (coord.SetIBAN(iban.Value.ToString()))
                {
                    Fornitore.PersonaRiferimento.Abi = coord.Abi;
                    Fornitore.PersonaRiferimento.Cab = coord.Cab;
                    Fornitore.PersonaRiferimento.Cin = coord.Cin;
                    Fornitore.PersonaRiferimento.ContoCorrente = coord.ContoCorrente;
                }
            }
        }
예제 #20
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;
        }