Пример #1
0
 public int? ManageDomainEntity(MillesimoDTO dto)
 {
     try
     {
         return manage(dto).ID;
     }
     catch (Exception ex)
     {
         _log.Error("Errore nella gestione dei millesimi: " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
         throw;
     }
 }
Пример #2
0
        public MillesimoDTO[] GetAll()
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var lista = daoFactory.GetMillesimoDao().GetAll();
                var listaDto = new MillesimoDTO[lista.Count];

                var index = 0;
                foreach (var item in lista)
                {
                    listaDto[index] = setDto(item);
                    index++;
                }

                return listaDto;
            }
            catch (Exception ex)
            {
                _log.Error("Errore nel caricamento dei millesimi: " + Library.Utility.GetMethodDescription(), ex);
                throw;
            }
        }
Пример #3
0
        public IList<MillesimoDTO> GetByFilter(MillesimiFilter filter)
        {
            try
            {
                if (filter.IdConti.Count > 0)
                {
                    var primoConto = _daoFactory.GetContoDao().Find(filter.IdConti[0], false);
                    if (primoConto != null)
                    {
                        const string hql = "FROM Millesimo MILL LEFT JOIN FETCH MILL.UnitaRiferimento UNI LEFT JOIN FETCH UNI.GruppoStabileRiferimento GRU LEFT JOIN FETCH GRU.PalazzinaRiferimento STAB LEFT JOIN FETCH STAB.CondominioRiferimento COND LEFT JOIN FETCH UNI.TipoUnitaImmobiliare TIP_UNI WHERE MILL.ContoRiferimento in (:conti)";
                        var millesimi = _daoFactory.GetMillesimoDao().GetByQuery(hql, new QueryParam("conti", filter.IdConti));
                        var listaUnita = _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(primoConto.CondominioRiferimento.ID);
                        var ripartizioniPersonalizzate = _daoFactory.GetSoggettoCondominioRipartizioneDao().GetByCondominio(primoConto.CondominioRiferimento.ID);
                        var millesimiDto = new List<MillesimoDTO>();
                        var tipoUnita = _daoFactory.GetTipoUnitaImmobiliareDao().GetByAzienda(primoConto.CondominioRiferimento.Azienda.ID);

                        if (filter.CodiceLotto != null)
                        {
                            millesimi = millesimi.Where(item => item.UnitaRiferimento?.GruppoStabileRiferimento?.PalazzinaRiferimento != null && item.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID == filter.CodiceLotto.GetValueOrDefault()).ToList();
                            listaUnita = listaUnita.Where(item => item.GruppoStabileRiferimento?.PalazzinaRiferimento?.LottoRiferimento != null && item.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID == filter.CodiceLotto.GetValueOrDefault()).ToList();
                        }
                        if (filter.CodiceStabile != null)
                        {
                            millesimi = millesimi.Where(item => item.UnitaRiferimento?.GruppoStabileRiferimento?.PalazzinaRiferimento != null && item.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.ID == filter.CodiceStabile.GetValueOrDefault()).ToList();
                            listaUnita = listaUnita.Where(item => item.GruppoStabileRiferimento?.PalazzinaRiferimento != null && item.GruppoStabileRiferimento.PalazzinaRiferimento.ID == filter.CodiceStabile.GetValueOrDefault()).ToList();
                        }
                        if (filter.CodiceScala != null)
                        {
                            millesimi = millesimi.Where(item => item.UnitaRiferimento?.GruppoStabileRiferimento != null && item.UnitaRiferimento.GruppoStabileRiferimento.ID == filter.CodiceScala.GetValueOrDefault()).ToList();
                            listaUnita = listaUnita.Where(item => item.GruppoStabileRiferimento != null && item.GruppoStabileRiferimento.ID == filter.CodiceScala.GetValueOrDefault()).ToList();
                        }
                        if (filter.CodiceCondominio != null)
                        {
                            millesimi = millesimi.Where(item => item.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID == filter.CodiceCondominio.GetValueOrDefault() || (item.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Supercondominio != null && item.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Supercondominio.ID == filter.CodiceCondominio.GetValueOrDefault())).ToList();
                            listaUnita = listaUnita.Where(item => item.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID == filter.CodiceCondominio.GetValueOrDefault() || (item.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Supercondominio != null && item.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.Supercondominio.ID == filter.CodiceCondominio.GetValueOrDefault())).ToList();
                        }

                        var dataRiferimento = DateTime.Today;
                        if (filter.IdEsercizio != null)
                        {
                            var esercizio = _daoFactory.GetEsercizioDao().Find(filter.IdEsercizio.GetValueOrDefault(), false);
                            if (esercizio != null)
                                dataRiferimento = esercizio.DataChiusura.GetValueOrDefault();
                        }

                        foreach (var millesimo in millesimi)
                        {
                            try
                            {
                                var millDto = new MillesimoDTO
                                {
                                    ID = millesimo.ID,
                                    IdCondominioRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.CondominioRiferimento.ID,
                                    DescrizioneContoRiferimento = millesimo.ContoRiferimento.Descrizione,
                                    DisplayName = millesimo.ContoRiferimento.DescrizioneBilancio,
                                    DescrizioneGruppoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.Descrizione,
                                    DescrizioneStabileRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione,
                                    IdContoRiferimento = millesimo.ContoRiferimento.ID,
                                    IdGruppoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.ID,
                                    IdStabileRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                                    CodiceConto = millesimo.ContoRiferimento.Codice,
                                    IdUnitaRiferimento = millesimo.UnitaRiferimento.ID,
                                    InternoUnitaRiferimento = millesimo.UnitaRiferimento.InternoCompleto,
                                    NominativoUnitaRiferimento = millesimo.UnitaRiferimento.Descrizione,
                                    OrdineConto = millesimo.ContoRiferimento.Ordine,
                                    Ordine = millesimo.UnitaRiferimento.Ordine.GetValueOrDefault(),
                                    OrdineGruppoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.Ordine,
                                    OrdineStabileRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine,
                                    RipartizionePersonalizzata = ripartizioniPersonalizzate.Any(item => item.Conto.ID == millesimo.ContoRiferimento.ID && item.Soggetto.UnitaImmobiliare.ID == millesimo.UnitaRiferimento.ID),
                                    IsDeleteAllow = false,
                                    Version = millesimo.Version,
                                    Valore = millesimo.Valore,
                                    TipoUnitaRiferimento = millesimo.UnitaRiferimento.TipoUnitaImmobiliare.Descrizione
                                };

                                //millDto.RipartizionePersonalizzata = _daoFactory.GetSoggettoCondominioRipartizioneDao().GetCountByContoUnitaImmobiliare(millesimo.ContoRiferimento.ID, millesimo.UnitaRiferimento.ID) > 0;

                                //if (unita.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento != null)
                                //    millDto.IdLottoRiferimento = unita.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID;

                                millesimiDto.Add(millDto);
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore inaspettato durante la lettura dei millesimi - {0} - idMillesimo:{1}", ex, Utility.GetMethodDescription(), millesimo.ID);
                                throw;
                            }
                        }

                        foreach (var idConto in filter.IdConti)
                        {
                            try
                            {
                                var conto = _daoFactory.GetContoDao().GetById(idConto, false);
                                foreach (var unita in listaUnita)
                                {
                                    try
                                    {
                                        if (millesimiDto.All(item => item.IdUnitaRiferimento != unita.ID))
                                        {
                                            var millDto = new MillesimoDTO
                                            {
                                                ID = 0,
                                                IdCondominioRiferimento = conto.CondominioRiferimento.ID,
                                                DescrizioneContoRiferimento = conto.Descrizione,
                                                DescrizioneGruppoRiferimento = unita.GruppoStabileRiferimento.Descrizione,
                                                DescrizioneStabileRiferimento = unita.GruppoStabileRiferimento.PalazzinaRiferimento.Descrizione,
                                                IdContoRiferimento = conto.ID,
                                                IdGruppoRiferimento = unita.GruppoStabileRiferimento.ID,
                                                IdStabileRiferimento = unita.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                                                CodiceConto = conto.Codice,
                                                IdUnitaRiferimento = unita.ID,
                                                InternoUnitaRiferimento = unita.InternoCompleto,
                                                NominativoUnitaRiferimento = unita.Descrizione,
                                                OrdineConto = conto.Ordine,
                                                Ordine = unita.Ordine.GetValueOrDefault(),
                                                OrdineGruppoRiferimento = unita.GruppoStabileRiferimento.Ordine,
                                                OrdineStabileRiferimento = unita.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine,
                                                RipartizionePersonalizzata = false,
                                                IsDeleteAllow = false,
                                                Version = 0,
                                                Valore = null,
                                            };

                                            var tipo = tipoUnita.FirstOrDefault(item => unita.TipoUnitaImmobiliare.ID == item.ID);
                                            if (tipo != null)
                                                millDto.TipoUnitaRiferimento = tipo.Descrizione;

                                            //if (unita.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento != null)
                                            //    millDto.IdLottoRiferimento = unita.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento.ID;
                                            millesimiDto.Add(millDto);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        _log.ErrorFormat("Errore inaspettato durante la lettura dei millesimi - {0} - idUnita:{1}", ex, Utility.GetMethodDescription(), unita.ID);
                                        throw;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore inaspettato durante la lettura dei millesimi - {0} - conto:{1}", ex, Utility.GetMethodDescription(), idConto);
                                throw;
                            }
                        }

                        return millesimiDto.OrderBy(item => item.Ordine).ToList();
                    }
                }
                return new List<MillesimoDTO>();
            }
            catch (Exception ex)
            {
                var idStr = string.Empty;
                if(filter.IdConti != null)
                    idStr = filter.IdConti.Aggregate(string.Empty, (current, id) => current + (id.ToString() + ", "));
                
                _log.ErrorFormat("Errore inaspettato durante la lettura dei millesimi - {0} - conti:{1} - condominio:{2} - stabile:{3} - scala:{4} - lotto:{5}", ex, Utility.GetMethodDescription(), idStr, filter.CodiceCondominio, filter.CodiceStabile, filter.CodiceScala, filter.CodiceLotto);
                throw;
            }
        }
Пример #4
0
        public IList<MillesimoDTO> GetByConto(Conto conto, List<int> stabili, List<int> gruppi, Esercizio esercizio)
        {
            IList<MillesimoDTO> millesimiDto = new List<MillesimoDTO>();
            if (conto.ContatoreRiferimento == null)
            {
                var millesimi = conto.GetMillesimiAttivi(stabili, gruppi);
                foreach (var millesimo in millesimi)
                {
                    try
                    {
                        if (millesimo.UnitaRiferimento.GruppoStabileRiferimento != null)
                        {
                            millesimiDto.Add(new MillesimoDTO
                            {
                                ID = millesimo.ID,
                                IdUnitaRiferimento = millesimo.UnitaRiferimento.ID,
                                IdGruppoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.ID,
                                IdStabileRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                                IdLottoRiferimento = millesimo.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento?.ID ?? 0,
                                IdContoRiferimento = conto.ID,
                                Valore = millesimo.Valore,
                                UnitaMisura = "PC"
                            });
                        }
                        else
                        {
                            throw new InvalidDataException($"L'unità immobiliare {millesimo.UnitaRiferimento.Ordine} - {millesimo.UnitaRiferimento.Descrizione} non è associata a nessuna scala");
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Errore nella creazione del dto di millesimo - {0} - id:{1}", ex, Utility.GetMethodDescription(), millesimo.ID);
                        throw;
                    }
                }
            }
            else
            {
                var dataIniziale = esercizio.DataApertura.GetValueOrDefault();
                //var esercizioPrecedente = esercizio.GetEsercizioPrecedente();
                //if (esercizioPrecedente != null)
                //    dataIniziale = esercizioPrecedente.DataChiusura.GetValueOrDefault();

                var letture = conto.ContatoreRiferimento.Letture.Where(
                    item =>
                    (item.Data == dataIniziale ||
                    item.Data == esercizio.DataChiusura.GetValueOrDefault()) &&
                    (
                        (stabili == null || stabili.Contains(item.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID)) &&
                        (gruppi == null || gruppi.Contains(item.UnitaImmobiliare.GruppoStabileRiferimento.ID))
                    )).ToList();

                foreach (var lettura in letture.Where(item => item.Data == dataIniziale))
                {
                    var valoreIniziale = lettura.Valore;
                    var letturaFinale = letture.FirstOrDefault(item => item.Data == esercizio.DataChiusura.GetValueOrDefault() && item.UnitaImmobiliare.ID == lettura.UnitaImmobiliare.ID);

                    var valoreFinale = 0m;
                    if (letturaFinale != null)
                        valoreFinale = letturaFinale.Valore;

                    // Cambio contatore rilevato
                    if (valoreFinale < valoreIniziale)
                        valoreIniziale = 0;

                    var dto = new MillesimoDTO
                    {
                        IdUnitaRiferimento = lettura.UnitaImmobiliare.ID,
                        InternoUnitaRiferimento = lettura.UnitaImmobiliare.InternoCompleto,
                        IdGruppoRiferimento = lettura.UnitaImmobiliare.GruppoStabileRiferimento.ID,
                        IdStabileRiferimento = lettura.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.ID,
                        IdLottoRiferimento = lettura.UnitaImmobiliare.GruppoStabileRiferimento.PalazzinaRiferimento.LottoRiferimento?.ID ?? 0, 
                        IdContoRiferimento = conto.ID,
                        DescrizioneContoRiferimento = conto.Descrizione,
                        CodiceConto = conto.Codice,
                        Valore = valoreFinale - valoreIniziale,
                        UnitaMisura = "MC",
                        ID = 0
                    };
                    millesimiDto.Add(dto);
                }
            }

            return millesimiDto;
        }
Пример #5
0
        private Millesimo manage(MillesimoDTO dto)
        {
            Millesimo item = null;
            bool result;

            // Controllo sullo stato U, I
            switch (dto.Stato.ToUpper())
            {
                case "U":
                    result = update(dto, out item);

                    if (!result)
                        throw new Exception("Il dato sul database è più recente di quello utilizzato");
                    break;
                case "I":
                    result = insert(dto, out item);

                    if (!result)
                        throw new Exception("Impossibile scrivere sul database");
                    break;
            }
            return item;
        }
Пример #6
0
        private bool insert(MillesimoDTO dto, out Millesimo item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = new Millesimo(daoFactory.GetContoDao().GetById(dto.IdContoRiferimento, false), daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaRiferimento, false)) {Valore = dto.Valore};
                daoFactory.GetMillesimoDao().SaveOrUpdate(item);
            }
            catch (Exception ex)
            {
                _log.Error("Errore nell'inserimento dei millesimi:" + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
                throw;
            }

            return true;
        }
Пример #7
0
        private bool update(MillesimoDTO dto, out Millesimo item)
        {
            var result = false;
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = daoFactory.GetMillesimoDao().Find(dto.ID, false);
                if(item != null)
                {
                    // Condizione necessaria per il controllo del fatto che sul DB ho una versione uguale o più vecchia
                    if (dto.Version == item.Version)
                    {
                        item.Valore = dto.Valore;
                        item.ContoRiferimento = daoFactory.GetContoDao().GetById(dto.IdContoRiferimento, false);
                        item.UnitaRiferimento = daoFactory.GetUnitaImmobiliareDao().GetById(dto.IdUnitaRiferimento, false);

                        result = true;
                    }
                    else
                    {
                        // Eccezione: Sul db c'è qualche cosa di più nuovo.
                        _log.Error("Errore nel salvataggio dei millesimi: id:" + dto.ID + " - il dato sul db è più recente di quello che si vuole salvare");
                    }
                }
                else
                    result = true;
            }
            catch (Exception ex)
            {
                _log.Error("Errore nel salvataggio dei millesimi: " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
                throw;
            }

            return result;
        }
Пример #8
0
        private MillesimoDTO setDto(Millesimo item)
        {
            var dto = new MillesimoDTO {ID = item.ID, Valore = item.Valore};

            if (item.ContoRiferimento != null)
            {
                dto.IdContoRiferimento = item.ContoRiferimento.ID;
                dto.DescrizioneContoRiferimento = item.ContoRiferimento.Descrizione;
                dto.OrdineConto = item.ContoRiferimento.Ordine;
                dto.CodiceConto = item.ContoRiferimento.Codice;
            }

            if (item.UnitaRiferimento != null)
            {
                dto.IdUnitaRiferimento = item.UnitaRiferimento.ID;
                dto.InternoUnitaRiferimento = item.UnitaRiferimento.InternoCompleto;
                dto.TipoUnitaRiferimento = item.UnitaRiferimento.TipoUnitaImmobiliare.Descrizione;
                dto.NominativoUnitaRiferimento = item.UnitaRiferimento.Descrizione;
                dto.OrdineGruppoRiferimento = item.UnitaRiferimento.GruppoStabileRiferimento.Ordine;
                dto.OrdineStabileRiferimento = item.UnitaRiferimento.GruppoStabileRiferimento.PalazzinaRiferimento.Ordine;
                if (item.UnitaRiferimento.Ordine != null)
                    dto.Ordine = item.UnitaRiferimento.Ordine.Value;
            }

            dto.Version = item.Version;

            return dto;
        }