Exemple #1
0
        public ActionResult Add()
        {
            var model = new AddSOViewModel();

            // fake data
            model.OrderDate       = DateTime.Now.ToString("dd/MM/yyyy");
            model.OrderNo         = "HD000000013";
            model.OrderType       = 2;
            model.Phone           = "0909841682";
            model.CustomerName    = "Nguyễn Phước Lộc";
            model.CustomerAddress = "113G/14/44 Lạc Long Quân, F.3, Q.11";
            model.Email           = "*****@*****.**";
            model.TaxCode         = "MST0000000012";
            model.ShippedDate     = DateTime.Now.ToString("dd/MM/yyyy");
            model.ShipName        = "A Lộc";
            model.ShipAddress     = "113G/14/44 Lạc Long Quân, F.3, Q.11";

            // generate order types select list items
            var orderTypes = db.OrderTypes.OrderBy(ot => ot.OrderTypeName)
                             .AsEnumerable()
                             .Select(t => new SelectListItem
            {
                Text  = t.OrderTypeName,
                Value = t.OrderTypeId.ToString()
            })
                             .ToList();

            ViewBag.OrderTypes = orderTypes;

            // generate employees select list items
            var employees = db.Employees.OrderBy(t => t.FullName)
                            .AsEnumerable()
                            .Select(t => new SelectListItem
            {
                Text  = t.FullName,
                Value = t.EmployeeId.ToString()
            })
                            .ToList();

            ViewBag.Employees = employees;

            // generate payment type select list items
            var paymentTypes = db.PaymentTypes.OrderBy(t => t.PaymentTypeName)
                               .AsEnumerable()
                               .Select(t => new SelectListItem
            {
                Value = t.PaymentTypeId.ToString(),
                Text  = t.PaymentTypeName
            })
                               .ToList();

            ViewBag.PaymentTypes = paymentTypes;

            return(View(model));
        }
Exemple #2
0
        public ActionResult Edit(AddSOViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // validate order number
                    var header = db.Orders.Where(r => string.Compare(r.OrderNo, model.OrderNo, true) == 0 && r.OrderId != model.OrderID).FirstOrDefault();
                    if (header == null)
                    {
                        // get current header
                        header = db.Orders.Where(r => r.OrderId == model.OrderID).FirstOrDefault();
                        if (header != null)
                        {
                            var isValidQuantiy = true;

                            // get current lines
                            var curentLines = db.OrderDetails.Where(r => r.OrderId == header.OrderId).ToList();

                            // create new lines
                            var newLines = new List <OrderDetails>();
                            foreach (var item in model.OrderDetails)
                            {
                                var details     = new OrderDetails();
                                var quantity    = (decimal)0;
                                var unitPriceBT = (decimal)0;
                                var unitPrice   = (decimal)0;
                                // parse SO lines
                                decimal.TryParse(item.Quantity, out quantity);
                                decimal.TryParse(item.UnitPriceBT, out unitPriceBT);
                                decimal.TryParse(item.UnitPrice, out unitPrice);

                                details.OrderId     = header.OrderId;
                                details.ProductId   = item.ProductId;
                                details.ProductName = item.ProductName;
                                details.StockId     = item.StockId;
                                details.Quantity    = (int)quantity;
                                details.UnitPriceBT = unitPriceBT;
                                details.UnitPrice   = unitPrice;
                                newLines.Add(details);
                            }

                            // validate product quantity
                            foreach (var item in newLines)
                            {
                                var unitInStock    = 0;
                                var productInStock = db.ProductInStocks.Where(r => r.ProductId == item.ProductId && r.StockId == item.StockId).FirstOrDefault();
                                if (productInStock != null)
                                {
                                    unitInStock += productInStock.Quantity;
                                }
                                foreach (var itemCurrent in curentLines)
                                {
                                    if (itemCurrent.ProductId == item.ProductId && itemCurrent.StockId == item.StockId)
                                    {
                                        unitInStock += itemCurrent.Quantity;
                                        break;
                                    }
                                }
                                if (item.Quantity > unitInStock)
                                {
                                    isValidQuantiy = false;
                                    var stockInfo = db.Stocks.Where(r => r.StockId == item.StockId).FirstOrDefault();
                                    if (stockInfo != null)
                                    {
                                        ModelState.AddModelError("", "Sản phẩm [" + item.ProductName + "] không đủ số lượng tồn kho [" + stockInfo.StockName + "]!!!");
                                    }
                                    else
                                    {
                                        ModelState.AddModelError("", "Sản phẩm [" + item.ProductName + "] không đủ số lượng tồn kho!!!");
                                    }

                                    break;
                                }
                            }

                            // update so info
                            if (isValidQuantiy)
                            {
                                // update header info
                                header.OrderNo         = model.OrderNo;
                                header.OrderDate       = DateTime.ParseExact(model.OrderDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                header.OrderDate      += new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                                header.OrderType       = model.OrderType;
                                header.CustomerName    = String.IsNullOrWhiteSpace(model.CustomerName) ? null : model.CustomerName.Trim();
                                header.CustomerAddress = String.IsNullOrWhiteSpace(model.CustomerAddress) ? null : model.CustomerAddress.Trim();
                                header.TaxCode         = String.IsNullOrWhiteSpace(model.TaxCode) ? null : model.TaxCode.Trim();
                                header.Phone           = String.IsNullOrWhiteSpace(model.Phone) ? null : model.Phone.Trim();
                                header.Email           = String.IsNullOrWhiteSpace(model.Email) ? null : model.Email.Trim();
                                header.ShipName        = String.IsNullOrWhiteSpace(model.ShipName) ? null : model.ShipName.Trim();
                                header.ShipAddress     = String.IsNullOrWhiteSpace(model.ShipAddress) ? null : model.ShipAddress.Trim();
                                header.ShippedDate     = DateTime.ParseExact(model.ShippedDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                header.Owner           = User.Identity.Name;
                                header.CreationDate    = DateTime.Now;
                                header.EmployeeId      = model.EmployeeId;
                                header.PaymentTypeId   = model.PaymentTypeId;
                                header.DeliveryName    = String.IsNullOrWhiteSpace(model.DeliveryName) ? null : model.DeliveryName.Trim();
                                header.Notes           = String.IsNullOrWhiteSpace(model.Notes) ? null : model.Notes.Trim();
                                var shippingCost = (decimal)0;
                                if (decimal.TryParse(model.ShippingCost.Replace(",", ""), out shippingCost))
                                {
                                    header.ShippingCost = shippingCost;
                                }
                                else
                                {
                                    ModelState.AddModelError("", "Chi phí vận chuyển không hợp lệ");
                                    return(View(model));
                                }

                                // remove current lines
                                foreach (var item in curentLines)
                                {
                                    db.OrderDetails.Remove(item);
                                }

                                // add new lines
                                foreach (var item in newLines)
                                {
                                    db.OrderDetails.Add(item);
                                }

                                // update product unit in stock
                                foreach (var item in curentLines)
                                {
                                    var productInStock = db.ProductInStocks.Where(r => r.ProductId == item.ProductId && r.StockId == item.StockId).FirstOrDefault();
                                    if (productInStock != null)
                                    {
                                        productInStock.Quantity += item.Quantity;
                                    }
                                    db.SaveChanges();
                                }
                                foreach (var item in newLines)
                                {
                                    var productInStock = db.ProductInStocks.Where(r => r.ProductId == item.ProductId && r.StockId == item.StockId).FirstOrDefault();
                                    if (productInStock != null)
                                    {
                                        productInStock.Quantity -= item.Quantity;
                                    }
                                }

                                db.SaveChanges();
                                return(RedirectToAction("Index"));
                            }
                        }
                        else
                        {
                            ModelState.AddModelError("", "Không tìm thấy thông tin đơn hàng!!!");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("", "Số đơn hàng " + model.OrderNo + " đã được sử dụng. Vui lòng nhập số đơn hàng mới!!!");
                    }

                    // initialize viewbag
                    // Order Types
                    int orderTypeId = 0;
                    if (header != null)
                    {
                        orderTypeId = header.OrderType;
                    }
                    var orderTypes = db.OrderTypes.OrderBy(r => r.OrderTypeName).AsEnumerable()
                                     .Select(r => new SelectListItem
                    {
                        Text     = r.OrderTypeName,
                        Value    = r.OrderTypeId.ToString(),
                        Selected = r.OrderTypeId == orderTypeId
                    }).ToList();
                    ViewBag.OrderTypes = orderTypes;

                    // Employees
                    int employeeId = 0;
                    if (header != null && header.EmployeeId != null)
                    {
                        employeeId = (int)header.EmployeeId;
                    }
                    var employees = db.Employees.OrderBy(r => r.FullName).AsEnumerable()
                                    .Select(r => new SelectListItem
                    {
                        Text     = r.FullName,
                        Value    = r.EmployeeId.ToString(),
                        Selected = r.EmployeeId == employeeId
                    })
                                    .ToList();
                    ViewBag.Employees = employees;

                    // Payment Types
                    int paymentTypeId = 0;
                    if (header != null && header.PaymentTypeId != null)
                    {
                        paymentTypeId = (int)header.PaymentTypeId;
                    }
                    var paymentTypes = db.PaymentTypes.OrderBy(r => r.PaymentTypeName).AsEnumerable()
                                       .Select(r => new SelectListItem
                    {
                        Text     = r.PaymentTypeName,
                        Value    = r.PaymentTypeId.ToString(),
                        Selected = r.PaymentTypeId == paymentTypeId
                    })
                                       .ToList();
                    ViewBag.PaymentTypes = paymentTypes;
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
            }

            if (ViewBag.OrderTypes == null)
            {
                ViewBag.OrderTypes = new List <SelectListItem>();
            }
            if (ViewBag.Employees == null)
            {
                ViewBag.Employees = new List <SelectListItem>();
            }
            if (ViewBag.PaymentTypes == null)
            {
                ViewBag.PaymentTypes = new List <SelectListItem>();
            }
            return(View(model));
        }
Exemple #3
0
        public ActionResult Edit(int id)
        {
            var model = new AddSOViewModel();

            try
            {
                // get header
                var header = db.Orders.Where(r => r.OrderId == id).FirstOrDefault();
                if (header != null)
                {
                    model.OrderID         = header.OrderId;
                    model.OrderDate       = header.OrderDate.ToString("dd/MM/yyyy");
                    model.OrderNo         = header.OrderNo;
                    model.OrderType       = header.OrderType;
                    model.CustomerName    = header.CustomerName;
                    model.CustomerAddress = header.CustomerAddress;
                    model.TaxCode         = header.TaxCode;
                    model.Phone           = header.Phone;
                    model.Email           = header.Email;
                    model.ShipName        = header.ShipName;
                    model.ShipAddress     = header.ShipAddress;
                    model.ShippedDate     = header.ShippedDate.ToString("dd/MM/yyyy");
                    model.EmployeeId      = header.EmployeeId;
                    model.PaymentTypeId   = header.PaymentTypeId;
                    model.DeliveryName    = header.DeliveryName;
                    model.Notes           = header.Notes;
                    model.ShippingCost    = header.ShippingCost.ToString("#,##0");

                    // get lines
                    var lines = (from t1 in db.OrderDetails
                                 join t2 in db.Stocks on t1.StockId equals t2.StockId into j1
                                 from t3 in j1.DefaultIfEmpty()
                                 where t1.OrderId == id
                                 select new
                    {
                        Id = t1.OrderId,
                        OrderId = t1.OrderId,
                        ProductId = t1.ProductId,
                        ProductName = t1.ProductName,
                        StockId = t1.StockId,
                        StockName = t3.StockName,
                        UnitPrice = t1.UnitPrice,
                        UnitPriceBT = t1.UnitPriceBT,
                        Quantity = t1.Quantity,
                        Discount = t1.Discount
                    }).ToList();
                    foreach (var item in lines)
                    {
                        var line = new AddSOLineViewModel();
                        line.ProductId   = item.ProductId;
                        line.ProductName = item.ProductName;
                        line.StockId     = item.StockId;
                        line.StockName   = item.StockName;
                        line.Quantity    = item.Quantity.ToString();
                        line.UnitPriceBT = item.UnitPriceBT.ToString();
                        line.UnitPrice   = item.UnitPrice.ToString();
                        model.OrderDetails.Add(line);
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Không tìm thấy thông tin đơn hàng!!!");
                }

                // initialize viewbag

                // Order Types
                int orderTypeId = 0;
                if (header != null)
                {
                    orderTypeId = header.OrderType;
                }
                var orderTypes = db.OrderTypes.OrderBy(r => r.OrderTypeName).AsEnumerable()
                                 .Select(r => new SelectListItem
                {
                    Text     = r.OrderTypeName,
                    Value    = r.OrderTypeId.ToString(),
                    Selected = r.OrderTypeId == orderTypeId
                }).ToList();
                ViewBag.OrderTypes = orderTypes;

                // Employees
                int employeeId = 0;
                if (header != null && header.EmployeeId != null)
                {
                    employeeId = (int)header.EmployeeId;
                }
                var employees = db.Employees.OrderBy(r => r.FullName).AsEnumerable()
                                .Select(r => new SelectListItem
                {
                    Text     = r.FullName,
                    Value    = r.EmployeeId.ToString(),
                    Selected = r.EmployeeId == employeeId
                })
                                .ToList();
                ViewBag.Employees = employees;

                // Payment Types
                int paymentTypeId = 0;
                if (header != null && header.PaymentTypeId != null)
                {
                    paymentTypeId = (int)header.PaymentTypeId;
                }
                var paymentTypes = db.PaymentTypes.OrderBy(r => r.PaymentTypeName).AsEnumerable()
                                   .Select(r => new SelectListItem
                {
                    Text     = r.PaymentTypeName,
                    Value    = r.PaymentTypeId.ToString(),
                    Selected = r.PaymentTypeId == paymentTypeId
                })
                                   .ToList();
                ViewBag.PaymentTypes = paymentTypes;
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex);
            }
            if (ViewBag.OrderTypes == null)
            {
                ViewBag.OrderTypes = new List <SelectListItem>();
            }
            if (ViewBag.Employees == null)
            {
                ViewBag.Employees = new List <SelectListItem>();
            }
            if (ViewBag.PaymentTypes == null)
            {
                ViewBag.PaymentTypes = new List <SelectListItem>();
            }
            return(View(model));
        }
Exemple #4
0
        public ActionResult Add(AddSOViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var order = db.Orders.Where(r => string.Compare(r.OrderNo, model.OrderNo, true) == 0).FirstOrDefault();
                    if (order == null)
                    {
                        // create so header
                        Order soHeader = new Order();
                        soHeader.OrderNo         = model.OrderNo;
                        soHeader.OrderDate       = DateTime.ParseExact(model.OrderDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        soHeader.OrderDate      += new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
                        soHeader.OrderType       = model.OrderType;
                        soHeader.CustomerName    = String.IsNullOrWhiteSpace(model.CustomerName) ? null : model.CustomerName.Trim();
                        soHeader.CustomerAddress = String.IsNullOrWhiteSpace(model.CustomerAddress) ? null : model.CustomerAddress.Trim();
                        soHeader.TaxCode         = String.IsNullOrWhiteSpace(model.TaxCode) ? null : model.TaxCode.Trim();
                        soHeader.Phone           = String.IsNullOrWhiteSpace(model.Phone) ? null : model.Phone.Trim();
                        soHeader.Email           = String.IsNullOrWhiteSpace(model.Email) ? null : model.Email.Trim();
                        soHeader.ShipName        = String.IsNullOrWhiteSpace(model.ShipName) ? null : model.ShipName.Trim();
                        soHeader.ShipAddress     = String.IsNullOrWhiteSpace(model.ShipAddress) ? null : model.ShipAddress.Trim();
                        soHeader.ShippedDate     = DateTime.ParseExact(model.ShippedDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        soHeader.Owner           = User.Identity.Name;
                        soHeader.CreationDate    = DateTime.Now;
                        soHeader.EmployeeId      = model.EmployeeId;
                        soHeader.PaymentTypeId   = model.PaymentTypeId;
                        soHeader.DeliveryName    = String.IsNullOrWhiteSpace(model.DeliveryName) ? null : model.DeliveryName.Trim();
                        soHeader.Notes           = String.IsNullOrWhiteSpace(model.Notes) ? null : model.Notes.Trim();
                        var shippingCost = (decimal)0;
                        if (decimal.TryParse(model.ShippingCost.Replace(",", ""), out shippingCost))
                        {
                            soHeader.ShippingCost = shippingCost;
                        }
                        else
                        {
                            // Invalid shipping cost
                            ModelState.AddModelError("", "Chi phí vận chuyển không hợp lệ!");
                            return(View(model));
                        }

                        // create so lines
                        var soLines = new List <OrderDetails>();
                        foreach (var details in model.OrderDetails)
                        {
                            var line        = new OrderDetails();
                            var quantity    = (decimal)0;
                            var unitPriceBT = (decimal)0;
                            var unitPrice   = (decimal)0;
                            // parse SO lines
                            decimal.TryParse(details.Quantity, out quantity);
                            decimal.TryParse(details.UnitPriceBT, out unitPriceBT);
                            decimal.TryParse(details.UnitPrice, out unitPrice);

                            line.OrderId     = 0;
                            line.ProductId   = details.ProductId;
                            line.ProductName = details.ProductName;
                            line.StockId     = details.StockId;
                            line.Quantity    = (int)quantity;
                            line.UnitPriceBT = unitPriceBT;
                            line.UnitPrice   = unitPrice;
                            soLines.Add(line);
                        }

                        // validate product quantity
                        var isValidQuantity = true;
                        foreach (var line in soLines)
                        {
                            var productInStock = db.ProductInStocks.Where(r => r.ProductId == line.ProductId && r.StockId == line.StockId).FirstOrDefault();
                            if (productInStock == null || productInStock.Quantity < line.Quantity)
                            {
                                isValidQuantity = false;
                                ModelState.AddModelError("", "Không đủ tồn kho để xuất hàng cho sản phẩm " + line.ProductName + "!!!");
                                break;
                            }
                        }

                        // save so info
                        if (isValidQuantity)
                        {
                            db.Orders.Add(soHeader);
                            db.SaveChanges();
                            foreach (var line in soLines)
                            {
                                // update line order id
                                line.OrderId = soHeader.OrderId;
                                // update product in stock quantity
                                var productInStock = db.ProductInStocks.Where(r => r.ProductId == line.ProductId && r.StockId == line.StockId).FirstOrDefault();
                                if (productInStock != null)
                                {
                                    productInStock.Quantity -= line.Quantity;
                                }
                                db.OrderDetails.Add(line);
                                db.SaveChanges();
                            }
                            return(RedirectToAction("Index"));
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("", "Số đơn hàng đã được sử dụng. Vui lòng nhập số đơn hàng mới!!!");
                    }
                }
                // initialize viewbag
                var orderTypes = db.OrderTypes.OrderBy(ot => ot.OrderTypeName).AsEnumerable()
                                 .Select(t => new SelectListItem
                {
                    Text  = t.OrderTypeName,
                    Value = t.OrderTypeId.ToString()
                })
                                 .ToList();
                ViewBag.OrderTypes = orderTypes;

                var employees = db.Employees.OrderBy(t => t.FullName).AsEnumerable()
                                .Select(t => new SelectListItem
                {
                    Text  = t.FullName,
                    Value = t.EmployeeId.ToString()
                })
                                .ToList();
                ViewBag.Employees = employees;

                var paymentTypes = db.PaymentTypes.OrderBy(t => t.PaymentTypeName).AsEnumerable()
                                   .Select(t => new SelectListItem
                {
                    Value = t.PaymentTypeId.ToString(),
                    Text  = t.PaymentTypeName
                })
                                   .ToList();
                ViewBag.PaymentTypes = paymentTypes;
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex);
            }

            if (ViewBag.OrderTypes == null)
            {
                ViewBag.OrderTypes = new List <SelectListItem>();
            }
            if (ViewBag.Employees == null)
            {
                ViewBag.Employees = new List <SelectListItem>();
            }
            if (ViewBag.PaymentTypes == null)
            {
                ViewBag.PaymentTypes = new List <SelectListItem>();
            }
            return(View(model));
        }