Example #1
0
        public async Task CreateProductionOrder(ProductionOrderHeader productionOrderHeader)
        {
            var maxId = await _context.ProductionOrderHeaders.MaxAsync(model => model.ProductionOrderNo);

            productionOrderHeader.ProductionOrderNo = maxId + 1;

            Add(productionOrderHeader);
        }
        public async Task <IActionResult> GetReorderProductionOrder(int placeId)
        {
            if (placeId == 0)
            {
                return(BadRequest(new ErrorModel(1, 400, "Valid Business Place Required")));
            }
            var place = await _context.BusinessPlaces.FindAsync(placeId);

            if (place == null)
            {
                return(BadRequest(new ErrorModel(1, 400, "Valid Business Place Required")));
            }

            IList <ProductionItem> prodItems = new List <ProductionItem>();
            var prodItemsAll = await _context.ProductionItems.Distinct()
                               .Where(a => a.CurrentPlace == place && a.Item.IsDeleted == false)
                               .Include(a => a.CurrentPlace)
                               .Include(a => a.Item).ThenInclude(a => a.Unit).ToListAsync();

            foreach (var item in prodItemsAll)
            {
                if (!prodItems.Any(a => a.ItemId == item.ItemId))
                {
                    var totalAvailQty = prodItemsAll.Where(a => a.ItemId == item.ItemId).Sum(a => a.AvailableQuantity);
                    var reOrderLevel  = prodItemsAll.Where(a => a.ItemId == item.ItemId).FirstOrDefault().Item.ReOrderLevel;
                    if (reOrderLevel > totalAvailQty)
                    {
                        prodItems.Add(new ProductionItem
                        {
                            Id                = item.Id,
                            ItemId            = item.ItemId,
                            Item              = item.Item,
                            AvailableQuantity = reOrderLevel
                        });
                    }
                }
            }

            if (prodItems.Count == 0)
            {
                return(BadRequest(new ErrorModel(2, 400, "No Reorders available")));
            }

            ProductionOrderHeader prodOrder = new ProductionOrderHeader
            {
                BusinessPlace          = place,
                EnteredDate            = DateTime.Today,
                Description            = "Reorder",
                RequiredDate           = DateTime.Today.AddDays(1),
                Session                = await _context.ProductionSessions.OrderByDescending(a => a.Id).FirstOrDefaultAsync(a => a.StartTime > DateTime.Now.TimeOfDay),
                ProductionOrderDetails = new List <ProductionOrderDetail>()
            };

            foreach (var item in prodItems)
            {
                prodOrder.ProductionOrderDetails.Add(new ProductionOrderDetail
                {
                    Item     = item.Item,
                    ItemId   = item.ItemId,
                    Quantity = item.AvailableQuantity * 2
                });
            }

            var prodOrderToReturn = _mapper.Map <ProdOrderHeaderForDetailDto>(prodOrder);

            return(Ok(prodOrderToReturn));
        }