Ejemplo n.º 1
0
        /// <summary>
        /// Crea un Proprietario valido
        /// </summary>
        public ModelloContabileFornitore(Fornitore fornitore, ModelloRegistrazioneContabile modello, LogTransazione logTransazione)
        {
            Fornitore = fornitore;
            Modello = modello;

            if (LogTransazione != null)
                LogTransazione.ModelliContabiliFornitore.Add(this);
        }
        /// <summary>
        /// Crea il dettaglio di ripartizione conti per un modello di ripartizione
        /// </summary>
        public ContiModelloRegistrazioneContabile(ModelloRegistrazioneContabile modello, Conto contoRiferimento, SottoConto sottoContoRiferimento, decimal? percentuale, LogTransazione logTransazione)
        {
            if (modello != null)
            {
                _modello = modello;
                _contoRiferimento = contoRiferimento;
                _sottoContoRiferimento = sottoContoRiferimento;
                _percentualeRipartizione = percentuale;
                _modello.Conti.Add(this);
            }

            if (LogTransazione != null)
                LogTransazione.ContiModelliContabili.Add(this);
        }
Ejemplo n.º 3
0
        private string getAddebito(string tipo, ModelloRegistrazioneContabile modello, int index)
        {
            try
            {
                var dettaglio = modello.Conti.Skip(index).Take(1).FirstOrDefault();
                var addebito = string.Empty;

                if (dettaglio != null)
                {
                    switch (tipo)
                    {
                        case "L":
                            foreach (var dettaglioModelloRegistrazioneContabile in dettaglio.Unita.Where(item => item.LottoRiferimento != null))
                            {
                                if (!string.IsNullOrEmpty(addebito))
                                    addebito += "&";
                                addebito += dettaglioModelloRegistrazioneContabile.LottoRiferimento.ID;
                            }
                            break;

                        case "S":
                            foreach (var dettaglioModelloRegistrazioneContabile in dettaglio.Unita.Where(item => item.PalazzinaRiferimento != null))
                            {
                                if (!string.IsNullOrEmpty(addebito))
                                    addebito += "&";
                                addebito += dettaglioModelloRegistrazioneContabile.PalazzinaRiferimento.ID;
                            }
                            break;

                        case "G":
                            foreach (var dettaglioModelloRegistrazioneContabile in dettaglio.Unita.Where(item => item.GruppoStabileRiferimento != null))
                            {
                                if (!string.IsNullOrEmpty(addebito))
                                    addebito += "&";
                                addebito += dettaglioModelloRegistrazioneContabile.GruppoStabileRiferimento.ID;
                            }
                            break;
                    }
                }

                if (string.IsNullOrEmpty(addebito))
                    addebito = null;

                return addebito;

            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nella ricerca di un addebito personalizzato - " + Utility.GetMethodDescription() + " - tipo: " + tipo + " - modello:" + modello.ID + " - index:" + index, ex);

                throw;
            }
        }
Ejemplo n.º 4
0
        public AuthorizationMessages SalvaModello(ModelloListaRegistrazioneContabileDTO dto, bool ricalcoloSpeseEsistenti, int idUtente, LogTransazione logTransazione)
        {
            try
            {
                var logTransazioneModello = logTransazione;
                var logTransazioneDettaglioModello = logTransazione;
                var logTransazioneFornitoreModello = logTransazione;
                var logTransazioneContoModello = logTransazione;

                var fatalMessage = string.Empty;
                var warnMessage = string.Empty;
                ModelloRegistrazioneContabile modello = null;
                if (dto.ID == 0)
                {
                    var condominio = _daoFactory.GetCondominioDao().Find(dto.IdCondominio, false);
                    if (condominio != null)
                    {
                        var descrizione = string.Empty;
                        if (!string.IsNullOrEmpty(dto.Descrizione))
                        {
                            descrizione = dto.Descrizione;
                            if (descrizione.Length > 100)
                                descrizione = descrizione.Substring(0, 100);
                        }

                        var voceFattura = string.Empty;
                        if (!string.IsNullOrEmpty(dto.DescrizioneVoceFattura))
                        {
                            voceFattura = dto.DescrizioneVoceFattura;
                            if (voceFattura.Length > 512)
                                voceFattura = voceFattura.Substring(0, 512);
                        }

                        modello = new ModelloRegistrazioneContabile(condominio, descrizione, logTransazioneModello) { DescrizioneVoceFattura = voceFattura };
                        if (logTransazioneModello != null)
                        {
                            _daoFactory.GetModelloRegistrazioneContabileDao().SaveOrUpdate(modello);
                            logTransazioneContoModello = null;
                            logTransazioneDettaglioModello = null;
                            logTransazioneFornitoreModello = null;
                        }
                    }
                }
                else
                {
                    modello = _daoFactory.GetModelloRegistrazioneContabileDao().Find(dto.ID, false);
                    if(modello != null)
                        modello.Descrizione = dto.Descrizione;
                }

                if (modello != null)
                {
                    modello.DescrizioneVoceFattura = dto.DescrizioneVoceFattura;

                    // --------------------------
                    // Fornitori
                    // --------------------------
                    modello.Fornitori.Clear();
                    foreach (var dtoFornitore in dto.Fornitori)
                    {
                        ModelloContabileFornitore modelloFornitore = null;
                        if (dtoFornitore.ID == 0)
                        {
                            if (dtoFornitore.IdFornitore > 0)
                            {
                                var fornitore = _daoFactory.GetFornitoreDao().Find(dtoFornitore.IdFornitore, false);
                                if (fornitore != null)
                                {
                                    modelloFornitore = new ModelloContabileFornitore(fornitore, modello, logTransazioneFornitoreModello);
                                    if(logTransazioneFornitoreModello != null)
                                        _daoFactory.GetModelloContabileFornitoreDao().SaveOrUpdate(modelloFornitore);
                                }
                                else
                                {
                                    _log.WarnFormat("Fornitore inesistente - {0} - fornitore:{1}", Library.Utility.GetMethodDescription(), dtoFornitore.IdFornitore);
                                }
                            }
                            else
                            {
                                _log.WarnFormat("Fornitore non definito - {0}", Library.Utility.GetMethodDescription());
                            }
                        }
                        else
                        {
                            modelloFornitore = _daoFactory.GetModelloContabileFornitoreDao().Find(dtoFornitore.ID, false);
                            if (modelloFornitore != null)
                                modelloFornitore.Fornitore = _daoFactory.GetFornitoreDao().GetById(dtoFornitore.IdFornitore, false);
                            else
                            {
                                _log.WarnFormat("Modello inesistente - {0} - IdModello:{1}", Library.Utility.GetMethodDescription(), dtoFornitore.IdModello);
                            }
                        }

                        if (modelloFornitore != null)
                            modello.Fornitori.Add(modelloFornitore);
                    }

                    // --------------------------
                    // Conti
                    // --------------------------
                    modello.Conti.Clear();
                    foreach (var dtoConto in dto.Conti)
                    {
                        var conto = _daoFactory.GetContoDao().Find(dtoConto.IdConto, false);
                        var sottoConto = _daoFactory.GetSottoContoDao().Find(dtoConto.IdSottoConto, false);

                        var modelloConto = _daoFactory.GetContiModelloRegistrazioneContabileDao().Find(dtoConto.ID, false);
                        if (modelloConto == null)
                        {
                            modelloConto = new ContiModelloRegistrazioneContabile(modello, conto, sottoConto, dtoConto.PercentualeRipartizione, logTransazioneContoModello);
                            if (logTransazioneContoModello != null)
                            {
                                _daoFactory.GetContiModelloRegistrazioneContabileDao().SaveOrUpdate(modelloConto);
                                logTransazioneDettaglioModello = null;
                            }
                        }
                        else
                        {
                            modelloConto.PercentualeRipartizione = dtoConto.PercentualeRipartizione;

                            if (conto != null)
                                modelloConto.ContoRiferimento = conto;

                            if (sottoConto != null)
                                modelloConto.SottoContoRiferimento = sottoConto;
                        }

                        // --------------------------
                        // Riparto
                        // --------------------------
                        modelloConto.Unita.Clear();
                        foreach (var dtoRiparto in dtoConto.Riparto)
                        {
                            var modelloRiparto = _daoFactory.GetDettaglioModelloRegistrazioneContabileDao().Find(dtoRiparto.ID, false);
                            if (modelloRiparto == null)
                            {
                                modelloRiparto = new DettaglioModelloRegistrazioneContabile(modelloConto, logTransazioneDettaglioModello);
                                if(logTransazioneDettaglioModello != null)
                                    _daoFactory.GetDettaglioModelloRegistrazioneContabileDao().SaveOrUpdate(modelloRiparto);
                            }

                            // Lotto
                            modelloRiparto.LottoRiferimento = dtoRiparto.IdLotto > 0 ? _daoFactory.GetLottoDao().GetById(dtoRiparto.IdLotto.Value, false) : null;

                            // Stabile
                            modelloRiparto.PalazzinaRiferimento = dtoRiparto.IdStabile > 0 ? _daoFactory.GetPalazzinaDao().GetById(dtoRiparto.IdStabile.Value, false) : null;

                            // Gruppo Stabile
                            modelloRiparto.GruppoStabileRiferimento = dtoRiparto.IdGruppoStabile > 0 ? _daoFactory.GetGruppoStabileDao().GetById(dtoRiparto.IdGruppoStabile.Value, false) : null;

                            // Unità Immobiliare
                            modelloRiparto.UnitaRiferimento = dtoRiparto.IdUnita > 0 ? _daoFactory.GetUnitaImmobiliareDao().GetById(dtoRiparto.IdUnita.Value, false) : null;

                            modelloConto.Unita.Add(modelloRiparto);
                        }

                        modello.Conti.Add(modelloConto);
                    }

                    if (ricalcoloSpeseEsistenti)
                    {
                        var authMessage = ReloadRipartizioneByModelloEsercizio(modello.ID, null, null, idUtente, logTransazione);
                        if (!string.IsNullOrEmpty(authMessage.FatalMessage))
                            fatalMessage += authMessage.FatalMessage + Environment.NewLine;
                        if (!string.IsNullOrEmpty(authMessage.WarnMessage))
                            warnMessage += authMessage.WarnMessage + Environment.NewLine;

                    }

                    return new AuthorizationMessages(fatalMessage, warnMessage) {Id = modello.ID};
                }

                return new AuthorizationMessages(fatalMessage, warnMessage);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il salvataggio del modello contabile - {0} - modello:{1} - condominio:{2}", ex, Library.Utility.GetMethodDescription(), dto.ID, dto.IdCondominio);
                throw;
            }
        }
Ejemplo n.º 5
0
        private Conto loadContoSottoconto(DataRow row, Condominio condominio, Conto conto, DataTable sottoconti, Dictionary<int, Conto> loadedConti)
        {
            if (conto == null) throw new ArgumentNullException("conto");
            if (row["DESCR1"] != DBNull.Value)
            {
                var nomeConto = ((string)row["DESCR1"]).Trim();
                if (nomeConto.Length > 50)
                    nomeConto = nomeConto.Substring(0, 50);
                conto = new Conto(condominio, Sfera.Enums.TipoContoEconomicoEnum.Economico, Sfera.Enums.TipoPeriodoCompetenzaContabile.Esercizio, nomeConto, true, true, false)
                            {PresenteBilancio = true, Ordine = Convert.ToInt32(row["COLONNA"])};

                conto.Codice = conto.Ordine.ToString().PadLeft(3, '0');
                conto.CodiceImportazione = row["CODITTA"] + "&" + row["CODSTAB"] + "&" + row["COLONNA"];

                var contoKey = Convert.ToInt32(row["CODSTAB"]) * 1000 + conto.Ordine;
                if (!loadedConti.ContainsKey(contoKey))
                    loadedConti.Add(contoKey, conto);

                // Sottoconti
                var sottocontiRows = sottoconti.Select("CODPREDEF = " + row["COLONNA"], "PROGR");
                ModelloRegistrazioneContabile modelloContabile = null;
                foreach (var rowSottoconto in sottocontiRows)
                {
                    var descrizioneSottoconto = string.Empty;
                    if (rowSottoconto["DESCR"] != DBNull.Value)
                        descrizioneSottoconto = rowSottoconto["DESCR"].ToString();
                    if (string.IsNullOrEmpty(descrizioneSottoconto) && rowSottoconto["TITOLO"] != DBNull.Value)
                        descrizioneSottoconto = rowSottoconto["TITOLO"].ToString();

                    if (!string.IsNullOrEmpty(descrizioneSottoconto))
                    {
                        var sottoconto = new SottoConto(conto, descrizioneSottoconto)
                        {
                            Codice = conto.Codice + "." + rowSottoconto["PROGR"].ToString().PadLeft(3, '0'),
                            CodiceImportazione =
                                rowSottoconto["CODITTA"] + "&" +
                                rowSottoconto["CODSTAB"] + "&" +
                                rowSottoconto["CODPREDEF"] + "&" +
                                rowSottoconto["PROGR"]
                        };

                        // Modelli
                        if (Convert.ToDecimal(rowSottoconto["PERCENT"]) < 100)
                        {
                            // Se ho già raggiunto il 100% il modello è completo
                            if (modelloContabile != null && modelloContabile.Conti.Sum(item => item.PercentualeRipartizione.GetValueOrDefault()) >= 1)
                                modelloContabile = null;

                            if (modelloContabile == null)
                                modelloContabile = new ModelloRegistrazioneContabile(condominio, sottoconto.GetDescrizione(null, condominio, null), null);
                            else
                                modelloContabile.Descrizione += " - " + sottoconto.GetDescrizione(null, condominio, null);

                            if (modelloContabile.Descrizione.Length > 100)
                                modelloContabile.Descrizione = modelloContabile.Descrizione.Substring(0, 100);

                            new ContiModelloRegistrazioneContabile(modelloContabile, conto, sottoconto, Convert.ToDecimal(rowSottoconto["PERCENT"]) / 100, null);
                        }
                        //else
                        //    modelloContabile = null;
                    }
                }

                return conto;
            }
            return null;
        }
 public virtual IUpdatableBusinessEntity Copy()
 {
     var modello = new ModelloRegistrazioneContabile(CondominioRiferimento, Descrizione, null);
     return modello;
 }
        public IList<UnitaImmobiliare> GetUnitaModello(ModelloRegistrazioneContabile modello)
        {
            Iesi.Collections.Generic.ISet<UnitaImmobiliare> listaUnita = new HashedSet<UnitaImmobiliare>();
            foreach (var dettaglioModello in modello.Conti)
                listaUnita.AddAll(getUnitaByConto(dettaglioModello));

            return listaUnita.ToList();
        }
Ejemplo n.º 8
0
        private string loadCondominio(string codiceCondominio, Azienda azienda, OleDbConnection conn)
        {
            string message = string.Empty;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            return message;
        }
Ejemplo n.º 9
0
        private ModelloRegistrazioneContabileDTO setModelloDto(ModelloRegistrazioneContabile modello)
        {
            var dto = new ModelloRegistrazioneContabileDTO
            {
                Descrizione = modello.Descrizione,
                DescrizioneVoceFattura = modello.DescrizioneVoceFattura,
                ID = modello.ID
            };

            foreach (var conto in modello.Conti)
            {
                var contoDto = new ContiModelloRegistrazioneContabileDTO
                {
                    ContoRiferimento = setContoDto(conto.ContoRiferimento, null, false, null, false),
                    IdModello = dto.ID,
                    DescrizioneModello = dto.Descrizione,
                    PercentualeRipartizione = conto.PercentualeRipartizione,
                    ID = conto.ID
                };

                if (conto.SottoContoRiferimento != null)
                    contoDto.SottoContoRiferimento = setSottoContoDto(conto.SottoContoRiferimento, false);
            }

            return dto;
        }
Ejemplo n.º 10
0
        public ModelloRegistrazioneContabile CreateModelloRipartizione(int idCondominio, ISet<MovimentoContabile> movimenti, decimal importo, string nomeModello, string descrizioneVoceSpesa)
        {
            try
            {
                if (movimenti.Count > 0)
                {
                    if (nomeModello.Length > 100)
                        nomeModello = nomeModello.Substring(0, 100);
                    if (!string.IsNullOrEmpty(descrizioneVoceSpesa) && descrizioneVoceSpesa.Length > 50)
                        descrizioneVoceSpesa = descrizioneVoceSpesa.Substring(0, 50);

                    var modello = new ModelloRegistrazioneContabile(_daoFactory.GetCondominioDao().GetById(idCondominio, false), nomeModello, null) { DescrizioneVoceFattura = descrizioneVoceSpesa };
                    decimal divisore = 1;
                    foreach (var movimento in movimenti.OrderBy(item => Math.Abs(item.GetImportoConSegno().GetValueOrDefault())))
                    {
                        decimal percentuale;
                        if (importo != 0)
                            percentuale = movimento.GetImportoConSegno().GetValueOrDefault() / importo;
                        else
                        {
                            if (divisore != 1)
                                percentuale = movimento.GetImportoConSegno().GetValueOrDefault() / divisore;
                            else
                            {
                                percentuale = movimento.GetImportoConSegno().GetValueOrDefault();
                                do
                                {
                                    percentuale = percentuale / 10;
                                    divisore = divisore * 10;
                                } while (Math.Abs(percentuale) >= 10);
                            }
                        }

                        var contoModello = new ContiModelloRegistrazioneContabile(modello, movimento.ContoRiferimento, movimento.SottoContoRiferimento, percentuale, null);

                        // -----------------------------------------------------
                        // Selezione per lotti
                        // -----------------------------------------------------
                        if (_lottiSelezionati.ContainsKey(GetKey(movimento)))
                        {
                            var lottiTable = _lottiSelezionati[GetKey(movimento)];
                            foreach (DataRow row in lottiTable.Rows)
                            {
                                if (row["Selezionato"] != DBNull.Value && (bool)row["Selezionato"])
                                {
                                    new DettaglioModelloRegistrazioneContabile(contoModello, null)
                                    {
                                        LottoRiferimento = _daoFactory.GetLottoDao().GetById((int)row["Id"], false)
                                    };
                                }
                            }
                        }

                        // -----------------------------------------------------
                        // Selezione per stabili
                        // -----------------------------------------------------
                        var selezioneStabili = false;
                        if (_stabiliSelezionati.ContainsKey(GetKey(movimento)))
                        {
                            var stabiliTable = _stabiliSelezionati[GetKey(movimento)];
                            foreach (DataRow row in stabiliTable.Rows)
                            {
                                if (row["Selezionato"] != DBNull.Value && (bool)row["Selezionato"])
                                {
                                    new DettaglioModelloRegistrazioneContabile(contoModello, null)
                                    {
                                        PalazzinaRiferimento = _daoFactory.GetPalazzinaDao().GetById((int)row["Id"], false)
                                    };
                                    selezioneStabili = true;
                                }
                            }
                        }

                        // -----------------------------------------------------
                        // Selezione per gruppi
                        // -----------------------------------------------------
                        if (_gruppiSelezionati.ContainsKey(GetKey(movimento)) && !selezioneStabili)
                        {
                            var gruppiTable = _gruppiSelezionati[GetKey(movimento)];
                            foreach (DataRow row in gruppiTable.Rows)
                            {
                                if (row["Selezionato"] != DBNull.Value && (bool)row["Selezionato"])
                                {
                                    new DettaglioModelloRegistrazioneContabile(contoModello, null)
                                    {
                                        GruppoStabileRiferimento = _daoFactory.GetGruppoStabileDao().GetById((int)row["Id"], false)
                                    };
                                }
                            }
                        }
                    }

                    return modello;
                }

                _log.ErrorFormat("Tentativo di salvare un modello senza movimenti associati - {0} - idCondominio:{1} - nome:{2}", Utility.GetMethodDescription(), idCondominio.ToString(), nomeModello);

                return null;

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nella creazione del modello di riparto - {0} - condominio:{1} - importo:{2} - nomeModello:{3} - descrizioneVoceSpesa:{4}", ex, Utility.GetMethodDescription(), idCondominio, importo, nomeModello, descrizioneVoceSpesa);
                throw;
            }
        }