Пример #1
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;
        }
Пример #2
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));
        }
Пример #3
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);
        }
Пример #4
0
        static List <Transaction> AdjustmentsByItem(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.Adjustment, Date = disposal.Date, Quantity = disposal.Quantity
            };

            return(receipts.ToList());
        }
Пример #5
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());
        }
Пример #6
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());
        }
Пример #7
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);
                }
            }
        }
Пример #8
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));;
        }
Пример #9
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());
        }
Пример #10
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;
            }
        }