public ActionResult Create(TariffViewModel tariffViewModel) { string fuel = tariffViewModel.fuel; int meterId = tariffViewModel.meterId; int propertyId = tariffViewModel.BelongsToProperty; try { if (ModelState.IsValid) { Tariff tariff = TariffConverter.createTariffFromViewModel(tariffViewModel); EMResponse response = JsonConvert.DeserializeObject<EMResponse>(emAPI.createTariff(tariff.SCValue, tariff.StartDate.ToString(), tariff.SCPeriod.Id, tariff.BandPeriod.Id, tariffViewModel.meterId)); if (response.status == EMResponse.OK) { int tariffId = JsonConvert.DeserializeObject<int>(response.data); foreach (TariffBand band in tariff.Bands) { EMResponse bandResponse = JsonConvert.DeserializeObject<EMResponse>(emAPI.createTariffBand(band.UpperkWhLimit, band.LowerkWhLimit, band.UnitRate, tariffId)); if (bandResponse.status != EMResponse.OK) { return View("Error"); } } return RedirectToAction("Home", "Meter", new { meterId = tariffViewModel.meterId, propertyId = tariffViewModel.BelongsToProperty, type = tariffViewModel.fuel }); } } else { return View(tariffViewModel); } return View(tariffViewModel); } catch { return View("Error"); } }
// // GET: /Tariff/Create public ActionResult Create(int meterId, int propertyId, string fuel) { try { TariffViewModel model = new TariffViewModel(); model.fuel = fuel; model.meterId = meterId; model.BelongsToProperty = propertyId; model.MinimumStartDate = Convert.ToDateTime(ResponseReader.convertTo<string>(emAPI.getMinimumTariffDate(meterId))); model.StartDate = model.MinimumStartDate; ///cannot convert from JSON to a List<Period>, despite JSON being valid. Therefore SCPeriods is populated on ViewModel creation, see TariffViewModel.cs. return View(model); } catch { return View("Error"); } }
// // GET: /Tariff/Edit/5 public ActionResult Edit(int tariffId, int meterId, int propertyId, string type) { try { TariffViewModel model = new TariffViewModel(); Tariff tariff = ResponseReader.convertTo<Tariff>(emAPI.getTariff(tariffId)); model = TariffConverter.createTariffViewFromTariff(tariff, true); TimeSpan oneDay = new TimeSpan(1, 0, 0, 0); model.MinimumStartDate = Convert.ToDateTime(ResponseReader.convertTo<string>(emAPI.getMinimumTariffDateForEdit(meterId))); model.StartDate = model.MinimumStartDate + oneDay; model.meterId = meterId; model.BelongsToProperty = propertyId; model.fuel = type; return View(model); } catch { return View("Error"); } }
public ActionResult Edit(int id, TariffViewModel model) { try { if (ModelState.IsValid) { Tariff updatedTariff = TariffConverter.createTariffFromViewModel(model); string updatedTariffJSON = JsonConvert.SerializeObject(updatedTariff); EMResponse response = JsonConvert.DeserializeObject<EMResponse>(emAPI.editTariff(id, updatedTariffJSON)); if (response.status == EMResponse.OK) { return RedirectToAction("Home", "Meter", new { meterId = model.meterId, propertyId = model.BelongsToProperty, type = model.fuel }); } else { return View("Error"); } } return View(model); } catch { return View("Error"); } }
public ActionResult Delete(TariffViewModel model) { try { EMResponse response = JsonConvert.DeserializeObject<EMResponse>(emAPI.deleteTariff(model.Id)); if (response.status == EMResponse.OK) { return RedirectToAction("Home", "Meter", new { meterId = model.meterId, propertyId = model.BelongsToProperty, type = model.fuel }); } else { return View("Error"); } } catch { return View("Error"); } }
public MeterViewModel(Meter m) { ///populate fiel specific properties /// ElectricityMeter elecMeter = m as ElectricityMeter; GasMeter gasMeter = m as GasMeter; if (elecMeter != null) { this.ScalingFactor = elecMeter.ScalingFactor; } else if (gasMeter != null) { this.MeterCoefficient = gasMeter.MeterCoefficient; this.CorrectionFactor = gasMeter.CorrectionFactor; this.CalorificValue = gasMeter.CalorificValue; if (gasMeter.MeterCoefficient == 0.028316846) { this.MeterUnits = "cubic feet"; } if (gasMeter.MeterCoefficient == 0.28316846) { this.MeterUnits = "10s of cubic feet"; } if (gasMeter.MeterCoefficient == 2.8316846) { this.MeterUnits = "100s of cubic feet"; } if (gasMeter.MeterCoefficient == 1) { this.MeterUnits = "cubic meters"; } } ///load tariff view model with data from meter /// Meter = m; Tariff = new TariffViewModel(); if (Meter.Tariffs.Count == 0) { ///no tariff set yet /// Tariff = null; } else { ///get most recent tariff /// Meter.Tariffs = Meter.Tariffs.OrderByDescending(t => t.StartDate).ToList(); Tariff currentTariff = Meter.Tariffs.ElementAt(0); currentTariff.Bands = Meter.Tariffs.ElementAt(0).Bands.ToList(); ///convert model to viewModel /// Tariff = TariffConverter.createTariffViewFromTariff(currentTariff, false); } }
public MeterViewModel(Meter m) { ///populate fiel specific properties /// ElectricityMeter elecMeter = m as ElectricityMeter; GasMeter gasMeter = m as GasMeter; if (elecMeter != null) { this.ScalingFactor = elecMeter.ScalingFactor; } else if ( gasMeter != null) { this.MeterCoefficient = gasMeter.MeterCoefficient; this.CorrectionFactor = gasMeter.CorrectionFactor; this.CalorificValue = gasMeter.CalorificValue; if (gasMeter.MeterCoefficient == 0.028316846) { this.MeterUnits = "cubic feet"; } if (gasMeter.MeterCoefficient == 0.28316846) { this.MeterUnits = "10s of cubic feet"; } if (gasMeter.MeterCoefficient == 2.8316846) { this.MeterUnits = "100s of cubic feet"; } if (gasMeter.MeterCoefficient == 1) { this.MeterUnits = "cubic meters"; } } ///load tariff view model with data from meter /// Meter = m; Tariff = new TariffViewModel(); if (Meter.Tariffs.Count == 0) { ///no tariff set yet /// Tariff = null; } else { ///get most recent tariff /// Meter.Tariffs = Meter.Tariffs.OrderByDescending(t => t.StartDate).ToList(); Tariff currentTariff = Meter.Tariffs.ElementAt(0); currentTariff.Bands = Meter.Tariffs.ElementAt(0).Bands.ToList(); ///convert model to viewModel /// Tariff = TariffConverter.createTariffViewFromTariff(currentTariff, false); } }
public static Tariff createTariffFromViewModel(TariffViewModel tariffViewModel) { Tariff tariff = new Tariff(); if (tariffViewModel.Id != 0) { tariff.Id = tariffViewModel.Id; } tariff.SCPeriod = new Period { Id = tariffViewModel.SCPeriodId }; tariff.BandPeriod = new Period { Id = tariffViewModel.BandPeriodId }; tariff.SCValue = tariffViewModel.SCValue; tariff.StartDate = tariffViewModel.StartDate; tariff.Bands = new List<TariffBand>(); TariffBand newBand = new TariffBand(); newBand.LowerkWhLimit = (int)tariffViewModel.LowerLimit1; newBand.UnitRate = (int)tariffViewModel.Rate1; newBand.Id = tariffViewModel.Band1Id; ///isBanded is determined during conversion to tariffViewModel when the tariff object is retreived in the HTTP GET Edit method ///of the TariffController. It is preserved to HTTP POST Edit via hidden fields in the Edit.cshtml view. ///isbanded should be determined at each conversion since the user may want to edit an existing tariff to include additional / fewer bands /// tariffViewModel.IsBanded = !((tariffViewModel.LowerLimit1 == 0 | tariffViewModel.LowerLimit1 == null) && (tariffViewModel.UpperLimit1 == 0 | tariffViewModel.UpperLimit1 == null)); if (!tariffViewModel.IsBanded) { ///no upper limit and therefore no subsequent bands newBand.UpperkWhLimit = 0; tariff.Bands.Add(newBand); } else { ///get upperLimit for first band & save to tariff model object newBand.UpperkWhLimit = (int)tariffViewModel.UpperLimit1; tariff.Bands.Add(newBand); ///follow same pattern for second band TariffBand newBand2 = new TariffBand(); newBand2.LowerkWhLimit = (int)tariffViewModel.LowerLimit2; newBand2.UnitRate = tariffViewModel.Rate2; newBand2.Id = tariffViewModel.Band2Id; if ((tariffViewModel.UpperLimit2 == null | tariffViewModel.UpperLimit2 == 0) && (tariffViewModel.LowerLimit2 == 0 | tariffViewModel.LowerLimit2 == null)) { ///there is no band if lower is null/zero AND upper is null/zero newBand2.UpperkWhLimit = -1; ///no band } else { ///there is a band... if (tariffViewModel.UpperLimit2 != 0) { ///with an upper limit newBand2.UpperkWhLimit = (int)tariffViewModel.UpperLimit2; } else { ///without an upper limit newBand2.UpperkWhLimit = 0; } } tariff.Bands.Add(newBand2); TariffBand newBand3 = new TariffBand(); newBand3.LowerkWhLimit = (int)tariffViewModel.LowerLimit3; newBand3.UnitRate = tariffViewModel.Rate3; newBand3.Id = tariffViewModel.Band3Id; if ((tariffViewModel.UpperLimit3 == null | tariffViewModel.UpperLimit3 == 0) && (tariffViewModel.LowerLimit3 == 0 | tariffViewModel.LowerLimit3 == null)) { ///there is no band if lower is null/zero and upper is null/zero newBand3.UpperkWhLimit = -1; ///no band } else { ///there is a band... if (tariffViewModel.UpperLimit3 != 0) { ///with an upper limit newBand3.UpperkWhLimit = (int)tariffViewModel.UpperLimit3; } else { ///without an upper limit newBand3.UpperkWhLimit = 0; } } tariff.Bands.Add(newBand3); } return tariff; }
public static TariffViewModel createTariffViewFromTariff(Tariff tariffModel, bool forEditing) { TariffViewModel tariffView = new TariffViewModel(); tariffView.Id = tariffModel.Id; tariffView.StartDate = tariffModel.StartDate; tariffView.SCPeriodId = tariffModel.SCPeriod.Id; tariffView.SCValue = tariffModel.SCValue; tariffView.BandPeriodId = tariffModel.BandPeriod.Id; if (tariffModel.Bands.Count == 0) { ///there are no bands so we can just return now return tariffView; } else if (tariffModel.Bands.ElementAt(0) != null) { tariffView.IsBanded = (tariffModel.Bands.ElementAt(0).UpperkWhLimit > 0); } else { tariffView.IsBanded = false; } for (int i = 0; i < tariffModel.Bands.Count; i++) { TariffBand band = tariffModel.Bands.ElementAt(i); if (i == 0) { tariffView.LowerLimit1 = band.LowerkWhLimit; tariffView.UpperLimit1 = band.UpperkWhLimit; tariffView.Rate1 = band.UnitRate; tariffView.Band1Id = band.Id; } if (i == 1) { tariffView.LowerLimit2 = band.LowerkWhLimit; tariffView.UpperLimit2 = band.UpperkWhLimit; tariffView.Rate2 = band.UnitRate; tariffView.Band2Id = band.Id; } if (i == 2) { tariffView.LowerLimit3 = band.LowerkWhLimit; tariffView.UpperLimit3 = band.UpperkWhLimit; tariffView.Rate3 = band.UnitRate; tariffView.Band3Id = band.Id; } } if (forEditing) { if (tariffView.UpperLimit2 == -1) tariffView.UpperLimit2 = 0; if (tariffView.UpperLimit3 == -1) tariffView.UpperLimit3 = 0; } return tariffView; }