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);
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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();
        }
示例#4
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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());
        }
示例#10
0
        public void CanGetCheckoutID()
        {
            CheckoutProduct checkoutProduct = new CheckoutProduct()
            {
                CheckoutID = 1
            };

            Assert.Equal(1, checkoutProduct.CheckoutID);
        }
示例#11
0
        public void CanGetQuantity()
        {
            CheckoutProduct checkoutProduct = new CheckoutProduct()
            {
                Quantity = 1
            };

            Assert.Equal(1, checkoutProduct.Quantity);
        }
示例#12
0
        public void CanSetProductID()
        {
            CheckoutProduct checkoutProduct = new CheckoutProduct()
            {
                ProductID = 1
            };

            checkoutProduct.ProductID = 2;
            Assert.Equal(2, checkoutProduct.ProductID);
        }
示例#13
0
        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 }));
        }
示例#14
0
        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 }));
        }
示例#15
0
        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);
        }
示例#16
0
        /// <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();
        }
示例#17
0
        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));
 }
示例#19
0
        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"));
        }
示例#21
0
        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"));
        }
示例#22
0
        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);
        }
示例#24
0
        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);
        }
示例#26
0
        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);
        }
示例#27
0
        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);
        }
示例#28
0
        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);
        }
示例#29
0
        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"));
        }
示例#30
0
 /// <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();
 }