コード例 #1
0
        public static AMCViewModel Create(int itemId, int storeId, int amcRange, DateTime endDate)
        {
            var vwGetAllItemsRepository = new vwGetAllItemsRepository();
            var amcrepo         = new AmcReportRepository();
            var allItemIdsonamc = amcrepo.AllAmcReport().SingleOrDefault(m => m.ItemID == itemId && m.StoreID == storeId);
            var products        = vwGetAllItemsRepository.AllItems().SingleOrDefault(m => m.ID == itemId);
            var startDate       = endDate.Subtract(TimeSpan.FromDays(amcRange * 30));
            var viewModel       = new AMCViewModel
            {
                ItemID          = itemId,
                StoreID         = storeId,
                AmcRange        = amcRange,
                IssueInAmcRange = Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate),
                DaysOutOfStock  = Builder.CalculateStockoutDays(itemId, storeId, startDate, DateTime.Now),
                AmcWithDos      = Builder.CalculateAverageConsumption(itemId, storeId, startDate, endDate, CalculationOptions.Monthly),
                IssueWithDOS    = Builder.CalculateTotalConsumptionAMC(itemId, storeId, startDate, endDate)
            };

            AddorUpdateAmc(itemId, storeId, amcRange, endDate, amcrepo, viewModel, allItemIdsonamc, startDate);
            if (products != null)
            {
                viewModel.FullItemName = products.FullItemName;
            }
            viewModel.AmcWithoutDos = Convert.ToDouble(Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate)) / Convert.ToDouble(viewModel.AmcRange);
            return(viewModel);
        }
コード例 #2
0
ファイル: AMCViewModel.cs プロジェクト: HCMISFE/FE
        private static void AddAMC(int itemId, string itemFullName, int storeId, int amcRange, DateTime endDate, DateTime startDate)
        {
            var amcrepo = new AmcReportRepository();
            var DOS     = Builder.CalculateStockoutDays(itemId, storeId, startDate, DateTime.Now);

            if (DOS > (amcRange * 30))
            {
                DOS = amcRange * 30;
            }

            var totalCAMC  = Builder.CalculateTotalConsumptionAMC(itemId, storeId, startDate, endDate, amcRange, DOS);
            var totalCWDOS = Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate);

            var amcreport = new AmcReport
            {
                ItemID          = itemId,
                StoreID         = storeId,
                AmcRange        = amcRange,
                IssueWithDOS    = totalCAMC,
                IssueInAmcRange = totalCWDOS,
                DaysOutOfStock  = DOS,
                AmcWithDOS      = totalCAMC / amcRange,
                AmcWithOutDOS   = totalCWDOS / amcRange,
                LastIndexedTime = DateTime.Now
            };

            amcreport.FullItemName = itemFullName;
            amcrepo.Add(amcreport);
        }
コード例 #3
0
ファイル: CalculateAMC.cs プロジェクト: HCMISFE/FE
        public void BuildAMC(bool forceCalc = false)
        {
            if ((IsCalculatedToday()) && (forceCalc == false))
            {
                return;
            }

            StockoutRepository    _repository            = new StockoutRepository();
            StoreRepository       _storerepository       = new StoreRepository();
            GeneralInfoRepository _generalInfoRepository = new GeneralInfoRepository();
            ReceiveDocRepository  _receiveDocRepository  = new ReceiveDocRepository();
            AmcReportRepository   _amcReportRepository   = new AmcReportRepository();
            List <AMCViewModel>   _datasource;

            //clear AMC table before another build
            _amcReportRepository.DeleteAll();

            var generalinfo = _generalInfoRepository.AllGeneralInfos().First();
            var storeList   = _storerepository.AllStores();

            foreach (var store in storeList)
            {
                var storeId       = store.ID;
                var itemsrecieved = _receiveDocRepository.RecievedItems().Where(m => m.StoreID == storeId).Select(m => m.ItemID).Distinct();

                _datasource = new List <AMCViewModel>();
                var    receiveDocs = _repository.AllItems().Where(m => itemsrecieved.Contains(m.ID)).ToList();
                double increment   = 80.0 / Convert.ToDouble(receiveDocs.Count());

                IEnumerable <int?> unitid;
                if (VisibilitySetting.HandleUnits != 1)
                {
                    foreach (var item in receiveDocs)
                    {
                        unitid = _receiveDocRepository.RecievedItems().Where(m => m.ItemID == item.ID && m.StoreID == storeId).Select(m => m.UnitID).Distinct();
                        foreach (var i in unitid)
                        {
                            AMCViewModel.OptimizedCreate(item.ID, item.FullItemName, storeId, i.GetValueOrDefault(), generalinfo.AMCRange, DateTime.Today);
                        }
                    }
                }
                else
                {
                    foreach (var item in receiveDocs)
                    {
                        AMCViewModel.OptimizedCreate(item.ID, item.FullItemName, storeId, generalinfo.AMCRange, DateTime.Today);
                    }
                }
            }
        }
コード例 #4
0
ファイル: CalculateAMC.cs プロジェクト: HCMISFE/FE
        private Boolean IsCalculatedToday()
        {
            AmcReportRepository _amcReportRepository = new AmcReportRepository();
            int count = _amcReportRepository.AllAmcReport().Where(amc => amc.LastIndexedTime.Value.Date == DateTime.Today.Date).Select(amc => amc.ID).Count();

            if (count > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #5
0
 private static void AddorUpdateAmc(int itemId, int storeId, int amcRange, DateTime endDate, AmcReportRepository amcrepo, AMCViewModel viewModel, AmcReport allItemIds, DateTime startDate)
 {
     if (allItemIds != null)
     {
         allItemIds.IssueInAmcRange = Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate);
         allItemIds.IssueWithDOS    = Builder.CalculateTotalConsumptionAMC(itemId, storeId, startDate, endDate);
         allItemIds.AmcWithDOS      = Builder.CalculateTotalConsumptionAMC(itemId, storeId, startDate, endDate) / Convert.ToDouble(viewModel.AmcRange);
         allItemIds.AmcWithOutDOS   = Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate) / Convert.ToDouble(viewModel.AmcRange);
         allItemIds.DaysOutOfStock  = Builder.CalculateStockoutDays(itemId, storeId, startDate, DateTime.Now);
         allItemIds.AmcRange        = amcRange;
         allItemIds.LastIndexedTime = DateTime.Now;
         amcrepo.Update(allItemIds);
     }
     else
     {
         var amcreport = new AmcReport
         {
             ItemID          = itemId,
             StoreID         = storeId,
             AmcRange        = amcRange,
             IssueWithDOS    = Builder.CalculateTotalConsumptionAMC(itemId, storeId, startDate, endDate),
             IssueInAmcRange = Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate),
             DaysOutOfStock  = Builder.CalculateStockoutDays(itemId, storeId, startDate, DateTime.Now),
             AmcWithDOS      = Builder.CalculateTotalConsumptionAMC(itemId, storeId, startDate, endDate) / Convert.ToDouble(viewModel.AmcRange),
             AmcWithOutDOS   = Builder.CalculateTotalConsumptionWithoutDOS(itemId, storeId, startDate, endDate) / Convert.ToDouble(viewModel.AmcRange),
             LastIndexedTime = DateTime.Now
         };
         amcrepo.Add(amcreport);
     }
 }