public EsecuzioneImportazioneDati(string fileName, string password, string prefissoConto, bool contiStudio, TipoSaldi tipoSaldi, SoftwareInput inputType, TipoArchivioImportato tipoArchivio)
 {
     _tipoArchivio = tipoArchivio;
     _fileName = fileName;
     _inputType = inputType;
     _prefissoConto = prefissoConto;
     _contiStudio = contiStudio;
     _tipoSaldi = tipoSaldi;
     _password = password;
     InitializeComponent();
     Load += esecuzioneImportazioneDatiLoad;
     DialogResult = DialogResult.OK;
 }
        public string ImportaCondomini(string inputPathFileName, string prefixConto, bool importaContiStudio, TipoSaldi tipoSaldi, string password, SoftwareInput importType)
        {
            string message;

            var fullPathFileName = compressFile(inputPathFileName, importType == SoftwareInput.Excel || importType == SoftwareInput.Summa);

            // get some info about the input file
            var fileInfo = new FileInfo(fullPathFileName);

            // open input stream
            using (var stream = new FileStream(fullPathFileName, FileMode.Open, FileAccess.Read))
            {
                var key = Guid.NewGuid();

                using (var uploadStreamWithProgress = new StreamWithProgress(stream))
                {
                    //uploadStreamWithProgress.ProgressChanged += uploadStreamWithProgress_ProgressChanged;

                    // start service client
                    var client = new FileTransferServiceClient();

                    // upload file
                    client.UploadFile(key.ToString(), fileInfo.Length, uploadStreamWithProgress);

                    // close service client
                    //client.Close();
                }

                message = GetServiceClient().ImportazioneCondomini(key.ToString(), prefixConto, importaContiStudio, tipoSaldi, password, importType, GetUserInfo());

                // Aggiorno le lista di condomini, unità immobiliari e persone
                _cacheService.LoadPersone();
                _cacheService.LoadCondomini();
                _cacheService.LoadUI();
                _cacheService.LoadEsercizi();

                CloseService();
            }

            return message;
        }
        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;
        }
        public string LoadCondomini(string key, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password)
        {
            string message = string.Empty;

            try
            {
                string databasePath = saveDatabase(key);

                
                _log.Info("Salvato il database nel percorso: " + databasePath + " - " + Library.Utility.GetMethodDescription());

                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 condominioAdapter = new OleDbDataAdapter("SELECT * FROM Stabili;", conn);

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

                message = dsCondomini.Tables["Stabili"].Rows.Cast<DataRow>().Aggregate(message, (current, row) => current + loadCondominio(row["S_COD_STA"].ToString(), prefixConto, loadContiStudio, tipoSaldi, azienda, conn));

                
                _log.Info("Caricati " + dsCondomini.Tables["Stabili"].Rows.Count + " condomini - Messaggio:" + message + " - " + Library.Utility.GetMethodDescription());

                return message;
            }
            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;
        }
        public string LoadCondominio(string key, string codiceCondominio, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password) 
        {
            string message;

            try
            {
                var databasePath = saveDatabase(key);

                
                _log.Info("Salvato il database nel percorso: " + databasePath + " - " + Library.Utility.GetMethodDescription());

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

                // ----------------------------------------------------------------------------------
                //  Condomini
                // ----------------------------------------------------------------------------------
                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);

                message = loadCondominio(codiceCondominio, prefixConto, loadContiStudio, tipoSaldi, azienda, conn);

                
                _log.Info("Caricato il condominio " + codiceCondominio + " - Messaggio:" + message + " - " + Library.Utility.GetMethodDescription());
            }
            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;
        }
        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;
        }
 private void setSaldiInizioEsercizio(DataRow row, IList<SoggettoCondominio> soggetti, TipoSaldi tipoSaldi)
 {
     if (row["U_SALDO_ES_ATT"] != DBNull.Value && tipoSaldi == TipoSaldi.EsercizioAttuale)
     {
         var esercizio = Library.IesiGenericCollections<Esercizio>.GetByIndex(soggetti[0].UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi, 0);
         var saldo = new SaldoSoggetto(soggetti[0], esercizio, Convert.ToDecimal((double)row["U_SALDO_ES_ATT"]) * -1);
         _daoFactory.GetSaldoSoggettoDao().SaveOrUpdate(saldo);
     }
     else if(row["U_SALDO_ES_PRE"] != DBNull.Value && tipoSaldi == TipoSaldi.EsercizioPrecedente)
     {
         var esercizio = Library.IesiGenericCollections<Esercizio>.GetByIndex(soggetti[0].UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Esercizi, 0);
         var saldo = new SaldoSoggetto(soggetti[0], esercizio, Convert.ToDecimal((double)row["U_SALDO_ES_PRE"]) * -1);
         _daoFactory.GetSaldoSoggettoDao().SaveOrUpdate(saldo);
     }
 }
        private string loadCondominio(string codiceCondominio, bool loadContiStudio, TipoSaldi tipoSaldi, Azienda azienda, OleDbConnection conn)
        {
            var message = string.Empty;

            var condominioAdapter = new OleDbDataAdapter("SELECT TOP 1 * FROM CT02F0 LEFT JOIN CT03F0 ON CT02F0.CODSTAB = CT03F0.CODSTAB WHERE CT02F0.CODITTA = 1 AND CT02F0.CODSTAB=" + codiceCondominio + " ORDER BY CT03F0.DATAIN DESC", conn);
            var dsCondomini = new DataSet("Condomini");
            condominioAdapter.Fill(dsCondomini, "Stabili");

            var rowCondominio = dsCondomini.Tables["Stabili"].Rows[0];
            
            var dataFineEsercizio = new DateTime(DateTime.Today.Year, 12, 31);
            if (rowCondominio["DATAIN"] != DBNull.Value && rowCondominio["DATAFI"] != DBNull.Value)
            {
                dataFineEsercizio = (DateTime)rowCondominio["DATAFI"];
            }

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

                // Indirizzo
                if (rowCondominio["LOCALITA"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["LOCALITA"].ToString()))
                {
                    IList<Comune> comuni = _daoFactory.GetComuneDao().GetByDescrizione(rowCondominio["LOCALITA"].ToString().Trim());
                    if (comuni.Count == 1)
                        condominio.Indirizzo.Comune = comuni[0];
                    else
                    {
                        var comuniDescr = comuni.Where(item => item.Descrizione.Trim().ToUpper() == rowCondominio["LOCALITA"].ToString().Trim().ToUpper()).ToList();
                        if(comuniDescr.Count == 1)
                            condominio.Indirizzo.Comune = comuniDescr.SingleOrDefault();
                    }

                    if(condominio.Indirizzo.Comune == null)
                        condominio.Indirizzo.Localita = rowCondominio["LOCALITA"].ToString();
                }

                _daoFactory.GetCondominioDao().SaveOrUpdate(condominio);
                addDefault(condominio, loadContiStudio);
            }
            else
            {
                // Eliminazione vecchi dati
                condominio.ModelliRegistrazioneContabile.Clear();
                foreach (ModelloRegistrazioneContabile modello in _daoFactory.GetModelloRegistrazioneContabileDao().GetByCondominio(condominio.ID))
                    _daoFactory.GetModelloRegistrazioneContabileDao().Delete(modello);
 
                foreach (UnitaImmobiliare unita in _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(condominio.ID))
                {
                    foreach (Millesimo mill in unita.Millesimi)
                    {
                        mill.ContoRiferimento.Millesimi.Remove(mill);
                        _daoFactory.GetMillesimoDao().Delete(mill);
                    }
                    unita.Millesimi.Clear();

                    IList<SoggettoCondominio> soggetti = unita.Soggetti.ToList();
                    foreach (SoggettoCondominio 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["CODFISC"] != DBNull.Value && !string.IsNullOrEmpty(rowCondominio["CODFISC"].ToString()))
                condominio.CodiceFiscale = rowCondominio["CODFISC"].ToString().Trim();

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

            var scaleAdapter = new OleDbDataAdapter("SELECT * FROM CT04F0 WHERE CODITTA = 1 AND CODSTAB=" + codiceCondominio, conn);
            scaleAdapter.Fill(dsCondomini, "Scale");
            
            foreach(DataRow row in dsCondomini.Tables["Scale"].Rows)
            {
                if (firstScala)
                {
                    scala.Descrizione = row["INTEST"].ToString();
                    scala.Indirizzo = new Address {Indirizzo = condominio.Indirizzo.Indirizzo};
                    scala.Ordine = 1;
                    scala.CodiceImportazione = row["CODITTA"] + "&" + row["CODSTAB"] + "&" + row["GRUPPO"];
                    firstScala = false;
                }
                else
                {
                    var scalaNew = new GruppoStabile(stabile, row["INTEST"].ToString())
                                       {Indirizzo = {Indirizzo = condominio.Indirizzo.Indirizzo}};
                    stabile.GruppiStabile.Add(scalaNew);
                    scalaNew.Ordine = Convert.ToInt32(row["GRUPPO"]);
                    _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 CT86F0 WHERE CODITTA = 1 AND CODSTAB=" + codiceCondominio, conn);
            pianoContiAdapter.Fill(dsCondomini, "PianoConti");

            var sottoContiAdapter = new OleDbDataAdapter("SELECT * FROM CT88F0 WHERE CODITTA = 1 AND CODSTAB=" + codiceCondominio, conn);
            sottoContiAdapter.Fill(dsCondomini, "SottoConti");

            var loadedConti = new Dictionary<int, Conto>();
            var tbPianoConti = dsCondomini.Tables["PianoConti"];
            Conto conto = null;
            foreach (DataRow row in tbPianoConti.Rows)
            {
                try
                {
                    if(Convert.ToInt32(row["COLONNA"]) > 0 && row["DESCR1"] != DBNull.Value)
                        conto = loadContoSottoconto(row, condominio, conto, dsCondomini.Tables["SottoConti"], loadedConti);
                }
                catch (Exception ex)
                {
                    
                    _log.Error("Errore inaspettato nell'importazione di un condominio da CONDOR: " + Library.Utility.GetMethodDescription() + " (Piano dei conti) - COLONNA:" + row["COLONNA"] + " - CODSTAB:" + row["CODSTAB"], ex);
                    message = "Errore inaspettato nell'importazione di un condominio da CONDOR - " + ex.Message;
                    return message;
                }
            }

            // ----------------------------------------------------------------------------------
            //  Anagrafiche
            // ----------------------------------------------------------------------------------
            var cmd = new OleDbCommand("SELECT TOP 1 ESERCIZIO FROM CT08F0 WHERE CODITTA = 1 AND CODSTAB=" + codiceCondominio + " ORDER BY ESERCIZIO DESC", conn);
            if (conn.State == ConnectionState.Closed)
                conn.Open();
            var lastEsercizio = Convert.ToInt32(cmd.ExecuteScalar());
            conn.Close();

            var unitaAdapter = new OleDbDataAdapter("SELECT * FROM CT05F0 WHERE CODITTA = 1 AND CODPOS >= 8000 AND CODPOS < 8100 AND CODSTAB=" + codiceCondominio + " AND ESERCIZIO = " + lastEsercizio.ToString() + " ORDER BY CODPOS", conn);
            var soggettiAdapter = new OleDbDataAdapter("SELECT * FROM CT06F0 WHERE CODITTA = 1 AND CODPOS >= 8000 AND CODSTAB=" + codiceCondominio + " ORDER BY CODPOS", conn);
            var millesimiAdapter = new OleDbDataAdapter("SELECT * FROM CT08F0 WHERE CODITTA = 1 AND CODSTAB=" + codiceCondominio + " AND ESERCIZIO = " + lastEsercizio.ToString() + " ORDER BY CODPOS", conn);
            unitaAdapter.Fill(dsCondomini, "Unita");
            soggettiAdapter.Fill(dsCondomini, "Condomini");
            millesimiAdapter.Fill(dsCondomini, "Millesimi");

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

            var tipoUnita = _daoFactory.GetTipoUnitaImmobiliareDao().GetById(1, false);

            // Unità Immobiliari
            var loadedSoggetti = new Dictionary<int, SoggettoCondominio>();
            foreach (DataRow row in tbUnita.Rows)
            {
                try
                {
                    var codiceUnita = Convert.ToInt32(row["CODPOS"]);
                    var soggetti = tbAnagrafiche.Select("CODPOS = " + codiceUnita + " OR CODPOS = " + (codiceUnita + 100));
                    var gruppo = condominio.Gruppi.SingleOrDefault(item => item.Ordine == Convert.ToInt32(row["CN-GRUPPO"])) ??
                                           condominio.Gruppi.FirstOrDefault();

                    if(row["SUBALT"] != DBNull.Value && row["SUBALT"].ToString().Length >= 3 && row["SUBALT"].ToString().ToUpper().StartsWith("UFF"))
                        tipoUnita = _daoFactory.GetTipoUnitaImmobiliareDao().GetById(19, false);
                    else if (row["SUBALT"] != DBNull.Value && row["SUBALT"].ToString().Length >= 3 && (row["SUBALT"].ToString().ToUpper().StartsWith("POSTO") || row["SUBALT"].ToString().ToUpper().StartsWith("GARAGE")))
                        tipoUnita = _daoFactory.GetTipoUnitaImmobiliareDao().GetById(3, false);

                    var unitaCorrente = new UnitaImmobiliare(gruppo, tipoUnita)
                    {
                        Ordine = Convert.ToInt32(row["CODPOS"]) - 8000,
                        Descrizione = row["INTEST1"].ToString().Trim()
                    };
                    
                    if (row["INTEST2"] != DBNull.Value && !string.IsNullOrEmpty(row["INTEST2"].ToString()))
                        unitaCorrente.Descrizione += " " + row["INTEST2"].ToString().Trim();

                    unitaCorrente.Piano = row["PIANO"].ToString();
                    unitaCorrente.EstensioneInterno = row["INTERNO"].ToString();

                    unitaCorrente.AziendaID = azienda.ID;
                    unitaCorrente.CodiceImportazione = row["CODITTA"] + "&" + row["CODSTAB"] + "&" + row["CODPOS"];
                    _daoFactory.GetUnitaImmobiliareDao().SaveOrUpdate(unitaCorrente);

                    var soggettiCondominio = setSoggettiUnita(unitaCorrente, row, soggetti, loadedSoggetti);

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

                        // Millesimi
                        setMillesimi(row, dsCondomini.Tables["Millesimi"], unitaCorrente, loadedConti);
                    }

                }
                catch (Exception ex)
                {
                    
                    _log.Error("Errore inaspettato nell'importazione di un condominio da CONDOR: " + Library.Utility.GetMethodDescription() + " (Unità Immobiliare) - CODSTAB:" + row["CODSTAB"] + " - CODPOS:" + row["CODPOS"], ex);
                    
                    message = "Errore inaspettato nell'importazione di un condominio da CONDOR - " + ex.Message;
                    return message;
                }
            }

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

            return message;
        }
        public string LoadCondomini(string key, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password)
        {
            string message = string.Empty;

            try
            {
                string databasePath = saveDatabase(key);

                
                _log.Info("Salvato il database nel percorso: " + databasePath + " - " + Library.Utility.GetMethodDescription());

                var conn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", databasePath));
                var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                var condominioAdapter = new OleDbDataAdapter("SELECT * FROM CT02F0 WHERE CODITTA = 1;", conn);

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

                message = dsCondomini.Tables["Stabili"].Rows.Cast<DataRow>().Aggregate(message, (current, row) => current + loadCondominio(row["CODSTAB"].ToString(), loadContiStudio, tipoSaldi, azienda, conn));

                
                _log.Info("Caricati " + dsCondomini.Tables["Stabili"].Rows.Count + " condomini - Messaggio:" + message + " - " + Library.Utility.GetMethodDescription());

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

            return message;
        }
        public string LoadCondominio(string key, string codiceCondominio, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password) 
        {
            string message;

            try
            {
                var databasePath = saveDatabase(key);

                
                _log.Info("Salvato il database nel percorso: " + databasePath + " - " + Library.Utility.GetMethodDescription());

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

                // ----------------------------------------------------------------------------------
                //  Condomini
                // ----------------------------------------------------------------------------------
                var conn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", databasePath));
                Azienda azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false);

                message = loadCondominio(codiceCondominio, loadContiStudio, tipoSaldi, azienda, conn);

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

            return message;
        }
Beispiel #11
0
        public string LoadCondominio(string key, string codiceCondominio, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password)
        {
            string message = string.Empty;

            try
            {
                string databasePath = @"C:\temp\BWDB.bak";
                string databaseCompressPath = Path.Combine("Upload", key);

                byte[] bufferWrite;

                // Will open the file to be decompressed
                FileStream fsSource;

                // Will write the new decompressed file
                FileStream fsDest;

                // To hold the compressed file
                GZipStream gzDecompressed;
                fsSource = new FileStream(databaseCompressPath, FileMode.Open, FileAccess.Read, FileShare.Read);

                // Will hold the compressed stream created from the destination stream
                gzDecompressed = new GZipStream(fsSource, CompressionMode.Decompress, true);

                // Retrieve the size of the file from the compressed archive's footer
                bufferWrite = new byte[4];
                fsSource.Position = (int)fsSource.Length - 4;

                // Write the first 4 bytes of data from the compressed file into the buffer
                fsSource.Read(bufferWrite, 0, 4);

                // Set the position back at the start
                fsSource.Position = 0;
                int bufferLength = BitConverter.ToInt32(bufferWrite, 0);

                byte[] buffer = new byte[bufferLength + 100];
                int readOffset = 0;
                int totalBytes = 0;

                // Loop through the compressed stream and put it into the buffer
                while (true)
                {
                    int bytesRead = gzDecompressed.Read(buffer, readOffset, 100);

                    // If we reached the end of the data
                    if (bytesRead == 0)
                        break;

                    readOffset += bytesRead;
                    totalBytes += bytesRead;
                }

                // Write the content of the buffer to the destination stream (file)
                fsDest = new FileStream(databasePath, FileMode.Create);
                fsDest.Write(buffer, 0, totalBytes);

                // Close the streams
                fsSource.Close();
                gzDecompressed.Close();
                fsDest.Close();

                // ===========================================================================================================
                //  Restore database
                // ===========================================================================================================
                SqlConnection conn = new SqlConnection(_daoFactory.GetCondominioDao().GetConnection().ConnectionString);
                conn.Open();
                SqlCommand command = new SqlCommand("RESTORE DATABASE BWDB FROM DISK='" + databasePath + "' WITH REPLACE", conn);
                command.ExecuteNonQuery();
                conn.Close();

                // ===========================================================================================================
                //  Caricamento tabelle importazione
                // ===========================================================================================================
                loadTabellaImportazione(codiceCondominio, idAzienda);


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

            return message;
        }
Beispiel #12
0
 public string LoadCondomini(string key, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password) { return string.Empty; }
Beispiel #13
0
        public string LoadCondomini(string key, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password)
        {
            string message = string.Empty;

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

                var condominioAdapter = new OleDbDataAdapter("SELECT TabCondomìni.Codice AS Codice FROM TabCondomìni WHERE TabCondomìni.Attivo = True;", conn);

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

                foreach (DataRow row in dsCondomini.Tables["TabCondomìni"].Rows)
                {
                    try
                    {
                        string messaggioCondominio = loadCondominio(row["Codice"].ToString(), azienda, conn);
                        if (!string.IsNullOrEmpty(messaggioCondominio))
                            message += messaggioCondominio + Environment.NewLine;
                    }
                    catch (Exception ex)
                    {
                        message = ex.Message;
                        
                        _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " - condominio:" + row["Codice"].ToString().Trim() + " - message: " + message, ex);
                        continue;
                    }
                }

                return message;
            }
            catch (OleDbException ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione dei condomini da GeCo: " + Library.Utility.GetMethodDescription() + " - azienda:" + idAzienda + " - message: " + message, ex);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione dei condomini da GeCo: " + Library.Utility.GetMethodDescription() + " - azienda:" + idAzienda + " - message: " + message, ex);
            }

            return message;
        }
Beispiel #14
0
        public string LoadCondominio(string key, string codiceCondominio, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, int idAzienda, string password)
        {
            string message;

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

                message = loadCondominio(codiceCondominio, azienda, conn);
            }
            catch (OleDbException ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da GeCo: " + Library.Utility.GetMethodDescription() + " - message: " + message, ex);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                
                _log.Error("Errore inaspettato nell'importazione di un condominio 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;
        }
Beispiel #15
0
        public string ImportazioneCondomini(string key, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, string password, SoftwareInput inputType, UserInfo userinfo)
		{
			var windsorRep = new WindsorConfigRepository();
			try
			{
                windsorRep.BeginTransaction(userinfo, IsolationLevel.ReadUncommitted);
				IImportDati importDatiService = null;
			    switch (inputType)
				{
					case SoftwareInput.YStabili:
						importDatiService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IImportDati>("importdati.ystabili");
						break;

					case SoftwareInput.Brainware:
						importDatiService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IImportDati>("importdati.brainware");
						break;

					case SoftwareInput.GeCo:
						importDatiService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IImportDati>("importdati.geco");
						break;

                    case SoftwareInput.Condor:
                        importDatiService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IImportDati>("importdati.condor");
                        break;
                        
                    case SoftwareInput.Excel:
                        importDatiService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IImportDati>("importdati.excel");
                        break;

                    case SoftwareInput.Summa:
                        importDatiService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IImportDati>("importdati.summa");
                        break;
                }

				string item = importDatiService != null ? importDatiService.LoadCondomini(key, prefixConto, loadContiStudio, tipoSaldi, userinfo.Azienda, password) : "L'applicazione origine non è riconosciuta";
				
				if(string.IsNullOrEmpty(item))
					windsorRep.Commit();
				else
                    windsorRep.Rollback(IsolationLevel.ReadUncommitted);
				
				return item;
			}
			catch (Exception ex)
			{

				_log.Error("Errore nella importazione di tutti i condomini - " + Utility.GetMethodDescription() + " - idAzienda:" + userinfo.Azienda + " - software:" + inputType.ToString(), ex);
                windsorRep.Rollback(IsolationLevel.ReadUncommitted);
				throw;
			}
		}