예제 #1
0
        public IList<MovimentoContabileBollettaDTO> GetRipartizioneByUtenza(int idUtenza, RipartizioneBollettaDTO ripartizioneCondominio, bool decodificaDescrizione)
        {
            try
            {
                var utenza = _daoFactory.GetUtenzaDao().Find(idUtenza, false);

                var movimenti = new List<MovimentoContabileBollettaDTO>();

                // ================================
                // Ripartizione Movimenti
                // ================================
                if (utenza?.ModelloRegistrazione != null)
                {
                    foreach (var conto in utenza.ModelloRegistrazione.Conti)
                    {
                        try
                        {
                            if(conto.ContoRiferimento != null)
                            {
                                var ripartizioneModello = conto.Unita.Where(item => item.UnitaRiferimento != null || item.LottoRiferimento != null || item.PalazzinaRiferimento != null || item.GruppoStabileRiferimento != null).ToList();

                                var movimento = new MovimentoContabileBollettaDTO
                                {
                                    ID = 0,
                                    IdConto = conto.ContoRiferimento.ID,
                                    PercentualeRiparto = conto.PercentualeRipartizione,
                                    MovimentoEconomico = true
                                };

                                if (conto.SottoContoRiferimento != null)
                                    movimento.IdSottoConto = conto.SottoContoRiferimento.ID;

                                // ----------------------------------------------------------
                                // Ripartizione Lotti, Stabili, Gruppi e Unità Immobiliari
                                // ----------------------------------------------------------
                                RipartizioneBollettaDTO ripartizione;
                                if (ripartizioneCondominio != null)
                                    ripartizione = (RipartizioneBollettaDTO)ripartizioneCondominio.Clone();
                                else
                                    ripartizione = GetRipartizioneByCondominio(utenza.Condominio, DateTime.Today, false);

                                // Inizializzo il flag di selezione
                                // --------------------------------
                                // Lotti
                                movimento.RipartoAggiornato = "U";
                                foreach (var item in ripartizione.Lotti)
                                {
                                    item.Selezionato = getSelezionatoLotto(_daoFactory.GetLottoDao().GetById(item.ID, false), ripartizioneModello);
                                    if (item.Selezionato)
                                        movimento.RipartoAggiornato = "L";
                                }

                                // Stabili
                                foreach (var item in ripartizione.Stabili)
                                {
                                    item.Selezionato = getSelezionatoStabile(_daoFactory.GetPalazzinaDao().GetById(item.ID, false), ripartizioneModello);
                                    if (item.Selezionato)
                                        movimento.RipartoAggiornato = "S";
                                }

                                // Scale
                                foreach (var item in ripartizione.Gruppi)
                                {
                                    item.Selezionato = getSelezionatoScala(_daoFactory.GetGruppoStabileDao().GetById(item.ID, false), ripartizioneModello);
                                    if (item.Selezionato)
                                        movimento.RipartoAggiornato = "G";
                                }

                                // Unità Immobiliari
                                foreach (var item in ripartizione.UnitaImmobiliari)
                                    item.Selezionato = getSelezionatoUnita(_daoFactory.GetUnitaImmobiliareDao().GetById(item.ID, false), ripartizioneModello);

                                movimento.Ripartizione = ripartizione;
                                movimenti.Add(movimento);                                
                            }
                            else
                            {
                                _log.WarnFormat("ATTENZIONE Modello con riga di riparto senza conto definito - {0} - conto:{1} - utenza:{2}", Utility.GetMethodDescription(), conto.ID, idUtenza);
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore durante la lettura di una ripartizione per utenza - Conto - {0} - conto:{1} - utenza:{2}", ex, Utility.GetMethodDescription(), conto.ID, idUtenza);
                            throw;
                        }
                    }
                }

                return movimenti;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore durante la lettura di una ripartizione per utenza - {0} - idUtenza:{1}", ex, Utility.GetMethodDescription(), idUtenza);
                throw;
            }
        }
예제 #2
0
        public IList<MovimentoContabileBollettaDTO> GetRipartizioneByBolletta(int idBolletta)
        {
            try
            {
                var spesa = _daoFactory.GetSpesaDao().GetById(idBolletta, false);

                var movimenti = new List<MovimentoContabileBollettaDTO>();

                // ================================
                // Movimenti
                // ================================
                foreach (var movimento in spesa.MovimentiBollette)
                {
                    try
                    {
                        var movimentoDto = new MovimentoContabileBollettaDTO
                        {
                            ID = movimento.ID,
                            IdConto = movimento.ContoRiferimento.ID,
                            Importo = movimento.GetImportoConSegno(),
                            PercentualeRiparto = (spesa.ImportoBolletta != 0) ? movimento.GetImportoConSegno() / spesa.ImportoBolletta : 0,
                            Descrizione = movimento.Descrizione,
                            MovimentoEconomico = true
                        };

                        if (movimento.SottoContoRiferimento != null)
                            movimentoDto.IdSottoConto = movimento.SottoContoRiferimento.ID;

                        // ----------------------------------------------------------
                        // Ripartizione Lotti, Stabili, Gruppi e Unità Immobiliari
                        // ----------------------------------------------------------
                        var ripartizione = GetRipartizioneByCondominio(spesa.EsercizioRiferimento.CondominioRiferimento, spesa.EsercizioRiferimento.DataApertura.GetValueOrDefault(), movimento.ContoRiferimento.IsSpesePersonali);

                        // Inizializzo il flag di selezione
                        // --------------------------------
                        movimentoDto.RipartoAggiornato = "U";
                        // Lotti
                        if (!string.IsNullOrEmpty(movimento.LottiAddebito))
                        {
                            var id = getIdArray(movimento.LottiAddebito.Split('&'));
                            foreach (var item in ripartizione.Lotti)
                            {
                                item.Selezionato = id.Contains(item.ID);
                                if (item.Selezionato)
                                    movimentoDto.RipartoAggiornato = "L";
                            }
                        }

                        // Stabili
                        if (!string.IsNullOrEmpty(movimento.StabiliAddebito))
                        {
                            var id = getIdArray(movimento.StabiliAddebito.Split('&'));
                            foreach (var item in ripartizione.Stabili)
                            {
                                item.Selezionato = id.Contains(item.ID);
                                if (item.Selezionato)
                                    movimentoDto.RipartoAggiornato = "S";
                            }
                        }

                        // Scale
                        if (!string.IsNullOrEmpty(movimento.GruppiAddebito))
                        {
                            var id = getIdArray(movimento.GruppiAddebito.Split('&'));
                            foreach (var item in ripartizione.Gruppi)
                            {
                                item.Selezionato = id.Contains(item.ID);
                                if (item.Selezionato)
                                    movimentoDto.RipartoAggiornato = "G";
                            }
                        }

                        // Unità Immobiliari
                        foreach (var unita in ripartizione.UnitaImmobiliari)
                            unita.Selezionato = movimento.DettaglioRipartizione.Any(item => (item.UnitaRiferimento != null && item.UnitaRiferimento.ID == unita.ID) || (item.SoggettoCondominio != null && item.SoggettoCondominio.UnitaImmobiliare.ID == unita.ID));

                        movimentoDto.Ripartizione = ripartizione;
                        movimenti.Add(movimentoDto);
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore durante la lettura di una ripartizione per bolletta - MOVIMENTO - {0} - idMovimento:{1} - idBolletta:{2}", ex, Utility.GetMethodDescription(), movimento.ID, idBolletta);
                        throw;
                    }
                }

                // ================================
                // Se l'importo della spesa è 0 e NON sono in un caso di riparto personalizzato
                // recupero le percentuali dal modello
                // ================================
                if (spesa.ImportoBolletta == 0 && !spesa.IsRipartoPersonalizzato && spesa.Utenza?.ModelloRegistrazione != null)
                {
                    var indexMovimento = 0;
                    foreach (var conto in spesa.Utenza.ModelloRegistrazione.Conti)
                    {
                        if (movimenti.Count > indexMovimento)
                        {
                            movimenti[indexMovimento].PercentualeRiparto = conto.PercentualeRipartizione;
                            indexMovimento++;
                        }
                    }
                }

                return movimenti;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore durante la lettura di una ripartizione per utenza - {0} - idBolletta:{1}", ex, Utility.GetMethodDescription(), idBolletta);
                throw;
            }
        }
예제 #3
0
        public RipartizioneBollettaDTO SetRipartizione(string tipo, BusinessInstanceSelectedDTO item, RipartizioneBollettaDTO ripartizione, MovimentoContabileBollettaDTO dto)
        {
            try
            {
                if (ripartizione != null)
                {
                    dto.RipartoAggiornato = tipo;
                    if (tipo != "L")
                    {
                        foreach (BusinessInstanceSelectedDTO lotto in ripartizione.Lotti)
                            lotto.Selezionato = false;
                    }
                    if (tipo != "S")
                    {
                        foreach (BusinessInstanceSelectedDTO stabile in ripartizione.Stabili)
                            stabile.Selezionato = false;
                    }
                    if (tipo != "G")
                    {
                        foreach (BusinessInstanceSelectedDTO scala in ripartizione.Gruppi)
                            scala.Selezionato = false;
                    }
                }
                else
                {
                    var log = LogManager.GetLogger("Sfera");
                    log.Fatal("ATTENZIONE: Ripartizione a null - " + Utility.GetMethodDescription() + " - tipo: " + tipo);
                }

                return ripartizione;
            }
            catch (Exception ex)
            { 
                var log = LogManager.GetLogger("Sfera");
                log.Fatal("Errore inaspettato durante il set della ripartizione per una bolletta - " + Utility.GetMethodDescription() + " - tipo: " + tipo, ex);
                throw;
            }
        }