コード例 #1
0
        public virtual ActionResult Confirm(OrderConfirmViewModel model)
        {
            var orderUtils = new OrderUtils(_context, CurrentUserId);

            if (!model.OrderConfirmed)
            {
                // Regenerate the model
                model = orderUtils.GetConfirmModel(model.ProductId);
                ModelState.AddModelError("OrderConfirmed", "You must check the confirmation box to activate this license");
                return View(model);
            }

            var createdOrder = orderUtils.CreateOrder(model.ProductId);
            if (createdOrder.OrderStatus == OrderStatus.AwaitingPayment)
                return RedirectToAction(MVC.Products.Pay.Index(createdOrder.Id));

            else if (createdOrder.OrderStatus != OrderStatus.Completed)
                throw new InvalidOperationException(
                    string.Format("Order status of {0} is not supported", createdOrder.OrderStatus.ToString()));

            // Order was completed as it was free
            orderUtils.ActivateOrderedLicenses(createdOrder);
            string LicenseType = orderUtils.GetLicenseDescription(createdOrder.FillPerfectLicenses.First().LicenseType);
           
            return RedirectToAction(
                MVC.Products.FillPerfect.LicenseActivated(
                    (Guid)_context.Users.Find(createdOrder.OrderedForId).FillPerfectKey,
                    createdOrder.FillPerfectLicenses.First().EffectiveDate,
                    createdOrder.FillPerfectLicenses.First().ExpirationDate,
                    LicenseType));
        }
コード例 #2
0
ファイル: EmailSender.cs プロジェクト: hnvt1989/MyProject
        //public static async Task<int> Send(OrderSummaryViewModel order)
        //{
        //    var body = "<p>Order number: {0} from customer {1} </p><p>Order Total:</p><p>{2}</p>";
        //    var message = new MailMessage();
        //    var email1 = "";
        //    var email2 = "";

        //    using (var context = new ShoppingCartContext())
        //    {
        //        email1 = context.AppSettings.Single(a => a.Code == "NotificationEmail1").Value;
        //        email2 = context.AppSettings.Single(a => a.Code == "NotificationEmail2").Value;
        //    }

        //    message.To.Add(new MailAddress(email1)); //send to company email
        //    message.To.Add(new MailAddress(email2)); //send to company email

        //    message.Subject = "An order has placed !!";
        //    message.Body = string.Format(body, order.OrderNumber, order.FullName, order.Total.ToString("N0"));
        //    message.IsBodyHtml = true;
        //    using (var smtp = new SmtpClient())
        //    {
        //        await smtp.SendMailAsync(message);

        //    }

        //    //send to customer email
        //    if (!string.IsNullOrEmpty(order.Email))
        //    {
        //        body = CreateEmailTemplate(order);
        //        message = new MailMessage();


        //        message.To.Add(new MailAddress(order.Email));

        //        message.Subject = "Cảm ơn bạn đã đặt hàng ở H.A Shop !";
        //        message.Body = body;
        //        message.IsBodyHtml = true;
        //        using (var smtp = new SmtpClient())
        //        {
        //            await smtp.SendMailAsync(message);

        //        }
        //    }
        //    return 1;
        //}

        public static string CreateEmailTemplate(OrderConfirmViewModel order, string orderNumber)
        {
            //var text = "Tin nhắn từ: {0}. Nội dung: {1}. {2}";

            var contact = "";
            var rootUrl = "";

            using (var context = new ShoppingCartContext())
            {
                var contactInfo = context.Contents.SingleOrDefault(c => c.TextLocation == "Order.Email.ContactInfo");

                if (contactInfo != null)
                {
                    contact = contactInfo.TextValue;
                }
                rootUrl = context.AppSettings.Single(a => a.Code == "RootUrl").Value;
            }

            var ret = "Thank you for shopping at J.A Shop. Your order number is: " + orderNumber;

            ret += "<p> ================================================================= </p>";
            ret += "<p><b>                        ORDER RECEIPT  " + orderNumber + "</b></p>";
            foreach (var p in order.CartViewModel.CartItems)
            {
                ret += "<p> #" + p.Product.Code + " . <b>Product name:</b> " + p.Product.Description + "                   <b>Price/Per unit:</b>" + p.OriginalPrice.ToString("N0") + "usd    . <b>Quantity:</b>     " + p.Quantity + " </p>";
            }
            ret += "<p><b>Shipping fee:</b> " + order.CartViewModel.CartTotalShippingCost.ToString("N0") + "usd </p>";
            ret += "<p><b>Total amount:</b>" + order.CartViewModel.CartTotal.ToString("N0") + "usd </p>";
            ret += string.Format("<p> <a href=\"{0}/OrderSummary?orderNumber={1}&guid={2}&firstTime=False\">Track order status</a></p>", rootUrl, orderNumber, order.OrderGuid);
            ret += "<p> ================================================================= </p>";
            ret += contact;
            return(ret);
        }
コード例 #3
0
        public OrderConfirmViewModel ReviewOrder(string userId)
        {
            var user = this.context.Users.FirstOrDefault(x => x.Id == userId);

            var order = context.Orders.FirstOrDefault(x => x.OrderStage == Models.Enums.OrderStage.Active &&
                                                      x.ClientId == userId);

            var orderConfirmViewModel = new OrderConfirmViewModel()
            {
                Id              = order.Id,
                ClientName      = order.ClientName,
                DeliveryAddress = order.DeliveryAddress,
                Comment         = order.Comment,
                ClientId        = order.ClientId,
                Client          = order.Client,
                DateOfCreation  = order.DateOfCreation,
                Sum             = order.Sum
            };

            orderConfirmViewModel.Tyres     = this.context.OrderTyres.Where(x => x.OrderId == order.Id).ToHashSet();
            orderConfirmViewModel.WheelRims = this.context.OrderWheelRims.Where(x => x.OrderId == order.Id).ToHashSet();
            orderConfirmViewModel.MotorOils = this.context.OrderMotorOils.Where(x => x.OrderId == order.Id).ToHashSet();

            return(orderConfirmViewModel);
        }
コード例 #4
0
        public ActionResult Index()
        {
            OrderConfirmViewModel model = (OrderConfirmViewModel)TempData["OrderInfo"];

            TempData["OrderConfirm"] = model;
            return(View(model));
        }
コード例 #5
0
ファイル: OrderController.cs プロジェクト: voda2600/Jojo
        public IActionResult PaymentInfoAcceptance(OrderConfirmViewModel model)
        {
            var ids = HttpContext.Session.Get <Dictionary <string, int> >("Card");
            var unavaliableProds = BLL.OrderLogic.GetUnavaliableProducts(ids);

            if (unavaliableProds.Count != 0)
            {
                foreach (var unavaliableProd in unavaliableProds)
                {
                    ids.Remove(unavaliableProd);
                }
                HttpContext.Session.SetOrUpdate("Card", ids);
                TempData["UnavaliableProdsMessage"] = "There were unavailable items in your shopping cart. They are removed from the card.";
                return(RedirectToAction("Card", "Order"));
            }
            var result = BLL.OrderLogic.CreateOrder(User.Identity.Name, model.Address, model.DelivetyType, ids, model.CardMonth, model.CardYear);

            result = "DDD";
            if (result == "Ok")
            {
                _paymenet.Pay();
                HttpContext.Session.SetOrUpdate("Card", new Dictionary <string, int>());
                return(RedirectToAction("Success", "Order"));
            }
            if (result == "Card is not avaliable")
            {
                TempData["CardUnavaliable"] = "Card is not avaliable";
                return(RedirectToAction("PaymentInfo", "Order", model));
            }
            else
            {
                return(RedirectToAction("CreateOrderFail", "Order"));
            }
        }
コード例 #6
0
        public IActionResult Confirm(OrderConfirmViewModel vm)
        {
            var travelPackage = _travelPackageDataService.GetSingle(tp => tp.TravelPackageId == vm.TravelPackageId);

            // Sanity check. Check if the Travel Package is active
            if (travelPackage != null && travelPackage.Activated)
            {
                OrderConfirmViewModel vmConfirm = new OrderConfirmViewModel
                {
                    Description     = travelPackage.Description,
                    Location        = travelPackage.Location,
                    Name            = travelPackage.Name,
                    NumPersons      = vm.NumPersons,
                    Price           = travelPackage.Price,
                    TravelPackageId = travelPackage.TravelPackageId,
                    TotalPrice      = (vm.NumPersons * travelPackage.Price)
                };

                return(View(vmConfirm));
            }

            ModelState.AddModelError("", "Travel Package is not active or does not exist. Unable to proceed with this Request.");

            return(View(new OrderConfirmViewModel {
                Price = 0
            }));
        }
コード例 #7
0
        public async Task <ActionResult> Index(OrderConfirmViewModel model)
        {
            OrderConfirmViewModel m = (OrderConfirmViewModel)TempData["OrderConfirm"];

            if (ModelState.IsValid)
            {
                var order = new Order()
                {
                    OrderNumber        = SeqHelper.Next("Order"),
                    FullName           = m.CheckOutInfo.Name,
                    Address            = m.CheckOutInfo.ShippingAddress,
                    PaymentTransaction = m.CheckOutInfo.PaymentTransaction,
                    Phone        = m.CheckOutInfo.Phone,
                    Email        = m.CheckOutInfo.Email,
                    OrderDate    = DateTime.Now,
                    OrderDetails = new List <LineOrderDetail>()
                };

                //user who placed the order
                using (IdentityContext _idDb = new IdentityContext())
                {
                    var _currentUserId = User.Identity.GetUserId();
                    var _currentUser   = _idDb.Users.FirstOrDefault(x => x.Id == _currentUserId);

                    if (_currentUser != null)
                    {
                        order.UserName = _currentUser.UserName;
                    }
                }

                if (User != null)
                {
                    order.UserName = User.Identity.GetUserName();
                }
                order.Guid = Guid.NewGuid().ToString();
                var orderNumber = ShoppingCart.GetCart(this).CreateOrder(order);
                m.OrderGuid = order.Guid;
                int i = await EmailSender.SendMail(orderNumber.ToString(), m);

                if (User.Identity.IsAuthenticated)
                {
                    if (User.IsInRole("Admin") || User.IsInRole("Consultant"))
                    {
                        return(RedirectToAction("Index", "OrderSummary", new { orderNumber = orderNumber, guid = "", firstTime = true }));
                    }
                }
                return(RedirectToAction("Index", "OrderSummary", new { orderNumber = orderNumber, guid = order.Guid, firstTime = true }));
            }

            //TempData["OrderInfo"] = m;
            return(View());
        }
コード例 #8
0
        public ActionResult CheckOut(FormCollection form)
        {
            var order = new OrderSummary();

            order.OrderDate = DateTime.Now;
            if (TryUpdateModel(order))
            {
                var orderViewModel = new OrderConfirmViewModel
                {
                    Order     = order,
                    CartItems = this.CartItems
                };
                return(View("Confirm", orderViewModel));
            }
            return(View());
        }
コード例 #9
0
ファイル: OrderController.cs プロジェクト: voda2600/Jojo
        public IActionResult PaymentInfo(OrderConfirmViewModel model)
        {
            var ids = HttpContext.Session.Get <Dictionary <string, int> >("Card");
            var unavaliableProds = BLL.OrderLogic.GetUnavaliableProducts(ids);

            if (unavaliableProds.Count != 0)
            {
                foreach (var unavaliableProd in unavaliableProds)
                {
                    ids.Remove(unavaliableProd);
                }
                HttpContext.Session.SetOrUpdate("Card", ids);
                TempData["UnavaliableProdsMessage"] = "There were unavailable items in your shopping cart. They are removed from the card.";
                return(RedirectToAction("Card", "Order"));
            }
            return(View(model));
        }
コード例 #10
0
ファイル: PayController.cs プロジェクト: KallDrexx/MyJobLeads
        public virtual ActionResult Index(OrderConfirmViewModel model)
        {
            string paypalUrl = ConfigurationManager.AppSettings["PayPalRedirectUrl"];

            if (string.IsNullOrWhiteSpace(paypalUrl))
            {
                throw new InvalidOperationException("No paypal redirect url specified");
            }

            var order = _context.Orders
                        .Where(x => x.Id == model.OrderId && x.OrderedForId == CurrentUserId)
                        .FirstOrDefault();

            if (order == null || order.OrderStatus != DomainModel.Enums.OrderStatus.AwaitingPayment)
            {
                return(RedirectToAction(MVC.Home.Index()));
            }

            // Form long parameters
            string returnUrl = string.Concat(Request.Url.Scheme, "://", Request.Url.DnsSafeHost, ":", Request.Url.Port, Url.Action(MVC.Products.Pay.ProcessPayPal()));

            returnUrl = returnUrl.Replace(":80/", "/");

            string cancelUrl = string.Concat(Request.Url.Scheme, "://", Request.Url.DnsSafeHost, ":", Request.Url.Port, Url.Action(MVC.Products.Pay.Index(model.OrderId)));

            cancelUrl = cancelUrl.Replace(":80/", "/");

            // Start the workflow for paypal
            string tokenResponse = GetPaypalTransactionToken(order.TotalPrice, returnUrl, cancelUrl);

            if (string.IsNullOrWhiteSpace(tokenResponse))
            {
                throw new InvalidOperationException("No paypal token was received");
            }

            tokenResponse     = HttpUtility.UrlDecode(tokenResponse).Replace("TOKEN=", "");
            order.PayPalToken = tokenResponse;
            _context.SaveChanges();

            // Redirect to paypal with the token
            paypalUrl = string.Concat(paypalUrl, "?cmd=_express-checkout&useraction=commit&token=", HttpUtility.UrlEncode(tokenResponse));
            return(Redirect(paypalUrl));
        }
コード例 #11
0
        public ActionResult Confirm(FormCollection form)
        {
            if (CartItems.Count <= 0)
            {
                return(RedirectToAction("Index", "Cart"));
            }
            var order = new OrderSummary();

            order.OrderDate = DateTime.Now;

            if (TryUpdateModel(order))
            {
                var orderViewModel = new OrderConfirmViewModel
                {
                    Order     = order,
                    CartItems = this.CartItems
                };
                return(View(orderViewModel));
            }
            return(View("CheckOut"));
        }
コード例 #12
0
 private void reFreshData()
 {
     addfeeflag = false;
     if (model.dto != null)
     {
         if (model == null)
         {
             model = new OrderConfirmViewModel(Context.Org.Id_org, xapFormControl);
         }
         if (model.dto.Fg_sign != FBoolean.False || model.dto.Fg_stop != FBoolean.False ||
             model.dto.Fg_canc != FBoolean.False)
         {
             model.GetOrConfirmList(model.dto);
         }
         else
         {
             model.OrderList.Clear();
         }
         OnFillData();
     }
 }
コード例 #13
0
        public async Task <IActionResult> Process(OrderConfirmViewModel vm)
        {
            try
            {
                var user = await _userDataService.GetUserAsync(User);

                var profile       = _profileDataService.GetSingle(p => p.UserId == user.Id);
                var travelPackage = _travelPackageDataService.GetSingle(tp => tp.TravelPackageId == vm.TravelPackageId);

                Order order = new Order
                {
                    ItemPrice       = travelPackage.Price,
                    NumberPersons   = vm.NumPersons,
                    OrderDate       = DateTime.Now,
                    ProfileId       = profile.ProfileId,
                    TotalPrice      = vm.TotalPrice,
                    TravelPackageId = travelPackage.TravelPackageId
                };

                _orderDataService.Create(order);

                //TravelPackageOrder travelPackageOrder = new TravelPackageOrder
                //{
                //    OrderId = order.OrderId,
                //    TravelPackageId = travelPackage.TravelPackageId
                //};

                //_travelPackageOrderDataService.Create(travelPackageOrder);

                return(RedirectToAction("Index", "Home"));
            }
            catch (Exception ex)
            {
                var errorMessage = ex.Message;
                ModelState.AddModelError("", "Error while processing request: " + errorMessage);

                return(View());
            }
        }
コード例 #14
0
        public virtual ActionResult Confirm(OrderConfirmViewModel model)
        {
            var orderUtils = new OrderUtils(_context, CurrentUserId);

            if (!model.OrderConfirmed)
            {
                // Regenerate the model
                model = orderUtils.GetConfirmModel(model.ProductId);
                ModelState.AddModelError("OrderConfirmed", "You must check the confirmation box to activate this license");
                return(View(model));
            }

            var createdOrder = orderUtils.CreateOrder(model.ProductId);

            if (createdOrder.OrderStatus == OrderStatus.AwaitingPayment)
            {
                return(RedirectToAction(MVC.Products.Pay.Index(createdOrder.Id)));
            }

            else if (createdOrder.OrderStatus != OrderStatus.Completed)
            {
                throw new InvalidOperationException(
                          string.Format("Order status of {0} is not supported", createdOrder.OrderStatus.ToString()));
            }

            // Order was completed as it was free
            orderUtils.ActivateOrderedLicenses(createdOrder);
            string LicenseType = orderUtils.GetLicenseDescription(createdOrder.FillPerfectLicenses.First().LicenseType);

            return(RedirectToAction(
                       MVC.Products.FillPerfect.LicenseActivated(
                           (Guid)_context.Users.Find(createdOrder.OrderedForId).FillPerfectKey,
                           createdOrder.FillPerfectLicenses.First().EffectiveDate,
                           createdOrder.FillPerfectLicenses.First().ExpirationDate,
                           LicenseType)));
        }
コード例 #15
0
        public ActionResult Index(CheckoutViewModel model)
        {
            string  cartCode  = "";
            decimal cartTotal = 0m;

            var cart = ShoppingCart.GetCart(this.HttpContext);

            //to redirect if view is not valid
            cartCode  = cart.ShoppingCartId;
            cartTotal = cart.GetTotal();



            if (ModelState.IsValid)
            {
                // Set up our ViewModel
                var viewModel = new ShoppingCartViewModel
                {
                    CartItems             = cart.GetCartItems(),
                    CartTotal             = cart.GetTotal() + cart.GetTotalShippingCost(),
                    CartTotalShippingCost = cart.GetTotalShippingCost(),
                };



                //update the cart code to the user id if they are logged in
                //viewModel.CartItems.ForEach(c => c.Code = cart.GetCartId(HttpContext));

                //string paymentTypeValue = Request.Form["paymentType"].ToString();
                PaymentType   paymentType;
                PaymentStatus paymentStatus;

                using (var context = new ShoppingCartContext())
                {
                    //paymentType  = context.PaymentTypes.Single(t => t.Description == paymentTypeValue);
                    paymentType   = context.PaymentTypes.Single(t => t.Code == "PayLater");
                    paymentStatus = context.PaymentStatuses.Single(p => p.Code == "NotPaid");
                }

                var m = new OrderConfirmViewModel()
                {
                    CartViewModel = viewModel,
                    CheckOutInfo  = new CheckoutViewModel()
                    {
                        ShippingAddress    = model.ShippingAddress,
                        PaymentTransaction = new PaymentTransaction()
                        {
                            //todo: comment out this line, because we disabled the amount text box.
                            //todo: when amount text box is enabled, uncomment this line to get the entered amount value
                            //Amount = model.PaymentTransaction.Amount,

                            Amount = 0m,
                            //Amount = viewModel.CartTotal,
                            Code           = Guid.NewGuid().ToString(),
                            PartialPayment = true,
                            //PartialPayment = (model.PaymentTransaction.Amount < viewModel.CartTotal),
                            //todo:
                            PaymentStatusId        = paymentStatus.Id, //1 = on hold, 2 = processing, 3 = processed, 4 = complete
                            PaymentTypeId          = paymentType.Id,
                            PaymentTypeDescription = paymentType.Description,
                            //PostedAmount = 0m
                        },
                        Name  = model.Name,
                        Email = model.Email,
                        Phone = model.Phone
                    }
                };
                m.CheckOutInfo.ShippingAddress.Primary       = false;
                m.CheckOutInfo.ShippingAddress.Code          = Guid.NewGuid().ToString();
                m.CheckOutInfo.ShippingAddress.AddressTypeId = 2;


                TempData["OrderInfo"] = m;
                return(RedirectToAction("Index", "OrderConfirm"));
            }

            var checkoutModel = TempData["CheckoutInfo"];

            return(View(checkoutModel));
        }
コード例 #16
0
 /// <summary>
 ///     获取控件相关的数据,不涉及界面(不读写界面元素)。
 /// </summary>
 protected override void OnLoadData()
 {
     model = new OrderConfirmViewModel(Context.Org.Id_org, xapFormControl);
 }
コード例 #17
0
ファイル: OrderController.cs プロジェクト: airShopp/AirShopp
        public ActionResult CheckOrder(long?OrderId, string cartItemStr = "", string totalAmount = "")
        {
            Order order = new Order();
            OrderConfirmViewModel orderConfirmViewModel = new OrderConfirmViewModel();
            long    customerId = (Session[Constants.SESSION_USER] as Customer).Id;
            Address address    = _readFromDb.Address.Where(x => x.CustomerId == customerId && x.IsDefault).FirstOrDefault();

            if (address == null)
            {
                return(Content("<script>alert('请添加收货地址。');location.href='/Address/GetAddress'</script>"));
            }
            else
            {
                if (OrderId == null)
                {
                    string[]         cartItemsIdList = cartItemStr.Split(';');
                    List <OrderItem> orderItems      = new List <OrderItem>();
                    for (int i = 0; i < cartItemsIdList.Length - 1; i++)
                    {
                        if (!string.IsNullOrEmpty(cartItemsIdList[i]))
                        {
                            long      cartItemsId = Convert.ToInt64(cartItemsIdList[i]);
                            CartItem  cartItem    = _readFromDb.CartItems.Where(x => x.Id == cartItemsId).FirstOrDefault();
                            OrderItem orderItem   = new OrderItem();
                            orderItem.ProductId     = cartItem.ProductId;
                            orderItem.Quantity      = cartItem.Quantity;
                            orderItem.UnitPrice     = cartItem.PricePerProduct;
                            orderItem.DiscountPrice = cartItem.PricePerProduct;
                            orderItems.Add(orderItem);

                            _cartItemRepository.UpdateCartItem(cartItem.Id);
                        }
                    }

                    order.CustomerId     = customerId;
                    order.TotalAmount    = Convert.ToDecimal(totalAmount);
                    order.OrderStatus    = Constants.OBLIGATION;
                    order.OrderDate      = DateTime.Now;
                    order.DeliveryDate   = Convert.ToDateTime("1970-01-01 00:00:00.000");
                    order.OrderItems     = orderItems;
                    order.AddressId      = address.Id;
                    order.IsSpecialOrder = false;
                    order.SpecialType    = string.Empty;
                    try
                    {
                        order = _orderService.AddOrder(order);
                        order = _readFromDb.Orders.Where(x => x.Id == order.Id).FirstOrDefault();
                    }
                    catch (System.Exception) { }
                }
                else
                {
                    order           = _orderRepository.GetOrderByOrderId((long)OrderId);
                    order.AddressId = _readFromDb.Address.Where(x => x.CustomerId == customerId && x.IsDefault).FirstOrDefault().Id;
                    _orderRepository.UpdateOrder(order);
                    order = _readFromDb.Orders.Where(x => x.Id == OrderId).FirstOrDefault();
                }

                try
                {
                    decimal actuallyAmount = 0;
                    foreach (OrderItem orderItem in order.OrderItems)
                    {
                        actuallyAmount += orderItem.Product.Price * orderItem.Quantity;
                    }
                    orderConfirmViewModel.ActuallyAmount = actuallyAmount;
                    orderConfirmViewModel.DisCountAmount = actuallyAmount - order.TotalAmount;
                    orderConfirmViewModel.order          = order;
                    orderConfirmViewModel.OrderId        = order.Id;
                    orderConfirmViewModel.ProvinceList   = _provinceRepository.GetProvince();
                    orderConfirmViewModel.CityList       = _cityRepository.GetCity();
                    orderConfirmViewModel.AreaList       = _areaRepository.GetArea();
                }
                catch (Exception ex) { }
                return(View(orderConfirmViewModel));
            }
        }
コード例 #18
0
ファイル: OrderController.cs プロジェクト: airShopp/AirShopp
        public ActionResult ImmediatelyBuy(long productId, int quanlity, decimal pricePerProduct)
        {
            long    customerId = (Session[Constants.SESSION_USER] as Customer).Id;
            Address address    = _readFromDb.Address.Where(x => x.CustomerId == customerId && x.IsDefault).FirstOrDefault();

            if (address == null)
            {
                return(Content("<script>alert('请添加收货地址。');location.href='/Address/GetAddress'</script>"));
            }
            else
            {
                var product = (from p in _readFromDb.Products
                               join d in _readFromDb.Discounts on p.Id equals d.ProductId
                               where p.Id == productId
                               select new ProductListDataModel
                {
                    ProductId = p.Id,
                    ProductName = p.ProductName,
                    Price = Math.Round((double)p.Price, 2),
                    Discounts = d.Discounts,
                    DiscountPrice = Math.Round((double)((p.Price * d.Discounts) / 10), 2),
                    ProductUrl = p.Url
                });

                OrderConfirmViewModel orderConfirmViewModel = new OrderConfirmViewModel();
                List <OrderItem>      orderItems            = new List <OrderItem>();
                orderItems.Add(new OrderItem()
                {
                    Quantity      = quanlity,
                    ProductId     = productId,
                    UnitPrice     = pricePerProduct,
                    DiscountPrice = (decimal)product.FirstOrDefault().DiscountPrice,
                });

                Order order = new Order();
                order.CustomerId     = customerId;
                order.TotalAmount    = quanlity * orderItems.FirstOrDefault().DiscountPrice;
                order.OrderStatus    = Constants.OBLIGATION;
                order.OrderDate      = DateTime.Now;
                order.DeliveryDate   = Convert.ToDateTime("1970-01-01 00:00:00.000");
                order.OrderItems     = orderItems;
                order.AddressId      = address.Id;
                order.IsSpecialOrder = false;
                order.SpecialType    = string.Empty;

                try
                {
                    order = _orderService.AddOrder(order);
                    order = _readFromDb.Orders.Where(x => x.Id == order.Id).FirstOrDefault();

                    decimal actuallyAmount = 0;
                    foreach (OrderItem orderItem in order.OrderItems)
                    {
                        actuallyAmount += orderItem.Product.Price * orderItem.Quantity;
                    }
                    orderConfirmViewModel.ActuallyAmount = actuallyAmount;
                    orderConfirmViewModel.DisCountAmount = actuallyAmount - order.TotalAmount;
                    orderConfirmViewModel.order          = order;
                    orderConfirmViewModel.ProvinceList   = _provinceRepository.GetProvince();
                    orderConfirmViewModel.CityList       = _cityRepository.GetCity();
                    orderConfirmViewModel.AreaList       = _areaRepository.GetArea();
                }
                catch (Exception ex)
                {
                }
                return(View("CheckOrder", orderConfirmViewModel));
            }
        }
コード例 #19
0
ファイル: EmailSender.cs プロジェクト: hnvt1989/MyProject
        public static async Task <int> SendMail(string orderNumber, OrderConfirmViewModel order)
        {
            var HOST          = "";
            var FROM          = "";
            var TO            = "";
            var SMTP_USERNAME = "";
            var SMTP_PASSWORD = "";
            var TO2           = "";

            using (var context = new ShoppingCartContext())
            {
                FROM          = context.AppSettings.Single(a => a.Code == "EmailFrom_EmailAddress").Value;
                SMTP_USERNAME = context.AppSettings.Single(a => a.Code == "EmailFrom_UserName").Value;
                SMTP_PASSWORD = context.AppSettings.Single(a => a.Code == "EmailFrom_Password").Value;
                HOST          = context.AppSettings.Single(a => a.Code == "EmailFrom_Host").Value;// Amazon SES SMTP host name. This example uses the US West (Oregon) region.
                TO            = context.AppSettings.Single(a => a.Code == "NotificationEmails").Value;
                //TO2 = context.AppSettings.Single(a => a.Code == "NotificationEmail2").Value;
            }


            var SUBJECT = "An order has placed !";
            var BODY    = string.Format("Order number: {0} from customer {1} . Order Total: {2}", orderNumber, order.CheckOutInfo.Name, order.CartViewModel.CartTotal.ToString("N0"));

            //const String FROM = "*****@*****.**";   // Replace with your "From" address. This address must be verified.
            //const String TO = "*****@*****.**";  // Replace with a "To" address. If your account is still in the
            // sandbox, this address must be verified.


            //const String BODY = "This email was sent through the Amazon SES SMTP interface by using C#.";

            // Supply your SMTP credentials below. Note that your SMTP credentials are different from your AWS credentials.
            //const String SMTP_USERNAME = "******";  // Replace with your SMTP username.
            //const String SMTP_PASSWORD = "******";  // Replace with your SMTP password.



            // Port we will connect to on the Amazon SES SMTP endpoint. We are choosing port 587 because we will use
            // STARTTLS to encrypt the connection.
            const int PORT = 587;

            // Create an SMTP client with the specified host name and port.
            using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(HOST, PORT))
            {
                // Create a network credential with your SMTP user name and password.
                client.Credentials = new System.Net.NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD);

                // Use SSL when accessing Amazon SES. The SMTP session will begin on an unencrypted connection, and then
                // the client will issue a STARTTLS command to upgrade to an encrypted connection using SSL.
                client.EnableSsl = true;


                // Send the email.
                try
                {
                    var orderDetails = CreateEmailTemplate(order, orderNumber);

                    var htmlView = AlternateView.CreateAlternateViewFromString(BODY + orderDetails, Encoding.UTF8, MediaTypeNames.Text.Html);

                    var message = new MailMessage
                    {
                        Subject = "New order!",
                        From    = new MailAddress(FROM, "J.A shop")
                    };
                    message.To.Add(TO);
                    //message.To.Add(TO2);
                    message.AlternateViews.Add(htmlView);

                    await client.SendMailAsync(message);

                    ////send to 1st email
                    //await client.SendMailAsync(FROM, TO, SUBJECT, BODY);


                    ////send to 2nd email:
                    //await client.SendMailAsync(FROM, TO2, SUBJECT, BODY);

                    //send email to the customer !
                    if (!string.IsNullOrEmpty(order.CheckOutInfo.Email))
                    {
                        var htmlView2 = AlternateView.CreateAlternateViewFromString(orderDetails, Encoding.UTF8, MediaTypeNames.Text.Html);

                        var messageToCustomer = new MailMessage
                        {
                            Subject = "Thank you for shopping at J.A Shop !",
                            From    = new MailAddress(FROM, "J.A shop")
                        };
                        TO = order.CheckOutInfo.Email;
                        messageToCustomer.To.Add(TO);
                        messageToCustomer.AlternateViews.Add(htmlView2);
                        await client.SendMailAsync(messageToCustomer);

                        //BODY = ;
                        //TO = order.CheckOutInfo.Email;

                        //SUBJECT = "Cảm ơn bạn đã đặt hàng ở H.A Shop !";
                        //message.Body = body;
                        //message.IsBodyHtml = true;
                        //using (var smtp = new SmtpClient())
                        //{
                        //    await smtp.SendMailAsync(message);

                        //}

                        //await client.SendMailAsync(FROM, TO, SUBJECT, BODY);
                    }
                }
                catch (Exception ex)
                {
                    //Console.WriteLine("The email was not sent.");
                    //Console.WriteLine("Error message: " + ex.Message);
                }
            }


            //if (!string.IsNullOrEmpty(order.CheckOutInfo.Email))
            //{
            //    BODY = CreateEmailTemplate(order, orderNumber);
            //    TO = order.CheckOutInfo.Email;

            //    SUBJECT = "Cảm ơn bạn đã đặt hàng ở H.A Shop !";
            //    //message.Body = body;
            //    //message.IsBodyHtml = true;
            //    using (var smtp = new SmtpClient())
            //    {
            //        await smtp.SendMailAsync(message);

            //    }
            //}

            return(1);
            //Console.Write("Press any key to continue...");
            //Console.ReadKey();
        }
コード例 #20
0
        public OrderConfirmViewModel Create(OrderServiceModel orderServiceModel, string userId)
        {
            var user = this.context.Users.FirstOrDefault(x => x.Id == userId);

            Order order          = new Order();
            Order orderFromInput = orderServiceModel.To <Order>();

            order.ClientName      = orderFromInput.ClientName;
            order.DeliveryAddress = orderFromInput.DeliveryAddress;
            order.Comment         = orderFromInput.Comment;
            order.ClientId        = user.Id;
            order.Client          = user;
            order.DateOfCreation  = DateTime.UtcNow;
            order.OrderStage      = Models.Enums.OrderStage.Active;

            HashSet <ShoppingBagTyre> bagTyres = new HashSet <ShoppingBagTyre>();

            var sum = 0m;

            foreach (var tyre in this.context.ShoppingBagTyres.Where(x => x.UserId == user.Id))
            {
                bagTyres.Add(tyre);
            }

            foreach (var tyre in bagTyres)
            {
                var orderTyre = new OrderTyre()
                {
                    OrderId  = order.Id,
                    UserId   = user.Id,
                    TyreId   = tyre.TyreId,
                    Model    = tyre.Model,
                    Brand    = tyre.Brand,
                    Price    = tyre.Price,
                    Quantity = tyre.Quantity
                };

                sum += orderTyre.Price * orderTyre.Quantity;

                order.Tyres.Add(orderTyre);
                this.context.OrderTyres.Add(orderTyre);
            }

            foreach (var wheelRim in this.context.ShoppingBagWheelRims.Where(x => x.UserId == user.Id))
            {
                var orderWheelRim = new OrderWheelRim()
                {
                    OrderId    = order.Id,
                    UserId     = user.Id,
                    WheelRimId = wheelRim.WheelRimId,
                    Model      = wheelRim.Model,
                    Brand      = wheelRim.Brand,
                    Price      = wheelRim.Price,
                    Quantity   = wheelRim.Quantity
                };

                sum += orderWheelRim.Price * orderWheelRim.Quantity;

                order.WheelRims.Add(orderWheelRim);
                this.context.OrderWheelRims.Add(orderWheelRim);
            }

            foreach (var motorOil in this.context.ShoppingBagMotorOils.Where(x => x.UserId == user.Id))
            {
                var orderMotorOil = new OrderMotorOil()
                {
                    OrderId    = order.Id,
                    UserId     = user.Id,
                    MotorOilId = motorOil.MotorOilId,
                    Model      = motorOil.Model,
                    Brand      = motorOil.Brand,
                    Price      = motorOil.Price,
                    Quantity   = motorOil.Quantity
                };

                sum += orderMotorOil.Price * orderMotorOil.Quantity;

                order.MotorOils.Add(orderMotorOil);
                this.context.OrderMotorOils.Add(orderMotorOil);
            }

            order.Sum = sum;

            user.Orders.Add(order);

            this.context.Orders.Add(order);
            this.context.SaveChanges();

            var orderConfirmViewModel = new OrderConfirmViewModel()
            {
                Id              = order.Id,
                ClientName      = order.ClientName,
                DeliveryAddress = order.DeliveryAddress,
                Comment         = order.Comment,
                ClientId        = order.ClientId,
                Client          = order.Client,
                DateOfCreation  = order.DateOfCreation
            };

            orderConfirmViewModel.Tyres     = order.Tyres;
            orderConfirmViewModel.WheelRims = order.WheelRims;

            return(orderConfirmViewModel);
        }