예제 #1
0
        /// <summary>
        /// Crea una relazione tra Causale ACBI e Sottoconto valida
        /// </summary>
        public CausaleACBISottoconto(CausaleACBI causale, SottoConto sottoconto)
        {
            CausaleACBI = causale;
            SottoConto = sottoconto;

            if (CausaleACBI != null)
                CausaleACBI.SottoConti.Add(this);
        }
 /// <summary>
 /// Crea una Testata di movimento contabile valida
 /// </summary>
 public TestataRipartoContatoreCondominiale(Esercizio esercizio, Contatore contatoreCondominiale, Conto contoAddebito, SottoConto sottocontoAddebito, string descrizioneMovimentoAddebito)
 {
     Esercizio = esercizio;
     ContatoreCondominiale = contatoreCondominiale;
     ContoAddebito = contoAddebito;
     SottocontoAddebito = sottocontoAddebito;
     DescrizioneMovimentoAddebito = descrizioneMovimentoAddebito;
 }
예제 #3
0
 /// <summary>
 /// Crea un movimento contabile valido.
 /// E' relativo al conto economico connesso alla registrazione di una spesa
 /// </summary>
 public RipartizioneSpesa(Spesa spesa, Conto conto, SottoConto sottoConto, decimal? importo, string segno, string descrizione)
 {
     Spesa = spesa;
     ContoRiferimento = conto;
     SottoContoRiferimento = sottoConto;
     Importo = importo;
     Segno = segno;
     Descrizione = descrizione;
 }
        /// <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);
        }
예제 #5
0
        /// <summary>
        /// Crea un movimento contabile valido.
        /// </summary>
        public MovimentoContabile(TestataMovimentoContabile testata, CausaleContabile causale, int? numeroRiga, SottoConto sottoConto, decimal? importo, string segno)
        {
            Causale = causale;
            NumeroRiga = numeroRiga;
            SottoContoRiferimento = sottoConto;
            ContoRiferimento = sottoConto.ContoRiferimento;
            Testata = testata;
            Importo = importo;
            Segno = segno;
            Stato = StatoMovimentoContabileEnum.Inserito;
            IsVisibileGestione = true;

            if (Testata != null)
            {
                Testata.Movimenti.Add(this);
                setNumeroRegistrazione();
            }
        }
예제 #6
0
        public TestataMovimentoContabile SetMovimentiContatoreCondominiale(Esercizio esercizio, IList<ImportoMovimento> importiAccredito, IList<ImportiDTO> addebitiContatoriDivisionali, DateTime dataRegistrazione, Conto contoAddebito, SottoConto sottoContoAddebito, string descrizione)
        {
            // controllo data registrazione
            var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
            if (message.Count > 0)
            {
                var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), dataRegistrazione, esercizio.ID);
                throw ex;
            }

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

            var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("SC");

            // -------------------------------------------------
            // Calcolo Importo
            // ------------------------------------------------
            var importo = importiAccredito.Sum(item => item.Importo);

            // -------------------------------------------------
            // Segno Movimento
            // ------------------------------------------------
            var segnoContoEconomico = "D";
            if (importo < 0)
            {
                segnoContoEconomico = "A";
                importo = importo * -1;
            }

            // ------------------------------------------------
            // Conto economico da addebitare
            // ------------------------------------------------
            var movimentoContoEconomicoAddebito = new MovimentoContabile(testata, causale, 1, contoAddebito, importo, segnoContoEconomico)
            {
                SottoContoRiferimento = sottoContoAddebito,
                Descrizione = descrizione,
                IsRipartoPersonalizzato = true
            };
            _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAddebito);

            // ------------------------------------------------
            // Conto economico da accreditare
            // ------------------------------------------------
            foreach (var item in importiAccredito)
            {
                var movimentoContoEconomicoAccredito = new MovimentoContabile(testata, causale, 2, _daoFactory.GetContoDao().GetById(item.IdConto, false), item.Importo, invertiSegno(segnoContoEconomico)) { Descrizione = descrizione, IsRipartoPersonalizzato = true };
                if(item.IdSottoConto > 0)
                    movimentoContoEconomicoAccredito.SottoContoRiferimento = _daoFactory.GetSottoContoDao().GetById(item.IdSottoConto.GetValueOrDefault(), false);
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAccredito);

                // Ripartizione tra le unità immobiliari
                var totaleMillesimi = addebitiContatoriDivisionali.Sum(mill => mill.Importo);
                foreach (var importiDTO in addebitiContatoriDivisionali)
                {
                    var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(importiDTO.Id, false);
                    var importoUnita = (movimentoContoEconomicoAccredito.GetImportoConSegno() * importiDTO.Importo) / totaleMillesimi;
                    var spesaUnita = new SpeseUnita(importoUnita, unita, null, movimentoContoEconomicoAccredito);
                    _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(spesaUnita);

                }
            }

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

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

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

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

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

                return movimentoBancario;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella contabilizzazione di un movimento bancario - {0} - importo:{1} - descrizione:{2} - data registrazione:{3:d}", ex, Utility.GetMethodDescription(), importo, descrizione, dataRegistrazione);
                throw;
            }
        }
예제 #8
0
 public RendicontoAnnualeConto(RendicontoAnnuale rendiconto, SottoConto sottoConto, decimal? importo)
 {
     Rendiconto = rendiconto;
     SottoContoRiferimento = sottoConto;
     Importo = importo;
 }
예제 #9
0
        public virtual IUpdatableBusinessEntity Copy()
        {
            var sottoConto = new SottoConto(ContoRiferimento, Descrizione);

            return sottoConto;
        }
예제 #10
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;
        }
예제 #11
0
        public TestataMovimentoContabile TrasferimentoSaldiStraordinarioInOrdinario(int idEsercizioStraordinario, int idEsercizioOrdinario, string nomeContoOrdinario, int ordineConto, IBilancioService bilancioService, DateTime? dataChiusura, bool chiusuraTemporanea)
        {
            try
            {
                var esercizioStraordinario = _daoFactory.GetEsercizioDao().GetById(idEsercizioStraordinario, false);
                var esercizioOrdinario = _daoFactory.GetEsercizioDao().GetById(idEsercizioOrdinario, false);
                if (!chiusuraTemporanea)
                {
                    var messagesDataRegistrazione = _movimentiContabiliService.IsAllowDataRegistrazione(new List<int> {esercizioStraordinario.CondominioRiferimento.ID}, esercizioOrdinario, dataChiusura.GetValueOrDefault());
                    if (messagesDataRegistrazione.Count > 0)
                    {
                        var messageDataRegistrazione = messagesDataRegistrazione.Aggregate(string.Empty, (current, mess) => current + (mess + Environment.NewLine));
                        var ex = new InvalidDataException($"La data di registrazione {dataChiusura.GetValueOrDefault()} non è valida" + Environment.NewLine + messageDataRegistrazione);
                        _log.Fatal(ex.Message, ex);
                        throw ex;
                    }

                    var contoOrdinario = new Conto(esercizioOrdinario.CondominioRiferimento, TipoContoEconomicoEnum.Economico, TipoPeriodoCompetenzaContabile.Esercizio, nomeContoOrdinario, false, false, false)
                    {
                        PresenteBilancio = true,
                        CustomField = false,
                        EsercizioRiferimento = esercizioOrdinario,
                        Ordine = ordineConto,
                        Codice = ordineConto.ToString(CultureInfo.InvariantCulture).PadLeft(3, '0'),
                        PercentualeProprieta = 1,
                        IsSpesePersonali = true,
                        TrasferimentoSaldiStraordinario = true
                    };

                    var contoArrotondamenti = _pianoContiService.GetContoArrotondamenti(esercizioOrdinario);
                    _daoFactory.GetContoDao().SaveOrUpdate(contoArrotondamenti);

                    var sottocontoOrdinario = new SottoConto(contoOrdinario, nomeContoOrdinario);

                    esercizioStraordinario.ContoEconomicoOrdinarioChiusuraStraordinario = contoOrdinario;

                    var items = bilancioService.GetDataSourceRipartizioneBilancioConsuntivo(esercizioStraordinario.ID, null, null, null, null, null, null, false, false, TipoAccorpamentoRateEnum.Nessuno, false, false, false, false, null).ToList();
                    var ripartoEconomici = items.Where(item => item.OrdineConto < 9900).ToList();

                    var testata = new TestataMovimentoContabile(esercizioOrdinario, dataChiusura, TipoTestataMovimentoContabileEnum.Automatica, null);
                    _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                    esercizioStraordinario.TestataContabileChiusura = testata;
                    var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("ST");

                    // ===========================================================================
                    // Movimenti Chiusura/Apertura conti economici
                    // ---------------------------------------------------------------------------
                    // Chiusura di tutti i conti economici della gestione starordianaria (in avere), 
                    // aprendo un conto economico "<CONTO ECONOMICO SALDI STRAORDINARIA>" nella gestione ordinaria (in dare), per il totale della spesa. 
                    // La spesa deve essere ripartita sulla base dei conti utilizzati nella gestione straordinaria.  
                    // I conti devono essere addebitati per soggetto.
                    // ===========================================================================
                    var numeroRiga = 0;
                    foreach (var itemRiparto in ripartoEconomici)
                    {
                        // Gli arrotondamenti hanno IdPartecipante == 0, queste righe devono essere usate per registrare i movimenti di arrotondamento.
                        if (itemRiparto.IdPartecipante > 0)
                        {
                            var importo = itemRiparto.Importo.GetValueOrDefault();
                            if (importo != 0)
                            {
                                try
                                {
                                    var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(itemRiparto.IdPartecipante, false);

                                    // ---------------------------------------------
                                    // Apertura conto economico nell'ordinario
                                    // ---------------------------------------------
                                    numeroRiga++;
                                    var movimentoAperturaOrdinario = new MovimentoContabile(testata, causale, 1, contoOrdinario, numeroRiga, "D")
                                    {
                                        Descrizione = $"Saldo Gestione Straordinaria '{esercizioStraordinario.Descrizione}' - {soggetto.DisplayName}",
                                        CondominoRiferimento = soggetto,
                                        SottoContoRiferimento = sottocontoOrdinario
                                    };

                                    // Calcolo del segno
                                    var segnoEconomico = "D";
                                    if (importo < 0)
                                    {
                                        segnoEconomico = "A";
                                        importo = importo * -1;
                                    }
                                    movimentoAperturaOrdinario.Segno = segnoEconomico;
                                    movimentoAperturaOrdinario.Importo = importo;

                                    // ---------------------------------------------
                                    // Chiusura conto economico nello straordinario
                                    // ---------------------------------------------
                                    numeroRiga++;
                                    var movimentoChiusuraStraordinario = new MovimentoContabile(testata, causale, numeroRiga, _daoFactory.GetContoDao().GetById(itemRiparto.IdConto, false), importo, invertiSegno(segnoEconomico)) { Descrizione = string.Format("Chiusura conto {0}: '{1}' - {2}", itemRiparto.DescrizioneConto, esercizioStraordinario.Descrizione, soggetto.DisplayName), CondominoRiferimento = movimentoAperturaOrdinario.CondominoRiferimento };

                                    // ---------------------------------------------
                                    // Dettaglio spesa unità
                                    // ---------------------------------------------
                                    var spesaUnita = new SpeseUnita(itemRiparto.Importo, null, soggetto, movimentoAperturaOrdinario);
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore inaspettato durante il trasferimento saldi dell'esercizio straordinario all'ordinario - MOVIMENTO CONTO ECONOMICO - {0} - importo:{1} - idEsercizioStraordinario:{2} - idEsercizioOrdinario:{3} - nomeContoOrdinario:{4} - ordineConto:{5}", ex, Library.Utility.GetMethodDescription(), importo, idEsercizioStraordinario, idEsercizioOrdinario, nomeContoOrdinario, ordineConto);
                                    throw;
                                }
                            }
                        }
                        else
                        {
                            // ---------------------------------------------
                            // Apertura conto economico nell'ordinario
                            // ---------------------------------------------
                            var importo = itemRiparto.Importo;
                            numeroRiga++;
                            var movimentoAperturaOrdinario = new MovimentoContabile(testata, causale, 1, contoArrotondamenti, numeroRiga, "D") { Descrizione = $"Saldo Gestione Straordinaria '{esercizioStraordinario.Descrizione}'" };

                            // Calcolo del segno
                            var segnoEconomico = "D";
                            if (importo < 0)
                            {
                                segnoEconomico = "A";
                                importo = importo * -1;
                            }
                            movimentoAperturaOrdinario.Segno = segnoEconomico;
                            movimentoAperturaOrdinario.Importo = importo;

                            // ---------------------------------------------
                            // Chiusura conto economico nello straordinario
                            // ---------------------------------------------
                            numeroRiga++;
                            var movimentoChiusuraStraordinario = new MovimentoContabile(testata, causale, numeroRiga, _daoFactory.GetContoDao().GetById(itemRiparto.IdConto, false), importo, invertiSegno(segnoEconomico)) { Descrizione = $"Arrondamento chiusura conto {itemRiparto.DescrizioneConto}: '{esercizioStraordinario.Descrizione}'"
                            };
                        }
                    }

                    // ===========================================================================
                    // Movimenti Chiusura/Apertura crediti v/condomini gestione straordinaria
                    // ---------------------------------------------------------------------------
                    // Chiusura del conto Crediti v/condomini della "<GESTIONE STRAORDINARIA>" 
                    // per i versamenti effettuati nella gestione straordinaria, sul conto "<CONTO ECONOMICO SALDI STRAORDINARIA>", 
                    // accreditando i singoli soggetti.
                    // ===========================================================================
                    var ripartoVersamenti = items.Where(item => item.OrdineConto == 9992).ToList();

                    // Aggiungo soggetti con saldo inziale ma senza versamenti
                    var saldiIniziali = items.Where(item => item.OrdineConto == 9991).ToList();
                    var ripartoSaldiIniziali = new List<ReportRipartizioneBilancioDTO>(saldiIniziali.Count);
                    foreach (var reportRipartizioneBilancioDTO in saldiIniziali)
                    {
                        if (ripartoVersamenti.All(item => item.IdPartecipante != reportRipartizioneBilancioDTO.IdPartecipante))
                        {
                            reportRipartizioneBilancioDTO.Importo = reportRipartizioneBilancioDTO.Importo.GetValueOrDefault()*-1;
                            ripartoVersamenti.Add(reportRipartizioneBilancioDTO);
                        }
                        else
                            ripartoSaldiIniziali.Add(reportRipartizioneBilancioDTO);
                    }

                    var contoVersamentiEsercizioStraordinario = _daoFactory.GetContoDao().GetByCodice(esercizioStraordinario.ID, esercizioStraordinario.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoVersamentiCondomini());

                    foreach (var itemRiparto in ripartoVersamenti)
                    {
                        var importo = itemRiparto.Importo.GetValueOrDefault();

                        // aggiungo eventuale saldo iniziale
                        var itemSaldoIniziale = ripartoSaldiIniziali.FirstOrDefault(item => item.IdPartecipante == itemRiparto.IdPartecipante);
                        var importoSaldoIniziale = 0m;
                        if (itemSaldoIniziale != null)
                            importoSaldoIniziale = itemSaldoIniziale.Importo.GetValueOrDefault();
                        importo -= importoSaldoIniziale;

                        try
                        {
                            // Gli arrotondamenti hanno IdPartecipante == 0, escludo queste righe.
                            if (itemRiparto.IdPartecipante > 0)
                            {
                                var soggetto = _daoFactory.GetSoggettoCondominioDao().GetById(itemRiparto.IdPartecipante, false);

                                // ---------------------------------------------
                                // Apetura conto economico nell'ordinario
                                // ---------------------------------------------
                                numeroRiga++;
                                var movimentoAperturaOrdinario = new MovimentoContabile(testata, causale, numeroRiga, contoOrdinario, 0, "D")
                                {
                                    Descrizione = $"Saldo Gestione Straordinaria '{esercizioStraordinario.Descrizione}' - {soggetto.DisplayName}",
                                    CondominoRiferimento = soggetto,
                                    SottoContoRiferimento = sottocontoOrdinario
                                };

                                // Calcolo del segno
                                var segnoEconomico = "A";
                                if (importo < 0)
                                {
                                    segnoEconomico = "D";
                                    importo = importo * -1;
                                }
                                movimentoAperturaOrdinario.Segno = segnoEconomico;
                                movimentoAperturaOrdinario.Importo = importo;

                                // ---------------------------------------------
                                // Chiusura conto crediti v/condomini nello straordinario
                                // ---------------------------------------------
                                numeroRiga++;
                                var movimentoChiusuraStraordinario = new MovimentoContabile(testata, causale, numeroRiga, contoVersamentiEsercizioStraordinario, importo, invertiSegno(segnoEconomico)) { Descrizione = string.Format("Chiusura conto {0}: '{1}' - {2}", contoVersamentiEsercizioStraordinario.Descrizione, esercizioStraordinario.Descrizione, soggetto.DisplayName), CondominoRiferimento = movimentoAperturaOrdinario.CondominoRiferimento };

                                // ---------------------------------------------
                                // Dettaglio spesa unità
                                // ---------------------------------------------
                                var spesaUnita = new SpeseUnita((itemRiparto.Importo.GetValueOrDefault() - importoSaldoIniziale) * -1, null, soggetto, movimentoAperturaOrdinario);
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.FatalFormat("Errore inaspettato durante il trasferimento saldi dell'esercizio straordinario all'ordinario - MOVIMENTO VERSAMENTI - {0} - importo:{1} - idEsercizioStraordinario:{2} - idEsercizioOrdinario:{3} - nomeContoOrdinario:{4} - ordineConto:{5}", ex, Library.Utility.GetMethodDescription(), importo, idEsercizioStraordinario, idEsercizioOrdinario, nomeContoOrdinario, ordineConto);
                            throw;
                        }
                    }

                    return testata;
                }
                else
                {
                    // ====================================================================
                    //  Chiusura temporanea dei conti
                    // ====================================================================
                    var movimentiEconomici = _daoFactory.GetMovimentoContabileDao().GetByEsercizioEconomici(esercizioStraordinario, esercizioOrdinario.DataApertura, esercizioOrdinario.DataChiusura);
                    var contoPatrimoniale = _pianoContiService.GetContoChiusuraStraordinario(esercizioStraordinario);
                    var testataChiusura = new TestataMovimentoContabile(esercizioStraordinario, dataChiusura, TipoTestataMovimentoContabileEnum.Automatica, null)
                    {
                        EsercizioOrdinarioChiusura = esercizioOrdinario,
                        Descrizione = $"Chiusura esercizio straordinario: '{esercizioStraordinario.DisplayName}' per chiusura dell'ordinario: '{esercizioOrdinario.DisplayName}'"
                    };

                    var causaleChiusura = _daoFactory.GetCausaleContabileDao().GetByCodice("C2");
                    var index = 0;

                    // =================================================
                    // Calcolo tutti i saldi dei conti
                    // =================================================
                    var saldiContoSottoconto = new Dictionary<string, MovimentoContabile>();
                    foreach (var movimentoContabile in movimentiEconomici)
                    {
                        var key = _movimentiContabiliService.GetKeyContoSottoconto(movimentoContabile);
                        if (saldiContoSottoconto.ContainsKey(key))
                        {
                            var movimentoChiusura = saldiContoSottoconto[key];
                            movimentoChiusura.Importo += movimentoContabile.GetImportoConSegno();
                        }
                        else
                        {
                            index++;
                            var movimentoChiusura = new MovimentoContabile(testataChiusura, causaleChiusura, index, movimentoContabile.ContoRiferimento, movimentoContabile.GetImportoConSegno(), string.Empty)
                            {
                                Descrizione = $"Chiusura esercizio straordinario: '{esercizioStraordinario.DisplayName}' per chiusura dell'ordinario: '{esercizioOrdinario.DisplayName}'",
                                CondominoRiferimento = movimentoContabile.CondominoRiferimento,
                                FornitoreRiferimento = movimentoContabile.FornitoreRiferimento,
                                ContoCorrenteBancario = movimentoContabile.ContoCorrenteBancario
                            };

                            saldiContoSottoconto.Add(key, movimentoChiusura);
                        }
                    }

                    // =================================================
                    // Elaboro i segni e creo le contropartite
                    // =================================================
                    foreach (var kvp in saldiContoSottoconto)
                    {
                        var movimentoContabile = kvp.Value;
                        if (movimentoContabile.ContoRiferimento.Tipo == TipoContoEconomicoEnum.Economico)
                        {
                            movimentoContabile.Segno = "A";
                            if (movimentoContabile.Importo < 0)
                            {
                                movimentoContabile.Segno = "D";
                                movimentoContabile.Importo = movimentoContabile.Importo*-1;
                            }
                        }
                        else if (movimentoContabile.ContoRiferimento.Tipo == TipoContoEconomicoEnum.Patrimoniale)
                        {
                            movimentoContabile.Segno = "D";
                            if (movimentoContabile.Importo < 0)
                            {
                                movimentoContabile.Segno = "A";
                                movimentoContabile.Importo = movimentoContabile.Importo * -1;
                            }
                        }

                        var movimentoPatrimoniale = new MovimentoContabile(testataChiusura, causaleChiusura, index, contoPatrimoniale, movimentoContabile.Importo, invertiSegno(movimentoContabile.Segno))
                        {
                            Descrizione = $"Chiusura conto '{kvp.Value.ContoRiferimento.Descrizione}' esercizio straordinario: '{esercizioStraordinario.DisplayName}' per chiusura dell'ordinario: '{esercizioOrdinario.DisplayName}'"
                        };
                    }

                    return testataChiusura;
                }
            }
            catch (Exception ex)
            {
                _log.FatalFormat("Errore inaspettato durante il trasferimento saldi dell'esercizio straordinario all'ordinario - {0} - idEsercizioStraordinario:{1} - idEsercizioOrdinario:{2} - nomeContoOrdinario:{3} - ordineConto:{4} - dataChiusura:{5:d}", ex, Library.Utility.GetMethodDescription(), idEsercizioStraordinario, idEsercizioOrdinario, nomeContoOrdinario, ordineConto, dataChiusura.GetValueOrDefault());
                throw;
            }
        }
예제 #12
0
        private void updateSottoconto(SottoContoDTO dto, out SottoConto item)
        {
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

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

                // Condizione necessare per il controllo del fatto che sul DB ho una versione uguale o più vecchia
                if (dto.Version == item.Version)
                {
                    item.Codice = dto.Codice;
                    item.PercentualeProprieta = dto.PercentualeProprieta;
                    item.ContoRiferimento = daoFactory.GetContoDao().GetById(dto.IdContoRiferimento, false);
                    item.Descrizione = dto.Descrizione;
                    item.Version = dto.Version;
                    item.AddebitoCompetenze = dto.AddebitoCompetenze;
                    item.IsInteressiSanzioni = dto.IsInteressiSanzioni;
                }
                else
                {
                    // Eccezione: Sul db c'è qualche cosa di più nuovo.
                    _log.ErrorFormat("Errore nel salvataggio dei sottoconti - id:{0} - il dato sul db è più recente di quello che si vuole salvare", dto.ID);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio dei conti - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID);
                throw;
            }
        }
예제 #13
0
        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);
        }
예제 #14
0
        public decimal GetImportoCompetenza(decimal importo, Conto conto, SottoConto sottoconto, TipoSoggetto tipoSoggetto)
        {
            decimal importoCompetenza;

            var percentualeProprieta = conto.PercentualeProprieta;
            if (sottoconto?.PercentualeProprieta != null)
                percentualeProprieta = sottoconto.PercentualeProprieta.Value;

            var importoCompetenzaProprietario = importo * percentualeProprieta;

            if (tipoSoggetto == TipoSoggetto.Proprietario)
                importoCompetenza = importoCompetenzaProprietario;
            else
                importoCompetenza = importo - importoCompetenzaProprietario;

            return importoCompetenza;
        }
        private string getKeyContoSottoconto(Conto conto, SottoConto sottoConto)
        {
            var key = conto.ID.ToString();
            if (sottoConto != null)
                key += "|" + sottoConto.ID;
            else
                key += "|0";

            return key;
        }
예제 #16
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;
        }
예제 #17
0
 public SottoContoDTO GetSottoContoByDomainEntity(SottoConto conto)
 {
     try
     {
         return setSottoContoDto(conto, false);
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nel caricamento dei sottoconti - {0} - id:{1}", ex, Utility.GetMethodDescription(), conto?.ID.ToString(CultureInfo.InvariantCulture) ?? "<NULL>");
         throw;
     }
 }
예제 #18
0
        public string UpdateConto(IList<ContoListaDTO> conti)
        {
            try
            {
                var message = new StringBuilder();
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

                foreach(var contoDto in conti)
                {
                    try
                    {
                        Conto conto;
                        if (contoDto.ID > 0)
                        {
                            conto = daoFactory.GetContoDao().GetById(contoDto.ID, false);
                            conto.Descrizione = contoDto.Descrizione;
                        }
                        else
                        {
                            conto = new Conto(daoFactory.GetCondominioDao().GetById(contoDto.IdCondominio, false), contoDto.Tipo, tipoCompetenza: TipoPeriodoCompetenzaContabile.Esercizio, descrizione: contoDto.Descrizione, ripartizione: false, utilizzabileRegistrazioneSpese: contoDto.UtilizzabileRegistrazioneSpese, utilizzabileVersamentoCondomini: contoDto.UtilizzabileVersamentoCondomini) {CustomField = true, CodiceImportazione = contoDto.CodiceImportazione, DettaglioMovimentiContabili = contoDto.DettaglioMovimentiContabili};
                            daoFactory.GetContoDao().SaveOrUpdate(conto);
                        }

                        conto.Codice = contoDto.Codice;
                        conto.Ordine = contoDto.Ordine;
                        conto.UtilizzabileRegistrazioneSpese = contoDto.UtilizzabileRegistrazioneSpese;
                        conto.UtilizzabilePagamentoFornitori = contoDto.UtilizzabilePagamentoFornitori;
                        conto.IsTransitorio = contoDto.IsTransitorio;
                        conto.IsAccantonamentoFondi = contoDto.IsAccantonamentoFondi;
                        conto.IsMillesimiProprieta = contoDto.IsMillesimiProprieta;
                        conto.DettaglioMovimentiContabili = contoDto.DettaglioMovimentiContabili;
                        conto.IsLiquido = contoDto.IsLiquido;
                        conto.IsArrotondamento = contoDto.IsArrotondamento;

                        if (!string.IsNullOrEmpty(contoDto.TipoLiquidita))
                        {
                            TipoLiquidita tipoLiquidita;
                            if (Enum.TryParse(contoDto.TipoLiquidita, true, out tipoLiquidita))
                                conto.TipoLiquidita = tipoLiquidita;
                        }

                        conto.ContatoreRiferimento = null;
                        if (contoDto.IdContatore != null)
                        {
                            var contatore = daoFactory.GetContatoreDao().Find(contoDto.IdContatore.GetValueOrDefault(), false);
                            if (contatore != null)
                                conto.ContatoreRiferimento = contatore;
                        }
                        
                        if (conto.Tipo == TipoContoEconomicoEnum.Undefined)
                            conto.Tipo = TipoContoEconomicoEnum.Economico;

                        if (conto.Tipo == TipoContoEconomicoEnum.Economico)
                        {
                            conto.PercentualeProprieta = contoDto.PercentualeProprieta;
                            conto.IsSpesePersonali = contoDto.IsSpesePersonali;
                            conto.IsRipartoLetture = contoDto.IsRipartoLetture;
                            conto.DescrizioneBilancio = contoDto.DescrizioneBilancio;
                            conto.Ripartizione = true;
                            conto.PresenteBilancio = true;

                            if (!string.IsNullOrEmpty(conto.Descrizione) && conto.Descrizione.Length > 100)
                                conto.Descrizione = conto.Descrizione.Substring(0, 100);
                            if (!string.IsNullOrEmpty(conto.DescrizioneBilancio) && conto.DescrizioneBilancio.Length > 100)
                                conto.DescrizioneBilancio = conto.DescrizioneBilancio.Substring(0, 100);

                            if(contoDto.ID == 0)
                                conto.TipoCompetenza = TipoPeriodoCompetenzaContabile.Esercizio;
                        }

                        if(conto.Tipo == TipoContoEconomicoEnum.Patrimoniale)
                            conto.UtilizzabileVersamentoCondomini = contoDto.UtilizzabileVersamentoCondomini;

                        conto.EsercizioRiferimento = contoDto.IdEsercizio != null ? daoFactory.GetEsercizioDao().Find(contoDto.IdEsercizio.Value, false) : null;

                        // =====================================================================
                        // Sotto Conti
                        // =====================================================================
                        const int index = 0;
                        foreach (var sottoContoDto in contoDto.SottoConti)
                        {
                            if (!string.IsNullOrEmpty(sottoContoDto.Descrizione))
                            {
                                SottoConto sottoConto;

                                var descrizione = sottoContoDto.Descrizione;
                                if (!string.IsNullOrEmpty(descrizione) && descrizione.Length > 250)
                                    descrizione = descrizione.Substring(0, 250);

                                if (sottoContoDto.ID > 0)
                                {
                                    sottoConto = daoFactory.GetSottoContoDao().GetById(sottoContoDto.ID, false);
                                    sottoConto.Descrizione = descrizione;
                                }
                                else
                                {
                                    sottoConto = new SottoConto(conto, descrizione) { CustomField = true };
                                    daoFactory.GetSottoContoDao().SaveOrUpdate(sottoConto);
                                }

                                sottoConto.Codice = sottoContoDto.Codice;
                                sottoConto.PercentualeProprieta = sottoContoDto.PercentualeProprieta;
                                sottoConto.AddebitoCompetenze = sottoContoDto.AddebitoCompetenze;
                                sottoConto.IsInteressiSanzioni = sottoContoDto.IsInteressiSanzioni;
                                sottoConto.DettaglioMovimentiContabili = sottoContoDto.DettaglioMovimentiContabili;

                                // -------------------------------------
                                //  Aggiorno il codice dei sottoconti
                                // -------------------------------------
                                if (!string.IsNullOrEmpty(sottoConto.Codice))
                                {
                                    if (sottoConto.Codice.Contains('.'))
                                    {
                                        var codiceSottoConto = conto.Codice + sottoConto.Codice.Substring(sottoConto.Codice.IndexOf('.'));
                                        if (codiceSottoConto.Length <= 7)
                                            sottoConto.Codice = codiceSottoConto;
                                    }
                                }
                                else
                                    sottoConto.Codice = conto.Codice + "." + index.ToString(CultureInfo.InvariantCulture).PadLeft(3, '0');

                            }
                        }
                    }

                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore nell'update di uno specifico conto - {0} - id:{1} - {2}", ex, Utility.GetMethodDescription(), contoDto.ID, contoDto.Descrizione);
                        throw;
                    }
                }

                return message.ToString();
            }
            catch (Exception ex)
            {
                var idConti = conti.Aggregate(string.Empty, (current, contoListaDTO) => current + contoListaDTO.ID + ", ");
                _log.ErrorFormat("Errore nell'update conti - {0} - conti:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), idConti, _info.Azienda);
                throw;
            }
        }
예제 #19
0
 private bool insertSottoconto(SottoContoDTO dto, out SottoConto item)
 {
     var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
     try
     {
         item = new SottoConto(daoFactory.GetContoDao().GetById(dto.IdContoRiferimento, false), dto.Descrizione) {Codice = dto.Codice, PercentualeProprieta = dto.PercentualeProprieta, AddebitoCompetenze = dto.AddebitoCompetenze, IsInteressiSanzioni = dto.IsInteressiSanzioni, DettaglioMovimentiContabili = dto.DettaglioMovimentiContabili, CustomField = true};
         daoFactory.GetSottoContoDao().SaveOrUpdate(item);
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nell'inserimento del Sotto Conto - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID);
         throw;
     }
     return true;
 }
예제 #20
0
        public TestataMovimentoContabile SetMovimentiSollecito(Esercizio esercizio, IList<Sollecito> solleciti, DateTime dataRegistrazione, Conto conto, SottoConto sottoconto)
        {
            try
            {
                // controllo data registrazione
                var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
                if (message.Count > 0)
                {
                    var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                    _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - conto:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), dataRegistrazione, conto.ID, esercizio.ID);
                    throw ex;
                }

                var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null)
                {
                    Descrizione = "Addebito solleciti del " + dataRegistrazione.ToShortDateString(),
                    IsAllowUpdate = true
                };

                var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IA");
                var numeroRiga = 0;

                // Contropartita
                numeroRiga++;
                var contoContropartita = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, "913");
                new MovimentoContabile(testata, causale, numeroRiga, contoContropartita, solleciti.Sum(item => item.ImportoCompetenza.GetValueOrDefault()), "A");

                foreach (var soll in solleciti)
                {
                    numeroRiga++;
                    var movimento = new MovimentoContabile(testata, causale, numeroRiga, conto, soll.ImportoCompetenza, "D") {SottoContoRiferimento = sottoconto};
                    if (soll.Soggetto != null)
                        movimento.CondominoRiferimento = soll.Soggetto;
                    soll.MovimentoEconomico = movimento;

                    movimento.IsRipartoPersonalizzato = true;

                    var soggetto = soll.Soggetto ?? soll.Persona.SoggettiCondominio.FirstOrDefault(item => item.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID == soll.Esercizio.CondominioRiferimento.ID);
                    if (soggetto != null)
                    {
                        movimento.CondominoRiferimento = soggetto;
                        switch (soggetto.Tipo)
                        {
                            case TipoSoggetto.Proprietario:
                                movimento.PercentualeProprieta = 1;
                                break;
                            case TipoSoggetto.Conduttore:
                                movimento.PercentualeProprieta = 0;
                                break;
                        }
                        new SpeseUnita(soll.ImportoCompetenza, null, soggetto, movimento);
                    }
                }

                _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                return testata;
            }
            catch (Exception ex)
            {
                
                _log.Fatal("Errore inaspettato nella creazione del movimento di addebito competenze per sollecito - " + Utility.GetMethodDescription() + " - IdEsercizio:" + esercizio.ID.ToString(), ex);
                throw;
            }
        }
예제 #21
0
        public TestataMovimentoContabile SetMovimentiAddebitoCompetenze(Esercizio esercizio, AddebitoCompetenza addebito, DateTime dataRegistrazione, Conto conto, SottoConto sottoConto, string descrizione)
        {
            try
            {
                // controllo data registrazione
                var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
                if (message.Count > 0)
                {
                    var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                    _log.ErrorFormat("Data di registrazione non valida - {0} - data:{1} - addebito:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), dataRegistrazione, addebito.ID, esercizio.ID);
                    throw ex;
                }

                // se la testata è automatica non è possibile aggiornare gli importi nel dettaglio, se manuale è possibile l'aggiornamento.
                // per ora la testata viene inserita come manuale.
                //TestataMovimentoContabile testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, Sfera.Enums.TipoTestataMovimentoContabileEnum.Automatica);
                var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Manuale, null) {Descrizione = descrizione, IsAllowUpdate = true};

                var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IA");
                var numeroRiga = 0;

                // Contropartita
                numeroRiga++;
                var contoContropartita = _daoFactory.GetContoDao().GetByCodice(esercizio.ID, esercizio.CondominioRiferimento.ID, "913");
                new MovimentoContabile(testata, causale, numeroRiga, contoContropartita, addebito.Dettaglio.Sum(item => item.Importo), "A") {Descrizione = descrizione};

                foreach (var item in addebito.Dettaglio)
                {
                    try
                    {
                        numeroRiga++;
                        var movimento = new MovimentoContabile(testata, causale, numeroRiga, conto, item.Importo, "D")
                        {
                            SottoContoRiferimento = sottoConto,
                            Descrizione = descrizione,
                            CondominoRiferimento = item.Soggetto
                        };
                        item.MovimentoContabile = movimento;
                    
                        switch (item.Soggetto.Tipo)
                        {
                            case TipoSoggetto.Proprietario:
                                movimento.PercentualeProprieta = 1;
                                break;
                            case TipoSoggetto.Conduttore:
                                movimento.PercentualeProprieta = 0;
                                break;
                        }

                        movimento.IsRipartoPersonalizzato = true;
                        new SpeseUnita(item.Importo, null, item.Soggetto, movimento);

                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore inaspettato nella creazione del movimento di addebito competenze per sollecito - SINGOLO DETTAGLIO - {0} - item:{1}", ex, Utility.GetMethodDescription(), item.ID);
                        throw;
                    }
                }

                addebito.TestataMovimento = testata;
                _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

                return testata;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella creazione del movimento di addebito competenze per sollecito - {0} - esercizio:{1} - dataRegistrazione:{2} - addebito:{3} - conto:{4} - sottoconto:{5} - descrizione:{6}", ex, Utility.GetMethodDescription(), esercizio != null ? esercizio.ID.ToString() : "<NULL>", dataRegistrazione, addebito != null ? addebito.ID.ToString() : "<NULL>", conto != null ? conto.ID.ToString() : "<NULL>", sottoConto != null ? sottoConto.ID.ToString() : "<NULL>", descrizione);
                throw;
            }
        }
예제 #22
0
        private SottoContoDTO setSottoContoDto(SottoConto sottoConto, bool gestione)
        {
            var dto = new SottoContoDTO
            {
                IdContoRiferimento = sottoConto.ContoRiferimento.ID,
                DescrizioneContoRiferimento = sottoConto.ContoRiferimento.Descrizione,
                ID = sottoConto.ID,
                IsDeleteAllow = true,
                Codice = sottoConto.Codice,
                PercentualeProprieta = sottoConto.PercentualeProprieta,
                AddebitoCompetenze = sottoConto.AddebitoCompetenze,
                IsInteressiSanzioni = sottoConto.IsInteressiSanzioni,
                DettaglioMovimentiContabili = sottoConto.DettaglioMovimentiContabili,
                DisplayName = $"{sottoConto.ContoRiferimento.Codice} - {sottoConto.ContoRiferimento.Descrizione} - {sottoConto.GetDescrizione(null, sottoConto.ContoRiferimento.CondominioRiferimento, null)}",
                DescrizioneCompleta = $"{sottoConto.Codice} - {sottoConto.Descrizione}",
                Version = sottoConto.Version,
                Descrizione = gestione ? sottoConto.Descrizione : sottoConto.GetDescrizione(null, sottoConto.ContoRiferimento.CondominioRiferimento, null)
            };

            return dto;
        }