/// <summary> /// Should forcast using 12 months data, falling back to 6 month if unavailable /// //ForcastSlope = _ForcastVals[0]; //ForcastIntercept = _ForcastVals[1]; //ForcastValue = _ForcastVals[2]; //ForcastRangeUpperBount = _ForcastVals[3]; /// </summary> /// <param name="SKUID"></param> private double[] Forcast(int SkuId, DateTime EndDate) { StatusMonContext db = new StatusMonContext(); List <double> SalesData; double[] xdata; double[] ydata; DateTime EndDate12 = EndDate.AddMonths(-12); DateTime EndDate6 = EndDate.AddMonths(-6); int date = (EndDate.Date.Year * 12 + EndDate.Date.Month); //Test if 12 Month of Data Exists if (db.SalesOrderDetails.Where(o => o.SalesOrder.OrderDate <= EndDate12).Count() > 0) { SalesData = MonthlySalesD(SkuId, EndDate.AddMonths(-11), EndDate); xdata = new double[] { date - 11, date - 10, date - 9, date - 8, date - 7, date - 6, date - 5, date - 4, date - 3, date - 2, date - 1, date }; //12 Months! } else if (db.SalesOrderDetails.Where(o => o.SalesOrder.OrderDate.Date <= EndDate6).Count() > 0) { //6 Months SalesData = MonthlySalesD(SkuId, EndDate.AddMonths(-5), EndDate); xdata = new double[] { date - 5, date - 4, date - 3, date - 2, date - 1, date }; //Actual Values are nominal } else { //Not enough Data to forcast accurately db.Dispose(); return(new double[] { 0, 0, 0, 0 }); } db.Dispose(); ydata = SalesData.ToArray(); return(Linear.Forcast(date + 1, xdata, ydata)); }
protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); }
private int TotalSales(int SkuId, DateTime StartDate, DateTime EndDate) { StatusMonContext db = new StatusMonContext(); int Sum = 0; if (db.SalesOrderDetails.Where(p => p.ProductID == SkuId && p.SalesOrder.OrderDate >= StartDate && p.SalesOrder.OrderDate < EndDate).Count() > 0) { Sum = (db.SalesOrderDetails.Where(p => p.ProductID == SkuId && p.SalesOrder.OrderDate >= StartDate && p.SalesOrder.OrderDate < EndDate).Sum(o => o.OrderQty)); } db.Dispose(); return(Sum); }