Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
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);
            }
        }
Пример #6
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);
        }
Пример #7
0
 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());
        }