/// <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;
 }
Esempio n. 2
0
        /// <summary>
        /// Crea una lettura di contatore valida.
        /// </summary>
        public LetturaContatore(Contatore contatore, UnitaImmobiliare unitaImmobiliare, DateTime data, decimal valore)
        {
            Contatore = contatore;
            Data = data;
            Valore = valore;
            UnitaImmobiliare = unitaImmobiliare;

            if (Contatore != null)
                Contatore.Letture.Add(this);
        }
Esempio n. 3
0
        /// <summary>
        /// Crea un dettaglio di ripartizione consumo acqua valido
        /// </summary>
        public RipartoBolletteLetture(RipartoBollette riparto, Contatore contatore, decimal letturaIniziale, TipoLetturaEnum tipoLetturaIniziale, decimal letturaFinale, TipoLetturaEnum tipoLetturaFinale)
        {
            Riparto = riparto;
            Contatore = contatore;
            LetturaIniziale = letturaIniziale;
            TipoLetturaIniziale = tipoLetturaIniziale;
            LetturaFinale = letturaFinale;
            TipoLetturaFinale = tipoLetturaFinale;

            if (Riparto != null)
                Riparto.DettaglioLetture.Add(this);
        }
Esempio n. 4
0
        private bool insert(ContatoreDTO dto, out Contatore item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = new Contatore(daoFactory.GetTipoContatoreDao().GetById(dto.IdTipo, false), dto.Codice, dto.Descrizione, daoFactory.GetCondominioDao().GetById(dto.CodiceCondominio, false)) {IsContaCalorie = dto.IsContaCalorie, Version = dto.Version};
                
                if (dto.CodiceCondominio > 0)
                    item.Condominio = daoFactory.GetCondominioDao().GetById(dto.CodiceCondominio, false);

                if (dto.CodiceUtenza > 0)
                    item.Utenza = daoFactory.GetUtenzaDao().GetById(dto.CodiceUtenza.Value, false);
                
                daoFactory.GetContatoreDao().SaveOrUpdate(item);
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel salvataggio dei contatori: " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID, ex);
                throw;
            }
            return true;
        }
Esempio n. 5
0
        private bool update(ContatoreDTO dto, out Contatore item)
        {
            var result = false;
            item = null;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            try
            {
                item = daoFactory.GetContatoreDao().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.Descrizione = dto.Descrizione.Trim();
                    item.IsContaCalorie = dto.IsContaCalorie;
                    item.Codice = dto.Codice;
                    item.Tipo = daoFactory.GetTipoContatoreDao().GetById(dto.IdTipo, false);
                    item.Version = dto.Version;

                    if (dto.CodiceCondominio > 0)
                        item.Condominio = daoFactory.GetCondominioDao().GetById(dto.CodiceCondominio, false);

                    if (dto.CodiceUtenza > 0)
                        item.Utenza = daoFactory.GetUtenzaDao().GetById(dto.CodiceUtenza.Value, false);

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

            return result;
        }
Esempio n. 6
0
        private ContatoreDTO setDto(Contatore item)
        {
            try
            {
                if (item != null && item.Tipo != null)
                {
                    if (item.Tipo != null)
                    {
                        var descrizioneTipo = "<N.D.>";
                        if (!string.IsNullOrEmpty(item.Tipo.Descrizione))
                            descrizioneTipo = item.Tipo.Descrizione;

                        var descrizione = string.Empty;
                        if (!string.IsNullOrEmpty(item.Descrizione))
                            descrizione = item.Descrizione;

                        var dto = new ContatoreDTO
                        {
                            ID = item.ID,
                            Descrizione = item.Descrizione,
                            Codice = item.Codice,
                            CodiceCondominio = item.Condominio.ID,
                            DescrizioneCondominio = item.Condominio.Descrizione,
                            DisplayName = string.Format("{0} - {1} {2}", descrizioneTipo, item.Codice, descrizione),
                            IdTipo = item.Tipo.ID,
                            IsContaCalorie = item.IsContaCalorie,
                            IsCondominiale = item.IsCondominiale,
                            DescrizioneTipo = item.Descrizione,
                            Version = item.Version
                        };

                        if (item.Utenza != null)
                        {
                            dto.CodiceUtenza = item.Utenza.ID;
                            dto.DescrizioneUtenza = item.Utenza.Descrizione;
                        }

                        return dto;
                    }
                    else
                    {
                        _log.ErrorFormat("Trovato contatore con tipo null - {0} - id:{1} - azienda:{2}", Library.Utility.GetMethodDescription(), item.ID, _info.Azienda);
                    }
                }

                return null;
            }

            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel creazione dei contatori - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), item != null ? item.ID.ToString() : "<null>");
                throw;
            }
        }
Esempio n. 7
0
        public ContatoreDTO GetByDomainEntity(Contatore item)
        {
            try
            {

                return setDto(item);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento dei contatori - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), item != null ? item.ID.ToString() : "<NULL>");
                throw;
            }
        }
        private IList<LetturaContatoreCalcoloDTO> getLettureCalcoloByContatoreData(Contatore contatore, DateTime dataIniziale, DateTime dataFinale)
        {
            try
            {
                IList<UnitaImmobiliare> listaUnita = new List<UnitaImmobiliare>();
                if(!contatore.IsCondominiale)
                    listaUnita = GetUnitaModello(contatore.Utenza.ModelloRegistrazione);

                // -------------------------------
                // Letture iniziali
                // -------------------------------
                var lettureIniziali = new List<LetturaContatoreCalcoloDTO>(listaUnita.Count);
                if (!contatore.IsCondominiale)
                    lettureIniziali.AddRange(from unita in listaUnita let hql = "SELECT new LetturaContatoreCalcoloDTO(LET.UnitaImmobiliare.ID, LET.Data, LET.Valore) FROM LetturaContatore LET WHERE LET.Valore is not null AND LET.UnitaImmobiliare = :unita AND LET.Contatore = :contatore AND LET.Data < :data ORDER BY LET.Data DESC" select (LetturaContatoreCalcoloDTO)_daoFactory.GetLetturaContatoreDao().GetUniqueResult(hql, 0, new[] { new QueryParam("data", dataIniziale), new QueryParam("contatore", contatore), new QueryParam("unita", unita) }) into letturaIniziale where letturaIniziale != null select letturaIniziale);
                else
                {
                    const string hql = "SELECT new LetturaContatoreCalcoloDTO(0, LET.Data, LET.Valore) FROM LetturaContatore LET WHERE LET.Valore is not null AND LET.Contatore = :contatore AND LET.Data < :data ORDER BY LET.Data DESC";
                    lettureIniziali.Add((LetturaContatoreCalcoloDTO)_daoFactory.GetLetturaContatoreDao().GetUniqueResult(hql, 0, new[] { new QueryParam("data", dataIniziale), new QueryParam("contatore", contatore) }));
                }

                // -------------------------------
                // Letture esercizio
                // -------------------------------
                var hqlLetture = !contatore.IsCondominiale ? "SELECT new LetturaContatoreCalcoloDTO(LET.UnitaImmobiliare.ID, LET.Data, LET.Valore) FROM LetturaContatore LET WHERE LET.Valore is not null AND LET.Contatore = :contatore AND LET.Data >= :dataIniziale AND LET.Data <= :dataFinale" : "SELECT new LetturaContatoreCalcoloDTO(0, LET.Data, LET.Valore) FROM LetturaContatore LET WHERE LET.Valore is not null AND LET.Contatore = :contatore AND LET.Data >= :dataIniziale AND LET.Data <= :dataFinale";
                var lettureEsercizio = _daoFactory.GetLetturaContatoreDao().GetByQueryDTO<LetturaContatoreCalcoloDTO>(hqlLetture, new[] { new QueryParam("contatore", contatore), new QueryParam("dataIniziale", dataIniziale), new QueryParam("dataFinale", dataFinale) }).ToList();
                
                // -------------------------------
                // Letture finali
                // -------------------------------
                var lettureFinali = new List<LetturaContatoreCalcoloDTO>(listaUnita.Count);
                if (!contatore.IsCondominiale)
                    lettureFinali.AddRange(from unita in listaUnita let hql = "SELECT new LetturaContatoreCalcoloDTO(LET.UnitaImmobiliare.ID, LET.Data, LET.Valore) FROM LetturaContatore LET WHERE LET.Valore is not null AND LET.UnitaImmobiliare = :unita AND LET.Contatore = :contatore AND LET.Data > :data ORDER BY LET.Data DESC" select (LetturaContatoreCalcoloDTO)_daoFactory.GetLetturaContatoreDao().GetUniqueResult(hql, 0, new[] { new QueryParam("data", dataFinale), new QueryParam("contatore", contatore), new QueryParam("unita", unita) }) into letturaFinale where letturaFinale != null select letturaFinale);
                else
                {
                    const string hql = "SELECT new LetturaContatoreCalcoloDTO(0, LET.Data, LET.Valore) FROM LetturaContatore LET WHERE LET.Valore is not null AND LET.Contatore = :contatore AND LET.Data > :data ORDER BY LET.Data DESC";
                    lettureFinali.Add((LetturaContatoreCalcoloDTO)_daoFactory.GetLetturaContatoreDao().GetUniqueResult(hql, 0, new[] { new QueryParam("data", dataFinale), new QueryParam("contatore", contatore) }));
                }

                var letture = new List<LetturaContatoreCalcoloDTO>(lettureEsercizio.Count + (listaUnita.Count * 2));
                letture.AddRange(lettureIniziali);
                letture.AddRange(lettureEsercizio);
                letture.AddRange(lettureFinali);

                // ====================================================================
                //  Conta Calorie
                //  Per conta calorie propongo solo due date: inizio e fine esercizio
                // ====================================================================
                if (!IsAllowAddDate(contatore.ID))
                {
                    if(letture.All(item => item.Data != dataIniziale))
                        letture.Add(new LetturaContatoreCalcoloDTO(listaUnita[0].ID, dataIniziale, null));

                    if (letture.All(item => item.Data != dataFinale))
                        letture.Add(new LetturaContatoreCalcoloDTO(listaUnita[0].ID, dataFinale, null));
                }

                // ====================================================================
                //  Contatore condominiale:
                //  Memorizzo nell'id della unità immobiliare l'id del contatore per
                //  poter fare calcoli separati per contatore
                // ====================================================================
                if (contatore.IsCondominiale)
                {
                    foreach (var letturaContatoreCalcoloDTO in letture)
                    {
                        if (letturaContatoreCalcoloDTO != null)
                            letturaContatoreCalcoloDTO.IdUnitaImmobiliare = contatore.ID*-1;
                    }
                }
                
                return letture.Where(item => item != null).ToList();
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato durante la lettura delle letture contatore per data - " + Library.Utility.GetMethodDescription() + " - idContatore:" + contatore.ID + " - dataIniziale:" + dataIniziale.ToShortDateString() + " - dataFinale:" + dataFinale.ToShortDateString(), ex);
                throw;
            }
        }
        private IList<LetturaContatore> getLettureByContatoreData(Contatore contatore, DateTime dataIniziale, DateTime dataFinale)
        {
            try
            {
                var listaUnita = _daoFactory.GetUnitaImmobiliareDao().GetByCondominio(contatore.Condominio.ID);

                // -------------------------------
                // Letture iniziali
                // -------------------------------
                var lettureIniziali = new List<LetturaContatore>(listaUnita.Count);
                lettureIniziali.AddRange(from unita in listaUnita let hql = "FROM LetturaContatore LET WHERE LET.UnitaImmobiliare = :unita AND LET.Contatore = :contatore AND LET.Data < :data ORDER BY LET.Data DESC" select (LetturaContatore) _daoFactory.GetLetturaContatoreDao().GetUniqueResult(hql, 0, new[] {new QueryParam("data", dataIniziale), new QueryParam("contatore", contatore), new QueryParam("unita", unita)}) into letturaIniziale where letturaIniziale != null select letturaIniziale);

                // -------------------------------
                // Letture esercizio
                // -------------------------------
                const string hqlLetture = "FROM LetturaContatore LET WHERE LET.Contatore = :contatore AND LET.Data >= :dataIniziale AND LET.Data <= :dataFinale";
                var lettureEsercizio = _daoFactory.GetLetturaContatoreDao().GetByQuery(hqlLetture, new[] { new QueryParam("contatore", contatore), new QueryParam("dataIniziale", dataIniziale), new QueryParam("dataFinale", dataFinale) }).ToList();

                // -------------------------------
                // Letture finali
                // -------------------------------
                var lettureFinali = new List<LetturaContatore>(listaUnita.Count);
                lettureFinali.AddRange(from unita in listaUnita let hql = "FROM LetturaContatore LET WHERE LET.UnitaImmobiliare = :unita AND LET.Contatore = :contatore AND LET.Data > :data ORDER BY LET.Data DESC" select (LetturaContatore) _daoFactory.GetLetturaContatoreDao().GetUniqueResult(hql, 0, new[] {new QueryParam("data", dataFinale), new QueryParam("contatore", contatore), new QueryParam("unita", unita)}) into letturaFinale where letturaFinale != null select letturaFinale);

                var letture = new List<LetturaContatore>(lettureEsercizio.Count + (listaUnita.Count * 2));
                letture.AddRange(lettureIniziali);
                letture.AddRange(lettureEsercizio);
                letture.AddRange(lettureFinali);

                // ====================================================================
                //  Conta Calorie
                //  Per conta calorie propongo solo due date: inizio e fine esercizio
                // ====================================================================
                if (!IsAllowAddDate(contatore.ID))
                {
                    if (letture.All(item => item.Data != dataIniziale))
                        letture.AddRange(listaUnita.Select(unitaImmobiliare => new LetturaContatore(contatore, unitaImmobiliare, dataIniziale, 0m)));

                    if (letture.All(item => item.Data != dataFinale))
                        letture.AddRange(listaUnita.Select(unitaImmobiliare => new LetturaContatore(contatore, unitaImmobiliare, dataFinale, 0m)));
                }

                return letture;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato durante la lettura delle letture contatore per data - " + Library.Utility.GetMethodDescription() + " - idContatore:" + contatore.ID + " - dataIniziale:" + dataIniziale.ToShortDateString() + " - dataFinale:" + dataFinale.ToShortDateString(), ex);
                throw;
            }
        }
        public string SalvaContatori(IList<ContatoreDTO> contatori)
        {
            try
            {
                var message = string.Empty;

                foreach (var dto in contatori)
                {
                    try
                    {
                        Contatore contatore;
                        if (dto.ID > 0)
                        {
                            contatore = _daoFactory.GetContatoreDao().GetById(dto.ID, false);
                            if (contatore != null)
                            {
                                if (contatore.IsContaCalorie != dto.IsContaCalorie && contatore.Letture.Count > 0)
                                {
                                    message = string.Format("Non è possibile modificare la tipologia del contatore '{0}', sono già state registrate delle letture", contatore.Descrizione);
                                    break;
                                }
                                contatore.Tipo = _daoFactory.GetTipoContatoreDao().GetById(dto.IdTipo, false);
                                contatore.Codice = dto.Codice;
                                contatore.IsCondominiale = dto.IsCondominiale;
                                contatore.IsContaCalorie = dto.IsContaCalorie;
                                contatore.Descrizione = dto.Descrizione;
                            }
                        }
                        else
                        {
                            contatore = new Contatore(_daoFactory.GetTipoContatoreDao().GetById(dto.IdTipo, false), dto.Codice, dto.Descrizione, _daoFactory.GetCondominioDao().GetById(dto.CodiceCondominio, false)) {IsCondominiale = dto.IsCondominiale, IsContaCalorie = dto.IsContaCalorie};
                            _daoFactory.GetContatoreDao().SaveOrUpdate(contatore);
                        }

                        if (dto.CodiceUtenza > 0 && contatore != null)
                            contatore.Utenza = _daoFactory.GetUtenzaDao().GetById(dto.CodiceUtenza.GetValueOrDefault(), false);
                    }
                    catch (Exception ex)
                    {
                        
                        _log.Error("Errore inaspettato durante il salvataggio di un singolo contatore: " + Library.Utility.GetMethodDescription() + " - idCondominio:" + dto.CodiceCondominio + " - idContatore:" + dto.ID, ex);
                        throw;
                    }
                }

                return message;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore inaspettato durante il salvataggio dei contatori: " + Library.Utility.GetMethodDescription() + " - idCondominio:" + contatori[0].CodiceCondominio, ex);
                throw;
            }
        }