void Remove(Stockout stockout) { Context.Stockouts.Remove(stockout); }
public void Update(Stockout stockout) { Context.Entry(stockout).State = EntityState.Modified; Context.SaveChanges(); }
public void Delete(Stockout stockout) { this.Remove(stockout); Context.SaveChanges(); }
public void Add(Stockout stockout) { Context.Stockouts.Add(stockout); Context.SaveChanges(); }
public static void RefreshAMCValues(int storeId, Dictionary<int,long> items,int unitId) { var context = new StockoutEntities(); var genaralinfo = context.GenralInfos.First(); var endDate = DateTime.Now; var startDate = endDate.Subtract(TimeSpan.FromDays(genaralinfo.AMCRange * 30)); try { foreach (var row in items) { if (row.Value == 0) { var stockOut = new Stockout() { ItemID = row.Key, StoreID = storeId, StartDate = DateTime.Now, EndDate = null, LastIndexedTime = DateTime.Now }; context.Stockouts.Add(stockOut); context.SaveChanges(); } var allItemIds = context.AmcReports.SingleOrDefault(m => m.ItemID == row.Key && m.StoreID == storeId && m.UnitID ==unitId); if(allItemIds==null) { var amcreport = new AmcReport { ItemID = row.Key, StoreID = storeId, AmcRange = genaralinfo.AMCRange, IssueInAmcRange = CalculateTotalConsumptionWithoutDOS(row.Key, storeId, startDate, DateTime.Today), DaysOutOfStock = CalculateStockoutDays(row.Key, storeId, startDate, endDate), AmcWithDOS = CalculateAverageConsumption(row.Key, storeId, startDate,endDate,CalculationOptions.Monthly), AmcWithOutDOS = CalculateTotalConsumptionWithoutDOS(row.Key, storeId, startDate, endDate) / Convert.ToDouble(genaralinfo.AMCRange), LastIndexedTime = DateTime.Now, IssueWithDOS =Builder.CalculateTotalConsumption(row.Key, storeId, startDate, DateTime.Now), UnitID = unitId }; context.AmcReports.Add(amcreport); } // Update AMC value else { allItemIds.IssueInAmcRange = CalculateTotalConsumptionWithoutDOS(row.Key, storeId, startDate, DateTime.Now); allItemIds.DaysOutOfStock = CalculateStockoutDays(row.Key, storeId, startDate, DateTime.Now); allItemIds.AmcWithDOS = CalculateAverageConsumption(row.Key, storeId, startDate, endDate,CalculationOptions.Monthly); allItemIds.AmcWithOutDOS =CalculateTotalConsumptionWithoutDOS(row.Key, storeId, startDate, endDate)/Convert.ToDouble(genaralinfo.AMCRange); allItemIds.IssueWithDOS = Builder.CalculateTotalConsumption(row.Key, storeId, startDate, DateTime.Now); allItemIds.LastIndexedTime = DateTime.Now; allItemIds.UnitID = unitId; } context.SaveChanges(); } } catch (DbUpdateException ex) { throw; } }
public static List<Stockout> GetStockOutHistory(int itemID,int storeID) { var allTransactions = TransactionDates(itemID,storeID).OrderBy(m => m.Date).ToArray(); var receipts = ReceiptsByItem(itemID,storeID).OrderBy(m => m.Date); var issues = IssuesByItem(itemID,storeID).OrderBy(m => m.Date); var disposals = DisposalsByItem(itemID,storeID).OrderBy(m => m.Date); var adjustments = AdjustmentsByItem(itemID, storeID).OrderBy(m => m.Date); var receiptsInnerJoin = (from transactionDate in allTransactions join receipt in receipts on new { transactionDate.TransactionID, transactionDate.Date, transactionDate.TransactionType } equals new { receipt.TransactionID, receipt.Date, receipt.TransactionType } into temp from receipt in temp.DefaultIfEmpty() select new Transaction { TransactionType = transactionDate.TransactionType, Date = transactionDate.Date, Quantity = receipt == null ? null : receipt.Quantity }).ToArray(); var issuesInnerJoin = (from transactionDate in allTransactions join issue in issues on new { transactionDate.TransactionID, transactionDate.Date, transactionDate.TransactionType } equals new { issue.TransactionID, issue.Date, issue.TransactionType } into temp from issue in temp.DefaultIfEmpty() select new Transaction { TransactionType = transactionDate.TransactionType, Date = transactionDate.Date, Quantity = issue == null ? null : issue.Quantity }).ToArray(); var disposalsInnerJoin = (from transactionDate in allTransactions join disposal in disposals on new { transactionDate.TransactionID, transactionDate.Date, transactionDate.TransactionType } equals new { disposal.TransactionID, disposal.Date, disposal.TransactionType } into temp from disposal in temp.DefaultIfEmpty() select new Transaction { TransactionType = transactionDate.TransactionType, Date = transactionDate.Date, Quantity = disposal == null ? null : disposal.Quantity }).ToArray(); var adjustmentsInnerJoin = (from transactionDate in allTransactions join adjustment in adjustments on new { transactionDate.TransactionID, transactionDate.Date, transactionDate.TransactionType } equals new { adjustment.TransactionID, adjustment.Date, adjustment.TransactionType } into temp from adjustment in temp.DefaultIfEmpty() select new Transaction { TransactionType = transactionDate.TransactionType, Date = transactionDate.Date, Quantity = adjustment == null ? null : adjustment.Quantity }).ToArray(); var stockOuts = new List<Stockout>(); long? balance = 0; var stockOut = new Stockout() { ItemID = itemID, StoreID = storeID}; var lastTransaction = allTransactions.LastOrDefault(); for (int i = 0; i < allTransactions.Length; i++) { switch (allTransactions[i].TransactionType) { case TransactionType.Receipt: if (allTransactions[i].TransactionType != receiptsInnerJoin[i].TransactionType) throw new Exception("Algorithm Error."); if (balance == 0 && stockOut.StartDate != DateTime.Parse("1/1/0001")) { stockOut.EndDate = allTransactions[i].Date.Value; stockOuts.Add(stockOut); stockOut = new Stockout() { ItemID = itemID , StoreID = storeID}; } balance += receiptsInnerJoin[i].Quantity; break; case TransactionType.Issue: if (allTransactions[i].TransactionType != issuesInnerJoin[i].TransactionType) throw new Exception("Algorithm Error!"); balance -= issuesInnerJoin[i].Quantity; if (balance <= 0 && stockOut.StartDate != DateTime.Parse("1/1/0001")) { stockOut.StartDate = allTransactions[i].Date.Value; balance = 0; } break; case TransactionType.Disposal: if (allTransactions[i].TransactionType != disposalsInnerJoin[i].TransactionType) throw new Exception("Algorithm Error!"); balance -= disposalsInnerJoin[i].Quantity; if (balance <= 0) { stockOut.StartDate = allTransactions[i].Date.Value; balance = 0; } break; case TransactionType.Adjustment: if (allTransactions[i].TransactionType != adjustmentsInnerJoin[i].TransactionType) throw new Exception("Algorithm Error!"); if (balance == 0 && stockOut.StartDate != DateTime.Parse("1/1/0001")) { stockOut.EndDate = allTransactions[i].Date.Value; stockOuts.Add(stockOut); stockOut = new Stockout() { ItemID = itemID , StoreID = storeID}; } balance += adjustmentsInnerJoin[i].Quantity; break; default: break; } } if (stockOut.StartDate != DateTime.Parse("1/1/0001") && !stockOut.EndDate.HasValue) { stockOut.EndDate = DateTime.Today; stockOuts.Add(stockOut); } return stockOuts; }