/// <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; }
/// <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); }
/// <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); }
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; }
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; }
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; } }
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; } }