public async Task <List <SafetyStockValue> > GetDataToCalaculateSafeStock(SafetyStockViewModel safetyStockModel)
        {
            SqlParameter[] parameter =
            {
                new SqlParameter("@ItemId",      safetyStockModel.ItemId),
                new SqlParameter("@SupplierId",  safetyStockModel.SupplierId),
                new SqlParameter("@LocationId",  safetyStockModel.LocationId),
                new SqlParameter("@CurrentDate", safetyStockModel.StartDate),
                new SqlParameter("@EndDate",     safetyStockModel.EndDate)
            };
            var safetyStockValueList = new List <SafetyStockValue>();

            return(await ExecuteSqlReaderWithStoreProcAsync(SqlConstants.GetDataForCalculationOfSafetyStock, parameter, (dr) =>
            {
                while (dr.Read())
                {
                    safetyStockValueList.Add(new SafetyStockValue
                    {
                        Id = dr.GetInt64(dr.GetOrdinal("DemandAndInventoryValuesId")),
                        ItemId = dr.GetInt64(dr.GetOrdinal("ItemId")),
                        LocationId = dr.GetInt64(dr.GetOrdinal("LocationId")),
                        SupplierId = dr.GetInt64(dr.GetOrdinal("SupplierID")),
                        DemandDate = dr.GetDateTime(dr.GetOrdinal("DemandDate")),
                        Demand = dr.GetInt32(dr.GetOrdinal("Demand")),
                        SystemLeadTime = dr.GetInt32(dr.GetOrdinal("SystemLeadTime"))
                    });
                }
                return safetyStockValueList;
            }));
        }
Exemple #2
0
 private void CalculateSafetyStock(List <SafetyStockValue> stockList, SafetyStockViewModel safetyStockModel)
 {
     for (int i = 0; i < stockList.Count; i++)
     {
         if (stockList[i].DemandDate <= safetyStockModel.EndDate)
         {
             var demandList     = new List <int>();
             int systemLeadTime = stockList[i].SystemLeadTime;
             for (int j = 1; j <= systemLeadTime; j++)
             {
                 var elem = stockList.ElementAtOrDefault(i + j);
                 if (elem != null)
                 {
                     demandList.Add(elem.Demand);
                 }
                 else
                 {
                     stockList[i].SafeStock = null;
                     break;
                 }
             }
             stockList[i].SafeStock = 1.88 * Math.Sqrt(systemLeadTime) * CalculateStandardDeviation(demandList);
         }
     }
 }
Exemple #3
0
        public async Task <ResponseDTO <List <SafetyStockValue> > > GetSafetyStock(SafetyStockViewModel safetyStockModel)
        {
            try
            {
                validateInputModel(safetyStockModel);
                var stockList = await _safetyStockRepo.GetDataToCalaculateSafeStock(safetyStockModel);

                CalculateSafetyStock(stockList, safetyStockModel);
                RemoveElementsFromListGreaterThenEndDate(stockList, safetyStockModel);
                return(new ResponseDTO <List <SafetyStockValue> >()
                {
                    IsSuccess = true,
                    ReturnValue = stockList,
                    Exception = null,
                    ErrorCode = null,
                    CorrelationId = null,
                    ErrorMessage = null,
                    Errors = null
                });
            }
            catch (Exception ex)
            {
                return(new ResponseDTO <List <SafetyStockValue> >()
                {
                    IsSuccess = false,
                    ReturnValue = null,
                    Exception = ex,
                    ErrorCode = null,
                    CorrelationId = null,
                    ErrorMessage = ex.Message,
                    Errors = null
                });
            }
        }
Exemple #4
0
        private void validateInputModel(SafetyStockViewModel safetyStockModel)
        {
            var errors = new List <string>();

            if (safetyStockModel.EndDate < safetyStockModel.StartDate)
            {
                errors.Add("Start date should be greater then end date");
            }
            if (safetyStockModel.ItemId <= 0 || safetyStockModel.SupplierId <= 0 || safetyStockModel.LocationId <= 0)
            {
                errors.Add("ItemId or SupplierId or LocationId cannot be zero or less then zero");
            }
            if (errors.Count > 0)
            {
                throw new ApplicationException(string.Join(", ", errors));
            }
        }
Exemple #5
0
 public async Task <ResponseDTO <List <SafetyStockValue> > > GetSafetyStock(SafetyStockViewModel safetyStockModel)
 {
     return(await _safetyStockService.GetSafetyStock(safetyStockModel));
 }
Exemple #6
0
 private void RemoveElementsFromListGreaterThenEndDate(List <SafetyStockValue> stockList, SafetyStockViewModel safetyStockModel)
 {
     stockList.RemoveAll(s => s.DemandDate > safetyStockModel.EndDate);
 }