public async Task <ActionResult> UpdateOrder(StorageWarehousingRequest request)
        {
            var customer = _customerDa.GetByQrCode(request.CustomerCode);

            if (customer == null)
            {
                return(Json(new JsonMessage()
                {
                    Erros = true, Message = "Customer is not exits"
                }, JsonRequestBehavior.AllowGet));
            }

            const StatusWarehouse status = StatusWarehouse.New | StatusWarehouse.Pending | StatusWarehouse.WattingConfirm;
            var order = _da.GetById(request.Code, customer.ID);

            if (!status.HasFlag((StatusWarehouse)order.Status))
            {
                return(Json(new JsonMessage()
                {
                    Erros = true, Message = "Đơn hàng đã được xác nhận"
                }, JsonRequestBehavior.AllowGet));
            }

            //get remove item
            var removeitems = order.DN_RequestWare.Where(m => request.RequestWares.All(n => n.CateId != m.CateID) && m.IsDelete == false).ToList();

            foreach (var dnRequestWare in removeitems)
            {
                dnRequestWare.IsDelete = true;
            }

            //update item
            var updateitems = order.DN_RequestWare.Where(m => request.RequestWares.Any(n => m.CateID == n.CateId && m.IsDelete == false)).ToList();

            foreach (var dnRequestWare in updateitems)
            {
                var requestitem = request.RequestWares.FirstOrDefault(m => m.CateId == dnRequestWare.CateID);
                dnRequestWare.Quantity = requestitem.Quantity;

                dnRequestWare.DN_RequestWareDetail.Clear();
                foreach (var detail in requestitem.Details)
                {
                    dnRequestWare.DN_RequestWareDetail.Add(new DN_RequestWareDetail()
                    {
                        RequestWareId = Guid.NewGuid(),
                        ProductId     = detail.ProductId,
                        Quantity      = detail.Quantity,
                    });
                }
            }

            //get add item
            var additems = request.RequestWares.Where(m => !order.DN_RequestWare.Any(n => n.CateID == m.CateId && n.IsDelete == false)).ToList();

            foreach (var item in additems)
            {
                var requestWare = new DN_RequestWare()
                {
                    GID            = Guid.NewGuid(),
                    CateID         = item.CateId,
                    Quantity       = item.Quantity,
                    QuantityActive = item.Quantity,
                    Price          = item.Price,
                    TotalPrice     = item.TotalPrice,
                    Today          = request.ReceiveDate.DecimalToDate().Date.TotalSeconds(),
                    IsDelete       = false
                };

                foreach (var detail in item.Details)
                {
                    requestWare.DN_RequestWareDetail.Add(new DN_RequestWareDetail()
                    {
                        RequestWareId = Guid.NewGuid(),
                        ProductId     = detail.ProductId,
                        Quantity      = detail.Quantity,
                    });
                }
                order.DN_RequestWare.Add(requestWare);
            }
            _da.Save();
            return(Json(new JsonMessage {
                Erros = false
            }));
        }
Esempio n. 2
0
        public ActionResult DoOrder(decimal quantityExpect)
        {
            var todayCode   = DateTime.Today.AddDays(1).TotalSeconds();
            var orderdetail = OrderDetailItems(todayCode, 3);

            var result = GetProducts2(todayCode);

            var model = new StorageWarehousing
            {
                Status = (int)StatusWarehouse.New,

                DateCreated    = DateTime.Now.TotalSeconds(),
                IsDelete       = false,
                DateRecive     = todayCode,
                DN_RequestWare = new List <DN_RequestWare>(),
                AgencyId       = AgencyId
            };
            var category = _categoryDa.GetItemById(3);

            var requestWare = new DN_RequestWare()
            {
                GID            = Guid.NewGuid(),
                CateID         = 3,
                Quantity       = quantityExpect,
                QuantityActive = quantityExpect,
                Price          = category.Price,
                CostPrice      = category.CostPrice,
                //TotalPrice = item.TotalPrice,
                Today    = todayCode,
                IsDelete = false
            };

            //if (result.Products != null)
            foreach (var detail in orderdetail)
            {
                requestWare.DN_RequestWareDetail.Add(new DN_RequestWareDetail()
                {
                    RequestWareId = Guid.NewGuid(),
                    ProductId     = detail.ProductID ?? 0,
                    Quantity      = 1,
                    Weight        = detail.Weight
                });
            }
            model.DN_RequestWare.Add(requestWare);

            //product chua ban
            var productWeight = orderdetail.GroupBy(m => m.ProductID).Select(m => new OrderDetailProductItem()
            {
                ProductId = m.Key ?? 0,
                Weight    = m.Sum(n => n.Weight ?? 0)
            });


            var productRecipe = GetProductRecipe(todayCode, 3);

            foreach (var orderDetailProductItem in productRecipe)
            {
                var orderproduct = productWeight.FirstOrDefault(m => m.ProductId == orderDetailProductItem.ProductId);
                if (orderproduct == null || orderproduct.Weight <= orderDetailProductItem.WeightRecipe * quantityExpect)
                {
                    requestWare.DN_RequestWareDetail.Add(new DN_RequestWareDetail()
                    {
                        RequestWareId = Guid.NewGuid(),
                        ProductId     = orderDetailProductItem.ProductId,
                        Quantity      = 1,
                        Weight        = orderproduct == null ? orderDetailProductItem.WeightRecipe : orderDetailProductItem.WeightRecipe * quantityExpect - orderproduct.Weight
                    });
                }
            }
            //  return Json(new { orderdetail, productRecipe });
            _da.Add(model);
            _da.Save();
            return(Json(model.ID));
        }
        public ActionResult Create(StorageWarehousingRequest request)
        {
            //get customerid
            //var customer = _customerDa.GetByQrCode(request.CustomerCode);
            //if (customer == null)
            //{
            //    return Json(new JsonMessage() { Erros = true, Message = "Customer is not exits" }, JsonRequestBehavior.AllowGet);
            //}

            //if (_da.CheckExistOrder(request.Code, customer.ID))
            //{
            //    return Json(new JsonMessage() { Erros = true, Message = "Mã đơn hàng đã tồn tại" }, JsonRequestBehavior.AllowGet);
            //}

            var model = new StorageWarehousing
            {
                Code   = request.Code,
                Status = (int)StatusWarehouse.New,
                // CustomerId = customer.ID,
                DateCreated    = DateTime.Now.TotalSeconds(),
                IsDelete       = false,
                DateRecive     = request.ReceiveDate,
                DN_RequestWare = new List <DN_RequestWare>(),
                UrlConfirm     = request.UrlConfirm,
                AgencyId       = AgencyId
            };

            foreach (var item in request.RequestWares)
            {
                //get priceunit and costprice
                var category = _categoryDa.GetItemById(item.CateId);
                if (category == null || category.CostPrice == null)
                {
                    return(Json(new JsonMessage(true, "Sản phẩm chưa có giá nhập")));
                }

                //get policyagency

                var policyDa      = new PolicyAgencyDA();
                var requestWareDA = new RequestWareDA();

                // lay so luong da giao
                var quantityFinish =
                    requestWareDA.GetQuantityFinish(AgencyId, item.CateId, request.ReceiveDate.DecimalToDate().Month);

                //so luong tinh hoa hong
                var quantityCaculate = quantityFinish + item.Quantity;

                decimal sale = 0;
                // tim chinh sach dai ly
                var policies     = policyDa.GetAll(item.CateId).OrderBy(m => m.Quantity).ToList();
                var policyActive = policies.Where(m => quantityCaculate <= m.Quantity)
                                   .OrderBy(m => m.Quantity).FirstOrDefault();

                if (policyActive != null)
                {
                    sale = item.Quantity * policyActive.Profit;
                }
                else if (policies.Count > 0)
                {
                    sale = item.Quantity * policies[policies.Count - 1].Profit;
                }

                var requestWare = new DN_RequestWare()
                {
                    GID            = Guid.NewGuid(),
                    CateID         = item.CateId,
                    Quantity       = item.Quantity,
                    QuantityActive = item.Quantity,
                    Price          = category.Price,
                    CostPrice      = category.CostPrice,
                    Sale           = sale,
                    //TotalPrice = item.TotalPrice,
                    Today    = request.ReceiveDate.DecimalToDate().Date.TotalSeconds(),
                    IsDelete = false
                };

                if (item.Details != null)
                {
                    foreach (var detail in item.Details)
                    {
                        requestWare.DN_RequestWareDetail.Add(new DN_RequestWareDetail()
                        {
                            RequestWareId = Guid.NewGuid(),
                            ProductId     = detail.ProductId,
                            Quantity      = detail.Quantity,
                        });
                    }
                }
                model.DN_RequestWare.Add(requestWare);
            }
            _da.Add(model);
            _da.Save();

            //add log
            _storageWareHouseLogDa.AddLog(new StorageWarehousingLog()
            {
                StorageWarehousingId = model.ID,
                // NewValue = JsonConvert.SerializeObject(model, new BinaryConverter())
            });

            return(Json(model.ID, JsonRequestBehavior.AllowGet));
        }