//get the orderID
        public int GetOrderID()
        {
            if (Session["orderID"] == null)
            {
                //they dont have a orderID,
                // create a new order

                //step 1: make a new order object
                Models.Order order = new Models.Order();
                //step 2: fill in required information
                order.DateCreated = DateTime.Now;
                order.Status = "Cart";
                order.Tax = 0;
                order.Total = 0;
                order.ShippingTotal = 0;
                //step 3: add order to the database
                db.Orders.Add(order);
                //step 4: save the changes
                db.SaveChanges();
                //step 5: set the session variable for
                // for the orderID
                Session["orderID"] = order.OrderID;
            }
            //convert the session object to a string, then to
            // a integer
            return int.Parse(Session["orderID"].ToString());
        }
예제 #2
0
 public override ERPStore.Models.ISaleDocument CreateOrderFromCart(ERPStore.Models.User user, ERPStore.Models.OrderCart cart)
 {
     var order = new Models.Order();
     order.Id = 1;
     order.Code = Guid.NewGuid().ToString();
     order.User = user;
     order.PaymentModeName = cart.PaymentModeName;
     m_OrderList.Add(order);
     return order;
 }
 public int GetOrderID()
 {
     if (Session["orderID"] == null)
     {
         //they dont have a cart
         //create a new order
         // make a new order object
         Models.Order order = new Models.Order();
         // fillin teh required information
         order.DateCreated = DateTime.Now;
         order.Status = "Cart";
         order.Tax = 0;
         order.TotalPrice = 0;
         order.ShippingTotal = 0;
         // add order to database
         db.Orders.Add(order);
         //save changes
         db.SaveChanges();
         Session["orderID"] = order.OrderID;
     }
     return int.Parse(Session["orderID"].ToString());
 }
예제 #4
0
        public int GetOrderID()
        {
            if (Session["OrderID"] == null)
            {
                //Create new order
                var newOrder = new Models.Order();
                newOrder.dtCreated = DateTime.Now;
                newOrder.Status = "Cart";
                newOrder.SalesTax = 0;
                newOrder.Subtotal = 0;
                newOrder.ShippingCost = 0;
                newOrder.TotalPrice = 0;
                //Add order to DB
                db.Orders.Add(newOrder);
                db.SaveChanges();

                //Set the session orderID to the new orderID
                Session["OrderID"] = newOrder.OrderID;
                return newOrder.OrderID;
            }
            return int.Parse(Session["OrderID"].ToString());
        }
        public ActionResult GetOrderInfoById(string Id)
        {
            Dictionary <string, object> returnObject = new Dictionary <string, object>();

            try
            {
                Models.Order orderInfo = new Models.Order();
                orderInfo = _orderUtility.GetOrderInfoById(Id);
                if (orderInfo != null && !string.IsNullOrEmpty(orderInfo.Id))
                {
                    returnObject.Add("orderInfo", orderInfo);
                    returnObject.Add("status", "success");
                }
                else
                {
                    returnObject.Add("status", "fail");
                }
            }
            catch (Exception)
            {
            }
            return(Json(new { message = returnObject }, JsonRequestBehavior.AllowGet));
        }
예제 #6
0
        public async Task <IActionResult> Checkout(Models.Order order, Models.ImageModel imageModel)
        {
            string              url      = $"https://maps.googleapis.com/maps/api/geocode/json?address={order.Address.StreetAddress},+{order.Address.City},+{order.Address.State},{order.Address.ZipCode}&key=AIzaSyDXS87aNNUzLOl40Q1kuMBWqup20n-508M";
            HttpClient          client   = new HttpClient();
            HttpResponseMessage response = await client.GetAsync(url);

            string jsonResult = await response.Content.ReadAsStringAsync();

            if (response.IsSuccessStatusCode)
            {
                JObject geoCode = JObject.Parse(jsonResult);
                order.Address.Latitude = (double)geoCode["results"][0]["geometry"]["location"]["lat"];

                order.Address.Longitude = (double)geoCode["results"][0]["geometry"]["location"]["lng"];
            }
            var userId = um.GetUserId(HttpContext.User);

            order.UserId = userId;
            var items = await sc.GetShoppingCartItemsAsync();

            sc.ShoppingCartItems = items;
            if (sc.ShoppingCartItems.Count == 0)
            {
                ModelState.AddModelError("", "Your cart is empty.");
            }
            if (ModelState.IsValid)
            {
                await SaveImage(imageModel);

                await or.CreateOrderAsync(order);

                await sc.ClearCartAsync();

                return(RedirectToAction("MakePayment"));
            }
            return(View(order));
        }
예제 #7
0
        public ActionResult Index(Models.OrderModel.Ship postback)
        {
            if (this.ModelState.IsValid)
            {   //取得目前購物車
                var currentcart = Models.Cart.Operation.GetCurrentCart();

                //取得目前登入使用者Id
                var userId = HttpContext.User.Identity.GetUserId();

                using (Models.CartsEntities db = new Models.CartsEntities())
                {
                    //建立Order物件
                    var order = new Models.Order()
                    {
                        UserId          = userId,
                        RecieverName    = postback.RecieverName,
                        RecieverPhone   = postback.RecieverPhone,
                        RecieverAddress = postback.RecieverAddress
                    };
                    //加其入Orders資料表後,儲存變更
                    db.Orders.Add(order);
                    db.SaveChanges();

                    //取得購物車中OrderDetail物件
                    var orderDetails = currentcart.ToOrderDetailList(order.Id);

                    //將其加入OrderDetails資料表後,儲存變更
                    db.OrderDetails.AddRange(orderDetails);
                    db.SaveChanges();
                }
                //清除購物車
                currentcart.ClearCart();
                //訂購成功, 返回訂單列表
                return(RedirectToAction("MyOrder"));
            }
            return(View());
        }
예제 #8
0
        public IActionResult ConfirmOrder(CheckoutViewModel checkout)
        {
            //create an order object with the properties set
            var order = new Models.Order
            {
                Name           = checkout.FirstName + " " + checkout.LastName,
                HospitalName   = checkout.HospitalName,
                HospitalAdress = checkout.AddressLine1 + " " + checkout.AddressLine2,
                PostCode       = checkout.PostCode,
                ShoppingCartId = checkout.ShoppingCartId,
                SubTotal       = checkout.ShoppingCartTotal
            };

            try
            {
                //sending of email but with hardcoded email addresses
                SmtpClient smtp = new SmtpClient("smtp.gmail.com");
                smtp.EnableSsl   = true;
                smtp.Port        = 587;
                smtp.Credentials = new NetworkCredential("*****@*****.**",
                                                         "Password123");
                smtp.Send("*****@*****.**", "*****@*****.**",
                          "Order Confirmation", "Thank you for your order! Its on its way!" + order.OrderPlaced);


                var payment = CreatePayment(order);
                payment.Wait();
                //create the order
                _orderRepository.CreateOrder(order);

                //then return the view.
                return(View(order));
            }
            catch {
                return(View("~/Views/Order/PaymentFailed.cshtml"));
            }
        }
예제 #9
0
        public ActionResult Index(Models.Ship postback)
        {
            if (this.ModelState.IsValid)
            {   //取得目前購物車
                var currentcart = Models.Operation.GetCurrentCart();

                //取得目前登入使用者Id
                //var userId = HttpContext.User.Identity.GetUserId();
                var userId = String.Format("{0}", Session["LoginName"]);


                using (Models.CartsEntities db = new Models.CartsEntities())
                {
                    //建立Order物件
                    var order = new Models.Order()
                    {
                        UserId          = userId,
                        RecieverName    = postback.RecieverName,
                        RecieverPhone   = postback.RecieverPhone,
                        RecieverAddress = postback.RecieverAddress
                    };
                    //加其入Orders資料表後,儲存變更
                    db.Orders.Add(order);

                    db.SaveChanges();

                    //取得購物車中OrderDetai物件
                    var orderDetails = currentcart.ToOrderDetailList(order.Id);

                    //將其加入OrderDetails資料表後,儲存變更
                    db.OrderDetails.AddRange(orderDetails);
                    db.SaveChanges();
                }
                return(Content("訂購成功"));
            }
            return(View());
        }
예제 #10
0
        public Models.Order DetailOrder(int id)
        {
            Models.Order data  = new Models.Order();
            var          order = db.Order.Find(id);

            data.Name      = order.Name;
            data.OrderID   = order.OrderID;
            data.OrderDate = order.CreatedDate;
            data.TypeID    = order.TypeID;

            if (db.Type.Find(order.TypeID).TypeName == "Order")
            {
                var table = (from a in db.Track
                             where a.OrderID == id
                             select a).FirstOrDefault();

                data.TableID   = table.TableID;
                data.TableName = table.Table.TableName;
            }

            var orderitem = (from a in db.OrderItem
                             where a.IsDeleted != true && a.OrderID == data.OrderID && a.Status != "Cancel"
                             select new OrderItemViewModel
            {
                OrderItemID = a.OrderItemID,
                MenuID = a.MenuID,
                MenuName = a.Menu.MenuName,
                Status = a.Status,
                Price = a.Menu.MenuPrice,
                Qty = a.Qty,
                Notes = a.Notes
            }).ToList();

            data.OrderItem = orderitem;
            return(data);
        }
예제 #11
0
        public async Task <Models.Order> Post(OrderDto orderDto)
        {
            _logger.LogInformation("[Begin] Create Order.");

            var order = new Models.Order()
            {
                // some mapping
                Id        = orderDto.Id,
                ProductId = orderDto.ProductId,
                Count     = orderDto.Count
            };
            // some other logic for order

            var orderStockDto = new OrderStockDto()
            {
                ProductId = orderDto.ProductId,
                Count     = orderDto.Count
            };
            await _daprClient.PublishEventAsync(DaprPubSubName, "neworder", orderStockDto);

            _logger.LogInformation($"[End] Create Order Finished. Id : {orderStockDto.ProductId}, Count : {orderStockDto.Count}");

            return(order);
        }
예제 #12
0
        private void PublishOrderStatusChange(Models.Order order)
        {
            switch ((DTO.Status)order.IdStatus)
            {
            case DTO.Status.Accepted:
                var orderAcceptedMessage = new FoodOnKontainers.Events.DTO.Orders.OrderAcceptedEvent()
                {
                    deliveryAddress       = order.DeliveryAddress,
                    deliveryName          = order.UserName,
                    deliveryRequestedDate = order.DeliveryRequestedDate,
                    idOrder           = order.Id,
                    idRestaurant      = order.IdRestaurant,
                    restaurantAddress = order.RestaurantAddress,
                    restaurantName    = order.RestaurantName
                };
                eventManager.OrderAccepted(orderAcceptedMessage);
                break;

            case DTO.Status.Rejected:
                var orderRejectedMessage = new FoodOnKontainers.Events.DTO.Orders.OrderRejectedEvent()
                {
                    idOrder = order.Id,
                    idUser  = order.IdUser,
                    price   = order.Price
                };
                eventManager.OrderRejected(orderRejectedMessage);
                break;

            case DTO.Status.Inserted:
            case DTO.Status.Delivering:
            case DTO.Status.Completed:
            case DTO.Status.Canceled:
            default:
                break;
            }
        }
        public ActionResult AddOrder(Models.Product product)
        {
            var         newCustomer = User.Identity.GetUserId();
            Participant participant = db.Participants.Where(p => p.ApplicationId == newCustomer).Single();

            Models.Order order = db.Orders.Where(o => o.ParticipantId == participant.ParticipantId && o.PendingOrder == true).FirstOrDefault();
            if (order == null)
            {
                var newOrder = new Models.Order();
                newOrder.ParticipantId = participant.ParticipantId;
                newOrder.PendingOrder  = true;
                db.Orders.Add(newOrder);
                db.SaveChanges();

                ProductOrder productOrder = new ProductOrder();
                productOrder.OrderId   = newOrder.OrderId;
                productOrder.ProductId = product.ProductId;
                productOrder.Quantity  = product.Quantity;
                productOrder.Size      = product.Size;
                productOrder.Total     = product.Quantity * product.Price;
                db.ProductOrders.Add(productOrder);
                db.SaveChanges();
            }
            else
            {
                ProductOrder productOrder = new ProductOrder();
                productOrder.OrderId   = order.OrderId;
                productOrder.ProductId = product.ProductId;
                productOrder.Quantity  = product.Quantity;
                productOrder.Size      = product.Size;
                productOrder.Total     = product.Quantity * product.Price;
                db.ProductOrders.Add(productOrder);
                db.SaveChanges();
            }
            return(RedirectToAction("ViewOrder"));
        }
        public ActionResult Index(Models.OrderModel.Ship model)
        {
            if (this.ModelState.IsValid)
            {
                // 取得目前購物車
                var CurrentCart = Models.Carts.Operation.GetCurrentCart();

                // 取得目前登入使用者 Id
                var UserId = HttpContext.User.Identity.GetUserId();

                using (Models.CartsEntities db = new Models.CartsEntities())
                {
                    // 建立 Order 物件
                    var order = new Models.Order()
                    {
                        UserId          = UserId,
                        ReceiverName    = model.ReceiverName,
                        ReceiverPhone   = model.ReceiverPhone,
                        ReceiverAddress = model.ReceiverAddress
                    };

                    // 加入 Order 資料表後,儲存變更
                    db.Orders.Add(order);
                    db.SaveChanges();

                    // 取得購物車中的 OrderDetail 物件
                    var orderDetails = CurrentCart.ToOrderDetailList(order.Id);

                    // 將 OrderDetail 物件,加入 OrderDetail 資料表後,儲存變更。
                    db.OrderDetails.AddRange(orderDetails);
                    db.SaveChanges();
                }
                return(Content("訂購成功"));
            }
            return(View());
        }
예제 #15
0
        public void openOrder(int orderId, Contract contract, IBApi.Order order, OrderState orderState)
        {
            _____________________________________________________________________________Logger.WriteMethod(nameof(openOrder), nameof(orderId), orderId, nameof(contract), contract, nameof(order), order, nameof(orderState), orderState);

            if (PlacedOrders.ContainsKey(orderId))
            {
                Models.Order modelOrder = PlacedOrders[orderId];

                OrderStatus orderStatus = Utils.GetEnumArray <OrderStatus>().Single(x => x.Text() == orderState.Status);
                if (orderStatus.IsLastStatus() && orderState.Commission != decimal.MaxValue)
                {
                    modelOrder.Commission = orderState.Commission;
                    modelOrder.CommissionLock.Set();
                }

                modelOrder.Status = orderStatus;
                if (modelOrder.Status.IsLastStatus())
                {
                    modelOrder.FinishLock.Set();
                }
            }

            Locks[nameof(openOrder) + orderId].Set();
        }
예제 #16
0
        public void creatOrderDetails(Models.Order order, IEnumerable <Models.Cart> cartItems)
        {
            //order have create and is going to update information
            //decimal orderTotal = 0;
            // Iterate over the items in the cart, adding the order details for each
            foreach (var item in cartItems)
            {
                var orderDetail = new OrderDetail()
                {
                    AlbumId   = item.AlbumId,
                    OrderId   = order.OrderId,
                    UnitPrice = item.Album.Price,
                    Quantity  = item.Count
                };
                // Set the order total of the shopping cart
                // orderTotal += (item.Count * item.Album.Price);
                storeDB.OrderDetails.Add(orderDetail);
            }
            // Set the order's total to the orderTotal count
            //  order.Total = orderTotal;
            // Save the order

            storeDB.SaveChanges();
        }
예제 #17
0
        public void PricingCalculator_WhenNewCustomerOrder_ReturnsAppropriatePrice()
        {
            var pricingCalc = new PriceCalculator(new List <IOrderRule>
            {
                new DistanceRule(),
                new FloorRule(),
                new WeekendRule(),
                new NewCustomerRule(_orderRepo.Object),
                new GoldenCustomerRule(_orderRepo.Object, _customerRepo.Object),
                new CouponRule(_customerRepo.Object)
            });

            var order = new Models.Order
            {
                CustomerId   = new Guid(),
                DeliveryDate = DateTime.Today,
                Distance     = 5,
                FloorNumber  = 5
            };

            pricingCalc.Calculate(order);

            Assert.AreEqual(849.15, order.Price);
        }
예제 #18
0
        // GET: Checkout/Payment/checkoutId
        public ActionResult Payment(string id, string checkoutId)
        {
            if (id == null)
            {
                return(RedirectToAction("Home/Login"));
            }

            Models.Order order = db.Orders.Where(i => i.ID == id).First();
            if (order == null)
            {
                return(HttpNotFound());
            }

            if (!(db.CheckPayment(order.orderId, checkoutId)))
            {
                return(HttpNotFound());
            }

            var viewModel = new Models.Order();

            viewModel = order;

            return(View(viewModel));
        }
예제 #19
0
        public async Task <IActionResult> CreateOrder(Models.Order order)
        {
            using (var trans = _context.Database.BeginTransaction(_capBus, autoCommit: true))
            {
                // 業務代碼
                order.CreateTime = DateTime.Now;
                _context.Orders.Add(order);

                var r = await _context.SaveChangesAsync() > 0;

                if (r)
                {
                    // 發佈下單事件
                    await _capBus.PublishAsync("order.services.createorder", new CreateOrderMessageDto()
                    {
                        Count     = order.Count,
                        ProductID = order.ProductID
                    });

                    return(Ok());
                }
                return(BadRequest());
            }
        }
예제 #20
0
 // GET: Orders/Create
 public async Task<ActionResult> Review()
 {
     Basket basket = Basket.GetBasket();
     Order order = new Models.Order();
     order.UserID = User.Identity.Name;
     ApplicationUser user = await UserManager.FindByNameAsync(order.UserID);
     order.DeliveryName = user.FirstName + " " + user.LastName;
     order.DeliveryAddress = user.Address;
     order.OrderLines = new List<OrderLine>();
     foreach (var basketLine in basket.GetBasketLines())
     {
         OrderLine line = new OrderLine
         {
             Product = basketLine.Product,
             ProductID = basketLine.ProductID,
             ProductName = basketLine.Product.Name,
             Quantity = basketLine.Quantity,
             UnitPrice = basketLine.Product.Price
         };
         order.OrderLines.Add(line);
     }
     order.TotalPrice = basket.GetTotalCost();
     return View(order);
 }
예제 #21
0
        //grap the order id
        public int GetOrderID()
        {
            if(Session["orderID"] == null)
            {
                //don't have the OrderID
                //create a new order

                //step 1: make a new order object
                Models.Order order = new Models.Order();
                //step 2: fill in required information
                order.DateCreated = DateTime.Now;
                order.Status = "Cart";
                order.Tax = 0;
                order.Total = 0;
                order.ShippingTotal = 0;
                //step 3: add order to the database
                db.Orders.Add(order);
                db.SaveChanges();
                //step 4: set the session variable for the orderid
                Session["orderID"] = order.OrderID;
            }
            //convert the order session (object) to int
            return int.Parse(Session["orderID"].ToString());
        }
예제 #22
0
 public ActionResult Edit(string id)
 {
     if (Session["IsAdmin"] != null && Session["IsAdmin"].Equals(false))
     {
         Classes.MongoDB db = new Classes.MongoDB();
         ViewBag.StatusTypes = new StatusTypes();
         var          order = db.GetOrder(id);
         var          toys  = db.GetAllToys();
         Models.Order model = new Models.Order();
         model.Id              = order.Id;
         model.Kid             = order.Kid;
         model.Status          = order.Status;
         model.Date            = order.Date;
         model.Toys            = order.Toys;
         model.ToyList         = toys.ToList();
         model.EditToys        = true;
         model.MissingToysList = MissingToy(order, toys.ToList());
         return(View(model));
     }
     else
     {
         return(RedirectToAction("../Users/Login"));
     }
 }
예제 #23
0
        // Create a payment using an APIContext
        private Payment CreatePayment(APIContext apiContext, string redirectUrl, Models.Order order) // OM: add order
        {
            // similar to credit card create itemlist and add item objects to it
            var itemList = new ItemList()
            {
                items = new List <Item>()
            };

            // OM: find price of each item exclusively, and of each item * quantity in order to find the total price
            var            carts       = db.Carts.Where(x => x.CartID == User.Identity.Name).ToList();
            List <decimal> price       = new List <decimal>();
            List <decimal> totalPrices = new List <decimal>();
            int            count       = 0;

            foreach (var item in carts)
            {
                price.Add(item.Product.Price);
                itemList.items.Add(new Item()
                {
                    name     = item.Product.Manufacturer.Name + " " + item.Product.Name,
                    price    = price[count].ToString(),
                    quantity = item.Quantity.ToString(),
                    currency = "EUR",
                    sku      = "Product Sku: " + item.ProductID.ToString()
                });
                totalPrices.Add(price[count] * item.Quantity);
                count++;
            }

            var payer = new Payer()
            {
                payment_method = "paypal"
            };

            // Configure Redirect Urls here with RedirectUrls object
            var redirUrls = new RedirectUrls()
            {
                cancel_url = redirectUrl,
                return_url = redirectUrl
            };

            // OM: get total price of items in cart
            var total = totalPrices.Sum();
            // similar as we did for credit card, do here and create details object
            var details = new Details()
            {
                //tax = "1",
                //shipping = "1",
                subtotal = total.ToString()
            };

            // similar as we did for credit card, do here and create amount object
            var amount = new Amount()
            {
                currency = "EUR",
                total    = total.ToString(), // Total must be equal to sum of shipping, tax and subtotal.
                details  = details
            };

            // OM: invoice number must be unique. Unique to the paypal sandbox account that is
            // so let's give it a huge random string and hope for the best
            var invoice = GetInvoice();

            var transactionList = new List <Transaction>();

            transactionList.Add(new Transaction()
            {
                description    = "sales",
                invoice_number = order.ID.ToString() + invoice,
                amount         = amount,
                item_list      = itemList
            });

            this.payment = new Payment()
            {
                intent        = "sale",
                payer         = payer,
                transactions  = transactionList,
                redirect_urls = redirUrls
            };

            // Create a payment using an APIContext
            return(this.payment.Create(apiContext));
        }
예제 #24
0
        public async Task <bool> CancelOrderAsync(int orderNumber)
        {
            Models.Order order = await findOrderByNumberAdapter.FindByNumberAsync(orderNumber);

            return(await cancelOrderAdapter.CancelOrderAsync(order));
        }
예제 #25
0
 public void InsertOrder(Models.Order order)
 {
 }
예제 #26
0
 public void UpdateOrder(Models.Order order)
 {
 }
예제 #27
0
 public Builder Order(Models.Order value)
 {
     order = value;
     return(this);
 }
예제 #28
0
파일: HomeController.cs 프로젝트: mdLn1/SDP
        // basket checkout
        public async Task <IActionResult> Checkout(string stripeToken, bool RememberMe,
                                                   string customerName, decimal Total, string selectedDelivery)
        {
            var user = await _userManager.GetUserAsync(User);

            var role = await _userManager.GetRolesAsync(user);

            var tickets = await _context.BasketTickets.Include(x => x.Performance).ThenInclude(y => y.Play)
                          .Include(x => x.BookedSeat).ThenInclude(y => y.Seat).Where(x => x.BasketId == user.Id).ToListAsync();

            // check if any seats
            if (tickets.Count > 0 && Total > 0)
            {
                long amount = long.Parse(Total.ToString("#.00").Replace(".", ""));
                if (amount < 100)
                {
                    amount *= 100;
                }

                // verify payment succeeds
                if (Charge(user.Email, stripeToken, amount, RememberMe))
                {
                    // charge succeeded, create an order
                    Models.Order newOrder = new Models.Order()
                    {
                        OrderTime      = DateTime.Now,
                        UserId         = user.Id,
                        DeliveryMethod = selectedDelivery,
                        IsPrinted      = false
                    };

                    // check the type of client
                    if (role[0] == "Customer")
                    {
                        newOrder.ClientName = user.FirstName + " " + user.LastName;
                    }
                    else if (role[0] == "AgencyOrClub")
                    {
                        newOrder.ClientName = user.AgencyOrClubName;
                    }
                    else
                    {
                        newOrder.DeliveryMethod = "Pick from collection booth";
                        newOrder.ClientName     = customerName;
                    }

                    // see if there was a discount
                    DateTime time     = DateTime.Now;
                    bool     discount = false;
                    if (((int)time.DayOfWeek < 5) && ((int)time.DayOfWeek > 0))
                    {
                        discount = true;
                    }

                    List <TicketsInBasket> ticketsBought = new List <TicketsInBasket>();

                    // create a sold ticket for each seat reserved
                    foreach (BasketTicket basketTicket in tickets)
                    {
                        TicketsInBasket ticket = new TicketsInBasket
                        {
                            Price           = basketTicket.Price,
                            RowNumber       = basketTicket.BookedSeat.Seat.RowNumber,
                            SeatLetter      = basketTicket.BookedSeat.Seat.ColumnLetter,
                            PerformanceName = basketTicket.Performance.Play.Name,
                            Id = basketTicket.Id,
                            PerformanceTime = basketTicket.Performance.Date
                        };
                        ticketsBought.Add(ticket);

                        SoldTicket soldTicket = new SoldTicket
                        {
                            PlayName               = basketTicket.Performance.Play.Name,
                            UserId                 = user.Id,
                            CustomerName           = newOrder.ClientName,
                            PerformanceTimeAndDate = basketTicket.Performance.Date,
                            ColumnLetter           = ticket.SeatLetter,
                            Band      = basketTicket.BookedSeat.Seat.Band,
                            RowNumber = ticket.RowNumber
                        };

                        if (discount)
                        {
                            soldTicket.PaidPrice = basketTicket.Price * 8 / 10;
                        }
                        else
                        {
                            soldTicket.PaidPrice = basketTicket.Price;
                        }
                        newOrder.SoldTickets.Add(soldTicket);
                    }

                    decimal finalPrice = 0;

                    // add order to database
                    await _context.Orders.AddAsync(newOrder);

                    foreach (BasketTicket basketTicket in tickets)
                    {
                        var bookedSeat = await _context.BookedSeats
                                         .FirstOrDefaultAsync(x => x.Id == basketTicket.BookedSeatId);

                        if (discount)
                        {
                            finalPrice += basketTicket.Price;
                        }
                        bookedSeat.Booked = 2;
                        _context.Update(bookedSeat);
                    }

                    var basket = await _context.Basket.Include(x => x.Tickets).FirstOrDefaultAsync(x => x.UserId == user.Id);

                    basket.Tickets.Clear();

                    await _context.SaveChangesAsync();

                    if (role[0] == "AgencyOrClub" && ticketsBought.Count > 19)
                    {
                        if (user.ApprovedMultipleDiscounts == true)
                        {
                            finalPrice = finalPrice * 9 / 10;
                        }
                        else
                        {
                            finalPrice = finalPrice * (decimal)9.5 / 10;
                        }
                    }
                    // cereate tickets and receipt view
                    TicketAndReceipt ticketAndReceipt = new TicketAndReceipt()
                    {
                        TotalCost       = Total,
                        OrderId         = newOrder.Id,
                        PersonName      = newOrder.ClientName,
                        Tickets         = ticketsBought,
                        DiscountApplied = discount,
                        Saved           = 0
                    };

                    if (discount)
                    {
                        ticketAndReceipt.Saved = Total - finalPrice;
                    }
                    return(View(ticketAndReceipt));
                }
                else
                {
                    return(RedirectToAction(nameof(Basket)));
                }
            }

            TempData["UserNotifier"] = new UserNotifier()
            {
                CssFormat   = "alert-danger",
                Content     = "Payment was declined",
                MessageType = "Error!"
            };
            return(View());
        }
예제 #29
0
파일: HomeController.cs 프로젝트: mdLn1/SDP
        // use when customer saved card details
        public async Task <IActionResult> UseSavedCard(decimal Total, string selectedDelivery)
        {
            var user = await _userManager.GetUserAsync(User);

            var role = await _userManager.GetRolesAsync(user);

            var tickets = await _context.BasketTickets.Include(x => x.Performance).ThenInclude(y => y.Play)
                          .Include(x => x.BookedSeat).ThenInclude(y => y.Seat).Where(x => x.BasketId == user.Id).ToListAsync();

            long amount = 0;

            // check if any seats
            if (tickets.Count > 0 && Total > 0)
            {
                // calculate the amount
                amount = long.Parse(Total.ToString("#.00").Replace(".", ""));
                if (amount < 100)
                {
                    amount *= 100;
                }
            }
            else
            {
                // if basket empty return Basket View
                return(RedirectToAction(nameof(Basket)));
            }
            var chargeOptions = new ChargeCreateOptions
            {
                Amount      = amount,
                Currency    = "gbp",
                Description = "Theatre charge",
                CustomerId  = user.SavedCustomerCard
            };
            var    chargeService = new ChargeService();
            Charge charge        = chargeService.Create(chargeOptions);

            // if charge succeeded create order
            if (charge.Status.ToLower() == "succeeded")
            {
                // charge succeeded, create an order
                Models.Order newOrder = new Models.Order()
                {
                    OrderTime      = DateTime.Now,
                    UserId         = user.Id,
                    DeliveryMethod = selectedDelivery,
                    IsPrinted      = false
                };

                // check who is the customer
                if (role[0] == "Customer")
                {
                    newOrder.ClientName = user.FirstName + " " + user.LastName;
                }
                else if (role[0] == "AgencyOrClub")
                {
                    newOrder.ClientName = user.AgencyOrClubName;
                }

                // see if there was a discount
                DateTime time     = DateTime.Now;
                bool     discount = false;
                if (((int)time.DayOfWeek < 5) && ((int)time.DayOfWeek > 0))
                {
                    discount = true;
                }

                List <TicketsInBasket> ticketsBought = new List <TicketsInBasket>();

                // create a sold ticket for each seat reserved
                foreach (BasketTicket basketTicket in tickets)
                {
                    TicketsInBasket ticket = new TicketsInBasket
                    {
                        Price           = basketTicket.Price,
                        RowNumber       = basketTicket.BookedSeat.Seat.RowNumber,
                        SeatLetter      = basketTicket.BookedSeat.Seat.ColumnLetter,
                        PerformanceName = basketTicket.Performance.Play.Name,
                        Id = basketTicket.Id,
                        PerformanceTime = basketTicket.Performance.Date
                    };
                    ticketsBought.Add(ticket);

                    SoldTicket soldTicket = new SoldTicket
                    {
                        PlayName               = basketTicket.Performance.Play.Name,
                        UserId                 = user.Id,
                        CustomerName           = newOrder.ClientName,
                        PerformanceTimeAndDate = basketTicket.Performance.Date,
                        ColumnLetter           = ticket.SeatLetter,
                        Band      = basketTicket.BookedSeat.Seat.Band,
                        RowNumber = ticket.RowNumber
                    };

                    // check if there is a discount for week days
                    if (discount)
                    {
                        soldTicket.PaidPrice = basketTicket.Price * 8 / 10;
                    }
                    else
                    {
                        soldTicket.PaidPrice = basketTicket.Price;
                    }
                    newOrder.SoldTickets.Add(soldTicket);
                }

                decimal finalPrice = 0;

                // add order to database
                await _context.Orders.AddAsync(newOrder);

                //reserve seats
                foreach (BasketTicket basketTicket in tickets)
                {
                    var bookedSeat = await _context.BookedSeats
                                     .FirstOrDefaultAsync(x => x.Id == basketTicket.BookedSeatId);

                    if (discount)
                    {
                        finalPrice += basketTicket.Price;
                    }
                    bookedSeat.Booked = 2;
                    _context.Update(bookedSeat);
                }

                var basket = await _context.Basket.Include(x => x.Tickets).FirstOrDefaultAsync(x => x.UserId == user.Id);

                // remove all the tickets in the basket
                basket.Tickets.Clear();

                await _context.SaveChangesAsync();

                // if agency/club and approved, receive discounts for more than 20 tickets
                if (role[0] == "AgencyOrClub" && ticketsBought.Count > 19)
                {
                    if (user.ApprovedMultipleDiscounts == true)
                    {
                        finalPrice = finalPrice * 9 / 10;
                    }
                    else
                    {
                        finalPrice = finalPrice * (decimal)9.5 / 10;
                    }
                }
                // create tickets and receipt view
                TicketAndReceipt ticketAndReceipt = new TicketAndReceipt()
                {
                    TotalCost       = Total,
                    OrderId         = newOrder.Id,
                    PersonName      = newOrder.ClientName,
                    Tickets         = ticketsBought,
                    DiscountApplied = discount,
                    Saved           = 0
                };

                if (discount)
                {
                    ticketAndReceipt.Saved = Total - finalPrice;
                }
                return(View(nameof(Checkout), ticketAndReceipt));
            }
            else
            {
                // if payment failed resend to basket
                return(RedirectToAction(nameof(Basket)));
            }
        }
예제 #30
0
 public ActionResult InserOrder(Models.Order order)
 {
     return(View("Index"));
 }
 public void AddOrder(Models.Order o)
 {
     orderList.Add(o);
 }
 public UpdateOrderResponse(Models.Order order          = null,
                            IList <Models.Error> errors = null)
 {
     Order  = order;
     Errors = errors;
 }
 public Builder Order(Models.Order order)
 {
     this.order = order;
     return(this);
 }
예제 #34
0
        public async Task <(bool IsSuccess, Db.Order Orders, string ErrorMessage)> PostOrderAsync([FromBody] Models.Order order)
        {
            try
            {
                logger?.LogInformation("Creating order");
                var mapper   = configurationProvider.CreateMapper();
                var neworder = mapper.Map <Db.Order>(order);
                if (neworder != null)
                {
                    dbContext.Orders.Add(neworder);
                    await dbContext.SaveChangesAsync();

                    logger?.LogInformation($"order created {neworder}");

                    var createPostOrderCommand = new CreatePostOrderCommand(order.OrderDate, order.Total, order.Items);
                    await eventBus.SendCommand(createPostOrderCommand);

                    return(true, neworder, null);
                }

                return(false, null, "Not created");
            }
            catch (Exception ex)
            {
                logger?.LogError(ex.ToString());
                return(false, null, ex.Message);
            }
        }
예제 #35
0
 /// <summary>
 /// 新增訂單的畫面
 /// </summary>
 /// <returns></returns>
 public ActionResult InsertOrder()
 {
     Models.Order order = new Models.Order();
     order.CustName = "叡揚資訊";
     return(View(order));
 }
예제 #36
0
        public Models.Order newOrder()
        {
            Models.Order order = new Models.Order();

            Data.Order dOrder = new Data.Order{
                customerID = order.customerID,
                discount = order.discount,
                address = order.address,
                status = order.status,
                timeStamp = order.timeStamp,
                orderDate = order.orderDate
            };

            db.orders.Add(dOrder);
            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                httpCtx.Trace.Warn("Database write Error", "Cannot a new order", ex);
                return new Models.Order();
            }

            order.orderID = dOrder.orderID;

            routeDiffs(new[]{
                new {
                    op = "add",
                    data = new {
                        customers = new Models.Customer[0],
                        products = new Models.Product[0],
                        blobs = new Models.Blob[0],
                        orders = new [] {
                            order
                        }

                    }
                }
            });
            return order;
        }