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")); }
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); }