Exemplo n.º 1
0
        public static List <RetrievalItem> GetRequestedItemsByMonth(int deptId, int month)
        {
            try
            {
                using (var ctx = new UniDBContext())
                {
                    List <Request> requestList = ctx.Requests.Include("Department").Include("RequestDetails").Include("RequestDetails.Item")
                                                 .Where(r => r.Date.Year == DateTime.Now.Year && r.Date.Month == month && r.Status != (int)RequestStatus.Requested && r.Status != (int)RequestStatus.Rejected && r.Status != (int)RequestStatus.Cancelled)
                                                 .ToList();
                    if (deptId != 0)
                    {
                        requestList = requestList.Where(r => r.Department.DepartmentId == deptId).ToList();
                    }
                    Dictionary <int, int> itemInfo = new Dictionary <int, int>();

                    foreach (var r in requestList)
                    {
                        foreach (var rD in r.RequestDetails)
                        {
                            var requiredAmount = rD.Quantity;
                            if (itemInfo.ContainsKey(rD.Item.ItemId))
                            {
                                requiredAmount          += itemInfo[rD.Item.ItemId];
                                itemInfo[rD.Item.ItemId] = requiredAmount;
                            }
                            else
                            {
                                itemInfo.Add(rD.Item.ItemId, requiredAmount);
                            }
                        }
                    }

                    List <int>             itemIds        = itemInfo.Keys.ToList();
                    Dictionary <int, Item> stockDict      = ctx.Items.Where(i => itemIds.Contains(i.ItemId)).ToDictionary(i => i.ItemId);
                    List <RetrievalItem>   retrievalItems = new List <RetrievalItem>();
                    foreach (var itemId in itemIds)
                    {
                        int  requestedNumber = itemInfo[itemId];
                        Item i = stockDict[itemId];

                        RetrievalItem retrieval = new RetrievalItem()
                        {
                            AllocatedQuantity = requestedNumber,
                            Description       = i.Description,
                            ItemId            = i.ItemId,
                        };

                        retrievalItems.Add(retrieval);
                    }
                    return(retrievalItems);
                }
            }
            catch (Exception e)
            {
                return(null);
            }
        }
        public List <RetrievalItem> GetTotalItemNeeded()
        {
            //var retrievalItemList = new List<RetrievalItem>();
            //var list = context.DepartmentRequisitions.Where(d => d.Status != StatusType.Pending.ToString()
            //           && d.Status != StatusType.Completed.ToString())
            //           .GroupBy(d => d.Item.ItemId);
            //foreach (var group in list)
            //{
            //    var item = new RetrievalItem();
            //    foreach (var value in group)
            //    {
            //        item.BinId = value.Item.BinId;
            //        item.Quantity = group.Select(g => g.Needed - g.Actual).Sum();
            //        item.ItemName = value.Item.ItemName;
            //    }
            //    retrievalItemList.Add(item);
            //}
            //return retrievalItemList;

            var retrievalItemList = new List <RetrievalItem>();
            var itemList          = new List <String>();
            var items             = context.DepartmentRequisitions.Select(i => i.ItemId).Distinct();

            foreach (var it in items)
            {
                var balance = context.StockCards.OrderByDescending(s => s.Update_Date)
                              .Where(s => s.ItemId == it).Select(s => s.Balance).FirstOrDefault();
                if (balance == null || balance == 0)
                {
                    break;
                }
                else
                {
                    itemList.Add(it);
                }
            }
            var list = context.DepartmentRequisitions.Where(d => d.Status != StatusType.Pending.ToString() &&
                                                            d.Status != StatusType.Completed.ToString() &&
                                                            itemList.Contains(d.ItemId))
                       .GroupBy(d => d.Item.ItemId);

            foreach (var group in list)
            {
                var item = new RetrievalItem();
                foreach (var value in group)
                {
                    item.BinId    = value.Item.BinId;
                    item.Quantity = group.Select(g => g.Needed - g.Actual).Sum();
                    item.ItemName = value.Item.ItemName;
                }
                retrievalItemList.Add(item);
            }
            return(retrievalItemList);
        }
        public List <RetrievalItem> GetRetrievalItems(int empId)
        {
            List <RetrievalItem> rIList = null;
            Retrieval            ret    = FindRetrByEmplIdAndStatus(empId, "In Progress");

            if (ret != null)
            {
                List <RetrievalDetail> rDList = FindRetrDetByRetrId(ret.RetrievalId);
                if (rDList.Count > 0)
                {
                    rIList = new List <RetrievalItem>();
                    foreach (RetrievalDetail rd in rDList)
                    {
                        Stationery    sn = FindStationeryByItemCode(rd.ItemCode);
                        RetrievalItem rI = new RetrievalItem(rd, sn);
                        rIList.Add(rI);
                    }
                }
            }
            return(rIList);
        }
Exemplo n.º 4
0
        private void saveRetrieval(List <RetrievalFormItem> reflist)
        {
            Retrieval r;

            if (reflist.Count() > 0)
            {
                r = new Retrieval();
                r.retrievalDate = DateTime.Now;
                context.Retrievals.Add(r);
                foreach (RetrievalFormItem refitem in reflist)
                {
                    RetrievalItem item = new RetrievalItem();
                    item.retrievalID = r.retrievalID;
                    item.itemID      = refitem.ItemID;
                    item.expectedQty = refitem.Needed;
                    item.actualQty   = refitem.Actual;

                    context.RetrievalItems.Add(item);
                }
                context.SaveChanges();
            }
        }
Exemplo n.º 5
0
        public static List <RetrievalItem> GetAllItemsForRetrieval()
        {
            using (var ctx = new UniDBContext())
            {
                List <int> requestStatus = new List <int>()
                {
                    (int)RequestStatus.Approved,
                    (int)RequestStatus.PartiallyDelivered
                };

                //key is item id and value is total request item amount

                List <Request> requestList = ctx.Requests.Include("RequestDetails").Include("RequestDetails.Item")
                                             .Where(r => requestStatus.Contains(r.Status) && r.DisbursementStatus == (int)RequestRetrievalStatus.NotPrepared &&
                                                    DbFunctions.TruncateTime(r.Date) < DbFunctions.TruncateTime(DateTime.Today))
                                             .ToList();

                //item id and number of item needed
                Dictionary <int, int> itemInfo = new Dictionary <int, int>();

                foreach (var r in requestList)
                {
                    foreach (var rD in r.RequestDetails)
                    {
                        var requiredAmount = rD.Quantity - rD.DeliveredQuantity;
                        if (requiredAmount != 0)
                        {
                            if (itemInfo.ContainsKey(rD.Item.ItemId))
                            {
                                requiredAmount          += itemInfo[rD.Item.ItemId];
                                itemInfo[rD.Item.ItemId] = requiredAmount;
                            }
                            else
                            {
                                itemInfo.Add(rD.Item.ItemId, requiredAmount);
                            }
                        }
                    }
                }

                //Dictionary<int, int> requestDetails = ctx.RequestDetails.Include("Request").Include("Item")
                //    .Where(r => requestStatus.Contains(r.Request.Status) && DbFunctions.TruncateTime(r.Request.Date) < DbFunctions.TruncateTime(DateTime.Today))
                //    .GroupBy(r => r.Item.ItemId)
                //    .Select(cl => new
                //    {
                //        key = cl.Key,
                //        total = cl.Sum(rd => rd.Quantity)
                //    })
                //    .ToDictionary(c => c.key, c => c.total);



                //check with the stock number and required amount from request
                List <int> itemIds = itemInfo.Keys.ToList();
                //key is item id and value is stock item object
                Dictionary <int, Item> stockDict      = ctx.Items.Where(i => itemIds.Contains(i.ItemId)).ToDictionary(i => i.ItemId);
                List <RetrievalItem>   retrievalItems = new List <RetrievalItem>();
                foreach (var itemId in itemIds)
                {
                    int  requestedNumber = itemInfo[itemId];
                    Item i = stockDict[itemId];
                    int  availableNumber = i.Quantity;
                    if (availableNumber != 0)
                    {
                        int allocatedQty = 0;
                        if (requestedNumber >= availableNumber)
                        {
                            allocatedQty = availableNumber;
                        }
                        else
                        {
                            allocatedQty = requestedNumber;
                        }
                        RetrievalItem retrieval = new RetrievalItem()
                        {
                            AllocatedQuantity = allocatedQty,
                            Description       = i.Description,
                            ItemId            = i.ItemId,
                            StockQuantity     = i.Quantity
                        };

                        retrievalItems.Add(retrieval);
                    }
                }
                //List<RetrievalItem> items = ctx.DisbursementDetails.Include("Disbursement").Include("Item")
                //    .Where(d => d.Disbursement.Status == (int)DisbursementStatus.Allocated && DbFunctions.TruncateTime(d.Disbursement.Date) < DbFunctions.TruncateTime(DateTime.Today))
                //    .GroupBy(d => new { ItemId = d.Item.ItemId, Description = d.Item.Description })
                //    .Select(x => new RetrievalItem {Description = x.Key.Description, ItemId = x.Key.ItemId, AllocatedQuantity = x.Sum(y => y.Quantity) }).ToList();
                return(retrievalItems);
            }
        }
        /// <summary>
        /// Retrieve product details asynchronously.
        /// </summary>
        /// <returns></returns>
        public async Task <ResponseResult <RetrievalItem> > RetrieveProductDetailsAsync(string palletNo, string row, string bay, string level, string terminalNo)
        {
            //o	System will get Serial No by doing as follow:
            //•	Suppose Sequence No is selected from [f48_pdtwhscmdno] in TX48_NOMANAGE, where [f48_systemid] = “00000”.
            var seqNo1 = string.Format("0000{0}", await _commonDomain.InsertIntoNoManageAsync());
            var seqNo  = seqNo1.Substring(seqNo1.Length - 4, 4);

            /*
             * o	Update TX40_PDTSHFSTK, in which:
             * •	[f40_palletno] = Pallet No column value of selected row,
             * •	AND [f40_stockflag] = “Stock take” (or 3).
             * Then:
             * •	Set [f40_stockflag] = “Retrieval” (or 2).
             */
            var productShelfStocks = _unitOfWork.ProductShelfStockRepository.GetAll();
            var stockFlag          = Constants.F40_StockFlag.TX40_StkFlg_Stk;

            productShelfStocks =
                productShelfStocks.Where(x => x.F40_StockFlag.Trim().Equals(stockFlag) &&
                                         x.F40_PalletNo.Trim().Equals(palletNo));

            foreach (var productShelfStock in productShelfStocks)
            {
                productShelfStock.F40_StockFlag = Constants.F40_StockFlag.TX40_StkFlg_Rtr;
                _unitOfWork.ProductShelfStockRepository.Update(productShelfStock);
            }



            //o	Suppose Row, Bay and Level are 2 first ## characters, 2 middle ## characters and 2 last ## characters of Shelf No of selected record

            /*
             * o	Update TX51_PDTSHFSTS, in which:
             * •	[f51_shelfrow] = Row above,
             * •	AND [f51_shelfbay] = Bay above,
             * •	AND [f51_shelflevel] = Level above,
             * •	AND [f51_shelfstatus] = “Products Stocked’ (or 2),
             * •	AND [f51_stocktakingflag] = “Yet to stock-take” (or 0).
             * */
            var productShelfStatuses = _unitOfWork.ProductShelfStatusRepository.GetAll();

            productShelfStatuses = productShelfStatuses.Where(x => x.F51_ShelfRow.Trim().Equals(row));
            productShelfStatuses = productShelfStatuses.Where(x => x.F51_ShelfBay.Trim().Equals(bay));
            productShelfStatuses = productShelfStatuses.Where(x => x.F51_ShelfLevel.Trim().Equals(level));
            productShelfStatuses = productShelfStatuses.Where(x => Constants.F51_ShelfStatus.TX51_ShfSts_Pdt.Equals(x.F51_ShelfStatus.Trim()));
            productShelfStatuses = productShelfStatuses.Where(x => Constants.F51_StockTakingFlag.TX51_StkTkgFlg_InvNotChk.Equals(x.F51_StockTakingFlag.Trim()));
            //productShelfStatuses = productShelfStatuses.Where(x => x.F51_ShelfRow.Trim().Equals(row));

            // Count total records.
            var productShelfStatusesTotal = await productShelfStatuses.CountAsync();

            //* If there is no record updated from the update query, system shows message MSG 47, stops the use case and reloads the current page.
            if (productShelfStatusesTotal == 0)
            {
                //throw new Exception("MSG47");
                return(new ResponseResult <RetrievalItem>(null, false, "MSG47"));
            }


            /*
             * Then:
             * •	Set [f51_shelfstatus] = “Assigned for Retrieval” (or 5),
             * •	Set [f51_terminalno] = Terminal No. which is retrieved from section “server” in “toshiba.ini” configurable file,
             * •	Set [f51_updatedate] = current date time.
             */
            foreach (var productShelfStatus in productShelfStatuses)
            {
                productShelfStatus.F51_ShelfStatus = Constants.F51_ShelfStatus.TX51_ShfSts_RsvRtr;
                productShelfStatus.F51_TerminalNo  = terminalNo;
                productShelfStatus.F51_UpdateDate  = DateTime.Now;
                _unitOfWork.ProductShelfStatusRepository.Update(productShelfStatus);
                break;
            }

            var condition  = Constants.F47_Status.AnInstruction.ToString("D");
            var condition2 = Constants.F47_StrRtrType.Product.ToString("D");

            var pdtWhsCmd = new TX47_PdtWhsCmd();

            pdtWhsCmd.F47_CommandNo   = "7000";
            pdtWhsCmd.F47_CmdSeqNo    = seqNo;
            pdtWhsCmd.F47_CommandType = "0000";
            pdtWhsCmd.F47_StrRtrType  = condition2;
            pdtWhsCmd.F47_Status      = condition;

            pdtWhsCmd.F47_Priority = 0;
            pdtWhsCmd.F47_PalletNo = palletNo;
            pdtWhsCmd.F47_From     = string.Format("{0}{1}{2}", row, bay, level);

            var conveyor = await _unitOfWork.ConveyorRepository.GetAll().FirstOrDefaultAsync(i => i.F05_TerminalNo.Trim().Equals(terminalNo));

            pdtWhsCmd.F47_To         = conveyor.F05_ConveyorCode;
            pdtWhsCmd.F47_TerminalNo = terminalNo;
            pdtWhsCmd.F47_PictureNo  = "TCPR061F";
            pdtWhsCmd.F47_RetryCount = 0;
            pdtWhsCmd.F47_AddDate    = DateTime.Now;
            pdtWhsCmd.F47_UpdateDate = DateTime.Now;
            _unitOfWork.ProductWarehouseCommandRepository.Add(pdtWhsCmd);

            // Save changes into database asynchronously.
            await _unitOfWork.CommitAsync();



            var productWarehouses = _unitOfWork.ProductWarehouseCommandRepository.GetAll();

            productWarehouses =
                productWarehouses.Where(x => x.F47_CommandNo.Trim().Equals("7000") && x.F47_CmdSeqNo.Trim().Equals(seqNo) &&
                                        x.F47_Status.Trim().Equals(condition));

            foreach (var item in productWarehouses)
            {
                var text1   = item.F47_TerminalNo;
                var text2   = item.F47_PictureNo;
                var text3   = item.F47_CommandType;
                var text4   = item.F47_Status;
                var text5   = item.F47_From;
                var text6   = item.F47_To;
                var text7   = item.F47_PalletNo;
                var message = "0011" + text1 + text2 + "0066" + seqNo + "7000" + text3 + text4 + text5 + text6 + text7 +
                              DateTime.Now.ToString("d");
                //_notificationService.SendMessageToC3(new
                //{
                //    "screenName",
                //    message
                //});
                _notificationService.SendMessageToC3("", message);
            }
            var assignPalletItem = new RetrievalItem
            {
                Row   = row,
                Bay   = bay,
                Level = level
            };

            return(new ResponseResult <RetrievalItem>(assignPalletItem, true, ""));
            // TODO : Display the waiting notification message: “Shelf No [" + Shelf No of selected record + "] retrieving ..."
        }