private int SumOfIntermediateIndicatorCollectedData(IntermediateIndicator intermediate, int?year, int quarter) { List <decimal> collectedData; IQueryable <Result> IqueryableData; if (year != null) { IqueryableData = this._context.Results.Where(r => r.IntermediateIndicatorId == intermediate.Id) .Where(r1 => r1.Date.Year == year); } else { IqueryableData = this._context.Results.Where(r => r.IntermediateIndicatorId == intermediate.Id); } //get the data based on the quarter selected IqueryableData = this.GetYearQuarters(IqueryableData, quarter); collectedData = IqueryableData.Select(i => i.Value).ToList(); var sumOfCollectedData = (int)collectedData.Sum(); return(sumOfCollectedData); }
private bool IsWithinTarget(ProjectIndicator projectIndicator, IntermediateIndicator intermediateIndicator) { var projectIndicatorTarget = projectIndicator.Target; var projectIntermediates = projectIndicator.IntermediateIndicators; decimal totalItermediateTargets = 0; //loop through intermediate foreach (var intermediate in projectIntermediates) { totalItermediateTargets += intermediate.Target; } totalItermediateTargets += intermediateIndicator.Target; if (totalItermediateTargets > projectIndicatorTarget) { return(false); } return(true); }
public ActionResult Save(IntermediateIndicator intermediateIndicator) { //do validation if (ModelState.IsValid) { //check if the is an indicator with the name provided in the form in database if (this._context.IntermediateIndicators.Any(i => i.Name == intermediateIndicator.Name)) { //Its a duplicate so flag an error ModelState.AddModelError("Name", "An Indicator with the name you provided already exist in the system"); //get a list of project Indicators var projectIndicators = this._context.ProjectIndicators.ToList(); List <SelectListItem> list = new List <SelectListItem>(); //add project indicators to the list foreach (var indicator in projectIndicators) { list.Add(new SelectListItem() { Value = indicator.Id.ToString(), Text = indicator.Name }); } ViewBag.ProjectIndicatorId = list; //create a list of unit types List <SelectListItem> data = new List <SelectListItem>(); List <string> units = new List <string>() { "Number", "Percentage", "Metric ton", "Hectare(Ha)", "Yes/No" }; foreach (var unit in units) { data.Add(new SelectListItem() { Value = unit, Text = unit, }); } ViewBag.Unit = data; return(View("Create", intermediateIndicator)); } //validate the base target //get the target of the object indicator var projectIndicator = this._context.ProjectIndicators.SingleOrDefault(pi => pi.Id == intermediateIndicator.ProjectIndicatorId); //check if the intermediate target doesnt supersede the project indicator target var projectIndicatorTarget = projectIndicator.Target; var projectIntermediates = projectIndicator.IntermediateIndicators; bool isWithinTarget = this.IsWithinTarget(projectIndicator, intermediateIndicator); if (!isWithinTarget) { ModelState.AddModelError("Target", "The Target entered superseded the project indicator target"); //get a list of project Indicators var projectIndicators = this._context.ProjectIndicators.ToList(); List <SelectListItem> list = new List <SelectListItem>(); //add project indicators to the list foreach (var indicator in projectIndicators) { list.Add(new SelectListItem() { Value = indicator.Id.ToString(), Text = indicator.Name }); } ViewBag.ProjectIndicatorId = list; //create a list of unit types List <SelectListItem> data = new List <SelectListItem>(); List <string> units = new List <string>() { "Number", "Percentage", "Metric ton", "Hectare(Ha)", "Yes/No" }; foreach (var unit in units) { data.Add(new SelectListItem() { Value = unit, Text = unit, }); } ViewBag.Unit = data; return(View("Create", intermediateIndicator)); } //check if this is a new request or an update if (intermediateIndicator.Id == 0) { this._context.IntermediateIndicators.Add(intermediateIndicator); this._context.SaveChanges(); TempData["SuccessMessage"] = "Added a new intermediate indicator"; return(RedirectToAction("Details", "SubComponent", new { id = intermediateIndicator.SubComponentId })); } //update the existing intermediate indicator //get the intermediate indicator from the database var intermediateIndicatorDb = this._context.IntermediateIndicators.SingleOrDefault(i => i.Id == intermediateIndicator.Id); if (intermediateIndicatorDb != null) { intermediateIndicatorDb.Name = intermediateIndicator.Name; intermediateIndicatorDb.ProjectIndicatorId = intermediateIndicator.ProjectIndicatorId; intermediateIndicatorDb.Target = intermediateIndicator.Target; intermediateIndicatorDb.BaseLine = intermediateIndicator.BaseLine; intermediateIndicatorDb.DataSourceMethodology = intermediateIndicator.DataSourceMethodology; intermediateIndicatorDb.DataCollector = intermediateIndicator.DataCollector; intermediateIndicatorDb.Frequency = intermediateIndicator.Frequency; intermediateIndicatorDb.Unit = intermediateIndicator.Unit; } else { return(HttpNotFound()); } this._context.SaveChanges(); TempData["SuccessMessage"] = string.Format("Update details of InterMediate indicator successfully"); } return(RedirectToAction("Details", "SubComponent", new { id = intermediateIndicator.SubComponentId })); }