public List <ItemInfobyReqiIdModel_M> getAggregatedItems(DeptLevelReqController_M deptLevelReq)
        {
            Dictionary <string, ItemInfobyReqiIdModel_M> temp_Dic_AggregatedItems = new Dictionary <string, ItemInfobyReqiIdModel_M>();


            Dictionary <string, List <ItemInfobyReqiIdModel_M> > temp_DeptReqi = deptLevelReq.DeptReqi;


            foreach (var key in temp_DeptReqi.Keys)
            {
                ItemInfobyReqiIdModel_M reqItemInfo = new ItemInfobyReqiIdModel_M();
                foreach (ItemInfobyReqiIdModel_M itemInfoReq in temp_DeptReqi[key])
                {
                    if (temp_Dic_AggregatedItems.ContainsKey(itemInfoReq.ItemCode1))
                    {
                        temp_Dic_AggregatedItems[itemInfoReq.ItemCode1].ItemQty = temp_Dic_AggregatedItems[itemInfoReq.ItemCode1].ItemQty + itemInfoReq.ItemQty;
                    }
                    else
                    {
                        temp_Dic_AggregatedItems.Add(itemInfoReq.ItemCode1, itemInfoReq);
                    }
                }
            }


            // make list of items values
            List <ItemInfobyReqiIdModel_M> temp_Dic_AggregatedItems_List = new List <ItemInfobyReqiIdModel_M>();

            foreach (var key in temp_Dic_AggregatedItems.Keys)
            {
                temp_Dic_AggregatedItems_List.Add(temp_Dic_AggregatedItems[key]);
            }

            return(temp_Dic_AggregatedItems_List);
        }
        //createDisbursementList
        public void createDisbursementList(List <string> selectedReqidList, Dictionary <string, int> neededqty, Dictionary <string, int> UnderNeeded_qty)
        //  public List<DeptLevelReq> createDisbursementList(List<string> selectedReqidList, Dictionary<string, int> neededqty, Dictionary<string, int> UnderNeeded_qty)
        {
            Dictionary <string, DeptLevelReqController_M> mstrDic_Dept = new Dictionary <string, DeptLevelReqController_M>();
            //  Dictionary<string, int> underNeededItem_Dic = new Dictionary<string, int>();
            Dictionary <string, int> underNeededItem_Dic = UnderNeeded_qty;
            //  Dictionary<string, int> NeededItem_Dic = new Dictionary<string, int>();
            Dictionary <string, int> NeededItem_Dic = neededqty;
            Dictionary <string, List <ItemInfobyReqiIdModel_M> > deptReqDictionary = new Dictionary <string, List <ItemInfobyReqiIdModel_M> >(); //pojo2 dictionary
            List <DeptLevelReqController_M> deptLevelReqList = new List <DeptLevelReqController_M>();                                            //Pojo 2 list
            Dictionary <string, Dictionary <string, int> >       depConsolidatedDic = new Dictionary <string, Dictionary <string, int> >();
            Dictionary <string, List <ItemInfobyReqiIdModel_M> > depToItem          = new Dictionary <string, List <ItemInfobyReqiIdModel_M> >();
            Dictionary <string, List <ItemInfobyReqiIdModel_M> > specialReqDic      = new Dictionary <string, List <ItemInfobyReqiIdModel_M> >();
            Dictionary <string, List <ItemInfobyReqiIdModel_M> > urgentReqDic       = new Dictionary <string, List <ItemInfobyReqiIdModel_M> >();
            Dictionary <string, List <ItemInfobyReqiIdModel_M> > normalReqDic       = new Dictionary <string, List <ItemInfobyReqiIdModel_M> >();

            //Populating specialReqDic ,urgentReqDic ,normalReqDic

            foreach (string reqiId in selectedReqidList)                           //1
            {
                List <RequisitionItem>         reqiItemByReqId      = GetreqItemListByReqId(reqiId);
                List <ItemInfobyReqiIdModel_M> ItemInfobyReqiIdList = new List <ItemInfobyReqiIdModel_M>();
                foreach (RequisitionItem reqItem in reqiItemByReqId)
                {
                    ItemInfobyReqiIdModel_M iteminfoByReq = new ItemInfobyReqiIdModel_M();
                    iteminfoByReq.RequisitionId1 = reqiId;
                    iteminfoByReq.ItemCode1      = reqItem.Item_ID;
                    iteminfoByReq.ItemQty        = reqItem.Required_Qty;
                    ItemInfobyReqiIdList.Add(iteminfoByReq);
                }
                if (GetRequisitionTypeByReqId(reqiId) == "Special")
                {
                    specialReqDic[reqiId] = ItemInfobyReqiIdList;
                }
                if (GetRequisitionTypeByReqId(reqiId) == "Urgent")
                {
                    urgentReqDic[reqiId] = ItemInfobyReqiIdList;
                }

                if (GetRequisitionTypeByReqId(reqiId) == "Normal")
                {
                    normalReqDic.Add(reqiId, ItemInfobyReqiIdList);
                }
                deptReqDictionary.Add(reqiId, ItemInfobyReqiIdList);                                                                                                           //duplicacy

                Dictionary <string, List <ItemInfobyReqiIdModel_M> > deptReqDictionary_tmp2PopulateMstrListPojo2 = new Dictionary <string, List <ItemInfobyReqiIdModel_M> >(); //pojo2 dictionary
                deptReqDictionary_tmp2PopulateMstrListPojo2.Add(reqiId, ItemInfobyReqiIdList);
                string dept_Name = GetDepName(reqiId);
                DeptLevelReqController_M deptLevelReq = new DeptLevelReqController_M();
                deptLevelReq.DeptName = dept_Name;
                deptLevelReq.DeptReqi = deptReqDictionary_tmp2PopulateMstrListPojo2; // populate Pojo2 ???
                deptLevelReqList.Add(deptLevelReq);                                  //pojo 2 lis
            }


            for (int index = 0; index < specialReqDic.Count; index++)
            {
                int    y     = specialReqDic.Count;
                var    item  = specialReqDic.ElementAt(index);
                string reqId = item.Key;
                List <ItemInfobyReqiIdModel_M> reqIdItemList = item.Value;
                string deptName = GetDepName(reqId);

                foreach (DeptLevelReqController_M depLevelReq in deptLevelReqList)                //deplevel final map
                {
                    //deptReqDictionary=Session["deptReqDictionary"];
                    if (depLevelReq.DeptName == deptName)
                    {
                        List <ItemInfobyReqiIdModel_M> reqIdItemInfo = deptReqDictionary[reqId];
                        foreach (ItemInfobyReqiIdModel_M itemInfoByreq in reqIdItemInfo)
                        {
                            string itemCode = itemInfoByreq.ItemCode1;
                            int    assign   = itemInfoByreq.ItemQty;

                            //start  allocating quantity
                            if (underNeededItem_Dic.ContainsKey(itemCode))
                            {
                                if (itemInfoByreq.ItemQty < underNeededItem_Dic[itemCode])
                                {
                                    itemInfoByreq.Item_assigned1  = itemInfoByreq.ItemQty;
                                    underNeededItem_Dic[itemCode] = underNeededItem_Dic[itemCode] - itemInfoByreq.Item_assigned1;
                                }
                                else
                                {
                                    itemInfoByreq.Item_assigned1 = underNeededItem_Dic[itemCode];
                                }
                            }
                            else
                            {
                                itemInfoByreq.Item_assigned1 = itemInfoByreq.ItemQty;
                                NeededItem_Dic[itemCode]     = NeededItem_Dic[itemCode] - itemInfoByreq.Item_assigned1;
                            }

                            ///finish allocation
                        }
                    }
                }
            }

            for (int index = 0; index < urgentReqDic.Count; index++)
            {
                int    y     = urgentReqDic.Count;
                var    item  = urgentReqDic.ElementAt(index);
                string reqId = item.Key;
                List <ItemInfobyReqiIdModel_M> reqIdItemList = item.Value;
                string deptName = GetDepName(reqId);

                foreach (DeptLevelReqController_M depLevelReq in deptLevelReqList)
                {
                    if (depLevelReq.DeptName == deptName)
                    {
                        List <ItemInfobyReqiIdModel_M> reqIdItemInfo = deptReqDictionary[reqId];
                        foreach (ItemInfobyReqiIdModel_M itemInfoByreq in reqIdItemInfo)
                        {
                            string itemCode = itemInfoByreq.ItemCode1;
                            int    assign   = itemInfoByreq.ItemQty;

                            //start  allocating quantity
                            if (underNeededItem_Dic.ContainsKey(itemCode))
                            {
                                if (itemInfoByreq.ItemQty < underNeededItem_Dic[itemCode])
                                {
                                    itemInfoByreq.Item_assigned1  = itemInfoByreq.ItemQty;
                                    underNeededItem_Dic[itemCode] = underNeededItem_Dic[itemCode] - itemInfoByreq.Item_assigned1;
                                }
                                else
                                {
                                    itemInfoByreq.Item_assigned1 = underNeededItem_Dic[itemCode];
                                }
                            }
                            else
                            {
                                itemInfoByreq.Item_assigned1 = itemInfoByreq.ItemQty;
                                NeededItem_Dic[itemCode]     = NeededItem_Dic[itemCode] - itemInfoByreq.Item_assigned1;
                            }

                            ///finish allocation
                        }
                    }
                }
            }



            // selection from screen --- mstr map : req-item
            for (int index = 0; index < normalReqDic.Count; index++)
            {
                int    y     = normalReqDic.Count;
                var    item  = normalReqDic.ElementAt(index);
                string reqId = item.Key;
                List <ItemInfobyReqiIdModel_M> reqIdItemList = item.Value;
                string deptName = GetDepName(reqId);

                foreach (DeptLevelReqController_M depLevelReq in deptLevelReqList)
                {
                    if (depLevelReq.DeptName == deptName)
                    {
                        List <ItemInfobyReqiIdModel_M> reqIdItemInfo = deptReqDictionary[reqId];
                        foreach (ItemInfobyReqiIdModel_M itemInfoByreq in reqIdItemInfo)
                        {
                            string itemCode = itemInfoByreq.ItemCode1;
                            int    assign   = itemInfoByreq.ItemQty;

                            //start  allocating quantity
                            if (underNeededItem_Dic.ContainsKey(itemCode))
                            {
                                if (itemInfoByreq.ItemQty < underNeededItem_Dic[itemCode])
                                {
                                    itemInfoByreq.Item_assigned1  = itemInfoByreq.ItemQty;
                                    underNeededItem_Dic[itemCode] = underNeededItem_Dic[itemCode] - itemInfoByreq.Item_assigned1;
                                }
                                else
                                {
                                    itemInfoByreq.Item_assigned1 = underNeededItem_Dic[itemCode];
                                }
                            }
                            else
                            {                                                /////////new
                                itemInfoByreq.Item_assigned1 = itemInfoByreq.ItemQty;
                                NeededItem_Dic[itemCode]     = NeededItem_Dic[itemCode] - itemInfoByreq.Item_assigned1;
                            }

                            ///finish allocation
                        }
                    }
                }
            }



            ////for showing on screen populating dictionary depToItem[deptnmae(key),listOfItem(value)]
            // List<Dictionary<string, List<ItemInfobyReqiId>>> deptLevelDisbursementList = new List<Dictionary<string, List<ItemInfobyReqiId>>>();
            //  List<DeptLevelReq> deptLevelDisbursementList = new List<DeptLevelReq>();
            foreach (DeptLevelReqController_M deptLevelReq in deptLevelReqList)
            {
                if (depToItem.ContainsKey(deptLevelReq.DeptName))
                {
                    List <ItemInfobyReqiIdModel_M> finalAggregatedItemsLis = addNewItemListIntoExistingItemList(depToItem[deptLevelReq.DeptName], getAggregatedItems(deptLevelReq));
                    depToItem.Remove(deptLevelReq.DeptName);
                    depToItem.Add(deptLevelReq.DeptName, finalAggregatedItemsLis);
                }
                else
                {
                    depToItem.Add(deptLevelReq.DeptName, getAggregatedItems(deptLevelReq));
                }
                //DeptLevelReq deptLevel = new DeptLevelReq();
                //deptLevel.DeptName = deptLevelReq.DeptName;
                //deptLevel.DeptReqi = depToItem;
                //deptLevelDisbursementList.Add(deptLevel);
            }
            string s = "";

            for (int index = 0; index < depToItem.Count; index++)
            {
                Dictionary <string, int> itemCodeDic = new Dictionary <string, int>();
                var    item     = depToItem.ElementAt(index);
                string deptName = item.Key;
                List <ItemInfobyReqiIdModel_M> consolidateItemList = item.Value;
                string disbursementId = "D0" + getDisbursementId();
                if (disbursementId == s)
                {
                    disbursementId = "D0" + (Convert.ToInt64(disbursementId.Substring(2)) + 1).ToString();
                }

                foreach (ItemInfobyReqiIdModel_M itemList in consolidateItemList)
                {
                    string itemcode = itemList.ItemCode1;
                    int    quantity = itemList.Item_assigned1;
                    itemCodeDic.Add(itemcode, quantity);
                }
                List <string> reqIdByDept = new List <string>();
                //selectedReqidList = (List<string>)Session["selectedReqIdsList"];
                foreach (string reqId in selectedReqidList)
                {
                    string depname = GetDepName(reqId);
                    if (depname == deptName)
                    {
                        reqIdByDept.Add(reqId);
                    }
                }
                Disbursement disbursement = new Disbursement();
                disbursement.Disbursement_ID = disbursementId;
                disbursement.Create_Date     = DateTime.Now;
                disbursement.Receive_Date    = null;
                disbursement.Dept_ID         = getDeptIdByDeptName(deptName);
                disbursement.RepStaff_ID     = getRepStaffId(disbursement.Dept_ID);
                disbursement.Status          = "Submitted";
                saveDisburseList(reqIdByDept, itemCodeDic, disbursement);
                s = disbursementId;
                //DeptLevelReq deptlevelReq = new DeptLevelReq();
                //dept
            }
            // return deptLevelDisbursementList;
        }