Beispiel #1
0
        protected void SetUp()
        {
            var mocks = new MockRepository();

            var azienda = new Azienda("PROV", "Azienda di prova");
            var condominio = new Condominio("Condominio di prova", 31, 12, 2012, azienda);

            var stabile = new Palazzina(condominio, "Stabile di prova", false);
            condominio.Palazzine.Add(stabile);

            var scala = new GruppoStabile(stabile, "Scala di prova");
            var tipoUnitaImmobiliare = new TipoUnitaImmobiliare("Abitazione");
            var unitaImmobiliare = new UnitaImmobiliare(scala, tipoUnitaImmobiliare);
            var annoGestionale = new AnnoGestionale(condominio, 2012, 2012);
            _esercizio = new Esercizio(condominio, new DateTime(2012, 1, 1), new DateTime(2012, 12, 31), annoGestionale, GestioneEsercizioEnum.Ordinario);

            _subentroRepository = mocks.Stub<ISubentroUnitaImmobiliareDao>();

            var subentro1 = mocks.Stub<SubentroUnitaImmobiliare>();
            subentro1.SoggettoEntrante = new SoggettoCondominio(unitaImmobiliare, new Persona(TipoPersonaEnum.Fisica, "Giorgio", "Parmeggiani", 1, true));
            subentro1.SoggettoUscente = new SoggettoCondominio(unitaImmobiliare, new Persona(TipoPersonaEnum.Fisica, "Daniele", "Vaccari", 1, true));

            var subentro2 = mocks.Stub<SubentroUnitaImmobiliare>();
            subentro1.SoggettoEntrante = new SoggettoCondominio(unitaImmobiliare, subentro1.SoggettoUscente.Persona);
            subentro1.SoggettoUscente = new SoggettoCondominio(unitaImmobiliare, new Persona(TipoPersonaEnum.Fisica, "Luigi", "Cacciatori", 1, true));

            using (mocks.Record())
            {
                SetupResult.For(_subentroRepository.GetByDataCondominio(_esercizio.CondominioRiferimento.ID, _esercizio.DataApertura.GetValueOrDefault(), _esercizio.DataChiusura.GetValueOrDefault(), false)).Return(new List<SubentroUnitaImmobiliare> { subentro1, subentro2 });
            }

        }
Beispiel #2
0
        public static UnitaImmobiliare GetCondominioMonoScalaMonoProprietario()
        {
            var azienda = new Azienda("TEST", "Azienda di Test") { ID = 1 };
            var condominio = new Condominio("Test", 31, 12, 2014, azienda);
            var stabile = new Palazzina(condominio, "Stabile A - TEST");
            var scala = new GruppoStabile(stabile, "Scala A - TEST");
            var tipo = new TipoUnitaImmobiliare("Abitazione");
            var unitaImmobiliare = new UnitaImmobiliare(scala, tipo);

            // Esercizio
            var annoGestionale = new AnnoGestionale(condominio, 2013, 2014);
            var esercizio = new Esercizio(condominio, new DateTime(2014, 1, 1), new DateTime(2014, 12, 31), annoGestionale, GestioneEsercizioEnum.Ordinario);
            condominio.Esercizi.Add(esercizio);

            // Proprietario
            var persona = new Persona(TipoPersonaEnum.Fisica, "Pinco", "Pallo", azienda.ID, true);
            var proprietario = new Proprietario(unitaImmobiliare, persona)
            {
                PercentualeRiferimento = 100,
                Principale = true
            };
            unitaImmobiliare.Soggetti.Add(proprietario);

            return unitaImmobiliare;
        }
Beispiel #3
0
        /// <summary>
        /// Crea un Riparto Bollette valido
        /// </summary>
        public RipartoBollette(TestataRipartoBollette testata, UnitaImmobiliare unita)
        {
            UnitaImmobiliare = unita;
            Testata = testata;

            if (Testata != null)
                Testata.Riparto.Add(this);
        }
        public RendicontoAnnualeUnita(RendicontoAnnualeConto conto, UnitaImmobiliare unita, decimal? importo)
        {
            Conto = conto;
            Unita = unita;
            Importo = importo;

            if (Conto != null)
                Conto.DettagliUnita.Add(this);
        }
        public UnitaImmobiliareDettaglio(UnitaImmobiliare unita, TipoUnitaImmobiliare tipoUnita, int numero)
        {
            TipoUnita = tipoUnita;
            Numero = numero;
            Unita = unita;

            if (Unita != null)
                Unita.Dettaglio.Add(this);
        }
        /// <summary>
        /// Crea un Subentro valido
        /// </summary>
        public SubentroUnitaImmobiliare(Subentro subentro, UnitaImmobiliare unita, SoggettoCondominio soggettoEntrante, SoggettoCondominio soggettoUscente)
        {
            Subentro = subentro;
            Unita = unita;
            SoggettoEntrante = soggettoEntrante;
            SoggettoUscente = soggettoUscente;

            if (Subentro != null)
                Subentro.UnitaImmobiliari.Add(this);
        }
Beispiel #7
0
        /// <summary>
        /// Crea una lettura di contatore valida.
        /// </summary>
        public LetturaContatore(Contatore contatore, UnitaImmobiliare unitaImmobiliare, DateTime data, decimal valore)
        {
            Contatore = contatore;
            Data = data;
            Valore = valore;
            UnitaImmobiliare = unitaImmobiliare;

            if (Contatore != null)
                Contatore.Letture.Add(this);
        }
Beispiel #8
0
 /// <summary>
 /// Crea uno Stabile valido
 /// </summary>
 public Millesimo(Conto contoRiferimento, UnitaImmobiliare unita)
 {
     _unitaRiferimento = unita;
     _contoRiferimento = contoRiferimento;
     if (contoRiferimento != null)
     {
         contoRiferimento.Millesimi.Add(this);
         unita.Millesimi.Add(this);
     }
 }
Beispiel #9
0
        /// <summary>
        /// Crea una Spesa Unità valida
        /// </summary>
        public SpeseUnita(decimal? importo, UnitaImmobiliare unita, SoggettoCondominio soggettoCondominio, RipartizioneSpesa ripartizioneSpesa)
        {
            _importo = importo;
            _unitaRiferimento = unita;
            _soggettoCondominio = soggettoCondominio;

            if (ripartizioneSpesa != null)
            {
                _ripartizioneSpesa = ripartizioneSpesa;
                _ripartizioneSpesa.DettaglioRipartizione.Add(this);
            }
        }
Beispiel #10
0
        /// <summary>
        /// Crea una Spesa Unità valida
        /// </summary>
        public SpeseUnita(decimal? importo, UnitaImmobiliare unita, SoggettoCondominio soggettoCondominio, MovimentoContabile movimento)
        {
            _importo = importo;
            _unitaRiferimento = unita;
            _soggettoCondominio = soggettoCondominio;

            if (movimento != null)
            {
                _movimentoRiferimento = movimento;
                _movimentoRiferimento.DettaglioRipartizione.Add(this);
            }
        }
        public UnitaImmobiliareImpiantistica(UnitaImmobiliare unita, string tipo, bool norma)
        {
            Tipo = tipo;
            Norma = norma;
            Unita = unita;

            if (Unita != null)
            {
                if(Unita.CondizioniSicurezzaImpianto == null)
                    Unita.CondizioniSicurezzaImpianto = new SicurezzaImpianto();
                Unita.CondizioniSicurezzaImpianto.Impiantistica.Add(this);
            }
        }
Beispiel #12
0
        /// <summary>
        /// Crea un Proprietario valido
        /// </summary>
        public Proprietario(UnitaImmobiliare unitaImmobiliare, Persona persona) : base(unitaImmobiliare, persona)
        {
            if (unitaImmobiliare != null)
            {
                unitaImmobiliare.Proprietari.Add(this);
                unitaImmobiliare.Soggetti.Add(this);

                if (unitaImmobiliare.Proprietari.Count == 1)
                {
                    PercentualeRiferimento = 100m;
                    Principale = true;
                }
            }
        }
Beispiel #13
0
        /// <summary>
        /// Crea un Conduttore valido
        /// </summary>
        public Conduttore(UnitaImmobiliare unitaImmobiliare, Persona persona) : base(unitaImmobiliare, persona)
        {
            if (unitaImmobiliare != null)
            {
                unitaImmobiliare.Conduttori.Add(this);
                unitaImmobiliare.Soggetti.Add(this);

                if (unitaImmobiliare.Conduttori.Count == 1)
                {
                    this.PercentualeRiferimento = 100m;
                    this.Principale = true;
                }
            }
        }
        private string loadCondominio(string codiceCondominio, string prefixConto, bool loadContiStudio, TipoSaldi tipoSaldi, Azienda azienda, OleDbConnection conn)
        {
            var message = string.Empty;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    var soggettiCondominio = setSoggettiUnita(unitaCorrente, soggetti);

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

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

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

            return message;
        }
        private IList<SoggettoCondominio> setSoggettiUnita(UnitaImmobiliare unita, DataRow rowUnita, DataRow[] condomini, Dictionary<int, SoggettoCondominio> loadedSoggetti)
        { 
            try
            {
                var soggetti = new List<SoggettoCondominio>(condomini.Length);

                foreach (var row in condomini)
                {
                    // Persona
                    // ---------
                    string cognomePersona = row["NOME"].ToString().Trim();
                    if (!string.IsNullOrEmpty(cognomePersona))
                    {
                        Persona persona = null;
                        if (!string.IsNullOrEmpty(cognomePersona) && _personeCondominio.ContainsKey(cognomePersona))
                            persona = _personeCondominio[cognomePersona];
                        if (persona == null)
                        {
                            persona = new Persona(Sfera.Enums.TipoPersonaEnum.Fisica, string.Empty, cognomePersona, unita.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Azienda.ID, false)
                                          {
                                              IndirizzoResidenza = new Address {Indirizzo = row["VIA"].ToString(), Cap = row["CAP"].ToString()}
                                          };

                            if (row["CODFISC"] != DBNull.Value && !string.IsNullOrEmpty(row["CODFISC"].ToString()))
                                persona.CodiceFiscale = row["CODFISC"].ToString();
                            if (row["PIVA"] != DBNull.Value && !string.IsNullOrEmpty(row["PIVA"].ToString()))
                                persona.PartitaIva = row["PIVA"].ToString();
                            if (row["TITOLO"] != DBNull.Value && !string.IsNullOrEmpty(row["TITOLO"].ToString()))
                                persona.Titolo = row["TITOLO"].ToString();

                            persona.CodiceImportazione = row["CODITTA"] + "&" + row["CODSTAB"] + "&" + row["ESERCIZIO"] + "&" + row["CODPOS"];

                            if (row["LOC"] != DBNull.Value && !string.IsNullOrEmpty(row["LOC"].ToString()))
                            {
                                IList<Comune> comuni = _daoFactory.GetComuneDao().GetByDescrizione(row["LOC"].ToString().Trim());
                                if (comuni.Count == 1)
                                    persona.IndirizzoResidenza.Comune = comuni[0];
                                else
                                {
                                    DataRow row1 = row;
                                    var comuniDescr = comuni.Where(item => item.Descrizione.Trim().ToUpper() == row1["LOC"].ToString().Trim().ToUpper()).ToList();
                                    int count = comuniDescr.Count();
                                    if (count == 1)
                                        persona.IndirizzoResidenza.Comune = comuniDescr.SingleOrDefault();
                                }

                                if (persona.IndirizzoResidenza.Comune == null)
                                    persona.IndirizzoResidenza.Localita = row["LOC"].ToString();
                            }

                            if (row["TEL1"] != DBNull.Value && !string.IsNullOrEmpty(row["TEL1"].ToString().Trim()))
                                persona.Contatti.Add(new Telefono(row["TEL1"].ToString(), true, persona));
                            if (row["TEL2"] != DBNull.Value && !string.IsNullOrEmpty(row["TEL2"].ToString().Trim()))
                                persona.Contatti.Add(new Telefono(row["TEL2"].ToString(), false, persona));
                            if (row["E-MAIL"] != DBNull.Value && !string.IsNullOrEmpty(row["E-MAIL"].ToString().Trim()))
                                persona.Contatti.Add(new Email(row["E-MAIL"].ToString(), true, persona));

                            _daoFactory.GetPersonaDao().SaveOrUpdate(persona);
                            _personeCondominio.Add(cognomePersona, persona);
                        }

                        // Soggetto Condominio
                        SoggettoCondominio soggetto;
                        if (isConduttore(row))
                        {
                            soggetto = new Conduttore(unita, persona) {PercentualeRiferimento = 100, Principale = true};
                            if (unita.Descrizione == "$proprietario1")
                                unita.Descrizione += " - $conduttore1";

                        }
                        else
                            soggetto = new Proprietario(unita, persona);

                        soggetti.Add(soggetto);

                        int progressivoSoggetto = Convert.ToInt32(rowUnita["CODPOS"]);
                        if (progressivoSoggetto == Convert.ToInt32(rowUnita["RAGRUP1"]))
                        {
                            if (!loadedSoggetti.ContainsKey(progressivoSoggetto))
                                loadedSoggetti.Add(progressivoSoggetto, soggetto);
                        }
                        else if (loadedSoggetti.ContainsKey(progressivoSoggetto))
                            soggetto.SoggettoPrincipale = loadedSoggetti[progressivoSoggetto];

                        _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(soggetto);
                    }
                }
                
                if (unita.Proprietari.Count == 0)
                {
                    var codRagrup = Convert.ToInt32(rowUnita["RAGRUP1"]);
                    if (codRagrup < 8100 && loadedSoggetti.ContainsKey(codRagrup))
                    {
                        var personaProp = loadedSoggetti[codRagrup].Persona;
                        var prop = new Proprietario(unita, personaProp) {PercentualeRiferimento = 1, Principale = true};
                        _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(prop);
                    }
                }

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

                throw;
            }
        }
        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 IList<SoggettoCondominio> setSoggettiUnita(UnitaImmobiliare unita, ICollection<DataRow> condomini)
        { 
            try
            {
                var soggetti = new List<SoggettoCondominio>(condomini.Count);
                foreach (var row in condomini)
                {
                    // Persona
                    // ---------
                    var nomePersona = row["C_NOME"].ToString();
                    Persona persona = null;
                    if(!string.IsNullOrEmpty(nomePersona) && _personeCondominio.ContainsKey(nomePersona))
                        persona = _personeCondominio[nomePersona];
                    if (persona == null)
                    {
                        var tipoPersona = row["C_TIT_ONOR"].ToString() == "1" ? TipoPersonaEnum.Giuridica : TipoPersonaEnum.Fisica;

                        persona = new Persona(tipoPersona, string.Empty, nomePersona, unita.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Azienda.ID, false)
                        {
                            IndirizzoResidenza = new Address
                                                    {
                                                        Indirizzo = row["C_VIA"].ToString(),
                                                        Cap = row["C_CAP"].ToString()
                                                    },
                            CodiceImportazione = row["C_COD_STA"] + "&" + row["C_COD_UNITA"] + "&" + row["C_COD_COND"]
                        };

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

                        if (row["C_NOTE"] != DBNull.Value && !string.IsNullOrEmpty(row["C_NOTE"].ToString()))
                            persona.Note = row["C_NOTE"].ToString();

                        if (row["C_PRESSO"] != DBNull.Value && !string.IsNullOrEmpty(row["C_PRESSO"].ToString()))
                            persona.IndirizzoResidenza.Presso = row["C_PRESSO"].ToString();

                        if (row["C_TEL"] != DBNull.Value && !string.IsNullOrEmpty(row["C_TEL"].ToString()))
                            persona.Contatti.Add(new Telefono(row["C_TEL"].ToString(), true, persona));
                        if (row["C_TEL2"] != DBNull.Value && !string.IsNullOrEmpty(row["C_TEL"].ToString()))
                            persona.Contatti.Add(new Telefono(row["C_TEL2"].ToString(), false, persona));
                        if (row["C_EMAIL"] != DBNull.Value && !string.IsNullOrEmpty(row["C_EMAIL"].ToString()))
                            persona.Contatti.Add(new Email(row["C_EMAIL"].ToString(), true, persona));
                        if (row["C_EMAIL_CERT"] != DBNull.Value && !string.IsNullOrEmpty(row["C_EMAIL_CERT"].ToString()))
                            persona.Contatti.Add(new EmailCertificata(row["C_EMAIL_CERT"].ToString(), false, persona));
                        if (row["C_CELLULARE"] != DBNull.Value && !string.IsNullOrEmpty(row["C_CELLULARE"].ToString()))
                            persona.Contatti.Add(new Cellulare(row["C_CELLULARE"].ToString(), true, persona));

                        _daoFactory.GetPersonaDao().SaveOrUpdate(persona);
                        _personeCondominio.Add(nomePersona, persona);
                    }

                    // Soggetto Condominio
                    SoggettoCondominio soggetto;
                    if (isConduttore(row))
                    {
                        soggetto = new Conduttore(unita, persona) {PercentualeRiferimento = 100, Principale = true};
                        if (unita.Descrizione == "$proprietario1")
                            unita.Descrizione += " - $conduttore1";
                    }
                    else
                    {
                        soggetto = new Proprietario(unita, persona);
                        if (row["C_TIPO_COND"].ToString() == "CONS")
                            soggetto.Consigliere = true;

                        if (row["C_PERC_POSS"].ToString() == "100")
                        {
                            soggetto.PercentualeRiferimento = 100;
                            soggetto.Principale = true;
                        }
                    }
                    soggetti.Add(soggetto);
                    _daoFactory.GetSoggettoCondominioDao().SaveOrUpdate(soggetto);
                }

                return soggetti;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato nell'importazione di un condominio da YStabili - " + Library.Utility.GetMethodDescription(), ex);

                throw;
            }
        }
Beispiel #18
0
 /// <summary>
 /// Crea un Proprietario valido
 /// </summary>
 public SoggettoCondominio(UnitaImmobiliare unitaImmobiliare, Persona persona)
 {
     UnitaImmobiliare = unitaImmobiliare;
     Persona = persona;
     VersamentoMav = true;
 }
 private void setMillesimi(DataRow row, UnitaImmobiliare unita, Dictionary<int, Conto> loadedConti)
 {
     for (int i = 1; i <= 20; i++)
     {
         if (row["U_MIL" + i.ToString().PadLeft(2, '0')] != DBNull.Value && !string.IsNullOrEmpty(row["U_MIL" + i.ToString().PadLeft(2, '0')].ToString()))
         {
             decimal valoreMillesimo = Convert.ToDecimal((double)row["U_MIL" + i.ToString().PadLeft(2, '0')]);
             if (valoreMillesimo > 0 && loadedConti.ContainsKey(i))
             {
                 if (_daoFactory.GetMillesimoDao().GetByContoSoggetto(loadedConti[i].ID, unita.ID) == null)
                 {
                     new Millesimo(loadedConti[i], unita) {Valore = valoreMillesimo};
                 }
             }
         }
     }
 }
        public void SetUp()
        {
            _azienda = new Azienda("PROVA", "Azienda di prova") {ID=1};
            _aziendaDestinazione = new Azienda("DEST", "Azienda di destinazione") { ID = 2 };
            _condominio = new Condominio("Condominio ABC", 31, 12, 2015, _azienda)
            {
                ID = 1,
                Codice = "COND01",
                CodiceCUC = "CUC123456",
                CodiceSIA = "SIA12",
                AnnoInizio = 2015,
                CodiceFiscale = "012365477859",
                CodiceCalcoloTariffaAcqua = "TAR01"
            };
            _condominio.Palazzine.Clear();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            _documentService = MockRepository.GenerateStub<IDocumentService>();
            _exportCsvCondominiService = new ExportCsvCondominiService();
            _importCsvCondominiService = new ImportCsvCondominiService(_daoFactory, _documentService);
        }
Beispiel #21
0
        public virtual IUpdatableBusinessEntity Copy()
        {
            var unita = new UnitaImmobiliare(GruppoStabileRiferimento, TipoUnitaImmobiliare);

            return unita;
        }
Beispiel #22
0
 private decimal getMillesimoRiferimento(UnitaImmobiliare unitaImmobiliare, Conto contoMillesimiRiferimento)
 {
     decimal valoreMillesimo = 0;
     if (contoMillesimiRiferimento != null)
     {
         var millesimo = _daoFactory.GetMillesimoDao().GetByContoSoggetto(contoMillesimiRiferimento.ID, unitaImmobiliare.ID);
         if (millesimo != null)
             valoreMillesimo = millesimo.Valore.GetValueOrDefault();
     }
     return valoreMillesimo;
 }
 private decimal calcoloQuotaFissa(UnitaImmobiliare unita, decimal consumo, IEnumerable<FasciaConsumoDettaglio> fasceConsumo)
 {
     var numeroComponenti = 2;
     if (unita != null && unita.NumeroResidenti > 0)
         numeroComponenti = unita.NumeroResidenti;
     var fasciaCompetenza = (from item in fasceConsumo
                                 where consumo >= item.ValoreMinimo && consumo <= item.ValoreMassimo &&
                                 item.NumeroComponenti == numeroComponenti
                                 select item).FirstOrDefault();
     if (fasciaCompetenza != null)
         return fasciaCompetenza.Importo;
     return 0;
 }
        private static string getInternoUnitaImmobiliare(UnitaImmobiliare unita)
        {
            var result = string.Empty;
            if (!string.IsNullOrEmpty(unita.Piano))
                result += "P." + unita.Piano + "-";
            result += unita.InternoCompleto;

            return result;
        }
        private decimal getUnitaMillProp(UnitaImmobiliare unita, List<IGrouping<int, Millesimo>> millesimi)
        {
            var millesimiUnita = new List<Millesimo>();
            foreach (var item in millesimi.Where(item => item.Key == unita.ID))
                millesimiUnita.AddRange(item);

            var contoMill = millesimiUnita.FirstOrDefault(item => item.ContoRiferimento.Codice == "999");
            if (contoMill != null)
                return contoMill.Valore.GetValueOrDefault();
            return 0m;
        }
        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;
        }
Beispiel #27
0
        public decimal? GetRipartoImporto(UnitaImmobiliare unita, Conto conto, decimal importo, IList<MillesimoDTO> millesimi, Esercizio esercizio, IList<int> idUnitaImmobiliari)
        {
            try
            {
                decimal? importoRiparto = null;

                if (conto != null && unita != null)
                {
                    // Totale Millesimi
                    decimal totaleMillesimi;
                    int numeroMillesimi;
                    decimal? valore = null;
                    if (millesimi == null)
                    {
                        var millesimi2 = GetByConto(conto, null, null, esercizio);
                        if(idUnitaImmobiliari != null)
                            millesimi2 = millesimi2.Where(item => idUnitaImmobiliari.Contains(item.IdUnitaRiferimento)).ToList();

                        totaleMillesimi = millesimi2.Sum(mill => mill.Valore.GetValueOrDefault());
                        numeroMillesimi = millesimi2.Count;
                        var millesimo = _daoFactory.GetMillesimoDao().GetByContoSoggetto(conto.ID, unita.ID);
                        if(millesimo != null)
                            valore = millesimo.Valore;
                    }
                    else
                    {
                        totaleMillesimi = millesimi.Sum(mill => mill.Valore.GetValueOrDefault());
                        numeroMillesimi = millesimi.Count;
                        var millesimo = (millesimi.Where(mill => mill.IdContoRiferimento == conto.ID && mill.IdUnitaRiferimento == unita.ID)).SingleOrDefault();
                        if (millesimo != null)
                            valore = millesimo.Valore;
                    }

                    if (valore != null)
                    {
                        if (totaleMillesimi != 0)
                        {
                            var valoreMillesimo = (valore.GetValueOrDefault() * 1000) / totaleMillesimi;
                            importoRiparto = (importo * valoreMillesimo) / 1000m;
                        }
                        else
                            importoRiparto = importo / numeroMillesimi;
                    }
                }
                else
                {
                    _log.WarnFormat("Conto o Unità a NULL - {0} - unità:{1} - conto:{2} - importo:{3} - esercizio:{4}", Utility.GetMethodDescription(), unita?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", conto?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", importo, esercizio?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>");
                }

                return importoRiparto;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel calcolo del riparto dell'importo - {0} - unità:{1} - conto:{2} - importo:{3} - esercizio:{4}", ex, Utility.GetMethodDescription(), unita?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", conto?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>", importo, esercizio?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>");
                throw;
            }
        }
        private void setMillesimi(DataRow row, DataTable tbMillesimi, UnitaImmobiliare unita, Dictionary<int, Conto> loadedConti)
        {
            var codProprietario = Convert.ToInt32(row["CODPOS"]);
            var rowsMillesimi = tbMillesimi.Select("CODPOS = " + codProprietario + " OR CODPOS = " + (codProprietario + 100), "CODPOS");
            foreach (var kvp in loadedConti)
            {
                decimal valoreMillesimo = Convert.ToDecimal(rowsMillesimi[0]["M" + kvp.Value.Ordine.ToString().Trim()]);
                if(valoreMillesimo == 0 && rowsMillesimi.Length > 1)
                    valoreMillesimo = Convert.ToDecimal(rowsMillesimi[1]["M" + kvp.Value.Ordine.ToString().Trim()]);

                new Millesimo(kvp.Value, unita) {Valore = valoreMillesimo};
            }
        }
Beispiel #29
0
        public decimal? GetRipartoImportoValori(UnitaImmobiliare unita, decimal importo, IList<ImportiDTO> valori)
        {
            decimal? importoRiparto = null;

            var totaleMillesimi = valori.Sum(item => item.Importo);
            var valore = (from item in valori
                                 where item.Id == unita.ID
                                 select item).SingleOrDefault();

            if (valore != null && totaleMillesimi != 0)
            {
                var valoreRiparto = (valore.Importo * 1000) / totaleMillesimi;
                importoRiparto = (importo * valoreRiparto) / 1000m;
            }

            return importoRiparto;
        }
        private SoggettoCondominio findProprietarioPrincipale(int idUnita, IDictionary<int, IList<SoggettoCondominio>> soggetti, UnitaImmobiliare unita, Esercizio esercizio)
        {
            var proprietariPrincipali = (soggetti[idUnita].Where(
                item =>
                    item.Tipo == TipoSoggetto.Proprietario &&
                    item.Principale.GetValueOrDefault())).ToList();

            if (proprietariPrincipali.Count > 1)
            {
                _log.ErrorFormat("Trovato più di un proprietario principale - {0} - unità immobiliare:{1} - esercizio:{2} - azienda:{3}", Utility.GetMethodDescription(), idUnita, esercizio?.ID.ToString() ?? "<NULL>", unita.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Azienda.ID);
                throw new InvalidDataException(
                    $"Per l'unità immobiliare '{unita.Descrizione}' è stato trovato più di un proprietario principale");
            }

            return proprietariPrincipali.FirstOrDefault();
        }