public ActionResult Payment(int CustID, int CartID)
        {
            Payment         myPayment         = new Payment();
            Invoice         myInvoice         = new Invoice();
            InvoiceProducts myInvoiceProducts = new InvoiceProducts();
            Random          rand        = new Random();
            List <Product>  ProductList = new List <Product>();

            //Add payment record.
            Cart myCart = db.Cart.Where(x => x.CartID == CartID).Select(x => x).FirstOrDefault();

            ProductList = db.CartItem.Where(x => x.CartID == CartID).Select(x => x.Product).ToList();//Take Product in the cart.

            myPayment.CartID     = CartID;
            myPayment.Amount     = myCart.TotalDiscountedCost;
            myPayment.CustomerID = CustID;
            db.Payment.Add(myPayment);
            db.SaveChanges();

            //Add invoice record.
            myInvoice.InvoiceDate = DateTime.Now.Date;
            myInvoice.CustID      = CustID;
            myInvoice.PaymentID   = myPayment.PaymentID;
            //to generate random barcode number, use unique value.
            myInvoice.BarcodeNumbers = myPayment.PaymentID + rand.Next(99).ToString() + "-" + myPayment.CustomerID + rand.Next(99).ToString() + "-" + myCart.CartID + rand.Next(99).ToString();
            db.Invoice.Add(myInvoice);
            db.SaveChanges();

            foreach (var item in ProductList)
            {
                myInvoiceProducts.InvoiceID = myInvoice.InvoiceID;
                myInvoiceProducts.ProductID = item.ProductID;
                db.InvoiceProducts.Add(myInvoiceProducts);
                db.SaveChanges();
            }


            //Delete cartitem.
            List <CartItem> myCartList = db.CartItem.Where(x => x.CartID == CartID).Select(x => x).ToList();

            foreach (var item in myCartList)
            {
                db.CartItem.Remove(item);
            }
            db.SaveChanges();

            //Reset the cart.
            myCart.TotalCost           = 0;
            myCart.TotalDiscountedCost = 0;
            db.SaveChanges();
            System.Threading.Thread.Sleep(1000);

            return(RedirectToAction("MyCart", "My"));
        }
Пример #2
0
        public IHttpActionResult insertAsync([FromBody] ViewInvoiceModel viewInvoiceModel)
        {
            Response response = new Response();
            //if (Service.invoiceDAO.checkExist(viewInvoiceModel) != null)
            //{
            //    response = new Response("409", "Hóa đơn này đã tồn tại", null);
            //    return Content<Response>(HttpStatusCode.Conflict, response);
            //}
            List <Product> products = new List <Product>();

            for (var i = 0; i < viewInvoiceModel.products.Count(); i++)
            {
                var     product     = viewInvoiceModel.products[i];
                Product saleProduct = Service.productDAO.getProduct(product.productId);
                saleProduct.attributes = Service.productAttributeDAO.getProAttrsByProId(saleProduct.id);
                products.Add(saleProduct);
            }

            List <Int16> salers = new List <Int16>();

            for (var i = 0; i < products.Count(); i++)
            {
                Int16 saler = products[i].createdBy;
                if (viewInvoiceModel.buyer == saler)
                {
                    response.code   = "409";
                    response.status = "Bạn không thể mua sản phẩm của chính mình";
                    return(Content <Response>(HttpStatusCode.Conflict, response));
                }
                bool existSaler = salers.Contains(saler);
                if (existSaler == false)
                {
                    salers.Add(saler);
                }
            }

            for (var i = 0; i < salers.Count(); i++)
            {
                var code = "HD" + salers[i].ToString() + Utils.RandomString(6);
                IEnumerable <Product> saleProducts = products.Where(p => p.createdBy == salers[i]);
                List <Product>        lists        = saleProducts.ToList();
                Double  total         = 0;
                Invoice createInvoice = new Invoice(code, viewInvoiceModel.buyer, salers[i], total);
                Service.invoiceDAO.insertInvoice(createInvoice);

                for (var j = 0; j < lists.Count(); j++)
                {
                    InvoiceProducts         invoiceProduct = viewInvoiceModel.products.First(p => p.productId == lists[j].id);
                    List <ProductAttribute> proAttrs       = Service.productAttributeDAO.getProAttrsByProId(lists[j].id);
                    var amount        = invoiceProduct.amount;
                    var price         = proAttrs[0].value;
                    var discount      = proAttrs[2].value;
                    var productAmount = short.Parse(proAttrs[1].value) - amount;

                    ProductAttribute updateAttrs = new ProductAttribute(); //Update Amount of product after create Invoice
                    updateAttrs       = Service.productAttributeDAO.getProductAttributeById(proAttrs[1].id);
                    updateAttrs.value = productAmount.ToString();
                    Service.productAttributeDAO.updateProductAttribute(updateAttrs);

                    InvoiceDetail invoiceDetail = null;
                    if (double.Parse(discount) > 0)
                    {
                        invoiceDetail = new InvoiceDetail(createInvoice.id, lists[j].id, amount, double.Parse(discount));
                    }
                    else
                    {
                        invoiceDetail = new InvoiceDetail(createInvoice.id, lists[j].id, amount, double.Parse(price));
                    }
                    total = total + invoiceDetail.subTotal; //tính Total của cái hóa đơn
                    Service.invoiceDetailDAO.insertInvoiceDetail(invoiceDetail);
                }
                Invoice updateInvoice = createInvoice;
                updateInvoice.total = total;
                Service.invoiceDAO.updateInvoice(updateInvoice);

                //var message = "<p>Thông tin đơn hàng của bạn</p> " +
                //              "<p>Mã hóa đơn: " + createInvoice.id +"</p>" +
                //              "<p></p>";
            }
            //await Service._userManager.SendEmailAsync(viewInvoiceModel.buyer, "Thông tin đơn hàng", );
            response = new Response("201", "Hóa đơn đã được thêm", products);
            return(Content <Response>(HttpStatusCode.Created, response));
        }
 public void Remove(InvoiceProducts entity)
 {
     throw new NotImplementedException();
 }