public async Task <CheckoutSummary> Checkout(string userId) { var result = new CheckoutSummary { Date = DateTime.UtcNow, Products = new List <CheckoutProduct>() }; var userActor = GetUserActor(userId); var basket = await userActor.GetBasket(); var catalogService = GetProductCatalogService(); foreach (var basketLine in basket) { var product = await catalogService.GetProduct(basketLine.Key); var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Value }; result.Products.Add(checkoutProduct); } result.TotalPrice = result.Products.Sum(p => p.Price * p.Quantity); await Task.WhenAll(userActor.ClearBasket(), AddToHistory(result)).ConfigureAwait(false); return(result); }
public async Task <CheckoutSummary> CheckoutAsync(string userId) { var result = new CheckoutSummary(); result.Date = DateTime.UtcNow; result.Products = new List <CheckoutProduct>(); // Get the user basket IUserActor userActor = GetUserActor(userId); BasketItem[] basket = await userActor.GetBasket(); IProductCatalogService catalogService = GetProductCatalogService(); foreach (var item in basket) { var product = await catalogService.GetProduct(item.ProductId); var checkoutProduct = new CheckoutProduct() { Product = product, Price = product.Price, Quantity = item.Quantity }; result.Products.Add(checkoutProduct); } return(result); }
/// <summary> /// Deletes a product matching the product ID from the checkout container matching the checkout ID /// </summary> /// <param name="checkoutID">Composite Key value</param> /// <param name="productID">Composite Key value</param> /// <returns>Product deleted from checkout</returns> public async Task DeleteCheckoutProductByID(int checkoutID, int productID) { CheckoutProduct checkoutProduct = await _context.CheckoutProducts.FirstOrDefaultAsync(cp => cp.CheckoutID == checkoutID && cp.ProductID == productID); _context.CheckoutProducts.Remove(checkoutProduct); await _context.SaveChangesAsync(); }
public ActionResult Contact(string tripid) { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); ViewBag.displayEnquiry = true; return(View(checkout)); }
public async Task <CheckoutSummary> CheckoutAsync(string userId) { var checkoutSummary = new CheckoutSummary(); checkoutSummary.Date = DateTime.UtcNow; checkoutSummary.Products = new List <CheckoutProduct>(); var userActor = GetUserActor(userId); var basket = await userActor.GetBasketAsync(); var productCatalogService = GetProductCatalogService(); foreach (var basketLine in basket) { var product = await productCatalogService.GetProductAsync(basketLine.Key); var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Value }; checkoutSummary.Products.Add(checkoutProduct); } checkoutSummary.TotalPrice = checkoutSummary.Products.Sum(p => p.Price * p.Quantity); await userActor.ClearBasketAsync(); await AddToHistory(userId, checkoutSummary); return(checkoutSummary); }
public async Task <CheckoutSummary> Checkout(string userId) { var result = new CheckoutSummary(); result.Date = DateTime.UtcNow; result.Products = new List <CheckoutProduct>(); IUserActor userActor = GetUserActor(userId); Dictionary <Guid, int> basket = await userActor.GetBasket(); IProductCatalogService catalogService = GetProductCatalogService(); foreach (KeyValuePair <Guid, int> basketLine in basket) { Product product = await catalogService.GetProduct(basketLine.Key); var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Value }; result.Products.Add(checkoutProduct); } result.TotalPrice = result.Products.Sum(p => p.Price); await userActor.ClearBasket(); await AddToHistory(result); return(result); }
public async Task <CheckoutSummary> Checkout(string userId) { var result = new CheckoutSummary(); //call user actor to get the basket IUserActor userActor = GetUserActor(userId); Dictionary <Guid, int> basket = await userActor.GetBasket(); //get catalog client IProductCatalogService catalogService = GetProductCatalogService(); //constuct CheckoutProduct items by calling to the catalog foreach (KeyValuePair <Guid, int> basketLine in basket) { Product product = await catalogService.GetProduct(basketLine.Key); var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Value }; result.Products.Add(checkoutProduct); } //generate total price result.TotalPrice = result.Products.Sum(p => p.Price); //clear user basket await userActor.ClearBasket(); await AddToHistory(result); return(result); }
public async Task <CheckoutSummary> CheckoutAsync(string userId) { var result = new CheckoutSummary(); result.Date = DateTime.UtcNow; result.Products = new List <CheckoutProduct>(); IUserActor userActor = GetUserActor(userId); BasketItem[] basket = await userActor.GetBasket(); var catalogService = GetProductCatalogService(); foreach (var basketLine in basket) { var product = await catalogService.GetProduct(basketLine.ProductId); var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Quantity }; result.Products.Add(checkoutProduct); } result.TotalPrice = result.Products.Sum(p => p.Price); await userActor.ClearBasket(); await AddToHistoryAsync(result); return(result); }
public ActionResult CheckSession(string tripid) { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); context.Clients.All.pushSingle("msg"); //context.Clients.User(User.Identity.Name).pushSingle("msg"); return(View()); }
public void CanGetCheckoutID() { CheckoutProduct checkoutProduct = new CheckoutProduct() { CheckoutID = 1 }; Assert.Equal(1, checkoutProduct.CheckoutID); }
public void CanGetQuantity() { CheckoutProduct checkoutProduct = new CheckoutProduct() { Quantity = 1 }; Assert.Equal(1, checkoutProduct.Quantity); }
public void CanSetProductID() { CheckoutProduct checkoutProduct = new CheckoutProduct() { ProductID = 1 }; checkoutProduct.ProductID = 2; Assert.Equal(2, checkoutProduct.ProductID); }
public ActionResult Addon(ProductTourPackage prodTour, string tripid) { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); checkout.TourPackage.TourPackagesInfo.EntranceID = prodTour.TourPackagesInfo.EntranceID; checkout.TourPackage.TourPackagesInfo.LanguageID = prodTour.TourPackagesInfo.LanguageID; checkout.TourPackage.TourPackagesInfo.SpecialRequest = prodTour.TourPackagesInfo.SpecialRequest; checkout.TourPackage.TourPackagesInfo.TransportPackageID = prodTour.TourPackagesInfo.TransportPackageID; int NoOfPax = checkout.TourPackage.TourPackagesInfo.NoOfPax; var tourProdDetail = checkout.TourPackage.TourPackageDetails; checkout.TourPackage.PricingDetail.Items.RemoveAll(x => x.ItemDetail.Contains("Tour Guide:") || x.ItemDetail.Contains("Entrances Ticket:") || x.ItemDetail.Contains("Transport Package: ")); if (checkout.TourPackage.TourPackagesInfo.LanguageID != 0) { var languages = UtilitiesService.GetTourLanguageList(checkout.TourPackage.TourPackagesInfo.LanguageID); var lang = languages.FirstOrDefault(x => x.LanguageID == checkout.TourPackage.TourPackagesInfo.LanguageID); checkout.TourPackage.PricingDetail.Items.Add(new ProductItem() { ItemDetail = "Tour Guide: " + lang.Language, ItemQty = 1, BaseRate = lang.TourLanguagePrices.FirstOrDefault().SellingPrice, Surcharge = 0, Supplier_TotalAmt = lang.TourLanguagePrices.FirstOrDefault().Cost, GST = 0, }); } if (checkout.TourPackage.TourPackagesInfo.EntranceID != 0) { var entranceDetail = tourProdDetail.EntranceTickets.Where(x => x.EntranceID == checkout.TourPackage.TourPackagesInfo.EntranceID).FirstOrDefault(); checkout.TourPackage.PricingDetail.Items.Add(new ProductItem() { ItemDetail = "Entrances Ticket: " + entranceDetail.Ticket, ItemQty = NoOfPax, BaseRate = entranceDetail.SellingPrice, Surcharge = 0, Supplier_TotalAmt = entranceDetail.Cost * NoOfPax, GST = 0, }); } if (checkout.TourPackage.TourPackagesInfo.TransportPackageID != 0) { var transportDetail = tourProdDetail.TransportPackages.Where(x => x.TransportPackageID == checkout.TourPackage.TourPackagesInfo.TransportPackageID).FirstOrDefault(); checkout.TourPackage.PricingDetail.Items.Add(new ProductItem() { ItemDetail = "Transport Package: " + transportDetail.Description, ItemQty = NoOfPax, BaseRate = transportDetail.SellingPrice, Surcharge = 0, Supplier_TotalAmt = transportDetail.Cost * NoOfPax, GST = 0, }); } return(RedirectToAction("Contact", "TourPackage", new { tripid, affiliationId })); }
public ActionResult Contact(ProductTourPackage prodTour, string tripid) { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); checkout.TourPackage.ContactPerson = prodTour.ContactPerson; checkout.ContactPerson = prodTour.ContactPerson; checkout.TourPackage.TourPackagesInfo.ArriveFlightDetails = prodTour.TourPackagesInfo.ArriveFlightDetails; checkout.TourPackage.TourPackagesInfo.DepartFlightDetails = prodTour.TourPackagesInfo.DepartFlightDetails; return(RedirectToAction("Payment", "Checkout", new { tripid, affiliationId })); }
public bool TourPackageEnquiry(ProductTourPackage prodTour, string travelerdata, string enquiryQuestion, string tripid) { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); bool successSend = false; try { if (checkout != null) { checkout.TourPackage.ContactPerson = prodTour.ContactPerson; var tourdtl = checkout.TourPackage.TourPackageDetails; var tourinfo = checkout.TourPackage.TourPackagesInfo; var hotelSelected = ""; if (tourinfo.RoomListSelected != null) { int star = UtilitiesService.GetTourRoomRating(tourinfo.RoomListSelected.FirstOrDefault().RoomTypeID); hotelSelected = star + (star > 1 ? " stars" : " star") + "<br/>" + string.Join("<br/>", tourinfo.TourRoomPackages.Select(x => x.RoomTypeName + " x " + x.Qty)); } decimal ttlprice = checkout.CheckOutSummary.GrandTtlAmt_BeforeDiscount; decimal deposit = ttlprice; decimal depositrate = tourdtl.DepositRate ?? 0; if ((tourdtl.IsDepositOnly ?? false) && depositrate > 0) { deposit = tourdtl.DepositTypeCode == "FIX" ? depositrate * tourinfo.NoOfPax : ttlprice * depositrate / 100; } Hashtable ht = new Hashtable(); ht.Add("<#UserName>", prodTour.ContactPerson.GivenName + " " + prodTour.ContactPerson.Surname); ht.Add("<#PackageName>", tourdtl.TourPackageName); ht.Add("<#TravelDate>", tourinfo.TravelDateFrom.ToString("dd/MM/yyyy") + " - " + tourinfo.TravelDateTo.ToString("dd/MM/yyyy")); ht.Add("<#HotelSelection>", hotelSelected); ht.Add("<#TourCode>", tourdtl.TourPackageCode); ht.Add("<#TtlPrice>", ttlprice.ToString("n2")); ht.Add("<#Email>", checkout.TourPackage.ContactPerson.Email); ht.Add("<#EnquiryQ>", enquiryQuestion); var CSemail = Core.GetSettingValue("MayflowerCSEmail"); successSend = CommonServiceController.SendEmail(CSemail, "Ground Package Enquiry Email", Core.getMailTemplate("tourpackageenquiry", ht)); if (!successSend) { logger.Fatal("errmsg", "Tour Package send enquiry email error." + " - " + DateTime.Now.ToLoggerDateTime()); } } } catch (Exception ex) { logger.Fatal(ex, "Tour Package enquiry email error" + " - " + DateTime.Now.ToLoggerDateTime()); } return(successSend); }
/// <summary> /// Adds a product to the user's list of checkout products /// </summary> /// <param name="id">Product ID</param> /// <param name="quantity">Quantity of product</param> /// <param name="checkoutID">Checkout ID</param> /// <returns>Product added to checkoutProduct list</returns> public async Task AddCheckoutProduct(int id, int quantity, int checkoutID) { Product product = await _context.Products.FirstOrDefaultAsync(p => p.ID == id); CheckoutProduct checkoutProduct = new CheckoutProduct { Product = product, ProductID = product.ID, Quantity = quantity, CheckoutID = checkoutID }; _context.CheckoutProducts.Add(checkoutProduct); await _context.SaveChangesAsync(); }
public ActionResult Search(ProductCarRental.SearchCriteria model) { model = model ?? new ProductCarRental.SearchCriteria(); FilterHotelResultModel filterResult = new FilterHotelResultModel(); if (Core.GetSession(Enumeration.SessionName.CarRentalSearchReq, tripid) != null) { model = (ProductCarRental.SearchCriteria)Core.GetSession(Enumeration.SessionName.CarRentalSearchReq, tripid); } else if (model.PickupDateTime != DateTime.MinValue && model.ReturnDateTime != DateTime.MinValue && Core.GetSession(Enumeration.SessionName.CarRentalSearchReq, tripid) == null) { Core.SetSession(Enumeration.SessionName.CarRentalSearchReq, tripid, model); } else { // GO model.PickupDateTime = DateTime.Now.AddDays(double.Parse(Core.GetSettingValue("dayadvance"))); // RETURN model.ReturnDateTime = model.PickupDateTime.AddDays(1); } #region If error from Reserve, show message. if (Core.GetSession(Enumeration.SessionName.ErrorMessage) != null) { ViewData.Add("ERRMSG", Core.GetSession(Enumeration.SessionName.ErrorMessage).ToString()); Core.SetSession(Enumeration.SessionName.ErrorMessage, null); } #endregion CheckoutProduct checkoutmodel = new CheckoutProduct(); if (Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid) != null) { checkoutmodel = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); } if (checkoutmodel.CarRental == null) { checkoutmodel.InsertProduct(new ProductCarRental { SearchInfo = model, }); Core.SetSession(Enumeration.SessionName.CheckoutProduct, tripid, checkoutmodel); } var locationList = CarsRentalServiceCall.GetBranchList(); ViewBag.locationList = locationList; return(View(checkoutmodel)); }
public ActionResult Edit([Bind(Include = "Index,ProductId,ProductName,ProductImage,ClientName,ProductPrice,Quantity")] CheckoutProduct checkoutProductViewModel, CheckoutPurchase checkoutPurchase) { if (ModelState.IsValid) { Product product = db.Product.Find(checkoutProductViewModel.ProductId); if (product.Quantity >= checkoutProductViewModel.Quantity) { checkoutPurchase[checkoutProductViewModel.Index].Quantity = checkoutProductViewModel.Quantity; return(RedirectToAction("Index")); } else { ModelState.AddModelError("Quantity", "Error! Quantity cannot be higher than stock available"); } } return(View(checkoutProductViewModel)); }
public ActionResult GetTourPackage(int TourPackageID) { string tripid = Guid.NewGuid().ToString(); var tour = new ProductTourPackage(TourPackageID); var langList = UtilitiesService.GetTourLanguageList(tour.TourPackageID); var entrances = tour.TourPackageDetails.EntranceTickets.ToList(); var transportDetail = tour.TourPackageDetails.TransportPackages.ToList(); if (!((langList != null && langList.Count > 0) || (entrances != null && entrances.Count > 0) || (transportDetail != null && transportDetail.Count > 0))) { tour.skipAddon = true; } CheckoutProduct checkout = new CheckoutProduct(); checkout.InsertProduct(tour); Core.SetSession(Enumeration.SessionName.CheckoutProduct, tripid, checkout); return(RedirectToAction("Search", "TourPackage", new { tripid })); }
public ActionResult AddProduct(CheckoutPurchase checkoutPurchase, int productId, string clientName, int quantity = 0) { Product product = db.Product.Find(productId); CheckoutProduct myCheckoutPurchase = new CheckoutProduct { Index = checkoutPurchase.Count, ProductId = product.ProductId, ProductName = product.Name, ProductImage = product.ImagePath, ClientName = clientName, ProductPrice = product.Price, Quantity = quantity }; checkoutPurchase.Add(myCheckoutPurchase); return(RedirectToAction("Index", "Products")); }
public ActionResult UpdateTourPrice(string tripid, string Room = "") { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); dynamic obj = new System.Dynamic.ExpandoObject(); bool isEmptyHotelToken = string.IsNullOrWhiteSpace(Room); List <TourRoomModel> TourRoomPackages = isEmptyHotelToken ? new List <TourRoomModel>() : JsonConvert.DeserializeObject <List <TourRoomModel> >(Room); var tourInfo = checkout.TourPackage.TourPackageDetails; int NoOfPax = checkout.TourPackage.TourPackagesInfo.NoOfPax; int extension = checkout.TourPackage.TourPackagesInfo.ExtensionNight; decimal TtlRoomPrice = 0; var displayhtml = ""; decimal tourprice = tourInfo.SellingPrice * NoOfPax; decimal extensionPrice = extension * (tourInfo.ExtensionPrice ?? 0); int TtlPax = 0; if (TourRoomPackages.Count > 0) { var hotelname = tourInfo.PackageRoomTypes.FirstOrDefault(x => x.RoomTypeID == TourRoomPackages.FirstOrDefault().RoomTypeID).PackageHotel.HotelName; displayhtml += "<li class='reservation-room'><span>" + hotelname + "</span>"; foreach (var roomtype in TourRoomPackages) { decimal roomprice = tourInfo.PackageRoomTypes.FirstOrDefault(x => x.RoomTypeID == roomtype.RoomTypeID).PackageRoomPrices.FirstOrDefault(x => x.RoomPriceID == roomtype.RoomPriceID).SellingPrice *roomtype.Qty; var RoomSelected = tourInfo.PackageRoomTypes.FirstOrDefault(x => x.RoomTypeID == roomtype.RoomTypeID); TtlRoomPrice += roomprice; TtlPax += RoomSelected.NoOfTravellers * roomtype.Qty; displayhtml += "<li class='reservation-room'><span>" + RoomSelected.RoomTypeName + " room x " + roomtype.Qty + "</span>"; displayhtml += "<span>MYR" + roomprice.ToString("n2") + "</span></li>"; } } displayhtml += "<li class='reservation-room'><span>Extension x " + extension + "</span>"; displayhtml += "<span>MYR" + extensionPrice.ToString("n2") + "</span></li>"; checkout.TourPackage.TourPackagesInfo.TtlOccupancy = TtlPax; decimal ttlprice = tourprice + TtlRoomPrice + extensionPrice; obj.ttl = ttlprice.ToString("n2"); obj.ttlper = NoOfPax != 0 ? (ttlprice / NoOfPax).ToString("n2") : "0.00"; obj.roomdesc = displayhtml; obj.ttlpax = TtlPax; return(Content(JsonConvert.SerializeObject(obj), "application/json")); }
public ActionResult UpdateTourAddonPrice(string tripid, int transportID = 0, int entranceID = 0, int languageID = 0) { CheckoutProduct checkout = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); dynamic obj = new System.Dynamic.ExpandoObject(); var tourInfo = checkout.TourPackage.TourPackageDetails; int NoOfPax = checkout.TourPackage.TourPackagesInfo.NoOfPax; var displayhtml = ""; decimal tourprice = checkout.TourPackage.PricingDetail.ProductTotalAmount; decimal entrancePrice = 0; decimal transportPrice = 0; decimal languagePrice = 0; if (transportID != 0) { var transportDetail = tourInfo.TransportPackages.Where(x => x.TransportPackageID == transportID).FirstOrDefault(); transportPrice = transportDetail.SellingPrice * NoOfPax; displayhtml += "<li class='reservation-room tpaddon'><span>" + transportDetail.Description + " x " + NoOfPax + "</span>"; displayhtml += "<span>MYR" + transportPrice.ToString("n2") + "</span></li>"; } if (entranceID != 0) { var entranceDetail = tourInfo.EntranceTickets.Where(x => x.EntranceID == entranceID).FirstOrDefault(); transportPrice = entranceDetail.SellingPrice * NoOfPax; displayhtml += "<li class='reservation-room addon'><span>" + entranceDetail.Ticket + " x " + NoOfPax + "</span>"; displayhtml += "<span>MYR" + transportPrice.ToString("n2") + "</span></li>"; } if (languageID != 0) { var languages = UtilitiesService.GetTourLanguageList(checkout.TourPackage.TourPackagesInfo.LanguageID); var lang = languages.FirstOrDefault(x => x.LanguageID == checkout.TourPackage.TourPackagesInfo.LanguageID); transportPrice = lang.TourLanguagePrices.FirstOrDefault().SellingPrice *NoOfPax; displayhtml += "<li class='reservation-room addon'><span>" + lang.Language + "</span>"; displayhtml += "<span>MYR" + transportPrice.ToString("n2") + "</span></li>"; } decimal ttlprice = tourprice + entrancePrice + languagePrice + transportPrice; obj.ttl = ttlprice.ToString("n2"); obj.ttlper = NoOfPax != 0 ? (ttlprice / NoOfPax).ToString("n2") : "0.00"; obj.roomdesc = displayhtml; return(Content(JsonConvert.SerializeObject(obj), "application/json")); }
public async Task <CheckoutSummary> Checkout(string userId) { var result = new CheckoutSummary(); result.Date = DateTime.Now; result.Products = new List <CheckoutProduct>(); // Call the UserActor for the current user and get his shopping cart. var userActor = GetUserActor(userId); var cartContent = await userActor.GetCart(); var catalogService = GetProductCatalogService(); // Retrieve all product information in one call. var productInformation = await catalogService.GetProducts(cartContent.Keys); foreach (var item in cartContent) { if (productInformation.ContainsKey(item.Key) == false) { continue; } var product = productInformation[item.Key]; var checkoutProduct = new CheckoutProduct() { Product = product, Price = product.Price, Quantity = item.Value }; result.Products.Add(checkoutProduct); } // Add the checkout to the history. await userActor.AddCheckoutInformationToHistory(result); await userActor.ClearCart(); return(result); }
public async Task <CheckoutSummary> Checkout(string userId) { var result = new CheckoutSummary(); result.Date = DateTime.UtcNow; result.Products = new List <CheckoutProduct>(); //call user actor to get the basket var userActor = GetUserActor(userId); var basket = await userActor.GetBasket(); //get catalog client IProductCatalogService catalogService = GetProductCatalogService(); //constuct CheckoutProduct items by calling to the catalog foreach (var basketLine in basket) { var product = await catalogService.GetProduct(basketLine.Key); if (product != null) { var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Value }; result.Products.Add(checkoutProduct); } } //generate total price result.TotalPrice = result.Products.Select(p => p.Quantity * p.Price).Sum(); //clear user basket await userActor.ClearBasket(); await AddToHistory(result); return(result); }
public async Task <CheckoutSummary> CheckoutAsync(string userId) { //holds result of the checkout var result = new CheckoutSummary(); result.Date = DateTime.UtcNow; result.Products = new List <CheckoutProduct>(); //call user actor to get the basket IUserActor userActor = GetUserActor(userId); BasketItem[] basket = await userActor.GetBasket(); //get catalog client IProductCatalogService catalogService = GetProductCatalogService(); //get detailed product information for each basket item by calling product service foreach (BasketItem basketLine in basket) { Product product = await catalogService.GetProductAsync(basketLine.ProductId); var checkoutProduct = new CheckoutProduct { Product = product, Price = product.Price, Quantity = basketLine.Quantity }; result.Products.Add(checkoutProduct); } //generate total price result.TotalPrice = result.Products.Sum(p => p.Price); //clear user basket await userActor.ClearBasket(); await AddToHistoryAsync(result); return(result); }
public async Task <CheckoutSummary> CheckoutAsync(string userId) { var checkoutSummary = new CheckoutSummary(); checkoutSummary.Date = DateTime.UtcNow; checkoutSummary.Products = new List <CheckoutProduct>(); IUserActor userActor = GetUserActor(userId); var userBasketItems = await userActor.GetBasketAsync(); var basket = new Dictionary <Guid, int>(); foreach (var userBasketItem in userBasketItems) { basket.Add(userBasketItem.ProductId, userBasketItem.Quantity); } IProductCatalogService catalogService = GetProductCatalogService(); foreach (KeyValuePair <Guid, int> basketLine in basket) { Product product = await catalogService.GetProductAsync(basketLine.Key); var checkoutProduct = new CheckoutProduct { Product = product, Quantity = basketLine.Value, SubTotal = product.Price * basketLine.Value }; checkoutSummary.Products.Add(checkoutProduct); checkoutSummary.TotalPrice += checkoutProduct.SubTotal; } await AddToHistoryAsync(checkoutSummary); return(checkoutSummary); }
public async Task <CheckoutSummary> CheckoutAsync(string userId) { CheckoutSummary result = new CheckoutSummary() { Date = DateTime.UtcNow, Products = new List <CheckoutProduct>() }; // get user basket IUserActor userActor = GetUserActor(userId); var basket = await userActor.GetBasket(); IProductCatalogService catalogService = GetProductCatalogService(); // build the products using the catalog service data and the basket line items foreach (var basketItem in basket) { Product product = await catalogService.GetProductAsync(basketItem.ProductId); if (product != null) { var checkoutProduct = new CheckoutProduct() { Product = product, Price = product.Price, Quantity = basketItem.Quantity }; result.Products.Add(checkoutProduct); } } // add the current checkout summary to history (for later retrieval) await AddToHistoryAsync(result); return(result); }
private CheckoutProduct GenerateTestProduct() { SearchFlightResultViewModel searchModel = new SearchFlightResultViewModel { ArrivalStation = "PEN", BeginDate = new DateTime(2018, 2, 2), DepartureStation = "KUL", CabinClass = "Y", DepartureTime = "00002359", DirectFlight = false, EndDate = new DateTime(2018, 2, 10), PrefferedAirlineCode = string.Empty, ReturnTime = "00002359", TripType = "Return", Adults = 1, Childrens = 1, Infants = 0 }; var contactPerson = new ContactPerson { Address1 = "asd", Address2 = "fgh", Address3 = "jkl", City = "rgrrgeg", CountryCode = "123123", Email = "*****@*****.**", GivenName = "werwe", Phone1 = "12573725", Phone1LocationCode = "08", Phone1Prefix = "0808", Phone1PrefixNo = "321", Phone1UseType = "cell", Phone2 = "312131", Phone2LocationCode = "321654", Phone2Prefix = "654", Phone2PrefixNo = "564", Phone2UseType = "phone", PostalCode = "56465", State = "asddd", Surname = "asdsad", Title = "Mr", DOB = new DateTime(1999, 08, 01), }; CheckoutProduct product = new CheckoutProduct { ContactPerson = contactPerson, }; product.InsertProduct(new ProductFlight { SearchFlightInfo = searchModel, ContactPerson = contactPerson, TravellerDetails = new List <TravellerDetail> { new TravellerDetail { Address1 = "asd", Address2 = "fgh", Address3 = "jkl", City = "rgrrgeg", CountryCode = "123123", Email = "*****@*****.**", GivenName = "werwe", Phone1 = "12573725", Phone1LocationCode = "08", Phone1Prefix = "0808", Phone1PrefixNo = "321", Phone1UseType = "cell", Phone2 = "312131", Phone2LocationCode = "321654", Phone2Prefix = "654", Phone2PrefixNo = "564", Phone2UseType = "phone", PostalCode = "56465", State = "asddd", Surname = "asdsad", Title = "Mr", DOB = new DateTime(1999, 08, 01), } } }); return(product); }
public async Task <ActionResult> GetCarRentalList(int?page, FormCollection collection, ProductCarRental.FilterCarParamModel filterParamModel, string tripid, string rType = null, string newsearch = null) { collection = collection ?? new FormCollection(); CheckoutProduct CheckoutModel = (CheckoutProduct)Core.GetSession(Enumeration.SessionName.CheckoutProduct, tripid); CheckoutModel = CheckoutModel ?? new CheckoutProduct(); var model = CheckoutModel.CarRental; model.SearchInfo.CurrentViewPage = (page ?? model.SearchInfo.CurrentViewPage); int pageNumber = model.SearchInfo.CurrentViewPage; int pageSize = 10; int.TryParse(Core.GetAppSettingValueEnhanced("RecordsPerPage"), out pageSize); try { if ((model.SearchInfo.locationCode != null && model.SearchInfo.PickupDateTime != DateTime.MinValue && model.SearchInfo.ReturnDateTime != DateTime.MinValue) && page == null && (model.Result == null || newsearch == "1")) { List <string> pushEvErrMsg = new List <string>(); model.Result = await GetCarRentalListFromSearchInfo(model.SearchInfo); if (model.Result?.Errors != null && model.Result?.Errors?.ErrorMessage != "No record found!") { var _jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, }; Logger.Error(Environment.NewLine + "Error return from search car rental service." + Environment.NewLine + Environment.NewLine + JsonConvert.SerializeObject(model, Formatting.Indented, _jsonSetting)); ViewBag.SysErrMsg = "Sorry, unexpected error occur."; } else if (model.Result?.Errors?.ErrorMessage == "No record found!") { ViewBag.SysErrMsg = "No record found!"; } } FilterCarResultModel filtResult = new FilterCarResultModel(); IPagedList <VehVendorAvail> IPagedModel = null; if (model.Result != null && model.Result.Success == "true") { if (Core.GetSession(Enumeration.SessionName.FilterCarRentalResult, tripid) == null || filterParamModel != null && (filterParamModel.Rating != null || filterParamModel.minPrice != null || filterParamModel.maxPrice != null || filterParamModel.CarModel != null || filterParamModel.SortBy != null)) { filtResult = UpdateFilter(model, collection, filterParamModel, tripid); Core.SetSession(Enumeration.SessionName.FilterCarRentalResult, tripid, filtResult); IPagedModel = filtResult.FilResult.ToPagedList(1, pageSize); // every new filter also need reset page number to 1 } else { filtResult = (FilterCarResultModel)Core.GetSession(Enumeration.SessionName.FilterCarRentalResult, tripid); IPagedModel = filtResult.FilResult.ToPagedList(pageNumber, pageSize); } filtResult.MarkupInfo = GetMarkup(model.SearchInfo); ViewData.Add("RESULT", filtResult.FilResult.Count > 0 ? filtResult.FilResult : null); filtResult.IPagedCarList = IPagedModel; model.FilterCarResult = filtResult; } } catch (Exception ex) { Logger logger = LogManager.GetCurrentClassLogger(); logger.Debug(ex, "GetCarRentalList()"); } return(Request.IsAjaxRequest() ? (ActionResult)PartialView("~/Views/CarRental/_CarRentalList.cshtml", model) : RedirectToAction("Search")); }
/// <summary> /// Updates quantity of a product in the checkout product list /// </summary> /// <param name="checkoutProduct">CheckoutProduct object with new data</param> /// <returns>Updated checkout product list</returns> public async Task UpdateQuantity(CheckoutProduct checkoutProduct) { _context.CheckoutProducts.Update(checkoutProduct); await _context.SaveChangesAsync(); }