public async Task <IActionResult> Complete(CreateDeliveryInputModel deliveryModel)
        {
            if (!this.ModelState.IsValid)
            {
                var allDeliveryCompanies = this.deliveryCompanyService.GetAllDeliveryCompanies().ToList();
                this.ViewData["deliveryCompanies"] = allDeliveryCompanies.Select(category => new CreateDeliveryCompanyInputModel
                {
                    Name = category.Name,
                })
                                                     .ToList();
                var allDeliveryTypes = this.deliveryService.GetDeliveryTypes();
                this.ViewData["deliveryTypes"] = allDeliveryTypes.Select(deliveryType => new DeliveryOrderTypeViewModel
                {
                    Name = deliveryType.Name,
                })
                                                 .ToList();
                return(this.View());
            }

            var delivery = deliveryModel;

            delivery.IssuedById = this.User.FindFirst(ClaimTypes.NameIdentifier).Value;
            this.receiptService.CreateReceipt(delivery.IssuedById);
            await this.deliveryService.CompleteOrder(delivery);

            return(this.Redirect("/Receipt/All"));
        }
Example #2
0
        public async Task <bool> CompleteOrder(CreateDeliveryInputModel inputModel)
        {
            var orders = this.context.Orders
                         .Where(order => order.IssuerId == inputModel.IssuedById && order.Status.Name == "Active")
                         .ToList();
            double allWeight = 0;


            var delivery = new NutriAnimal.Data.Models.Delivery
            {
                Address    = inputModel.Address,
                IssuedById = inputModel.IssuedById,
                Recipient  = inputModel.Recipient,
                Status     = this.context.Statuses.First(status => status.Name == "Pending"),
            };

            foreach (var item in orders)
            {
                item.Status = this.context.Statuses.SingleOrDefault(status => status.Name == "Completed");
                var product = this.context.Products.FirstOrDefault(x => x.Id == item.ProductId);

                allWeight += product.Weight * item.Quantity;
                delivery.Orders.Add(item);
                this.context.Orders.Update(item);
            }



            var deliveryCompany = this.context.DeliveryCompanies.FirstOrDefault(company => company.Name == inputModel.DeliveryCompany);
            var deliveryType    = this.context.DeliveryTypes.FirstOrDefault(type => type.Name == inputModel.DeliveryType);

            delivery.DeliveryCompany = deliveryCompany;
            delivery.DeliveryType    = deliveryType;

            if (allWeight < 1)
            {
                delivery.Price = deliveryCompany.Price;
            }
            else if (allWeight < 5)
            {
                delivery.Price = deliveryCompany.Price * 1.5M;
            }
            else
            {
                var heavyDelivery = (decimal)(allWeight * 0.75);
                delivery.Price = (deliveryCompany.Price * 1.5M) + heavyDelivery;
            }

            if (deliveryType.Name == "To Address")
            {
                delivery.Price += delivery.Price * 0.15M;
            }
            else
            {
                delivery.Price += delivery.Price * 0.08M;
            }

            if (deliveryType.Name == "To Office")
            {
                delivery.Address = "Company Office";
            }
            this.context.Deliveries.Add(delivery);

            var result = await this.context.SaveChangesAsync();

            return(result > 0);
        }