public JsonResult GeoAreasConfirm() { var geoAreaID = Request["GeoAreaID"]; var equationYearID = Request["EquationYearID"]; GeoArea geoArea = null; EquationYear equationYear = null; if (!string.IsNullOrWhiteSpace(geoAreaID)) { geoArea = db.GeoAreas.Find(int.Parse(geoAreaID)); } if (!string.IsNullOrWhiteSpace(geoAreaID)) { int _equationYearID = int.Parse(equationYearID); equationYear = db.EquationYears.Include(x => x.Equation.Indicator).Where(x => x.ID == _equationYearID).FirstOrDefault(); } if (equationYear == null || geoArea == null) { return(Json(new { success = false, error = "برجاء إدخال بيانات صحيحة" })); } double value = CalculateEquation(equationYear, geoArea); DeleteCalculated(geoArea, equationYear); Commit(geoArea, equationYear, value); db.SaveChanges(); UpdateLog(geoArea, equationYear, "commit"); return(Json(new { success = true })); }
public JsonResult GeoAreas() { var geoAreaID = Request["GeoAreaID"]; var equationYearID = Request["EquationYearID"]; var action = Request["action"]; string[] elementValuesKeys = Request.Form.AllKeys.Where(x => x.StartsWith("ElementValue_")).ToArray(); GeoArea geoArea = null; EquationYear equationYear = null; if (!string.IsNullOrWhiteSpace(geoAreaID)) { geoArea = db.GeoAreas.Find(int.Parse(geoAreaID)); } if (!string.IsNullOrWhiteSpace(geoAreaID)) { int _equationYearID = int.Parse(equationYearID); equationYear = db.EquationYears.Include(x => x.Equation.Indicator).Where(x => x.ID == _equationYearID).FirstOrDefault(); } if (equationYear == null || geoArea == null) { return(Json(new { success = false, error = "برجاء إدخال بيانات صحيحة" })); } string userId = User.Identity.GetUserId(); try { var calculate = false; if (action.Equals("delete")) { DeleteUpdate(geoArea, equationYear); DeleteCalculated(geoArea, equationYear); } else if (action.Equals("add")) { calculate = AddUpdate(geoArea, equationYear, userId, elementValuesKeys); } else if (action.Equals("edit")) { calculate = EditUpdate(geoArea, equationYear, userId, elementValuesKeys); } DeleteCalculated(geoArea, equationYear); if ((action.Equals("add") || action.Equals("edit")) && calculate) { double value = CalculateEquation(equationYear, geoArea); Commit(geoArea, equationYear, value); } db.SaveChanges(); UpdateLog(geoArea, equationYear, action); } catch (Exception ex) { return(Json(new { success = false, error = "برجاء إدخال بيانات صحيحة" })); } return(Json(new { success = true, action })); }
private void DeleteCalculated(GeoArea geoArea, EquationYear equationYear) { var oldCalculatedValues = db.CalculatedValues.Where(x => x.EquationYearID == equationYear.ID && x.GeoAreaID == geoArea.ID).ToList(); for (int i = oldCalculatedValues.Count - 1; i >= 0; i--) { db.CalculatedValues.Remove(oldCalculatedValues[i]); } }
private bool AddUpdate(GeoArea geoArea, EquationYear equationYear, string userId, string[] elementValuesKeys) { var calculate = true; string values = ""; var elementIds = new List <int>(); foreach (string evs in elementValuesKeys) { string eeId = evs.Replace("ElementValue_", ""); EquationElement equationElement = db.EquationElements.Find(int.Parse(eeId)); if (equationElement == null) { throw new Exception("Equation Element Not Found"); } string strValue = Request[evs].Trim(); double _fValue = 0; double?fValue = null; if (string.IsNullOrEmpty(strValue) || double.TryParse(strValue, out _fValue)) { if (!string.IsNullOrEmpty(strValue)) { fValue = _fValue; } else { calculate = false; } values += string.Format("{0} : {1}\r\n", equationElement.Element.Name, strValue); var createdAt = DateTime.Now; var elementValue = new ElementValue() { EquationElementID = equationElement.ID, EquationYearID = equationYear.ID, GeoAreaID = geoArea.ID, Value = fValue, ApplicationUserID = userId, CreatedAt = createdAt, }; db.ElementValues.Add(elementValue); elementIds.Add(equationElement.ElementID); } else { throw new Exception("Value is in correct"); } } if (calculate) { var elementYearValues = db.ElementYearValues.Where(x => x.GeoAreaID == geoArea.ID && x.Year == equationYear.Year && elementIds.Contains(x.ElementID)).ToList(); foreach (var eyv in elementYearValues) { eyv.IsCommited = true; db.Entry(eyv).State = EntityState.Modified; } } return(calculate); }
private void Commit(GeoArea geoArea, EquationYear equationYear, double value) { DateTime commitedAt = DateTime.Now; foreach (var elementValue in equationYear.ElementValues.Where(x => x.GeoAreaID == geoArea.ID)) { elementValue.CommitedAt = commitedAt; elementValue.IsCommited = true; } db.CalculatedValues.Add(new CalculatedValue() { EquationYearID = equationYear.ID, GeoAreaID = geoArea.ID, Value = value }); }
private void DeleteUpdate(GeoArea geoArea, EquationYear equationYear) { var elementValues = db.ElementValues.Where(x => x.GeoAreaID == geoArea.ID && x.EquationYearID == equationYear.ID).ToList(); var elementIds = elementValues.Select(x => x.EquationElement.ElementID).ToArray(); for (int i = elementValues.Count - 1; i >= 0; i--) { db.ElementValues.Remove(elementValues[i]); } var elementYearValues = db.ElementYearValues.Where(x => x.GeoAreaID == geoArea.ID && x.Year == equationYear.Year && elementIds.Contains(x.ElementID)).ToList(); foreach (var eyv in elementYearValues) { eyv.IsCommited = false; db.Entry(eyv).State = EntityState.Modified; } }
private double CalculateEquation(EquationYear equationYear, GeoArea geoArea) { string equationText = equationYear.Equation.EquationText; foreach (var elementValue in equationYear.ElementValues.Where(x => x.GeoAreaID == geoArea.ID)) { equationText = equationText.Replace("[" + elementValue.EquationElement.Element.Name + "]", "(CAST (" + elementValue.Value.ToString() + " as float(53)))"); } equationText = equationText.Replace(";", "").Replace("--", "").Replace("!", ""); var results = db.Database.SqlQuery <double>("SELECT CAST ((" + equationText + ") as float(53)) as V1").ToList(); if (results.Count != 1) { throw new Exception("Error"); } return((double)results[0]); }
private bool EditUpdate(GeoArea geoArea, EquationYear equationYear, string userId, string[] elementValuesKeys) { DeleteUpdate(geoArea, equationYear); return(AddUpdate(geoArea, equationYear, userId, elementValuesKeys)); }
private void UpdateLog(GeoArea geoArea, EquationYear equationYear, string action) { string indicatorName = equationYear.Equation.Indicator.Name; string geoAreaName = geoArea.Name; string geoAreaType = geoArea.Type.Equals("Bundle") ? "نطاق جغرافي" : GeoArea.Types[geoArea.Type]; string year = equationYear.Year.ToString(); string values = ""; int valuesCount = 0; foreach (ElementValue ev in equationYear.ElementValues.Where(x => x.GeoAreaID == geoArea.ID)) { values += string.Format("{0} : {1}\r\n", ev.EquationElement.Element.Name, ev.Value); valuesCount += 1; } try { if (action == "delete") { db.UpdateLogs.Add(new Models.UpdateLog() { ActionDate = DateTime.Now, UserName = User.Identity.GetUserName() + " - " + User.GetName(), Log = string.Format("تم حذف بيانات قيم المؤشر {0} لسنة {1} ل{2} {3}", indicatorName, year, geoAreaType, geoAreaName), Details = values, ApplicationUserId = User.Identity.GetUserId(), ValuesCount = valuesCount, Type = "delete" }); } else if (action == "add") { db.UpdateLogs.Add(new Models.UpdateLog() { ActionDate = DateTime.Now, UserName = User.Identity.GetUserName() + " - " + User.GetName(), Log = string.Format("تم إضافة {4} بيانات قيم المؤشر {0} لسنة {1} ل{2} {3}", indicatorName, year, geoAreaType, geoAreaName, "وتأكيد"), Details = values, ApplicationUserId = User.Identity.GetUserId(), ValuesCount = valuesCount, Type = "add" }); } else if (action == "edit") { db.UpdateLogs.Add(new Models.UpdateLog() { ActionDate = DateTime.Now, UserName = User.Identity.GetUserName() + " - " + User.GetName(), Log = string.Format("تم تحديث {4} بيانات قيم المؤشر {0} لسنة {1} ل{2} {3}", indicatorName, year, geoAreaType, geoAreaName, "وتأكيد"), Details = values, ApplicationUserId = User.Identity.GetUserId(), ValuesCount = valuesCount, Type = "edit" }); } else if (action == "commit") { db.UpdateLogs.Add(new Models.UpdateLog() { ActionDate = DateTime.Now, UserName = User.Identity.GetUserName() + " - " + User.GetName(), Log = string.Format("تم تاكيد بيانات قيم المؤشر {0} لسنة {1} ل{2} {3}", indicatorName, year, geoAreaType, geoAreaName), Details = values, ApplicationUserId = User.Identity.GetUserId(), ValuesCount = valuesCount, Type = "commit" }); } db.SaveChanges(); } catch { } }