//Convert breakdown of stationery by items to breakdown of stationery by dept
        public List <DisbursementByDeptViewModel> GenerateDisbursement(List <RequestByItemViewModel> model)
        {
            LogicDB context = new LogicDB();
            List <DisbursementByDeptViewModel> disbList = new List <DisbursementByDeptViewModel>();

            for (int i = 0; i < model.Count; i++)
            {
                for (int j = 0; j < model[i].requestList.Count; j++)
                {
                    var disb = disbList.Find(x => x.DepartmentId == model[i].requestList[j].DepartmentId);
                    if (disb != null)
                    {
                        var item = disb.requestList.Find(x => x.ItemId == model[i].ItemId);
                        if (item != null)
                        {
                            item.Quantity += model[i].requestList[j].Quantity;
                        }
                        else
                        {
                            if (model[i].requestList[j].RetrievedQty > 0)
                            {
                                BreakdownByItemViewModel breakdown = new BreakdownByItemViewModel();
                                breakdown.ItemId       = model[i].ItemId;
                                breakdown.Description  = model[i].Description;
                                breakdown.RetrievedQty = model[i].requestList[j].RetrievedQty;
                                disb.requestList.Add(breakdown);
                            }
                        }
                    }
                    else
                    {
                        if (model[i].requestList[j].RetrievedQty > 0)
                        {
                            DisbursementByDeptViewModel disbModel = new DisbursementByDeptViewModel();
                            disbModel.DepartmentId   = model[i].requestList[j].DepartmentId;
                            disbModel.DepartmentName = model[i].requestList[j].DepartmentName;
                            BreakdownByItemViewModel breakdown = new BreakdownByItemViewModel();
                            breakdown.RetrievedQty = model[i].requestList[j].RetrievedQty;
                            breakdown.ItemId       = model[i].ItemId;
                            breakdown.Description  = model[i].Description;
                            disbModel.requestList  = new List <BreakdownByItemViewModel>();
                            disbModel.requestList.Add(breakdown);
                            disbList.Add(disbModel);
                        }
                    }
                }
            }
            return(disbList);
        }
        public List <DisbursementByDeptViewModel> GetListDisb()
        {
            LogicDB context = new LogicDB();
            var     query   = (from x in context.Disbursement
                               join y in context.TransactionDetail
                               on x.DisbursementId equals y.TransactionRef
                               join z in context.Department
                               on x.DepartmentId equals z.DepartmentId
                               join c in context.CollectionPoint
                               on z.CollectionPointId equals c.CollectionPointId
                               join i in context.Stationery
                               on y.ItemId equals i.ItemId
                               where x.Status == "In Transit"
                               select new
            {
                x.DepartmentId,
                z.DepartmentName,
                c.CollectionPointId,
                c.CollectionDescription,
                y.ItemId,
                i.Description,
                y.Quantity
            }).ToList();

            List <DisbursementByDeptViewModel> model = new List <DisbursementByDeptViewModel>();

            foreach (var item in query)
            {
                var deptExists = model.FirstOrDefault(x => x.DepartmentId == item.DepartmentId);
                if (deptExists != null)
                {
                    var itemExists = deptExists.requestList.FirstOrDefault(x => x.ItemId == item.ItemId);
                    if (itemExists != null)
                    {
                        itemExists.Quantity += item.Quantity;
                    }
                    else
                    {
                        BreakdownByItemViewModel newItemModel = new BreakdownByItemViewModel();
                        newItemModel.ItemId      = item.ItemId;
                        newItemModel.Description = item.Description;
                        newItemModel.Quantity    = item.Quantity;
                        deptExists.requestList.Add(newItemModel);
                    }
                }
                else
                {
                    DisbursementByDeptViewModel newDeptModel = new DisbursementByDeptViewModel();
                    newDeptModel.DepartmentId   = item.DepartmentId;
                    newDeptModel.DepartmentName = item.DepartmentName;

                    List <BreakdownByItemViewModel> newItemList = new List <BreakdownByItemViewModel>();

                    BreakdownByItemViewModel newItemModel = new BreakdownByItemViewModel();
                    newItemModel.ItemId      = item.ItemId;
                    newItemModel.Description = item.Description;
                    newItemModel.Quantity    = item.Quantity;

                    newItemList.Add(newItemModel);
                    newDeptModel.requestList = newItemList;
                    model.Add(newDeptModel);
                }
            }
            return(model);
        }