//[Authorize(Roles = "admin")] public ActionResult StockPrediction() { var supplierName = User.Identity.Name; var context = new ATokoDb(); List <Product> list = new List <Product>(); Supplier ret = context.Suppliers.Where(o => o.SupplierName == supplierName).FirstOrDefault(); if (ret != null) { list = context.Products.Where(o => o.SupplierID == ret.SupplierID).ToList(); } else if (User.IsInRole("admin") || User.IsInRole("sales")) { list = context.Products.ToList(); } ViewBag.arrOrderQty = "[]"; ViewBag.arrOrderDate = "[]"; ViewBag.productName = ""; ViewBag.Result = ""; List <Product> listproduct = list; foreach (var item in listproduct) { item.ProductName = item.ProductCode + " - " + item.ProductName; } return(View(new ViewModel { listProduct = listproduct })); }
private static void _insertLog() { using (var context = new ATokoDb()) { try { context.AuditLogs.Add(_log); context.SaveChanges(); } catch (Exception ex) { throw ex; } } }
public IHttpActionResult PostTest(ViewModel model) { var kurs = new Kurs { Currency = model.Currency, Rate = model.Rate }; var supplier = new Supplier { SupplierName = model.SupplierName }; using (var context = new ATokoDb()) { context.KursSG.Add(kurs); context.Suppliers.Add(supplier); context.SaveChanges(); } return(CreatedAtRoute("DefaultApi", new { id = kurs.KursID }, kurs)); }
public ActionResult StockPrediction(ViewModel obj) { var supplierName = User.Identity.Name; var context = new ATokoDb(); if (!string.IsNullOrEmpty(obj.ProductCode)) { //string productCode = ""; ViewBag.productName = context.Products.Where(o => o.ProductCode == obj.ProductCode).FirstOrDefault().ProductName; string querySales = string.Format("EXEC [dbo].[sp_GetSalesByProductCodeAndSupplierName] @productCode = '{0}', @supplierName = '{1}'", obj.ProductCode, supplierName); string queryStock = string.Format("EXEC [dbo].[sp_GetStockByProductCodeAndSupplierName] @productCode = '{0}', @supplierName = '{1}'", obj.ProductCode, supplierName); string queryOrder = string.Format("EXEC [dbo].[sp_GetProductInByProductCodeAndSupplierName] @productCode = '{0}', @supplierName = '{1}'", obj.ProductCode, supplierName); IEnumerable <FuzzyViewModel> listSalesByMonth = db.Database.SqlQuery <FuzzyViewModel>(querySales); IEnumerable <FuzzyViewModel> listStocksByMonth = db.Database.SqlQuery <FuzzyViewModel>(queryStock); IEnumerable <FuzzyViewModel> listOrderByMonth = db.Database.SqlQuery <FuzzyViewModel>(queryOrder); if (listOrderByMonth.Count() > 0 && listSalesByMonth.Count() > 0 && listStocksByMonth.Count() > 0) { if (listOrderByMonth.Count() != listSalesByMonth.Count()) { int count = listStocksByMonth.Count(); List <FuzzyViewModel> newList = new List <FuzzyViewModel>(); bool isSales = false; if (listOrderByMonth.Count() != count) { isSales = false; } else if (listSalesByMonth.Count() != count) { isSales = true; } if (isSales) { foreach (var item in listStocksByMonth) { if (listSalesByMonth.Where(o => o.Year == item.Year && o.Month == item.Month).Count() > 0) { newList.Add(listSalesByMonth.Where(o => o.Year == item.Year && o.Month == item.Month).FirstOrDefault()); } else { newList.Add(new FuzzyViewModel { Month = item.Month, Year = item.Year, ProductCode = item.ProductCode, Qty = 0 }); } } listSalesByMonth = newList; } else { foreach (var item in listStocksByMonth) { if (listOrderByMonth.Where(o => o.Year == item.Year && o.Month == item.Month).Count() > 0) { newList.Add(listOrderByMonth.Where(o => o.Year == item.Year && o.Month == item.Month).FirstOrDefault()); } else { newList.Add(new FuzzyViewModel { Month = item.Month, Year = item.Year, ProductCode = item.ProductCode, Qty = 0 }); } } listOrderByMonth = newList; } } int maxSales = listSalesByMonth.Max(o => o.Qty); int minSales = listSalesByMonth.Min(o => o.Qty); var lastSalesObj = listSalesByMonth.OrderByDescending(o => o.Year).ThenByDescending(o => o.Month).FirstOrDefault(); int lastSales = lastSalesObj.Qty; int maxStock = listStocksByMonth.Max(o => o.Qty); int minStock = listStocksByMonth.Min(o => o.Qty); var lastStockObj = listStocksByMonth.OrderByDescending(o => o.Year).ThenByDescending(o => o.Month).FirstOrDefault(); int lastStock = lastStockObj.Qty; int maxOrder = listOrderByMonth.Max(o => o.Qty); int minOrder = listOrderByMonth.Min(o => o.Qty); var lastOrderObj = listOrderByMonth.OrderByDescending(o => o.Year).ThenByDescending(o => o.Month).FirstOrDefault(); int lastOrder = lastOrderObj.Qty; var sales = new Fuzzy(); sales.MaxNumber = maxSales; sales.MinNumber = minSales; sales.Input = lastSales; sales.CalculateLinearUp(); sales.CalculateLinearDown(); var stock = new Fuzzy(); stock.MaxNumber = maxStock; stock.MinNumber = minStock; stock.Input = lastStock; stock.CalculateLinearUp(); stock.CalculateLinearDown(); var order = new Fuzzy(); order.MaxNumber = maxOrder; order.MinNumber = minOrder; order.Input = lastOrder; order.CalculateLinearUp(); order.CalculateLinearDown(); var ruleSet = new Fuzzy(); var item1 = new Fuzzy(); item1.InputSales = sales.ResultLinearDown; item1.InputStock = stock.ResultLinearUp; ruleSet.Rule1 = item1.ImplicationFunction(); var item2 = new Fuzzy(); item2.InputSales = sales.ResultLinearDown; item2.InputStock = stock.ResultLinearDown; ruleSet.Rule2 = item2.ImplicationFunction(); var item3 = new Fuzzy(); item3.InputSales = sales.ResultLinearUp; item3.InputStock = stock.ResultLinearUp; ruleSet.Rule3 = item3.ImplicationFunction(); var item4 = new Fuzzy(); item4.InputSales = sales.ResultLinearUp; item4.InputStock = stock.ResultLinearDown; ruleSet.Rule4 = item4.ImplicationFunction(); ruleSet.RuleComposition(); if (ruleSet.DownResult < ruleSet.UpResult) { ruleSet.OrderStatus = 1; // Up } else if (ruleSet.DownResult > ruleSet.UpResult) { ruleSet.OrderStatus = 2; // Down } else { ruleSet.OrderStatus = 1; } //else if(ruleSet.UpResult == ruleSet.DownResult) //{ // ruleSet.OrderStatus = 3; //} var membershipFunction = new Fuzzy(); if (ruleSet.OrderStatus == 1) // Up { membershipFunction.OrderMax = (order.Range * ruleSet.UpResult) + order.MinNumber; membershipFunction.OrderMin = (order.Range * ruleSet.DownResult) + order.MinNumber; membershipFunction.OrderStatus = 1; } else if (ruleSet.OrderStatus == 2) // Down { membershipFunction.OrderMax = (order.Range * ruleSet.UpResult) + order.MaxNumber; membershipFunction.OrderMin = (order.Range * ruleSet.DownResult) + order.MaxNumber; membershipFunction.OrderStatus = 2; } //else if (ruleSet.OrderStatus == 3) //{ // membershipFunction.OrderMax = (order.Range * ruleSet.UpResult) + order.MaxNumber; // membershipFunction.OrderMin = (order.Range * ruleSet.DownResult) + order.MaxNumber; // membershipFunction.OrderStatus = 3; //} membershipFunction.MaxNumber = order.MaxNumber; membershipFunction.MinNumber = order.MinNumber; membershipFunction.UpResult = ruleSet.UpResult; membershipFunction.DownResult = ruleSet.DownResult; //ViewBag.Result = membershipFunction.Defuzzyfication(); var listSeries = new List <ReportFuzzyViewModel>(); var date = new DateTime(lastOrderObj.Year, lastOrderObj.Month, 1); var nextMonth = date.AddMonths(1); var listOrder = listOrderByMonth.OrderBy(o => o.Year).ThenBy(o => o.Month); var listSales = listSalesByMonth.OrderBy(o => o.Year).ThenBy(o => o.Month).ToList(); foreach (var item in listOrder) { listSeries.Add(new ReportFuzzyViewModel { Date = new DateTime(item.Year, item.Month, 1).ToString("MMM yy"), Quantity = item.Qty }); } listSeries.Add(new ReportFuzzyViewModel { Date = nextMonth.ToString("MMM yy"), Quantity = 0 }); var listResult = new List <ReportFuzzyViewModel>(); listResult.Add(new ReportFuzzyViewModel { Date = nextMonth.ToString("MMM yy"), Quantity = decimal.Round(membershipFunction.Defuzzyfication()) }); var arrSalesQty = "["; var arrOrderQty = "["; var arrOrderDate = "["; var arrOrderResult = "["; decimal lastSeries = 0; int indexLast = 0; for (int i = 0; i < listSeries.Count; i++) { var x = i + 1; if (x >= listSeries.Count) { indexLast = i - 1; lastSeries = listSeries[i - 1].Quantity; arrSalesQty = arrSalesQty + "null"; arrOrderQty = arrOrderQty + "null";//string.Format("{0}", listSeries[i].Quantity); arrOrderDate = arrOrderDate + string.Format("'{0}'", listSeries[i].Date); } else { arrSalesQty = arrSalesQty + string.Format("{0},", listSales[i].Qty); arrOrderQty = arrOrderQty + string.Format("{0},", listSeries[i].Quantity); arrOrderDate = arrOrderDate + string.Format("'{0}',", listSeries[i].Date); } } for (int i = 0; i < listSeries.Count; i++) { var x = i + 1; if (x >= listSeries.Count) { arrOrderResult = arrOrderResult + "{y:" + listResult[0].Quantity + ",marker: {enabled: true,states: {hover: {enabled: true}}}}";//string.Format("{0}", listResult[0].Quantity); } else if (i == indexLast) { arrOrderResult = arrOrderResult + "{y:" + lastSeries + ",marker: {enabled: false,states: {hover: {enabled: false}}}},"; } else { arrOrderResult = arrOrderResult + "null,"; } } //if (arrOrderQty.Length > 2) //{ // arrOrderQty = arrOrderQty.Remove(arrOrderQty.Length - 1); //} //if (arrOrderDate.Length > 2) //{ // arrOrderDate = arrOrderDate.Remove(arrOrderDate.Length - 1); //} arrSalesQty = arrSalesQty + "]"; arrOrderQty = arrOrderQty + "]"; arrOrderDate = arrOrderDate + "]"; arrOrderResult = arrOrderResult + "]"; ViewBag.arrSalesQty = arrSalesQty; ViewBag.arrOrderQty = arrOrderQty; ViewBag.arrOrderDate = arrOrderDate; ViewBag.arrOrderResult = arrOrderResult; ViewBag.Result = "According to the calculations, the number of products (" + ViewBag.productName + ") should be ordered on the next month (" + nextMonth.ToString("MMM yy") + ") is about (" + decimal.Round(membershipFunction.Defuzzyfication()) + ") pieces"; } else { ViewBag.ErrMsg = "Insufficient data, cannot calculating stock prediction"; } } else { ViewBag.ErrMsg = "Please select a product"; } List <Product> list = new List <Product>(); Supplier ret = context.Suppliers.Where(o => o.SupplierName == supplierName).FirstOrDefault(); if (ret != null) { list = context.Products.Where(o => o.SupplierID == ret.SupplierID).ToList(); } else if (User.IsInRole("admin") || User.IsInRole("sales")) { list = context.Products.ToList(); } List <Product> listproduct = list; foreach (var item in listproduct) { item.ProductName = item.ProductCode + " - " + item.ProductName; } obj.listProduct = listproduct; return(View(obj)); }