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();
 }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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;
        }