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; })); }
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); } } }
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 }); } }
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)); } }
public async Task <ResponseDTO <List <SafetyStockValue> > > GetSafetyStock(SafetyStockViewModel safetyStockModel) { return(await _safetyStockService.GetSafetyStock(safetyStockModel)); }
private void RemoveElementsFromListGreaterThenEndDate(List <SafetyStockValue> stockList, SafetyStockViewModel safetyStockModel) { stockList.RemoveAll(s => s.DemandDate > safetyStockModel.EndDate); }