예제 #1
0
        public ActionResult DeleteConfirmed(int id)
        {
            WarehouseProduct warehouseProduct = db.WarehouseProducts.Find(id);

            db.WarehouseProducts.Remove(warehouseProduct);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 public IActionResult UpdateProductInWarehouse(WarehouseProduct warehouseProduct)
 {
     if (warehouseProduct != null)
     {
         warehouseProductService.Update(warehouseProduct);
         return(Ok());
     }
     return(BadRequest());
 }
예제 #3
0
        public ActionResult RemoveWarehouseProduct(long?id)
        {
            WarehouseProduct p = db.WarehouseProducts.Find(id);

            db.WarehouseProducts.Remove(p);

            db.SaveChanges();
            Session["success"] = "The product has been removed from the warehouse";
            return(Redirect(Request.UrlReferrer.ToString()));
        }
예제 #4
0
        public ActionResult ChangePrice(long id, long pid, decimal newVal)
        {
            // Доступные склады
            var warehouses = CurrentUser.IsAdmin()
                ? DataContext.Warehouses.ToList()
                : CurrentUser.WarehouseKeepers.Select(wk => wk.Warehouse).ToList();

            // Ищем склад и тип продукта
            var warehouse = warehouses.FirstOrDefault(w => w.Id == id);

            if (warehouse == null)
            {
                return(Json(new { success = false, msg = "Такой склад не найден" }));
            }
            if (warehouse.Project.ProductTypes.All(p => p.Id != pid))
            {
                return(Json(new { success = false, msg = "Такой тип продукта не найден" }));
            }

            if (newVal < 0)
            {
                newVal = 0;
            }

            // Ищем или создаем
            var warehouseProduct = warehouse.WarehouseProducts.FirstOrDefault(wp => wp.ProductId == pid);

            if (warehouseProduct == null)
            {
                warehouseProduct = new WarehouseProduct()
                {
                    DateCreated = DateTime.Now,
                    Price       = 0,
                    Quantity    = 0,
                    ProductId   = pid,
                    Warehouse   = warehouse
                };
                warehouse.WarehouseProducts.Add(warehouseProduct);
            }
            warehouseProduct.Price        = newVal;
            warehouseProduct.DateModified = DateTime.Now;

            // Сохраняем
            try
            {
                DataContext.SubmitChanges();
            }
            catch (Exception e)
            {
                return(Json(new { success = false, msg = "Ошибка сохранения в базу: " + e.Message }));
            }

            return(Json(new { success = true }));
        }
 public ActionResult Edit([Bind(Include = "WarehouseProductID,WarehouseID,ProductID,QuantityInStock,MaxQuantity")] WarehouseProduct warehouseProduct)
 {
     if (ModelState.IsValid)
     {
         db.Entry(warehouseProduct).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.ProductID   = new SelectList(db.Products, "ProductID", "Name", warehouseProduct.ProductID);
     ViewBag.WarehouseID = new SelectList(db.Warehouses, "WarehouseID", "WarehouseID", warehouseProduct.WarehouseID);
     return(View(warehouseProduct));
 }
 public IActionResult GetProductInWarehouse(string id)
 {
     if (id != null)
     {
         WarehouseProduct warehouseProduct = warehouseProductService.Get(id, "id");
         if (warehouseProduct != null)
         {
             return(Ok(warehouseProduct));
         }
     }
     return(BadRequest());
 }
예제 #7
0
        public ActionResult EditWarehouseItem()
        {
            var id             = Int64.Parse(Request.Form["ProductId"]);
            var reoderLevel    = int.Parse(Request.Form["ReorderLevel"]);
            WarehouseProduct p = db.WarehouseProducts.Find(id);

            p.ReorderLevel = reoderLevel;
            p.UpdatedAt    = DateTime.Now;
            db.SaveChanges();

            return(Redirect(Request.UrlReferrer.ToString()));
        }
예제 #8
0
 public IActionResult Delete(string id, string propertyName)
 {
     if (id != null)
     {
         if (warehouseProductService.IsWarehouseProductsExist(id, propertyName))
         {
             WarehouseProduct warehouseProduct = warehouseProductService.Get(id, propertyName);
             warehouseProductService.Delete(warehouseProduct.id);
         }
         service.Delete(id);
         return(Ok());
     }
     return(BadRequest());
 }
        // GET: WarehouseProduct/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WarehouseProduct warehouseProduct = db.WarehouseProducts.Find(id);

            if (warehouseProduct == null)
            {
                return(HttpNotFound());
            }
            return(View(warehouseProduct));
        }
예제 #10
0
 public IActionResult Get(string id, string propertyName)
 {
     if (id != null && propertyName != null)
     {
         string           warehouse;
         Product          products         = service.Get(id, propertyName);
         WarehouseProduct warehouseProduct = warehouseProductService.Get(id, "Prod" + propertyName);
         if (products != null)
         {
             warehouse = warehouseProduct.WarehouseName;
             return(Ok(new { products, warehouse }));
         }
     }
     return(BadRequest());
 }
        // GET: WarehouseProduct/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WarehouseProduct warehouseProduct = db.WarehouseProducts.Find(id);

            if (warehouseProduct == null)
            {
                return(HttpNotFound());
            }
            ViewBag.ProductID   = new SelectList(db.Products, "ProductID", "Name", warehouseProduct.ProductID);
            ViewBag.WarehouseID = new SelectList(db.Warehouses, "WarehouseID", "WarehouseID", warehouseProduct.WarehouseID);
            return(View(warehouseProduct));
        }
예제 #12
0
 public IActionResult Add([FromBody] Product product, string warehouseNameFromwWarehouseProduct, int countProductFromwWarehouseProduct, string propertyName)
 {
     if (product != null)
     {
         if (!service.IsProductExist(product.Name, propertyName))
         {
             service.Create(product);
             WarehouseProduct warehouseProduct = new WarehouseProduct {
                 id = Guid.NewGuid().ToString(), WarehouseName = warehouseNameFromwWarehouseProduct, ProdBarcodeNumber = product.BarcodeNumber, Count = countProductFromwWarehouseProduct
             };
             warehouseProductService.Create(warehouseProduct);
         }
         return(Ok());
     }
     return(BadRequest());
 }
예제 #13
0
        private void UpdateProductDetail(Purchase purchase)
        {
            if (purchase.PurchaseDetails != null)
            {
                var collection = purchase.PurchaseDetails.Select(x => x.ProductDetailId).ToList();
                foreach (var id in collection)
                {
                    double purchased = Repository.Db.Set <PurchaseDetail>()
                                       .Where(x => x.ProductDetailId == id)
                                       .Sum(y => y.Quantity);
                    ProductDetail productDetail = Repository.Db.Set <ProductDetail>().Find(id);
                    if (productDetail != null)
                    {
                        productDetail.Purchased = purchased;
                        productDetail.OnHand    = productDetail.Purchased + productDetail.StartingInventory - productDetail.Sold;
                    }

                    var warehouseProduct = this.Repository.Db.Set <WarehouseProduct>().FirstOrDefault(
                        x => x.ShopId == purchase.ShopId && x.ProductDetailId == id && x.WarehouseId == purchase.WarehouseId);
                    if (warehouseProduct == null)
                    {
                        warehouseProduct = new WarehouseProduct
                        {
                            ShopId               = purchase.ShopId,
                            WarehouseId          = purchase.WarehouseId,
                            MinimumStockToNotify =
                                productDetail.MinimumStockToNotify,
                            ProductDetailId = productDetail.Id,
                        };
                        this.AddCommonValues(purchase, warehouseProduct);
                        this.Repository.Db.Set <WarehouseProduct>().Add(warehouseProduct);
                        Repository.Save();
                    }

                    var purchaseByWh = this.Repository.Db.Set <PurchaseDetail>()
                                       .Where(x => x.ShopId == purchase.ShopId && x.ProductDetailId == id && x.WarehouseId == purchase.WarehouseId)
                                       .Sum(y => y.Quantity);
                    warehouseProduct.Purchased = purchaseByWh;
                    warehouseProduct.OnHand    = warehouseProduct.Purchased + warehouseProduct.StartingInventory
                                                 + warehouseProduct.TransferredIn
                                                 - warehouseProduct.Sold - warehouseProduct.TransferredOut;
                    warehouseProduct.Modified = DateTime.Now;

                    Repository.Save();
                }
            }
        }
예제 #14
0
        public void AddProduct(AddProductWaerhouseViewModel addProduct)
        {
            var palletSpace = this.dbContext.Warehouses.Select(w => w.CurrentPalletsSpaceFree).FirstOrDefault();

            var boxSpace = this.dbContext.Warehouses.Select(w => w.CurrentBoxesFrontSpaceFree).FirstOrDefault();

            var producTransportPackage = this.dbContext.Products.Where(p => p.Id == addProduct.ProductId).Select(x => x.IsPallet).FirstOrDefault();

            int productsPerBox = this.dbContext.Products.Where(p => p.Id == addProduct.ProductId).Select(x => x.ProductTransportPackageNumberOfPieces).FirstOrDefault();

            int boxesPerPallet = this.dbContext.Products.Where(p => p.Id == addProduct.ProductId).Select(x => x.BoxesPerPallet).FirstOrDefault();

            var shelfDepth = this.dbContext.WarehouseBoxes.Select(w => w.ShelfDepth).FirstOrDefault();

            var boxesDepthSpace = this.dbContext.Products.Where(p => p.Id == addProduct.ProductId).Select(x => x.ProductTransportPackageLengthSize).FirstOrDefault();

            var boxesFrontSpace = this.dbContext.Products.Where(p => p.Id == addProduct.ProductId).Select(x => x.ProductTransportPackageWidthSize).FirstOrDefault();

            var existingProduct = this.dbContext.WarehouseProducts.Any(p => p.ProductId == addProduct.ProductId);

            if (existingProduct)
            {
                var product = this.dbContext.WarehouseProducts.FirstOrDefault(x => x.ProductId == addProduct.ProductId && x.WarehouseId == addProduct.WarehouseId);

                ProductAddQuantityPalletOrBoxSpace(addProduct, ref palletSpace, ref boxSpace, producTransportPackage, shelfDepth, boxesDepthSpace, boxesFrontSpace, product, productsPerBox, boxesPerPallet);

                this.dbContext.WarehouseProducts.Update(product);
                this.dbContext.SaveChanges();
            }
            else
            {
                var product = new WarehouseProduct
                {
                    ProductId   = addProduct.ProductId,
                    WarehouseId = addProduct.WarehouseId,
                    Product     = this.dbContext.Products.FirstOrDefault(p => p.Id == addProduct.ProductId),
                };

                ProductAddQuantityPalletOrBoxSpace(addProduct, ref palletSpace, ref boxSpace, producTransportPackage, shelfDepth, boxesDepthSpace, boxesFrontSpace, product, productsPerBox, boxesPerPallet);

                this.dbContext.WarehouseProducts.Add(product);
                this.dbContext.SaveChanges();
            }
        }
예제 #15
0
        public bool UpdateAmountByCode(string warehouse, long quantity, string productCode)
        {
            try
            {
                //Subtract Amount
                WarehouseProduct origin = this.GetByCodes(warehouse, productCode);
                origin.Quantity -= quantity;

                context.WarehouseProduct.AddOrUpdate(origin);

                context.SaveChanges();

                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
예제 #16
0
        public bool UpdateAmountByCodes(string warehouseOrigin, string warehouseDestiny, long quantity, string productCode)
        {
            try
            {
                long amount = 0;

                //Add Amount
                WarehouseProduct destiny = this.GetByCodes(warehouseDestiny, productCode);

                if (destiny != null)
                {
                    destiny.Quantity += quantity;
                }
                else
                {
                    destiny = new WarehouseProduct()
                    {
                        ProductCode   = productCode,
                        WarehouseCode = warehouseDestiny,
                        Quantity      = quantity
                    };
                }

                context.WarehouseProduct.AddOrUpdate(destiny);

                //Subtract Amount
                WarehouseProduct origin = this.GetByCodes(warehouseOrigin, productCode);
                origin.Quantity -= quantity;

                context.WarehouseProduct.AddOrUpdate(origin);

                context.SaveChanges();

                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
 public IActionResult CreateProductInWarehouse(WarehouseProduct warehouseProduct, string productName)
 {
     if (warehouseProduct != null)
     {
         string  propertyName = "Name";
         Product product      = productService.Get(productName, propertyName);
         IEnumerable <WarehouseProduct> warehouseProducts = warehouseProductService.GetList();
         foreach (var item in warehouseProducts)
         {
             if (item.WarehouseName != warehouseProduct.WarehouseName)
             {
                 if (item.ProdBarcodeNumber != product.BarcodeNumber)
                 {
                     warehouseProduct.id = Guid.NewGuid().ToString();
                     warehouseProduct.ProdBarcodeNumber = product.BarcodeNumber;
                     warehouseProductService.Create(warehouseProduct);
                     return(Ok());
                 }
             }
         }
     }
     return(BadRequest("This product already exiting"));
 }
예제 #18
0
 public IActionResult Update(Product product, string Warehouse, int Count)
 {
     if (product != null)
     {
         IEnumerable <WarehouseProduct> warehouseProducts = warehouseProductService.GetList();
         foreach (var item in warehouseProducts)
         {
             if (item.ProdBarcodeNumber == product.BarcodeNumber)
             {
                 if (item.WarehouseName != Warehouse)
                 {
                     WarehouseProduct warehouseProduct = new WarehouseProduct {
                         id = Guid.NewGuid().ToString(), Count = Count, ProdBarcodeNumber = product.BarcodeNumber, WarehouseName = Warehouse
                     };
                     warehouseProductService.Create(warehouseProduct);
                 }
             }
         }
         service.Update(product);
         return(Ok());
     }
     return(BadRequest());
 }
예제 #19
0
        public WarehouseProduct GetByCodes(string warehouseCode, string productCode)
        {
            try
            {
                WarehouseProduct _warehouseProduct = null;
                using (TSGVLEntities db = new TSGVLEntities())
                {
                    //var _result = context.WarehouseProduct.Join(context.Warehouses, wp => wp.WarehouseCode, w => w.Code,
                    //    (wp, w) => new {wp, w})
                    //    .Join(context.Products, x => x.wp.ProductCode, p => p.Code, (x, p) => new {x, p})
                    //    .Where(cond => cond.x.wp.Quantity > 0)
                    //    .FirstOrDefault(
                    //        result => result.x.wp.WarehouseCode == warehouseCode && result.p.Code.Equals(productCode));



                    //if (_result != null)
                    //{
                    //    _warehouseProduct = new WarehouseProduct()
                    //    {
                    //        Id = _result.x.wp.Id,
                    //        WarehouseCode = _result.x.wp.WarehouseCode,
                    //        ProductCode = _result.x.wp.ProductCode,
                    //        Quantity = _result.x.wp.Quantity,
                    //        Warehouse = _result.x.w,
                    //        Product = _result.p
                    //    };
                    //}



                    _warehouseProduct = (from wp in db.IV00102
                                         join w in db.IV40700 on wp.LOCNCODE.Trim() equals w.LOCNCODE.Trim()
                                         join p in db.IV00101 on wp.ITEMNMBR.Trim() equals p.ITEMNMBR.Trim()
                                         where
                                         wp.ITEMNMBR.Trim() == productCode && wp.LOCNCODE.Trim() == warehouseCode &&
                                         (wp.QTYONHND - wp.ATYALLOC) > 0
                                         select new WarehouseProduct
                    {
                        Id = 0,
                        WarehouseCode = wp.LOCNCODE.Trim(),
                        ProductCode = wp.ITEMNMBR.Trim(),
                        Quantity = wp.QTYONHND - wp.ATYALLOC,
                        Warehouse = new Warehouse
                        {
                            Id = 0,
                            Code = w.LOCNCODE.Trim(),
                            Name = w.LOCNDSCR.Trim()
                        },
                        Product = new Product
                        {
                            Id = 0,
                            Code = p.ITEMNMBR.Trim(),
                            BarCode = p.ITEMNMBR.Trim(),
                            Description = p.ITEMDESC.Trim()
                        }
                    }).FirstOrDefault();
                }

                return(_warehouseProduct);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("e " + e.Message);
                return(null);
            }
        }
예제 #20
0
        public ActionResult UpdateOrderStatus(long id, short newStatus, string comments, bool updateWarehouse)
        {
            // Ищем заявку
            var availableProjects = CurrentUser.IsAdmin() ? DataContext.Projects.Select(p => p.Id) : CurrentUser.ProjectUsers.Select(pu => pu.ProjectId);
            var order             = DataContext.FEAOrders.FirstOrDefault(o => o.Id == id && availableProjects.Contains(o.ProjectId));

            if (order == null)
            {
                ShowError("Такая заявка не найдена");
                return(RedirectToAction("Index"));
            }

            // Проверяем можем ли мы изменить статус
            if (!order.CanChangeStatus(CurrentUser))
            {
                ShowError("Нельзя изменить статус у этой заявки");
                return(RedirectToAction("Index"));
            }

            // Изменяем статус
            if (newStatus != order.Status)
            {
                order.Status = newStatus;
                order.FEAOrdersStatusChangements.Add(new FEAOrdersStatusChangement()
                {
                    Status      = newStatus,
                    FEAOrder    = order,
                    Comments    = comments,
                    User        = CurrentUser,
                    DateCreated = DateTime.Now
                });

                ShowSuccess("Статус ВЭД заявки №{0} успешно изменен");

                // Провряем, требуется ли обновить остатки на указанному складе
                if (newStatus == (short)FEAOrderStatus.Completed && updateWarehouse && order.TargetWarehouse != null)
                {
                    // Обновляем остатки на складе
                    foreach (var orderItem in order.FEAOrderItems)
                    {
                        // Ищем позицию на складе
                        var warehouseItem =
                            order.TargetWarehouse.WarehouseProducts.FirstOrDefault(
                                wp => wp.ProductId == orderItem.ProductId);

                        // Создаем если ее нет
                        if (warehouseItem == null)
                        {
                            warehouseItem = new WarehouseProduct()
                            {
                                ProductId   = orderItem.ProductId,
                                DateCreated = DateTime.Now,
                                WarehouseId = order.TargetWarehouse.Id,
                                Price       = orderItem.Price.HasValue ? orderItem.Price.Value : 0,
                            };
                            order.TargetWarehouse.WarehouseProducts.Add(warehouseItem);
                        }

                        // Добавляем начисление
                        warehouseItem.Quantity = warehouseItem.Quantity + orderItem.Quantity;
                        warehouseItem.WarehouseProductChangements.Add(new WarehouseProductChangement()
                        {
                            Amount           = orderItem.Quantity,
                            Direction        = (short)WarehouseProductChangementDirection.Income,
                            DateCreated      = DateTime.Now,
                            WarehouseProduct = warehouseItem,
                            Description      = String.Format("Автоматическое начисление остатков по выполнению ВЭД заявки №{0}", order.Id)
                        });
                    }

                    ShowSuccess(string.Format("На склад {0} ({1}) успешно зачислены товары из ВЭД заявки №{2}", order.TargetWarehouse.Title, order.TargetWarehouse.City, order.Id));
                }

                DataContext.SubmitChanges();
            }

            return(Redirect(string.Format("/fea/{0}/edit#history", order.Id)));
        }
예제 #21
0
        public ActionResult ChangeQuantity(long id, long pid, int newVal)
        {
            // Доступные склады
            var warehouses = CurrentUser.IsAdmin()
                ? DataContext.Warehouses.ToList()
                : CurrentUser.WarehouseKeepers.Select(wk => wk.Warehouse).ToList();

            // Ищем склад и тип продукта
            var warehouse = warehouses.FirstOrDefault(w => w.Id == id);

            if (warehouse == null)
            {
                return(Json(new { success = false, msg = "Такой склад не найден" }));
            }
            if (warehouse.Project.ProductTypes.All(p => p.Id != pid))
            {
                return(Json(new { success = false, msg = "Такой тип продукта не найден" }));
            }

            if (newVal < 0)
            {
                newVal = 0;
            }

            var warehouseProduct = warehouse.WarehouseProducts.FirstOrDefault(wp => wp.ProductId == pid);

            if (warehouseProduct == null)
            {
                // Создаем информацию об остатках товара на складе
                warehouseProduct = new WarehouseProduct()
                {
                    DateCreated = DateTime.Now,
                    Price       = 0,
                    ProductId   = pid,
                    Warehouse   = warehouse,
                    Quantity    = newVal
                };
                warehouse.WarehouseProducts.Add(warehouseProduct);
                if (newVal > 0)
                {
                    warehouseProduct.WarehouseProductChangements.Add(new WarehouseProductChangement()
                    {
                        Amount           = newVal,
                        DateCreated      = DateTime.Now,
                        Direction        = (short)WarehouseProductChangementDirection.Income,
                        WarehouseProduct = warehouseProduct,
                        Description      = String.Format("Ручное изменение: добавление {0} шт. пользователем {1}", newVal, CurrentUser.GetFio())
                    });
                }
            }
            else
            {
                // Изменяем
                var diff = newVal - warehouseProduct.Quantity;
                if (diff != 0)
                {
                    warehouseProduct.Quantity     = newVal;
                    warehouseProduct.DateModified = DateTime.Now;
                    warehouseProduct.WarehouseProductChangements.Add(new WarehouseProductChangement()
                    {
                        Amount           = diff,
                        DateCreated      = DateTime.Now,
                        WarehouseProduct = warehouseProduct,
                        Direction        = diff > 0 ? (short)WarehouseProductChangementDirection.Income : (short)WarehouseProductChangementDirection.Outcome,
                        Description      = diff > 0 ? String.Format("Ручное изменение: добавление {0} шт. пользователем {1}", diff, CurrentUser.GetFio()) : String.Format("Ручное изменение: изъятие {0} шт. пользователем {1}", Math.Abs(diff), CurrentUser.GetFio())
                    });
                }
            }

            // Сохраняем
            try
            {
                DataContext.SubmitChanges();
            }
            catch (Exception e)
            {
                return(Json(new { success = false, msg = "Ошибка сохранения в базу: " + e.Message }));
            }

            return(Json(new { success = true }));
        }
        public static void UpdateWarehouseRelatedData(BusinessDbContext context)
        {
            List <string> ids = context.Shops.Where(x => x.IsActive).Select(x => x.Id).ToList();

            foreach (var shopId in ids)
            {
                var whId      = context.Warehouses.First(x => x.ShopId == shopId).Id;
                var purchases = context.Purchases.Where(x => x.ShopId == shopId && x.WarehouseId == null).ToList();
                foreach (var item in purchases)
                {
                    item.WarehouseId = whId;
                }

                context.SaveChanges();
                var purchaseDetails = context.PurchaseDetails.Where(x => x.ShopId == shopId && x.WarehouseId == null)
                                      .ToList();
                foreach (var item in purchaseDetails)
                {
                    item.WarehouseId = whId;
                }

                context.SaveChanges();

                var sales = context.Sales.Where(x => x.ShopId == shopId && x.WarehouseId == null).ToList();
                foreach (var item in sales)
                {
                    item.WarehouseId = whId;
                }

                context.SaveChanges();

                var saleDetails = context.SaleDetails.Where(x => x.ShopId == shopId && x.WarehouseId == null).ToList();
                foreach (var item in saleDetails)
                {
                    item.WarehouseId = whId;
                }

                var productDetails = context.ProductDetails.Where(x => x.ShopId == shopId && x.IsActive).ToList();
                foreach (var item in productDetails)
                {
                    WarehouseProduct whProduct = context.WarehouseProducts.FirstOrDefault(
                        x => x.ShopId == shopId && x.ProductDetailId == item.Id && x.WarehouseId == whId);
                    if (whProduct != null)
                    {
                        continue;
                    }

                    whProduct = new WarehouseProduct()
                    {
                        Id                   = Guid.NewGuid().ToString(),
                        Created              = DateTime.Now,
                        Modified             = DateTime.Now,
                        ShopId               = shopId,
                        CreatedBy            = "System",
                        ModifiedBy           = "System",
                        CreatedFrom          = "System",
                        IsActive             = true,
                        ProductDetailId      = item.Id,
                        StartingInventory    = item.StartingInventory,
                        Purchased            = item.Purchased,
                        Sold                 = item.Sold,
                        OnHand               = item.OnHand,
                        MinimumStockToNotify =
                            item.MinimumStockToNotify,
                        TransferredIn  = 0,
                        TransferredOut = 0,
                        WarehouseId    = whId
                    };

                    context.WarehouseProducts.Add(whProduct);
                    context.SaveChanges();
                }
            }
        }
예제 #23
0
        public ActionResult ChangeOrderStatus(long id, short newStatus, long newUser, long newWarehouse, string comments,
                                              bool createFeaOrder, string redirectUrl, bool extractFromWarehouse = false)
        {
            var order = DataContext.LeadOrders.FirstOrDefault(lo => lo.Id == id);

            if (order == null)
            {
                ShowError("Такой заказ не найден");
                return(RedirectToAction("Index"));
            }

            if (!order.CanChangeStatus(CurrentUser))
            {
                ShowError("Такой заказ не найден");
                return(RedirectToAction("Index"));
            }

            // Изменяем статус
            var oldStatus         = order.Status;
            var oldAssignedUserId = order.AssignedUserId;
            var oldWarehouse      = order.AssignedWarehouseId;

            order.Status       = newStatus;
            order.DateModified = DateTime.Now;
            if (newUser != oldAssignedUserId)
            {
                order.User.LeadOrders.Remove(order);
                DataContext.Users.First(u => u.Id == newUser).LeadOrders.Add(order);
            }
            if (newWarehouse != oldWarehouse)
            {
                if (order.Warehouse != null)
                {
                    order.Warehouse.LeadOrders.Remove(order);
                }
                DataContext.Warehouses.First(w => w.Id == newWarehouse).LeadOrders.Add(order);
            }
            order.LeadOrderChangements.Add(new LeadOrderChangement()
            {
                Author            = CurrentUser,
                Comments          = comments,
                OldStatus         = oldStatus,
                OldAssignedUserId = oldAssignedUserId,
                OldWarehouseId    = oldWarehouse,
                NewStatus         = newStatus,
                NewAssignedUserId = newUser,
                NewWarehouseId    = newWarehouse,
                LeadOrder         = order,
                DateCreated       = DateTime.Now
            });

            // Сохраняем
            DataContext.SubmitChanges();

            ShowSuccess(string.Format("Статус заказа №{0} для {1} был успешно изменен", order.Id, order.Lead.ToString()));

            if (extractFromWarehouse && order.Warehouse != null)
            {
                // Извлекаем остатки со склада
                foreach (var orderItem in order.LeadOrderItems)
                {
                    var warehouseProduct =
                        order.Warehouse.WarehouseProducts.FirstOrDefault(wp => wp.ProductId == orderItem.ProductId);
                    if (warehouseProduct == null)
                    {
                        warehouseProduct = new WarehouseProduct()
                        {
                            DateCreated = DateTime.Now,
                            ProductId   = orderItem.ProductId,
                            Quantity    = 0,
                            Warehouse   = order.Warehouse,
                            Price       = orderItem.Price
                        };
                        order.Warehouse.WarehouseProducts.Add(warehouseProduct);
                    }
                    warehouseProduct.Quantity     = warehouseProduct.Quantity - orderItem.Quantity;
                    warehouseProduct.DateModified = DateTime.Now;
                    warehouseProduct.WarehouseProductChangements.Add(new WarehouseProductChangement()
                    {
                        DateCreated      = DateTime.Now,
                        Amount           = orderItem.Quantity,
                        Direction        = (short)WarehouseProductChangementDirection.Outcome,
                        WarehouseProduct = warehouseProduct,
                        Description      = String.Format("Изъятие остатков в количестве {0} для выполнения заказа №{1} пользователем {2}", orderItem.Quantity, order.Id, CurrentUser.GetFio())
                    });
                }
                order.LeadOrderChangements.Add(new LeadOrderChangement()
                {
                    Author            = CurrentUser,
                    NewAssignedUserId = order.AssignedUserId,
                    OldAssignedUserId = order.AssignedUserId,
                    OldStatus         = order.Status,
                    NewStatus         = order.Status,
                    OldWarehouseId    = order.AssignedWarehouseId,
                    NewWarehouseId    = order.AssignedWarehouseId,
                    DateCreated       = DateTime.Now,
                    Comments          = String.Format("Извлечение остатков со склада {0} ({1}) в общем количестве {2}", order.Warehouse.Title, order.Warehouse.City, order.LeadOrderItems.Sum(oi => oi.Quantity))
                });
                DataContext.SubmitChanges();
                ShowSuccess(string.Format("Остатки со склада {0} ({1}) были успешно извлечены", order.Warehouse.Title, order.Warehouse.City));
            }

            // Создаем заявку на дозакуп
            if (createFeaOrder)
            {
                // Ищем менеджера
                var targetManagers =
                    order.Project.ProjectUsers.Where(u => u.User.HasPermission(Permission.FEA))
                    .Select(u => u.User)
                    .ToList();
                if (targetManagers.Count > 0)
                {
                    User targetManager = null;
                    targetManager = targetManagers.FirstOrDefault(u => u.RoleId != 1) ?? targetManagers.FirstOrDefault();
                    if (targetManager != null)
                    {
                        var newFeaOrder = new FEAOrder()
                        {
                            Description =
                                string.Format("Заявка на дозакуп, сформированная автоматически из заказа №{0}", order.Id),
                            DateCreated     = DateTime.Now,
                            Status          = (short)FEAOrderStatus.Gathering,
                            Manager         = targetManager,
                            Project         = order.Project,
                            TargetWarehouse = order.Warehouse
                        };
                        newFeaOrder.FEAOrderItems.AddRange(order.LeadOrderItems.Select(oi => new FEAOrderItem()
                        {
                            DateCreated = DateTime.Now,
                            FEAOrder    = newFeaOrder,
                            Price       = oi.Price,
                            ProductId   = oi.ProductId,
                            Quantity    = oi.Quantity * 2
                        }));
                        newFeaOrder.FEAOrdersStatusChangements.Add(new FEAOrdersStatusChangement()
                        {
                            User        = CurrentUser,
                            FEAOrder    = newFeaOrder,
                            DateCreated = DateTime.Now,
                            Status      = (short)FEAOrderStatus.Gathering,
                            Comments    = string.Format("Автоматическое создание заявку на дозакуп из заказа №{0}", order.Id)
                        });
                        order.LeadOrderChangements.Add(new LeadOrderChangement()
                        {
                            Author            = CurrentUser,
                            NewAssignedUserId = order.AssignedUserId,
                            OldAssignedUserId = order.AssignedUserId,
                            OldStatus         = order.Status,
                            NewStatus         = order.Status,
                            OldWarehouseId    = order.AssignedWarehouseId,
                            NewWarehouseId    = order.AssignedWarehouseId,
                            DateCreated       = DateTime.Now,
                            Comments          = String.Format("Автоматическое создание заявки на дозакуп №{0} на пользователя {1}", newFeaOrder.Id, targetManager.GetFio())
                        });
                        DataContext.SubmitChanges();
                        ShowSuccess(string.Format("Заявка на дозакуп №{0} успешно сформирована", newFeaOrder.Id));
                    }
                }
            }

            return(Redirect(redirectUrl + "#history"));
        }
예제 #24
0
        private void ProductAddQuantityPalletOrBoxSpace(AddProductWaerhouseViewModel addProduct, ref int palletSpace, ref int boxSpace, bool producTransportPackage, int shelfDepth, int boxesDepthSpace, int boxesFrontSpace, WarehouseProduct product, int productsPerBox, int boxesPerPallet)
        {
            product.ProductsAvailable += addProduct.AddQuantity;
            var productWarehouse = this.dbContext.Warehouses.FirstOrDefault(w => w.Id == addProduct.WarehouseId);



            bool isWholePallet = (addProduct.AddQuantity % (productsPerBox * boxesPerPallet)) == 0 ? true : false;

            //TODO number of pallets depending on order
            palletSpace = isWholePallet == true ? palletSpace - addProduct.SpaceTaken : palletSpace;
            productWarehouse.CurrentPalletsSpaceFree = palletSpace;

            boxSpace =
                //below check if product is not in pallet transport package, which menais it is in box:
                isWholePallet == false ?
                //below check if product box depth space > self depth:
                (boxesDepthSpace > shelfDepth) ?
                boxSpace - boxesDepthSpace * addProduct.SpaceTaken :
                boxSpace - boxesFrontSpace * addProduct.SpaceTaken :
                boxSpace;
            productWarehouse.CurrentBoxesFrontSpaceFree = boxSpace;
        }
예제 #25
0
        private void UpdateProductDetail(StockTransfer transfer)
        {
            if (transfer.StockTransferDetails != null)
            {
                List <string> ids = transfer.StockTransferDetails.Select(x => x.ProductDetailId).ToList();
                foreach (var id in ids)
                {
                    ProductDetail productDetail = Repository.Db.Set <ProductDetail>().Find(id);

                    var db = this.Repository.Db as BusinessDbContext;
                    var sourceWarehouseProduct = db.WarehouseProducts.FirstOrDefault(
                        x => x.ShopId == transfer.ShopId && x.ProductDetailId == id && x.WarehouseId == transfer.SourceWarehouseId);
                    if (sourceWarehouseProduct == null)
                    {
                        sourceWarehouseProduct = new WarehouseProduct
                        {
                            ShopId               = transfer.ShopId,
                            WarehouseId          = transfer.SourceWarehouseId,
                            MinimumStockToNotify = productDetail.MinimumStockToNotify,
                            ProductDetailId      = productDetail.Id,
                        };
                        this.AddCommonValues(transfer, sourceWarehouseProduct);
                        db.WarehouseProducts.Add(sourceWarehouseProduct);
                        Repository.Save();
                    }

                    var decreasedByWh = db.StockTransferDetails.Include(x => x.StockTransfer)
                                        .Where(x => x.ShopId == transfer.ShopId && x.ProductDetailId == id && x.SourceWarehouseId == transfer.SourceWarehouseId && x.StockTransfer.TransferState == StockTransferState.Approved).Sum(y => (double?)y.Quantity) ?? 0;

                    sourceWarehouseProduct.TransferredOut = decreasedByWh;
                    sourceWarehouseProduct.OnHand         = sourceWarehouseProduct.Purchased
                                                            + sourceWarehouseProduct.TransferredIn
                                                            + sourceWarehouseProduct.StartingInventory
                                                            - sourceWarehouseProduct.Sold
                                                            - sourceWarehouseProduct.TransferredOut;
                    sourceWarehouseProduct.Modified = DateTime.Now;

                    var destinationWarehouseProduct = db.WarehouseProducts.FirstOrDefault(
                        x => x.ShopId == transfer.ShopId && x.ProductDetailId == id && x.WarehouseId == transfer.DestinationWarehouseId);
                    if (destinationWarehouseProduct == null)
                    {
                        destinationWarehouseProduct = new WarehouseProduct
                        {
                            ShopId               = transfer.ShopId,
                            WarehouseId          = transfer.DestinationWarehouseId,
                            MinimumStockToNotify = productDetail.MinimumStockToNotify,
                            ProductDetailId      = productDetail.Id,
                        };
                        this.AddCommonValues(transfer, destinationWarehouseProduct);
                        db.WarehouseProducts.Add(destinationWarehouseProduct);
                        Repository.Save();
                    }

                    double increasedByWh = db.StockTransferDetails.Include(x => x.StockTransfer)
                                           .Where(x => x.ShopId == transfer.ShopId &&
                                                  x.StockTransfer.TransferState == StockTransferState.Approved &&
                                                  x.ProductDetailId == id &&
                                                  x.DestinationWarehouseId
                                                  == transfer.DestinationWarehouseId)
                                           .Sum(x => (double?)x.Quantity) ?? 0;
                    destinationWarehouseProduct.TransferredIn = increasedByWh;
                    destinationWarehouseProduct.OnHand        = destinationWarehouseProduct.Purchased
                                                                + destinationWarehouseProduct.StartingInventory
                                                                + destinationWarehouseProduct.TransferredIn
                                                                - destinationWarehouseProduct.Sold
                                                                - destinationWarehouseProduct.TransferredOut;
                    destinationWarehouseProduct.Modified = DateTime.Now;

                    Repository.Save();
                }
            }
        }
예제 #26
0
        public async Task <List <WarehouseProduct> > GetWarehouseProductFromStoresById(WarehouseProduct warehouseProduct)
        {
            string message = await client.GetStringAsync(uri + "/warehouseproducts/" + warehouseProduct.storeId + "/" + warehouseProduct.productId + "/" + warehouseProduct.quantity);

            List <WarehouseProduct> returnList = JsonSerializer.Deserialize <List <WarehouseProduct> >(message);

            return(returnList);
        }
예제 #27
0
        protected EntityMapperBase()
        {
            var warehouse = new Warehouse
            {
                Id          = 16473,
                Name        = "Test Warehouse 16473",
                Description = "The test warehouse"
            };

            var tagForWarehouse = new Tag
            {
                Id = 46437
            };

            var warehouseTag = new WarehouseTag
            {
                WarehouseId = warehouse.Id,
                Warehouse   = warehouse,
                TagId       = tagForWarehouse.Id,
                Tag         = tagForWarehouse
            };

            var branch = new Branch
            {
                Id          = 27362,
                Name        = "Test Branch 27362",
                Description = "The test branch"
            };

            var tagForBranch = new Tag
            {
                Id = 57832
            };

            var branchTag = new BranchTag
            {
                BranchId = branch.Id,
                Branch   = branch,
                TagId    = tagForBranch.Id,
                Tag      = tagForBranch
            };

            var warehouseLocation = new Location
            {
                Id          = 63672,
                Name        = "Warehouse Location",
                Description = "Warehouse Street, Warehouse Land"
            };

            var tagForWarehouseLocation = new Tag
            {
                Id = 53627
            };

            var warehouseLocationTag = new LocationTag
            {
                LocationId = warehouseLocation.Id,
                Location   = warehouseLocation,
                TagId      = tagForWarehouseLocation.Id,
                Tag        = tagForWarehouseLocation
            };

            var branchLocation = new Location
            {
                Id          = 73726,
                Name        = "Branch Location",
                Description = "Branch Street, Branch Land"
            };

            var tagForBranchLocation = new Tag
            {
                Id = 53272
            };

            var branchLocationTag = new LocationTag
            {
                LocationId = branchLocation.Id,
                Location   = branchLocation,
                TagId      = tagForBranchLocation.Id,
                Tag        = tagForBranchLocation
            };

            var product = new Product
            {
                Id          = 37638,
                Name        = "Test Product",
                Description = "The test product"
            };

            var tagForProduct = new Tag
            {
                Id = 58276
            };

            var productTag = new ProductTag
            {
                ProductId = product.Id,
                Product   = product,
                TagId     = tagForProduct.Id,
                Tag       = tagForProduct
            };

            var warehouseProduct = new WarehouseProduct
            {
                Id          = 38376,
                WarehouseId = warehouse.Id,
                Warehouse   = warehouse,
                ProductId   = product.Id,
                Product     = product
            };

            var tagForWarehouseProduct = new Tag
            {
                Id = 63463
            };

            var warehouseProductTag = new WarehouseProductTag
            {
                WarehouseProductId = warehouseProduct.Id,
                WarehouseProduct   = warehouseProduct,
                TagId = tagForWarehouseProduct.Id,
                Tag   = tagForWarehouseProduct
            };

            warehouse.BranchId   = branch.Id;
            warehouse.Branch     = branch;
            warehouse.LocationId = warehouseLocation.Id;
            warehouse.Location   = warehouseLocation;
            warehouse.Tags.Add(warehouseTag);
            tagForWarehouse.Warehouses.Add(warehouseTag);
            tagForWarehouseLocation.Locations.Add(warehouseLocationTag);
            warehouseLocation.Tags.Add(warehouseLocationTag);

            branch.Location = branchLocation;
            branch.Warehouses.Add(warehouse);
            branch.Tags.Add(branchTag);
            tagForBranch.Branches.Add(branchTag);
            tagForBranchLocation.Locations.Add(branchLocationTag);
            branchLocation.Tags.Add(branchLocationTag);

            product.Tags.Add(productTag);
            tagForProduct.Products.Add(productTag);

            warehouse.Products.Add(warehouseProduct);
            product.Warehouses.Add(warehouseProduct);
            warehouseProduct.Tags.Add(warehouseProductTag);
            tagForWarehouseProduct.WarehouseProducts.Add(warehouseProductTag);

            _warehouse = warehouse;
        }