Ejemplo n.º 1
0
        public ActionResult SendOrder(string shipName, string mobile, string address, string email)
        {
            try
            {
                UserLogin user     = (UserLogin)Session[Common.CommonConstants.USER_SESSION];
                var       cart     = (List <CartItem>)Session[Common.CommonConstants.CART_SESSION];
                var       itemList = new List <CartItem>();
                if (cart != null)
                {
                    itemList = (List <CartItem>)cart;
                }
                var coupon     = (List <Coupon>)Session[Common.CommonConstants.COUPON_SESSION];
                var couponList = new List <Coupon>();
                if (coupon != null)
                {
                    couponList = (List <Coupon>)coupon;
                }
                var     productDao  = new ProductDao();
                decimal originPrice = 0;
                foreach (var item in itemList)
                {
                    //check quantity+status của product
                    if (productDao.CheckProduct(item.Product.ID, item.Quantity) == false)
                    {
                        var alertMessage = "Số lượng sản phẩm [" + item.Product.Name + "] đã hết. Xin vui lòng chọn sản phẩm khác.";
                        SetAlert(alertMessage, "error");
                        return(Redirect("/het-san-pham"));
                    }
                    if (item.Product.PromotionPrice != null)
                    {
                        originPrice += (item.Product.PromotionPrice.GetValueOrDefault(0) * item.Quantity);
                    }
                    else
                    {
                        originPrice += (item.Product.Price.GetValueOrDefault(0) * item.Quantity);
                    }
                }
                decimal newPrice = originPrice;
                foreach (var item in couponList)
                {
                    if (item.ByPercentage == true)
                    {
                        newPrice = (newPrice * (1 - item.DiscountBy / 100));
                    }
                    else
                    {
                        newPrice = newPrice - item.DiscountBy;
                    }
                }
                if (newPrice < 0)
                {
                    newPrice = 0;
                }
                //Gửi Email
                //đọc file neworder.html //email mẫu
                string content = System.IO.File.ReadAllText(Server.MapPath("/assets/client/template/neworder.html"));
                //replace các key {{}}
                content = content.Replace("{{CustomerName}}", shipName);
                //tùy chọn: cần 2 phone+email hoặc ít nhất 1
                int infoCount = (mobile != "" ? 1 : 0) + (email != "" ? 1 : 0);
                if (infoCount > 0)
                {
                    content = content.Replace("{{Phone}}", mobile != "" ? mobile : "trống");
                    content = content.Replace("{{Email}}", email != "" ? email : "trống");
                }
                else
                {
                    return(Redirect("/loi-dat-hang"));
                }
                content = content.Replace("{{Address}}", address);
                decimal ship = 100000;       // ship 100k
                content = content.Replace("{{Ship}}", ship.ToString("N0") + "đ");
                if (newPrice == originPrice) //ko có coupon, ko có newPrice
                {
                    content = content.Replace("{{OriginPrice}}", "Giá: " + originPrice.ToString("N0") + "đ");
                    content = content.Replace("{{NewPrice}}", "");
                }
                else
                {
                    content = content.Replace("{{OriginPrice}}", "Giá gốc: " + originPrice.ToString("N0") + "đ");
                    content = content.Replace("{{NewPrice}}", "Giá mới: " + newPrice.ToString("N0") + "đ");
                }
                content = content.Replace("{{Total}}", (newPrice + ship).ToString("N0") + "đ");
                //đọc tham số từ key trong Web.config của project OnlineShop
                var toEmail = ConfigurationManager.AppSettings["ToEmailAddress"].ToString();
                //gửi đi 2 nơi
                new MailHelper().SendMail(toEmail, "Đơn hàng mới từ OnlineShop đến người cung cấp sản phẩm", content);
                new MailHelper().SendMail(email, "Đơn hàng mới từ OnlineShop đến người đặt đơn hàng", content);

                //Gửi thành công // bắt đầu xử lý database
                //ghi order vào databasse
                var orderDao = new OrderDao();
                var order    = new Model.EF.Order();
                order.CreatedDate = DateTime.Now;
                if (user != null)
                {
                    order.CustomerID = user.UserID;
                }
                order.ShipName    = shipName;
                order.ShipMobile  = mobile;
                order.ShipAddress = address;
                order.ShipEmail   = email;
                order.Status      = -1; //đang chờ shipper nhận
                var orderId = orderDao.Insert(order);
                //xử lý OrderDetail + Product
                var detailDao = new OrderDetailDao();

                foreach (var item in itemList)
                {
                    //Xử lý OrderDetail
                    var orderDetail = new OrderDetail();
                    orderDetail.ProductID = item.Product.ID;
                    orderDetail.OrderID   = orderId;
                    orderDetail.Price     = item.Product.Price;
                    orderDetail.Quantity  = item.Quantity;
                    detailDao.Insert(orderDetail);
                    //Xử lý sản phẩm // cập nhật số lượng sản phẩm
                    productDao.UpdateQuantity(item.Product.ID, item.Quantity);
                }
                //xử lý coupon + CouponUser
                var couponDao     = new CouponDao();
                var couponUserDao = new CouponUserDao();
                foreach (var item in couponList)
                {
                    //xử lý coupon
                    couponDao.UseCouponDiscountCode(item.Code);
                    //Xử lý CouponUser
                    var couponUser = new CouponUser();
                    couponUser.CouponID = item.ID;
                    couponUser.UserID   = user.UserID;
                    couponUserDao.Insert(couponUser);
                }
                //gán cart+coupon null
                Session[Common.CommonConstants.CART_SESSION]   = null;
                Session[Common.CommonConstants.COUPON_SESSION] = null;
            }
            catch (Exception ex)
            {
                //ghi log
                Logger.Log("Error" + ex.Message);
                return(Redirect("/loi-dat-hang"));
            }
            return(Redirect("/hoan-thanh"));
        }
Ejemplo n.º 2
0
        //Pay=paypal
        public ActionResult PaymentWithPaypal(string Cancel = null)
        {
            UserLogin user     = (UserLogin)Session[Common.CommonConstants.USER_SESSION];
            var       cart     = (List <CartItem>)Session[Common.CommonConstants.CART_SESSION];
            var       itemList = new List <CartItem>();

            if (cart != null)
            {
                itemList = (List <CartItem>)cart;
            }
            var coupon     = (List <Coupon>)Session[Common.CommonConstants.COUPON_SESSION];
            var couponList = new List <Coupon>();

            if (cart != null)
            {
                couponList = (List <Coupon>)coupon;
            }
            var productDao = new ProductDao();

            //check quantity+status của product
            foreach (var item in cart)
            {
                if (productDao.CheckProduct(item.Product.ID, item.Quantity) == false)
                {
                    var alertMessage = "Số lượng sản phẩm [" + item.Product.Name + "] đã hết. Xin vui lòng chọn sản phẩm khác.";
                    SetAlert(alertMessage, "error");
                    return(Redirect("/het-san-pham"));
                }
            }
            //getting the apiContext
            APIContext apiContext = helper.PaypalConfiguration.GetAPIContext();

            try
            {
                //A resource representing a Payer that funds a payment Payment Method as paypal
                //Payer Id will be returned when payment proceeds or click to pay
                string payerId = Request.Params["PayerID"];
                if (string.IsNullOrEmpty(payerId))
                {
                    //this section will be executed first because PayerID doesn't exist
                    //it is returned by the create function call of the payment class
                    // Creating a payment
                    // baseURL is the url on which paypal sendsback the data.
                    // So we have provided URL of this controller only
                    string baseURI = Request.Url.Scheme + "://" + Request.Url.Authority +
                                     "/Cart/PaymentWithPaypal?";
                    //here we are generating guid for storing the paymentID received in session
                    //which will be used in the payment execution.
                    //guid we are generating for storing the paymentID received in session
                    //after calling the create function and it is used in the payment execution
                    var guid = Convert.ToString((new Random()).Next(100000));
                    //CreatePayment function gives us the payment approval url
                    //on which payer is redirected for paypal account payment
                    var createdPayment = this.CreatePayment(apiContext, baseURI + "guid=" + guid);
                    //get links returned from paypal in response to Create function call
                    var    links             = createdPayment.links.GetEnumerator();
                    string paypalRedirectUrl = null;
                    while (links.MoveNext())
                    {
                        Links lnk = links.Current;
                        if (lnk.rel.ToLower().Trim().Equals("approval_url"))
                        {
                            //saving the payapalredirect URL to which user will be redirected for payment
                            paypalRedirectUrl = lnk.href;
                        }
                    }
                    // saving the paymentID in the key guid
                    Session.Add(guid, createdPayment.id);
                    return(Redirect(paypalRedirectUrl));
                }
                else
                {
                    // This section is executed when we have received all the payments parameters
                    // from the previous call to the function Create
                    // Executing a payment
                    var guid            = Request.Params["guid"];
                    var executedPayment = ExecutePayment(apiContext, payerId, Session[guid] as string);
                    //If executed payment failed then we will show payment failure message to user
                    if (executedPayment.state.ToLower() != "approved")
                    {
                        Session.Remove(guid);
                        return(View("FailureView"));
                    }

                    //Tới đây coi như thành công
                    //ghi order vào databasse
                    var orderDetailDao  = new Model.Dao.OrderDetailDao();
                    var orderCounponDao = new Model.Dao.OrderCouponDao();
                    var order           = new Model.EF.Order();
                    order.CreatedDate = DateTime.Parse(executedPayment.create_time);
                    if (user != null)
                    {
                        order.CustomerID = user.UserID;
                    }
                    order.ShipName    = executedPayment.payer.payer_info.shipping_address.recipient_name;
                    order.ShipMobile  = executedPayment.payer.payer_info.shipping_address.phone;
                    order.ShipAddress = executedPayment.payer.payer_info.shipping_address.line1 + ", "
                                        + executedPayment.payer.payer_info.shipping_address.city + ", "
                                        + executedPayment.payer.payer_info.shipping_address.state + ", "
                                        + executedPayment.payer.payer_info.shipping_address.country_code + ".";
                    order.ShipEmail = executedPayment.payer.payer_info.email;
                    order.Status    = -1; //đang chờ shipper nhận
                    var     orderID    = new OrderDao().Insert(order);
                    decimal sumProduct = 0;
                    foreach (var item in itemList)
                    {
                        //Xử lý orderDetail
                        var orderDetail = new OrderDetail();
                        orderDetail.ProductID = item.Product.ID;
                        orderDetail.OrderID   = orderID;
                        decimal?tempPrice = item.Product.PromotionPrice != null ? item.Product.PromotionPrice : item.Product.Price;
                        orderDetail.Price    = tempPrice;
                        orderDetail.Quantity = item.Quantity;
                        orderDetailDao.Insert(orderDetail);
                        //Xử lý sản phẩm // cập nhật số lượng sản phẩm
                        productDao.UpdateQuantity(item.Product.ID, item.Quantity);
                        //
                        sumProduct += orderDetail.Price.GetValueOrDefault(0) * orderDetail.Quantity.GetValueOrDefault(0);
                    }
                    //xử lý coupon + CouponUser
                    var couponDao     = new CouponDao();
                    var couponUserDao = new CouponUserDao();
                    if (couponList != null)
                    {
                        foreach (var item in couponList)
                        {
                            //xử lý coupon // giảm quantity của coupon đi 1
                            couponDao.UseCouponDiscountCode(item.Code);
                            //Xử lý CouponUser
                            var couponUser = new CouponUser();
                            couponUser.CouponID = item.ID;
                            couponUser.UserID   = user.UserID;
                            couponUserDao.Insert(couponUser);
                            //Xử lý orderCoupon
                            var orderCoupon = new OrderCoupon();
                            orderCoupon.OrderID  = orderID;
                            orderCoupon.CouponID = item.ID;
                            decimal tempAmount = 0;
                            if (item.ByPercentage == true)
                            {
                                tempAmount = sumProduct * item.DiscountBy / 100; //discount theo %
                            }
                            else
                            {
                                tempAmount = item.DiscountBy; //discount cố định
                            }
                            orderCoupon.DiscountAmount = tempAmount;
                            orderCounponDao.Insert(orderCoupon);
                        }
                    }
                    //gán cart+coupon null
                    Session[Common.CommonConstants.CART_SESSION]   = null;
                    Session[Common.CommonConstants.COUPON_SESSION] = null;
                }
            }
            catch (Exception ex)
            {
                Logger.Log("Error" + ex.Message);
                return(View("FailureView"));
            }
            //on successful payment, show success page to user.
            return(View("SuccessView"));
        }