コード例 #1
0
        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 }));
        }
コード例 #2
0
        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 }));
        }
コード例 #3
0
        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]);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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
            });
        }
コード例 #6
0
        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;
            }
        }
コード例 #7
0
        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]);
        }
コード例 #8
0
 private bool EditUpdate(GeoArea geoArea, EquationYear equationYear, string userId, string[] elementValuesKeys)
 {
     DeleteUpdate(geoArea, equationYear);
     return(AddUpdate(geoArea, equationYear, userId, elementValuesKeys));
 }
コード例 #9
0
        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
            {
            }
        }