private int PeriodWillBeDelivered(CaseStudy caseStudy, Product product, OrderType orderType) { InitialCharge initialCharge = caseStudy.InitialCharges.Where(x => x.Product == product).FirstOrDefault(); if (orderType == OrderType.Normal) { return(initialCharge.FillTime + initialCharge.PreparationTime + initialCharge.DeliveryTime + 1); } else if (orderType == OrderType.Fast) { return(initialCharge.FillTime + initialCharge.DeliveryTime + 1); } else if (orderType == OrderType.Courier) { return(initialCharge.PreparationTime + initialCharge.FillTime + 1); } else if (orderType == OrderType.FastCourier) { return(initialCharge.FillTime + 1); } else { return(-1); } }
public InitialCharge ChangeTimes(CaseStudyViewModel caseStudy, InitialCharge initialCharge) { if (initialCharge.PreparationTime == 1) { initialCharge.PreparationTime = caseStudy.PreparationTime; } else if (initialCharge.PreparationTime == 0) { initialCharge.PreparationTime = caseStudy.AcceleratedPreparationTime; } if (initialCharge.FillTime == 1) { initialCharge.FillTime = caseStudy.FillTime; } else if (initialCharge.FillTime == 0) { initialCharge.FillTime = caseStudy.ExistingFillTime; } if (initialCharge.DeliveryTime == 1) { initialCharge.DeliveryTime = caseStudy.DeliveryTime; } else if (initialCharge.DeliveryTime == 0) { initialCharge.DeliveryTime = caseStudy.CourierDeliveryTime; } return(initialCharge); }
public CaseStudy XmlToModel(CaseStudyXml caseStudyXml) { Guid caseStudyXmlId = Guid.NewGuid(); List <InitialCharge> initialCharges = new List <InitialCharge>(); foreach (var initialChargeXml in caseStudyXml.InitialCharges) { InitialCharge initialCharge = new InitialCharge(); initialCharge.Demand = initialChargeXml.Demand; initialCharge.InitialStock = initialChargeXml.InitialStock; initialCharge.Price = initialChargeXml.Price; initialCharge.ProductId = db.Products.Where(x => x.Name == initialChargeXml.Product).FirstOrDefault().Id; initialCharge.SecurityStock = initialChargeXml.SecurityStock; initialCharge.Stddev = initialChargeXml.Stddev; initialCharge.CaseStudyId = caseStudyXmlId; initialCharges.Add(initialCharge); } CaseStudy caseStudy = new CaseStudy { Id = caseStudyXmlId, Created = DateTime.Now, AnnualMaintenanceCost = caseStudyXml.AnnualMaintenanceCost, CourierCharges = caseStudyXml.CourierCharges, PreparationCost = caseStudyXml.PreparationCost, PurchaseOrderRecharge = caseStudyXml.PurchaseOrderRecharge, InitialCharges = initialCharges, }; return(caseStudy); }
public double GetOrderCost(InitialCharge initialCharge, OrderType orderType) { switch (orderType) { case OrderType.Fast: return(initialCharge.CaseStudy.PreparationCost); case OrderType.Courier: return(initialCharge.CaseStudy.CourierCharges * initialCharge.Price); case OrderType.FastCourier: return(initialCharge.CaseStudy.PreparationCost); default: return(0); } }
public int GetTimeOrder(InitialCharge initialCharge, OrderType orderType) { switch (orderType) { case OrderType.Normal: return(initialCharge.PreparationTime + initialCharge.DeliveryTime + initialCharge.FillTime + 1); case OrderType.Fast: return(initialCharge.FillTime + initialCharge.DeliveryTime + 1); case OrderType.Courier: return(initialCharge.PreparationTime + initialCharge.FillTime + 1); case OrderType.FastCourier: return(initialCharge.FillTime + 1); default: return(0); } }
private Balance UpdateBalance(Balance balance, Demand demand, CaseStudy caseStudy, Order lastOrder) { InitialCharge initialChargeProduct = caseStudy.InitialCharges.Where(x => x.Product == demand.Product).FirstOrDefault(); int initialStock = balance.FinalStock + balance.ReceivedOrders; int demandNumber = demand.Quantity; int sells = (initialStock - demandNumber) < 0 ? initialStock : demandNumber; int finalStock = initialStock - sells; int dissastifiedDemand = (finalStock > 0) ? 0 : (demandNumber - initialStock); double orderCost = GetOrderCost(caseStudy, lastOrder); #region UpdateBalance balance.Demand = demand.Quantity; balance.DissatisfiedDemand = dissastifiedDemand; balance.DissatisfiedCostPast = balance.DissatisfiedCost; balance.FinalStockCostPast = balance.FinalStockCost; balance.DissatisfiedCost = dissastifiedDemand * initialChargeProduct.Price; balance.OrderCost = orderCost; balance.InitialStock = initialStock; balance.FinalStock = finalStock; balance.FinalStockCost = finalStock * initialChargeProduct.Price; balance.Sells = sells; #endregion return(balance); }
public RestartDataBaseWorker(String fileName) : base(true) { this.initialCharge = new InitialCharge(fileName); }
public async Task <ActionResult> Create([Bind(Include = "Name,Periods,PreparationTime,AcceleratedPreparationTime,FillTime,ExistingFillTime,DeliveryTime,CourierDeliveryTime,PurchaseOrderRecharge,CourierCharges,PreparationCost,AnnualMaintenanceCost,SemesterId,SectionId,ChargeTypeName,XmlUpload,InitialCharges,PreparationTimeOption,FillTimeOption,DeliveryTimeOption")] CaseStudyViewModel caseStudyViewModel) { try { CaseStudyBL caseStudyBL = new CaseStudyBL(); if (caseStudyViewModel.ChargeTypeName == "xml") { caseStudyBL.ModelStateForXML(ModelState); if (ModelState.IsValid) { CaseStudyXmlBL caseStudyXmlBL = new CaseStudyXmlBL(); CaseStudyXml caseStudyXml = caseStudyXmlBL.Deserealize(caseStudyViewModel.XmlUpload.InputStream); CaseStudy caseStudy = caseStudyXmlBL.XmlToModel(caseStudyXml); caseStudy.Name = caseStudyViewModel.Name; caseStudy.Periods = caseStudyViewModel.Periods; foreach (var initialCharge in caseStudy.InitialCharges) { if (!TryValidateModel(initialCharge)) { throw new Exception("Ha ocurrido un error agregando los datos de un producto"); } } if (!TryValidateModel(caseStudy)) { throw new Exception("Ha ocurrido un error agregando los datos de un producto"); } if (caseStudyViewModel.SectionId != null) { Section section = Db.Sections.Where(x => x.Id == caseStudyViewModel.SectionId && x.CaseStudy == null).FirstOrDefault(); if (section != null) { caseStudy.Sections.Add(section); } else { Flash.Warning("Advertencia", "No se ha podido asignar la sección seleccionada, ya está asignada a un caso de estudio"); } } Db.CaseStudies.Add(caseStudy); await Db.SaveChangesAsync(); Flash.Success("Ok", "El archivo Xml es correcto, se ha creado el caso de estudio"); return(RedirectToAction("Index")); } } else if (caseStudyViewModel.ChargeTypeName == "form") { caseStudyBL.ModelStateInForm(ModelState); if (ModelState.IsValid) { Guid caseStudyId = Guid.NewGuid(); List <InitialCharge> initialCharges = caseStudyBL.JsonToInitialChargeList(caseStudyViewModel.InitialCharges); foreach (var initialCharge in initialCharges) { InitialCharge auxInitialCharge = caseStudyBL.ChangeTimes(caseStudyViewModel, initialCharge); if (TryValidateModel(auxInitialCharge)) { auxInitialCharge.CaseStudyId = caseStudyId; } else { Flash.Error("Error", "Ha ocurrido un error agregando los datos de un producto"); throw new Exception(); } } CaseStudy caseStudy = new CaseStudy { Id = caseStudyId, Name = caseStudyViewModel.Name, Periods = caseStudyViewModel.Periods, Created = DateTime.Now, CourierCharges = caseStudyViewModel.CourierCharges, PurchaseOrderRecharge = caseStudyViewModel.PurchaseOrderRecharge, PreparationCost = caseStudyViewModel.PreparationCost, AnnualMaintenanceCost = caseStudyViewModel.AnnualMaintenanceCost, InitialCharges = initialCharges }; if (caseStudyViewModel.SectionId != null) { Section section = Db.Sections.Where(x => x.Id == caseStudyViewModel.SectionId && x.CaseStudy == null).FirstOrDefault(); if (section != null) { caseStudy.Sections.Add(section); } else { Flash.Warning("Advertencia", "No se ha podido asignar la sección"); } } Db.CaseStudies.Add(caseStudy); await Db.SaveChangesAsync(); Flash.Success("Ok", "El caso de estudio ha sido agregado exitosamente"); return(RedirectToAction("Index")); } else { throw new Exception("El caso de estudio no ha podido ser almacenado correctamente"); } } else { throw new Exception("Error Inesperado"); } } catch (Exception e) { Flash.Error("Error", e.Message); Db.Sections.Where(x => x.CaseStudy == null).Select(x => new { x.Id, x.Number, x.Semester.Description }); CaseStudyViewModel caseStudy = new CaseStudyViewModel(); ViewBag.Products = caseStudy.Products; ViewBag.ChargeTypes = caseStudy.ChargeTypes; ViewBag.FillTime = caseStudy.FillTimeRadio; ViewBag.DeliveryTime = caseStudy.DeliveryTimeRadio; ViewBag.PreparationTime = caseStudy.PreparationTimeRadio; } return(View()); }