コード例 #1
0
 public static double CachedAMC(int itemID, int storeID)
 {
     StockoutEntities context= new StockoutEntities();
        var amc = ((from v in context.AmcReports
               where v.ItemID == itemID && v.StoreID == storeID
               select v).FirstOrDefault() ?? new AmcReport()).AmcWithDOS;
        return amc;
 }
コード例 #2
0
        public static void BuildIndex(int itemID)
        {
            var db = new StockoutEntities();
            var repository = new StockoutRepository();

            foreach (var storeId in db.Stores.Select(s => s.ID))
            {
                var stockouts = GetStockOutHistory(itemID, storeId);
                if (stockouts.Count > 0)
                    repository.AddRange(stockouts);

             }
        }
コード例 #3
0
        static List<Transaction> TransactionDates(int itemID,int storeID)
        {
            var db = new StockoutEntities();
            List<Transaction> dates = new List<Transaction>();

            dates.AddRange((from receipt in db.ReceiveDocs.Where(m => m.ItemID == itemID && m.StoreID==storeID).OrderBy(m => m.Date) select new Transaction { TransactionID = receipt.ID, Date = receipt.Date, TransactionTypeCode = (int)TransactionType.Receipt }).ToList()); // Receipts
            dates.AddRange((from issue in db.IssueDocs.Where(m => m.ItemID == itemID && m.StoreID ==storeID).OrderBy(m => m.Date) select new Transaction { TransactionID = issue.ID, Date = issue.Date, TransactionTypeCode = (int)TransactionType.Issue }).ToList()); // Issues
            dates.AddRange((from disposal in db.Disposals.Where(m => m.ItemID == itemID && m.StoreID ==storeID && (bool) m.IsLoss).OrderBy(m => m.Date) select new Transaction { TransactionID = disposal.ID, Date = disposal.Date, TransactionTypeCode = (int)TransactionType.Disposal }).ToList()); // Disposals
            dates.AddRange((from disposal in db.Disposals.Where(m => m.ItemID == itemID && m.StoreID == storeID && !(bool)m.IsLoss).OrderBy(m => m.Date) select new Transaction { TransactionID = disposal.ID, Date = disposal.Date, TransactionTypeCode = (int)TransactionType.Adjustment }).ToList()); // Adjustments
            return dates.OrderBy(m => m.Date).ToList();
        }
コード例 #4
0
 static List<Transaction> ReceiptsByItem(int itemID ,int storeID)
 {
     var db = new StockoutEntities();
     var receipts = from receipt in db.ReceiveDocs
                    where receipt.ItemID == itemID && receipt.StoreID == storeID
                    select new Transaction { TransactionID = receipt.ID, TransactionTypeCode = (int)TransactionType.Receipt, Date = receipt.Date, Quantity = receipt.Quantity };
     return receipts.ToList();
 }
コード例 #5
0
 static List<Transaction> IssuesByItem(int itemID, int storeID)
 {
     var db = new StockoutEntities();
     var issues = from issue in db.IssueDocs
                  where issue.ItemID == itemID && issue.StoreID == storeID
                  select new Transaction { TransactionID = issue.ID, TransactionTypeCode = (int)TransactionType.Issue, Date = issue.Date, Quantity = issue.Quantity };
     return issues.OrderBy(m => m.Date).ToList();
 }
コード例 #6
0
 static List<Transaction> DisposalsByItem(int itemID ,int storeID)
 {
     var db = new StockoutEntities();
     var receipts = from disposal in db.Disposals
                    where disposal.ItemID == itemID && disposal.StoreID ==storeID && (bool)disposal.IsLoss
                    select new Transaction { TransactionID = disposal.ID, TransactionTypeCode = (int)TransactionType.Disposal, Date = disposal.Date, Quantity = disposal.Quantity };
     return receipts.ToList();
 }
コード例 #7
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;
            }
        }
コード例 #8
0
 public static long CalculateTotalConsumptionWithoutDOS(int itemId,int storeId, DateTime startDate, DateTime endDate)
 {
     var db = new StockoutEntities();
     var allIssues = db.IssueDocs.Where(m => m.ItemID == itemId && m.StoreID == storeId).Where(issue => issue.Date >= startDate && issue.Date < endDate);
     return Enumerable.Sum(allIssues, issue => issue.Quantity);
 }
コード例 #9
0
 public static long CalculateTotalConsumptionForMOS(int itemId, int storeId, DateTime startDate, DateTime endDate)
 {
     var db = new StockoutEntities();
        var stockoutDays = CalculateStockoutDays(itemId, storeId, startDate, endDate);
        var allIssues = db.IssueDocs.Where(m => m.ItemID == itemId && m.StoreID == storeId || m.Date >= startDate && m.Date < endDate);//.Where(m => m.Date >= startDate && m.Date < endDate);
        //var allIssues = db.IssueDocs.Where(m => m.ItemID == itemId && m.StoreID == storeId && m.Date >= startDate && m.Date < endDate);//.Where(m => m.Date >= startDate && m.Date < endDate);
        if (!allIssues.Any())
        return 0;
        var totalConsumption = Enumerable.Sum(allIssues, issue => issue.Quantity);
        if (stockoutDays == 0)
        return totalConsumption;
        return totalConsumption + CalculateTotalConsumption(itemId, storeId, startDate.Subtract(TimeSpan.FromDays(stockoutDays)), startDate); ;
 }
コード例 #10
0
        public static long CalculateTotalConsumptionAMC(int itemId, int storeId, DateTime startDate, DateTime endDate, int amcrange = 0, int stockoutDays = 0)
        {
            var db = new StockoutEntities();
            if (amcrange == 0)
            {
                amcrange = db.GenralInfos.First().AMCRange;
            }

            var amcdays = amcrange * 30;

            if (stockoutDays == 0)
            {
                stockoutDays = CalculateStockoutDays(itemId, storeId, startDate, endDate);
            }

            var allIssues = db.IssueDocs.Where(m => m.ItemID == itemId && m.StoreID == storeId).Where(issue => issue.Date >= startDate && issue.Date < endDate);
            if (!allIssues.Any())
                return 0;
            var totalConsumption = Enumerable.Sum(allIssues, issue => issue.Quantity) * amcdays;
            var daydiff = amcdays - stockoutDays;
            if (daydiff != 0)
            {
                return totalConsumption / daydiff;
            }
            return 0;
            //return 1;
        }
コード例 #11
0
 public static long CalculateTotalConsumption(int itemId,int storeId, DateTime startDate, DateTime endDate)
 {
     var db = new StockoutEntities();
     var amcrange = db.GenralInfos.First();
     var amcdays = amcrange.AMCRange*30;
     var stockoutDays = CalculateStockoutDays(itemId, storeId, startDate, endDate);
     var allIssues =db.IssueDocs.Where(m => m.ItemID == itemId && m.StoreID == storeId).Where(issue => issue.Date >= startDate && issue.Date < endDate);
     if (!allIssues.Any())
         return 0;
     var totalConsumption = Enumerable.Sum(allIssues, issue => issue.Quantity);
     if (stockoutDays == 0)
         return totalConsumption;
     return (totalConsumption + CalculateTotalConsumption(itemId, storeId, startDate.Subtract(TimeSpan.FromDays(stockoutDays)),startDate));
 }