Ejemplo n.º 1
0
        // GET: RepairSearch/
        public IActionResult Index()
        {
            List <SelectListItem> FlowlistItem = new List <SelectListItem>();

            FlowlistItem.Add(new SelectListItem {
                Text = "未結案", Value = "未結案"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "已結案", Value = "已結案"
            });
            ViewData["FLOWTYPE"] = new SelectList(FlowlistItem, "Value", "Text");

            /* 成本中心 & 申請部門的下拉選單資料 */
            var dptList     = new[] { "K", "P", "C" }; //本院部門
            var departments = _context.Departments.Where(d => dptList.Contains(d.Loc)).ToList();
            List <SelectListItem> listItem = new List <SelectListItem>();

            foreach (var item in departments)
            {
                listItem.Add(new SelectListItem
                {
                    Text  = item.Name_C + "(" + item.DptId + ")",   //show DptName(DptId)
                    Value = item.DptId
                });
            }
            ViewData["ACCDPT"]   = new SelectList(listItem, "Value", "Text");
            ViewData["APPLYDPT"] = new SelectList(listItem, "Value", "Text");

            /* 處理狀態的下拉選單 */
            var dealStatuses = _context.BMEDDealStatuses.ToList();
            List <SelectListItem> listItem2 = new List <SelectListItem>();

            foreach (var item in dealStatuses)
            {
                listItem2.Add(new SelectListItem
                {
                    Text  = item.Title,
                    Value = item.Id.ToString()
                });
            }
            ViewData["DealStatus"] = new SelectList(listItem2, "Value", "Text");

            /* 處理日期查詢的下拉選單 */
            List <SelectListItem> listItem4 = new List <SelectListItem>();

            listItem4.Add(new SelectListItem {
                Text = "申請日", Value = "申請日"
            });
            listItem4.Add(new SelectListItem {
                Text = "完工日", Value = "完工日"
            });
            listItem4.Add(new SelectListItem {
                Text = "結案日", Value = "結案日"
            });
            ViewData["DateType"] = new SelectList(listItem4, "Value", "Text", "申請日");

            QryRepListData data = new QryRepListData();

            return(View(data));
        }
        public async Task <IViewComponentResult> InvokeAsync()
        {
            var ur = _userRepo.Find(us => us.UserName == this.User.Identity.Name).FirstOrDefault();

            List <SelectListItem> FlowlistItem = new List <SelectListItem>();

            FlowlistItem.Add(new SelectListItem {
                Text = "待簽核", Value = "待簽核"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "流程中", Value = "流程中"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "已結案", Value = "已結案"
            });
            ViewData["FLOWTYPE"] = new SelectList(FlowlistItem, "Value", "Text", "待簽核");

            /* 成本中心的下拉選單資料(關卡在登入者身上的案件) */
            var userRepairs = _context.Repairs.Join(_context.RepairFlows.Where(f => f.Status == "?" && f.UserId == ur.Id),
                                                    r => r.DocId, f => f.DocId,
                                                    (r, f) => new
            {
                repair = r,
                flow   = f
            }).ToList();
            var accDpts     = userRepairs.Select(r => r.repair.AccDpt.Trim()).Distinct().ToList();
            var departments = _context.Departments.ToList();
            List <SelectListItem> listItem = new List <SelectListItem>();

            foreach (string id in accDpts)
            {
                var dpt = departments.Where(d => d.DptId == id.Trim()).FirstOrDefault();
                if (dpt != null)
                {
                    listItem.Add(new SelectListItem
                    {
                        Text  = dpt.Name_C + "(" + dpt.DptId + ")",   //show DptName(DptId)
                        Value = dpt.DptId
                    });
                }
            }
            ViewData["ACCDPT"] = new SelectList(listItem, "Value", "Text");

            /* 處理狀態的下拉選單 */
            List <SelectListItem> listItem2 = new List <SelectListItem>();

            listItem2.Add(new SelectListItem {
                Text = "未處理", Value = "未處理"
            });
            listItem2.Add(new SelectListItem {
                Text = "處理中", Value = "處理中"
            });
            ViewData["DealStatus"] = new SelectList(listItem2, "Value", "Text", "未處理");

            QryRepListData data = new QryRepListData();

            return(View(data));
        }
Ejemplo n.º 3
0
        public ActionResult RepIndex(QryRepListData qdata, int page = 1)
        {
            string ftype         = qdata.qtyFLOWTYPE;
            string qtyDealStatus = qdata.qtyDealStatus;
            string qryEngId      = qdata.qtyEngId;

            List <RepairSearchListVModel> rv = new List <RepairSearchListVModel>();
            /* Querying data. */
            var rps         = _context.Repairs.AsQueryable();
            var repairFlows = _context.RepairFlows.AsQueryable();
            var repairDtls  = _context.RepairDtls.AsQueryable();

            if (!string.IsNullOrEmpty(ftype))   //流程狀態
            {
                switch (ftype)
                {
                case "未結案":
                    repairFlows = repairFlows.Where(f => f.Status == "?");
                    break;

                case "已結案":
                    repairFlows = repairFlows.Where(f => f.Status == "2");
                    break;
                }
            }
            else
            {
                repairFlows = repairFlows.Where(f => f.Status == "2" || f.Status == "?");
            }
            if (!string.IsNullOrEmpty(qtyDealStatus))   //處理狀態
            {
                repairDtls = repairDtls.Where(r => r.DealState == Convert.ToInt32(qtyDealStatus));
            }
            if (!string.IsNullOrEmpty(qryEngId))   //負責工程師
            {
                rps = rps.Where(r => r.EngId == Convert.ToInt32(qryEngId));
            }

            /* If no search result. */
            if (rps.Count() == 0)
            {
                return(PartialView("RepList", rv.ToPagedList(1, pageSize)));
            }

            rps.Join(repairFlows, r => r.DocId, f => f.DocId,
                     (r, f) => new
            {
                repair = r,
                flow   = f
            })
            .Join(repairDtls, m => m.repair.DocId, d => d.DocId,
                  (m, d) => new
            {
                repair = m.repair,
                flow   = m.flow,
                repdtl = d
            })
            .Join(_context.Departments, j => j.repair.AccDpt, d => d.DptId,
                  (j, d) => new
            {
                repair = j.repair,
                flow   = j.flow,
                repdtl = j.repdtl,
                dpt    = d
            })
            .ToList()
            .ForEach(j => rv.Add(new RepairSearchListVModel
            {
                DocType     = "請修",
                RepType     = j.repair.RepType,
                DocId       = j.repair.DocId,
                ApplyDate   = j.repair.ApplyDate,
                PlaceLoc    = j.repair.LocType,
                ApplyDpt    = j.repair.DptId,
                AccDpt      = j.repair.AccDpt,
                AccDptName  = j.dpt.Name_C,
                TroubleDes  = j.repair.TroubleDes,
                DealState   = _context.DealStatuses.Find(j.repdtl.DealState).Title,
                DealDes     = j.repdtl.DealDes,
                Cost        = j.repdtl.Cost,
                Days        = DateTime.Now.Subtract(j.repair.ApplyDate).Days,
                Flg         = j.flow.Status,
                FlowUid     = j.flow.UserId,
                FlowCls     = j.flow.Cls,
                FlowUidName = _context.AppUsers.Find(j.flow.UserId).FullName,
                EndDate     = j.repdtl.EndDate,
                CloseDate   = j.repdtl.CloseDate,
                repdata     = j.repair
            }));

            /* 設備編號"有"、"無"的對應,"有"讀取table相關data,"無"只顯示申請人輸入的設備名稱 */
            foreach (var item in rv)
            {
                var repairDoc = _context.Repairs.Find(item.DocId);
                if (repairDoc.AssetNo != null)
                {
                    var asset = _context.Assets.Where(a => a.AssetNo == repairDoc.AssetNo).FirstOrDefault();
                    if (asset != null)
                    {
                        item.AssetNo   = asset.AssetNo;
                        item.AssetName = asset.Cname;
                        item.Brand     = asset.Brand;
                        item.Type      = asset.Type;
                    }
                }
                else
                {
                    item.AssetName = repairDoc.AssetName;
                }
            }

            if (rv.ToPagedList(page, pageSize).Count <= 0)
            {
                return(PartialView("RepList", rv.ToPagedList(1, pageSize)));
            }

            return(PartialView("RepList", rv.ToPagedList(page, pageSize)));
        }
Ejemplo n.º 4
0
        // GET: Admin/Search/RepToExcel
        public ActionResult RepToExcel(QryRepListData qdata)
        {
            string ftype         = qdata.qtyFLOWTYPE;
            string qtyDealStatus = qdata.qtyDealStatus;
            string qryEngId      = qdata.qtyEngId;

            List <RepairSearchListVModel> rv = new List <RepairSearchListVModel>();
            /* Querying data. */
            var rps         = _context.Repairs.AsQueryable();
            var repairFlows = _context.RepairFlows.AsQueryable();
            var repairDtls  = _context.RepairDtls.AsQueryable();

            if (!string.IsNullOrEmpty(ftype))   //流程狀態
            {
                switch (ftype)
                {
                case "未結案":
                    repairFlows = repairFlows.Where(f => f.Status == "?");
                    break;

                case "已結案":
                    repairFlows = repairFlows.Where(f => f.Status == "2");
                    break;
                }
            }
            else
            {
                repairFlows = repairFlows.Where(f => f.Status == "2" || f.Status == "?");
            }
            if (!string.IsNullOrEmpty(qtyDealStatus))   //處理狀態
            {
                repairDtls = repairDtls.Where(r => r.DealState == Convert.ToInt32(qtyDealStatus));
            }
            if (!string.IsNullOrEmpty(qryEngId))   //負責工程師
            {
                rps = rps.Where(r => r.EngId == Convert.ToInt32(qryEngId));
            }

            rps.Join(repairFlows, r => r.DocId, f => f.DocId,
                     (r, f) => new
            {
                repair = r,
                flow   = f
            })
            .Join(repairDtls, m => m.repair.DocId, d => d.DocId,
                  (m, d) => new
            {
                repair = m.repair,
                flow   = m.flow,
                repdtl = d
            })
            .Join(_context.Departments, j => j.repair.AccDpt, d => d.DptId,
                  (j, d) => new
            {
                repair = j.repair,
                flow   = j.flow,
                repdtl = j.repdtl,
                dpt    = d
            })
            .ToList()
            .ForEach(j => rv.Add(new RepairSearchListVModel
            {
                DocType     = "請修",
                RepType     = j.repair.RepType,
                DocId       = j.repair.DocId,
                ApplyDate   = j.repair.ApplyDate,
                PlaceLoc    = j.repair.LocType,
                ApplyDpt    = j.repair.DptId,
                AccDpt      = j.repair.AccDpt,
                AccDptName  = j.dpt.Name_C,
                TroubleDes  = j.repair.TroubleDes,
                DealState   = _context.DealStatuses.Find(j.repdtl.DealState).Title,
                DealDes     = j.repdtl.DealDes,
                Cost        = j.repdtl.Cost,
                Days        = DateTime.Now.Subtract(j.repair.ApplyDate).Days,
                Flg         = j.flow.Status,
                FlowUid     = j.flow.UserId,
                FlowCls     = j.flow.Cls,
                FlowUidName = _context.AppUsers.Find(j.flow.UserId).FullName,
                EndDate     = j.repdtl.EndDate,
                CloseDate   = j.repdtl.CloseDate,
                repdata     = j.repair
            }));

            /* 設備編號"有"、"無"的對應,"有"讀取table相關data,"無"只顯示申請人輸入的設備名稱 */
            foreach (var item in rv)
            {
                var repairDoc = _context.Repairs.Find(item.DocId);
                if (repairDoc.AssetNo != null)
                {
                    var asset = _context.Assets.Where(a => a.AssetNo == repairDoc.AssetNo).FirstOrDefault();
                    if (asset != null)
                    {
                        item.AssetNo   = asset.AssetNo;
                        item.AssetName = asset.Cname;
                        item.Brand     = asset.Brand;
                        item.Type      = asset.Type;
                    }
                }
                else
                {
                    item.AssetName = repairDoc.AssetName;
                }
            }

            //ClosedXML的用法 先new一個Excel Workbook
            using (XLWorkbook workbook = new XLWorkbook())
            {
                //取得要塞入Excel內的資料
                var data = rv.Select(c => new {
                    c.RepType,
                    c.DocId,
                    c.ApplyDate,
                    AccDpt = c.AccDptName + "(" + c.AccDpt + ")",
                    Asset  = c.AssetName + "(" + c.AssetNo + ")",
                    c.PlaceLoc,
                    c.TroubleDes,
                    c.DealDes,
                    c.DealState,
                    c.EndDate,
                    c.CloseDate,
                    c.Cost,
                    c.Days,
                    c.FlowCls,
                    c.FlowUidName
                });

                //一個workbook內至少會有一個worksheet,並將資料Insert至這個位於A1這個位置上
                var ws = workbook.Worksheets.Add("sheet1", 1);

                //Title
                ws.Cell(1, 1).Value  = "請修類別";
                ws.Cell(1, 2).Value  = "表單編號";
                ws.Cell(1, 3).Value  = "申請日期";
                ws.Cell(1, 4).Value  = "成本中心";
                ws.Cell(1, 5).Value  = "物品名稱(財產編號)";
                ws.Cell(1, 6).Value  = "請修地點";
                ws.Cell(1, 7).Value  = "故障描述";
                ws.Cell(1, 8).Value  = "處理描述";
                ws.Cell(1, 9).Value  = "處理狀態";
                ws.Cell(1, 10).Value = "完工日期";
                ws.Cell(1, 11).Value = "結案日期";
                ws.Cell(1, 12).Value = "費用";
                ws.Cell(1, 13).Value = "天數";
                ws.Cell(1, 14).Value = "關卡";
                ws.Cell(1, 15).Value = "關卡人員";

                //如果是要塞入Query後的資料該資料一定要變成是data.AsEnumerable()
                ws.Cell(2, 1).InsertData(data);

                //因為是用Query的方式,這個地方要用串流的方式來存檔
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    workbook.SaveAs(memoryStream);
                    //請注意 一定要加入這行,不然Excel會是空檔
                    memoryStream.Seek(0, SeekOrigin.Begin);
                    //注意Excel的ContentType,是要用這個"application/vnd.ms-excel"
                    string fileName = "工程師案件搜尋(請修)_" + DateTime.Now.ToString("yyyy-MM-dd") + ".xlsx";
                    return(this.File(memoryStream.ToArray(), "application/vnd.ms-excel", fileName));
                }
            }
        }
Ejemplo n.º 5
0
        public async Task <IViewComponentResult> InvokeAsync()
        {
            List <SelectListItem> FlowlistItem = new List <SelectListItem>();

            FlowlistItem.Add(new SelectListItem {
                Text = "待簽核", Value = "待簽核"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "流程中", Value = "流程中"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "已結案", Value = "已結案"
            });
            ViewData["FLOWTYPE"] = new SelectList(FlowlistItem, "Value", "Text", "待簽核");

            /* 成本中心 & 申請部門 的下拉選單資料 */
            var dptList     = new[] { "K", "P", "C" }; //本院部門
            var departments = _context.Departments.Where(d => dptList.Contains(d.Loc)).ToList();
            List <SelectListItem> listItem = new List <SelectListItem>();

            foreach (var item in departments)
            {
                listItem.Add(new SelectListItem
                {
                    Text  = item.Name_C + "(" + item.DptId + ")",   //show DptName(DptId)
                    Value = item.DptId
                });
            }
            ViewData["ACCDPT"]   = new SelectList(listItem, "Value", "Text");
            ViewData["APPLYDPT"] = new SelectList(listItem, "Value", "Text");

            /* 處理狀態 的下拉選單 */
            var dealStatuses = _context.DealStatuses.ToList();
            List <SelectListItem> listItem2 = new List <SelectListItem>();

            foreach (var item in dealStatuses)
            {
                listItem2.Add(new SelectListItem
                {
                    Text  = item.Title,
                    Value = item.Title
                });
            }
            ViewData["DealStatus"] = new SelectList(listItem2, "Value", "Text");

            /* 有無費用 的下拉選單 */
            List <SelectListItem> listItem3 = new List <SelectListItem>();

            listItem3.Add(new SelectListItem {
                Text = "有", Value = "Y"
            });
            listItem3.Add(new SelectListItem {
                Text = "無", Value = "N"
            });
            ViewData["IsCharged"] = new SelectList(listItem3, "Value", "Text");

            /* 日期查詢 的下拉選單 */
            List <SelectListItem> listItem4 = new List <SelectListItem>();

            listItem4.Add(new SelectListItem {
                Text = "申請日", Value = "申請日"
            });
            listItem4.Add(new SelectListItem {
                Text = "完工日", Value = "完工日"
            });
            listItem4.Add(new SelectListItem {
                Text = "結案日", Value = "結案日"
            });
            ViewData["DateType"] = new SelectList(listItem4, "Value", "Text", "申請日");

            /* 請修類別 的下拉選單 */
            List <SelectListItem> listItem5 = new List <SelectListItem>();

            listItem5.Add(new SelectListItem {
                Text = "請修", Value = "請修"
            });
            listItem5.Add(new SelectListItem {
                Text = "送修", Value = "送修"
            });
            listItem5.Add(new SelectListItem {
                Text = "增設", Value = "增設"
            });
            listItem5.Add(new SelectListItem {
                Text = "借物", Value = "借物"
            });
            ViewData["qtyRepType"] = new SelectList(listItem5, "Value", "Text");

            QryRepListData data = new QryRepListData();

            return(View(data));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// The Index of searching all repair docs.
        /// </summary>
        /// <returns></returns>
        // GET: BMED/Search/RepIndex
        public IActionResult RepIndex()
        {
            List <SelectListItem> FlowlistItem = new List <SelectListItem>();

            FlowlistItem.Add(new SelectListItem {
                Text = "未結案", Value = "未結案"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "已結案", Value = "已結案"
            });
            ViewData["FLOWTYPE"] = new SelectList(FlowlistItem, "Value", "Text");

            /* 成本中心 & 申請部門的下拉選單資料 */
            var dptList     = new[] { "K", "P", "C" }; //本院部門
            var departments = _context.Departments.Where(d => dptList.Contains(d.Loc)).ToList();
            List <SelectListItem> listItem = new List <SelectListItem>();

            foreach (var item in departments)
            {
                listItem.Add(new SelectListItem
                {
                    Text  = item.Name_C + "(" + item.DptId + ")",   //show DptName(DptId)
                    Value = item.DptId
                });
            }

            ViewData["ACCDPT"]   = new SelectList(listItem, "Value", "Text");
            ViewData["APPLYDPT"] = new SelectList(listItem, "Value", "Text");

            /* 處理狀態的下拉選單 */
            var dealStatuses = _context.BMEDDealStatuses.ToList();
            List <SelectListItem> listItem2 = new List <SelectListItem>();

            foreach (var item in dealStatuses)
            {
                listItem2.Add(new SelectListItem
                {
                    Text  = item.Title,
                    Value = item.Id.ToString()
                });
            }
            ViewData["DealStatus"] = new SelectList(listItem2, "Value", "Text");

            /* 處理有無費用的下拉選單 */
            List <SelectListItem> listItem3 = new List <SelectListItem>();

            listItem3.Add(new SelectListItem {
                Text = "有", Value = "Y"
            });
            listItem3.Add(new SelectListItem {
                Text = "無", Value = "N"
            });
            ViewData["IsCharged"] = new SelectList(listItem3, "Value", "Text");

            /* 處理日期查詢的下拉選單 */
            List <SelectListItem> listItem4 = new List <SelectListItem>();

            listItem4.Add(new SelectListItem {
                Text = "申請日", Value = "申請日"
            });
            listItem4.Add(new SelectListItem {
                Text = "完工日", Value = "完工日"
            });
            listItem4.Add(new SelectListItem {
                Text = "結案日", Value = "結案日"
            });
            ViewData["DateType"] = new SelectList(listItem4, "Value", "Text", "申請日");

            /* 處理工程師查詢的下拉選單 */
            var engs = roleManager.GetUsersInRole("MedEngineer").ToList();
            List <SelectListItem> listItem5 = new List <SelectListItem>();

            foreach (string l in engs)
            {
                var u = _context.AppUsers.Where(r => r.UserName == l).FirstOrDefault();
                if (u != null)
                {
                    listItem5.Add(new SelectListItem
                    {
                        Text  = u.FullName + "(" + u.UserName + ")",
                        Value = u.Id.ToString()
                    });
                }
            }
            ViewData["BMEDEngs"] = new SelectList(listItem5, "Value", "Text");
            /* 擷取該使用者單位底下所有人員 */
            var ur       = _userRepo.Find(u => u.UserName == this.User.Identity.Name).FirstOrDefault();
            var dptUsers = _context.AppUsers.Where(a => a.DptId == ur.DptId).ToList();
            List <SelectListItem> dptMemberList = new List <SelectListItem>();

            foreach (var item in dptUsers)
            {
                dptMemberList.Add(new SelectListItem
                {
                    Text  = item.FullName,
                    Value = item.Id.ToString()
                });
            }
            ViewData["DptMembers"] = new SelectList(dptMemberList, "Value", "Text");
            QryRepListData data = new QryRepListData();

            return(View(data));
        }
Ejemplo n.º 7
0
        public IActionResult GetRepQryList(QryRepListData qdata)
        {
            string   docid         = qdata.BMEDqtyDOCID;
            string   ano           = qdata.BMEDqtyASSETNO;
            string   acc           = qdata.BMEDqtyACCDPT;
            string   aname         = qdata.BMEDqtyASSETNAME;
            string   ftype         = qdata.BMEDqtyFLOWTYPE;
            string   dptid         = qdata.BMEDqtyDPTID;
            string   qtyDate1      = qdata.BMEDqtyApplyDateFrom;
            string   qtyDate2      = qdata.BMEDqtyApplyDateTo;
            string   qtyIsCharged  = qdata.BMEDqtyIsCharged;
            string   qtyDealStatus = qdata.BMEDqtyDealStatus;
            string   qtyDateType   = qdata.BMEDqtyDateType;
            string   qtyEngCode    = qdata.BMEDqtyEngCode;
            string   qtyTicketNo   = qdata.BMEDqtyTicketNo;
            string   qtyVendor     = qdata.BMEDqtyVendor;
            string   qtyTroubledes = qdata.BMEDqtyTROUBLEDES;
            string   qtyUserId     = qdata.BMEDqtyUserId;
            DateTime applyDateFrom = DateTime.Now;
            DateTime applyDateTo   = DateTime.Now;

            /* Dealing search by date. */
            if (qtyDate1 != null && qtyDate2 != null)// If 2 date inputs have been insert, compare 2 dates.
            {
                DateTime date1  = DateTime.Parse(qtyDate1);
                DateTime date2  = DateTime.Parse(qtyDate2);
                int      result = DateTime.Compare(date1, date2);
                if (result < 0)
                {
                    applyDateFrom = date1.Date;
                    applyDateTo   = date2.Date;
                }
                else if (result == 0)
                {
                    applyDateFrom = date1.Date;
                    applyDateTo   = date1.Date;
                }
                else
                {
                    applyDateFrom = date2.Date;
                    applyDateTo   = date1.Date;
                }
            }
            else if (qtyDate1 == null && qtyDate2 != null)
            {
                applyDateFrom = DateTime.Parse(qtyDate2);
                applyDateTo   = DateTime.Parse(qtyDate2);
            }
            else if (qtyDate1 != null && qtyDate2 == null)
            {
                applyDateFrom = DateTime.Parse(qtyDate1);
                applyDateTo   = DateTime.Parse(qtyDate1);
            }


            List <RepairSearchListVModel> rv = new List <RepairSearchListVModel>();

            /* Querying data. */
            var rps         = _context.BMEDRepairs.ToList();
            var repairFlows = _context.BMEDRepairFlows.ToList();
            var repairDtls  = _context.BMEDRepairDtls.ToList();

            if (!string.IsNullOrEmpty(docid))   //表單編號
            {
                docid = docid.Trim();
                rps   = rps.Where(v => v.DocId == docid).ToList();
            }
            if (!string.IsNullOrEmpty(ano))     //財產編號
            {
                rps = rps.Where(v => v.AssetNo == ano).ToList();
            }
            if (!string.IsNullOrEmpty(dptid))   //所屬部門編號
            {
                rps = rps.Where(v => v.DptId == dptid).ToList();
            }
            if (!string.IsNullOrEmpty(acc))     //成本中心
            {
                rps = rps.Where(v => v.AccDpt == acc).ToList();
            }
            if (!string.IsNullOrEmpty(aname))   //財產名稱
            {
                rps = rps.Where(v => v.AssetName != null)
                      .Where(v => v.AssetName.Contains(aname)).ToList();
            }
            if (!string.IsNullOrEmpty(qtyTroubledes))   //故障描述
            {
                rps = rps.Where(v => v.TroubleDes != null)
                      .Where(v => v.TroubleDes.Contains(qtyTroubledes)).ToList();
            }
            if (!string.IsNullOrEmpty(qtyUserId))     //申請人
            {
                int uid = Convert.ToInt32(qtyUserId);
                rps = rps.Where(v => v.UserId == uid).ToList();
            }
            if (!string.IsNullOrEmpty(qtyTicketNo))   //發票號碼
            {
                qtyTicketNo = qtyTicketNo.ToUpper();
                var resultDocIds = _context.BMEDRepairCosts.Include(rc => rc.TicketDtl)
                                   .Where(rc => rc.TicketDtl.TicketDtlNo == qtyTicketNo)
                                   .Select(rc => rc.DocId).Distinct();
                rps = (from r in rps
                       where resultDocIds.Any(val => r.DocId.Contains(val))
                       select r).ToList();
            }
            if (!string.IsNullOrEmpty(qtyVendor))   //廠商關鍵字
            {
                var resultDocIds = _context.BMEDRepairCosts.Include(rc => rc.TicketDtl)
                                   .Where(rc => rc.VendorName.Contains(qtyVendor))
                                   .Select(rc => rc.DocId).Distinct();
                rps = (from r in rps
                       where resultDocIds.Any(val => r.DocId.Contains(val))
                       select r).ToList();
            }
            if (!string.IsNullOrEmpty(qtyEngCode))     //負責工程師
            {
                rps = rps.Where(v => v.EngId == Convert.ToInt32(qtyEngCode)).ToList();
            }
            if (string.IsNullOrEmpty(qtyDate1) == false || string.IsNullOrEmpty(qtyDate2) == false)  //申請日
            {
                if (qtyDateType == "申請日")
                {
                    rps = rps.Where(v => v.ApplyDate >= applyDateFrom && v.ApplyDate <= applyDateTo).ToList();
                }
            }
            if (!string.IsNullOrEmpty(ftype))   //流程狀態
            {
                switch (ftype)
                {
                case "未結案":
                    repairFlows = repairFlows.GroupBy(f => f.DocId).Where(group => group.Last().Status == "?")
                                  .Select(group => group.Last()).ToList();
                    break;

                case "已結案":
                    repairFlows = repairFlows.GroupBy(f => f.DocId).Where(group => group.Last().Status == "2")
                                  .Select(group => group.Last()).ToList();
                    break;
                }
            }
            else
            {
                repairFlows = repairFlows.GroupBy(f => f.DocId).Where(group => group.Last().Status != "3")
                              .Select(group => group.Last()).ToList();;
            }
            if (!string.IsNullOrEmpty(qtyDealStatus))   //處理狀態
            {
                repairDtls = repairDtls.Where(r => r.DealState == Convert.ToInt32(qtyDealStatus)).ToList();
            }
            if (!string.IsNullOrEmpty(qtyIsCharged))    //有無費用
            {
                repairDtls = repairDtls.Where(r => r.IsCharged == qtyIsCharged).ToList();
            }

            /* If no search result. */
            if (rps.Count() == 0)
            {
                return(View("RepQryList", rv));
            }

            rps.Join(repairFlows, r => r.DocId, f => f.DocId,
                     (r, f) => new
            {
                repair = r,
                flow   = f
            })
            .Join(repairDtls, m => m.repair.DocId, d => d.DocId,
                  (m, d) => new
            {
                repair = m.repair,
                flow   = m.flow,
                repdtl = d
            })
            .Join(_context.Departments, j => j.repair.AccDpt, d => d.DptId,
                  (j, d) => new
            {
                repair = j.repair,
                flow   = j.flow,
                repdtl = j.repdtl,
                dpt    = d
            })
            .ToList()
            .ForEach(j => rv.Add(new RepairSearchListVModel
            {
                DocType     = "醫工請修",
                RepType     = j.repair.RepType,
                DocId       = j.repair.DocId,
                ApplyDate   = j.repair.ApplyDate,
                PlaceLoc    = j.repair.PlaceLoc,
                ApplyDpt    = j.repair.DptId,
                AccDpt      = j.repair.AccDpt,
                AccDptName  = j.dpt.Name_C,
                TroubleDes  = j.repair.TroubleDes,
                DealState   = _context.BMEDDealStatuses.Find(j.repdtl.DealState).Title,
                DealDes     = j.repdtl.DealDes,
                Cost        = j.repdtl.Cost,
                Days        = DateTime.Now.Subtract(j.repair.ApplyDate).Days,
                Flg         = j.flow.Status,
                FlowUid     = j.flow.UserId,
                FlowCls     = j.flow.Cls,
                FlowUidName = _context.AppUsers.Find(j.flow.UserId).FullName,
                EndDate     = j.repdtl.EndDate,
                CloseDate   = j.repdtl.CloseDate,
                IsCharged   = j.repdtl.IsCharged,
                repdata     = j.repair
            }));

            /* 設備編號"有"、"無"的對應,"有"讀取table相關data,"無"只顯示申請人輸入的設備名稱 */
            foreach (var item in rv)
            {
                var repairDoc = _context.BMEDRepairs.Find(item.DocId);
                if (repairDoc.AssetNo != null)
                {
                    var asset = _context.BMEDAssets.Where(a => a.AssetNo == repairDoc.AssetNo).FirstOrDefault();
                    if (asset != null)
                    {
                        item.AssetNo   = asset.AssetNo;
                        item.AssetName = asset.Cname;
                        item.Brand     = asset.Brand;
                        item.Type      = asset.Type;
                    }
                }
                else
                {
                    item.AssetName = repairDoc.AssetName;
                }
            }

            /* Search date by DateType. */
            if (string.IsNullOrEmpty(qtyDate1) == false || string.IsNullOrEmpty(qtyDate2) == false)
            {
                if (qtyDateType == "結案日")
                {
                    rv = rv.Where(v => v.CloseDate >= applyDateFrom && v.CloseDate <= applyDateTo).ToList();
                }
                else if (qtyDateType == "完工日")
                {
                    rv = rv.Where(v => v.EndDate >= applyDateFrom && v.EndDate <= applyDateTo).ToList();
                }
            }

            /* Sorting search result. */
            if (rv.Count() != 0)
            {
                if (qtyDateType == "結案日")
                {
                    rv = rv.OrderByDescending(r => r.CloseDate).ThenByDescending(r => r.DocId).ToList();
                }
                else if (qtyDateType == "完工日")
                {
                    rv = rv.OrderByDescending(r => r.EndDate).ThenByDescending(r => r.DocId).ToList();
                }
                else
                {
                    rv = rv.OrderByDescending(r => r.ApplyDate).ThenByDescending(r => r.DocId).ToList();
                }
            }

            return(View("RepQryList", rv));
        }
Ejemplo n.º 8
0
        public ActionResult Index(QryRepListData qdata)
        {
            string docid         = qdata.qtyDOCID;
            string ano           = qdata.qtyASSETNO;
            string acc           = qdata.qtyACCDPT;
            string aname         = qdata.qtyASSETNAME;
            string ftype         = qdata.qtyFLOWTYPE;
            string dptid         = qdata.qtyDPTID;
            string qtyDate1      = qdata.qtyApplyDateFrom;
            string qtyDate2      = qdata.qtyApplyDateTo;
            string qtyDealStatus = qdata.qtyDealStatus;

            DateTime applyDateFrom = DateTime.Now;
            DateTime applyDateTo   = DateTime.Now;

            /* Dealing search by date. */
            if (qtyDate1 != null && qtyDate2 != null)// If 2 date inputs have been insert, compare 2 dates.
            {
                DateTime date1  = DateTime.Parse(qtyDate1);
                DateTime date2  = DateTime.Parse(qtyDate2);
                int      result = DateTime.Compare(date1, date2);
                if (result < 0)
                {
                    applyDateFrom = date1.Date;
                    applyDateTo   = date2.Date;
                }
                else if (result == 0)
                {
                    applyDateFrom = date1.Date;
                    applyDateTo   = date1.Date;
                }
                else
                {
                    applyDateFrom = date2.Date;
                    applyDateTo   = date1.Date;
                }
            }
            else if (qtyDate1 == null && qtyDate2 != null)
            {
                applyDateFrom = DateTime.Parse(qtyDate2);
                applyDateTo   = DateTime.Parse(qtyDate2);
            }
            else if (qtyDate1 != null && qtyDate2 == null)
            {
                applyDateFrom = DateTime.Parse(qtyDate1);
                applyDateTo   = DateTime.Parse(qtyDate1);
            }


            List <RepairListVModel> rv = new List <RepairListVModel>();
            /* Get login user. */
            var ur = _userRepo.Find(u => u.UserName == this.User.Identity.Name).FirstOrDefault();

            /* Check search type for engineer, if no search value search users's doc, else search all. */
            var searchAllDoc = false;
            //if (!(string.IsNullOrEmpty(docid) && string.IsNullOrEmpty(ano) && string.IsNullOrEmpty(acc)
            //                                  && string.IsNullOrEmpty(aname) && string.IsNullOrEmpty(dptid)))
            //{
            //    if (userManager.IsInRole(User, "RepEngineer") == true)
            //        searchAllDoc = true;
            //}

            var rps = _context.Repairs.ToList();

            if (!string.IsNullOrEmpty(docid))
            {
                rps = rps.Where(v => v.DocId == docid).ToList();
            }
            if (!string.IsNullOrEmpty(ano))
            {
                rps = rps.Where(v => v.AssetNo == ano).ToList();
            }
            if (!string.IsNullOrEmpty(dptid))
            {
                rps = rps.Where(v => v.DptId == dptid).ToList();
            }
            if (!string.IsNullOrEmpty(acc))
            {
                rps = rps.Where(v => v.AccDpt == acc).ToList();
            }
            if (!string.IsNullOrEmpty(aname))
            {
                rps = rps.Where(v => v.AssetName != null)
                      .Where(v => v.AssetName.Contains(aname))
                      .ToList();
            }
            if (string.IsNullOrEmpty(qtyDate1) == false || string.IsNullOrEmpty(qtyDate2) == false)
            {
                rps = rps.Where(v => v.ApplyDate >= applyDateFrom && v.ApplyDate <= applyDateTo).ToList();
            }

            /* If no search result. */
            if (rps.Count() == 0)
            {
                return(View("List", rv));
            }

            switch (ftype)
            {
            /* 與登入者相關且流程不在該登入者身上的文件 */
            case "流程中":
                rps.Join(_context.RepairFlows.Where(f2 => f2.UserId == ur.Id && f2.Status == "1")
                         .Select(f => f.DocId).Distinct(),
                         r => r.DocId, f2 => f2, (r, f2) => r)
                .Join(_context.RepairFlows.Where(f => f.Status == "?" && f.UserId != ur.Id),
                      r => r.DocId, f => f.DocId,
                      (r, f) => new
                {
                    repair = r,
                    flow   = f
                })
                //.Join(_context.Assets, r => r.repair.AssetNo, a => a.AssetNo,
                //(r, a) => new
                //{
                //    repair = r.repair,
                //    asset = a,
                //    flow = r.flow
                //})
                .Join(_context.RepairDtls, m => m.repair.DocId, d => d.DocId,
                      (m, d) => new
                {
                    repair = m.repair,
                    //asset = m.asset,
                    flow   = m.flow,
                    repdtl = d
                })
                .Join(_context.Departments, j => j.repair.AccDpt, d => d.DptId,
                      (j, d) => new
                {
                    repair = j.repair,
                    //asset = j.asset,
                    flow   = j.flow,
                    repdtl = j.repdtl,
                    dpt    = d
                })
                .ToList()
                .ForEach(j => rv.Add(new RepairListVModel
                {
                    DocType   = "請修",
                    RepType   = j.repair.RepType,
                    DocId     = j.repair.DocId,
                    ApplyDate = j.repair.ApplyDate,
                    //AssetNo = j.repair.AssetNo,
                    //AssetName = j.repair.AssetName,
                    //Brand = j.asset.Brand,
                    PlaceLoc = j.repair.LocType,
                    //Type = j.asset.Type,
                    ApplyDpt   = j.repair.DptId,
                    AccDpt     = j.repair.AccDpt,
                    AccDptName = j.dpt.Name_C,
                    TroubleDes = j.repair.TroubleDes,
                    DealState  = _context.DealStatuses.Find(j.repdtl.DealState).Title,
                    DealDes    = j.repdtl.DealDes,
                    Cost       = j.repdtl.Cost,
                    Days       = DateTime.Now.Subtract(j.repair.ApplyDate).Days,
                    Flg        = j.flow.Status,
                    FlowUid    = j.flow.UserId,
                    FlowCls    = j.flow.Cls,
                    FlowDptId  = _context.AppUsers.Find(j.flow.UserId).DptId,
                    repdata    = j.repair
                }));
                break;

            /* 與登入者相關且結案的文件 */
            case "已結案":
                /* Get all closed repair docs. */
                List <RepairFlowModel> rf = _context.RepairFlows.Where(f => f.Status == "2").ToList();

                if (userManager.IsInRole(User, "Admin") || userManager.IsInRole(User, "RepAdmin") ||
                    userManager.IsInRole(User, "Manager") || userManager.IsInRole(User, "RepEngineer"))
                {
                    if (userManager.IsInRole(User, "Manager"))
                    {
                        rf = rf.Join(_context.Repairs.Where(r => r.AccDpt == ur.DptId),
                                     f => f.DocId, r => r.DocId, (f, r) => f).ToList();
                    }
                    /* If no other search values, search the docs belong the login engineer. */
                    if (userManager.IsInRole(User, "RepEngineer") && searchAllDoc == false)
                    {
                        rf = rf.Join(_context.RepairFlows.Where(f2 => f2.UserId == ur.Id),
                                     f => f.DocId, f2 => f2.DocId, (f, f2) => f).ToList();
                    }
                }
                else     /* If normal user, search the docs belong himself. */
                {
                    rf = rf.Join(_context.RepairFlows.Where(f2 => f2.UserId == ur.Id),
                                 f => f.DocId, f2 => f2.DocId, (f, f2) => f).ToList();
                }

                rf.Select(f => new
                {
                    f.DocId,
                    f.UserId,
                    f.Status,
                    f.Cls
                }).Distinct().Join(rps.DefaultIfEmpty(), f => f.DocId, r => r.DocId,
                                   (f, r) => new
                {
                    repair = r,
                    flow   = f
                })
                //.Join(_context.Assets, r => r.repair.AssetNo, a => a.AssetNo,
                //(r, a) => new
                //{
                //    repair = r.repair,
                //    asset = a,
                //    flow = r.flow
                //})
                .Join(_context.RepairDtls, m => m.repair.DocId, d => d.DocId,
                      (m, d) => new
                {
                    repair = m.repair,
                    //asset = m.asset,
                    flow   = m.flow,
                    repdtl = d
                })
                .Join(_context.Departments, j => j.repair.AccDpt, d => d.DptId,
                      (j, d) => new
                {
                    repair = j.repair,
                    //asset = j.asset,
                    flow   = j.flow,
                    repdtl = j.repdtl,
                    dpt    = d
                }).ToList()
                .ForEach(j => rv.Add(new RepairListVModel
                {
                    DocType   = "請修",
                    RepType   = j.repair.RepType,
                    DocId     = j.repair.DocId,
                    ApplyDate = j.repair.ApplyDate,
                    //AssetNo = j.repair.AssetNo,
                    //AssetName = j.repair.AssetName,
                    //Brand = j.asset.Brand,
                    PlaceLoc = j.repair.LocType,
                    //Type = j.asset.Type,
                    ApplyDpt   = j.repair.DptId,
                    AccDpt     = j.repair.AccDpt,
                    AccDptName = j.dpt.Name_C,
                    TroubleDes = j.repair.TroubleDes,
                    DealState  = _context.DealStatuses.Find(j.repdtl.DealState).Title,
                    DealDes    = j.repdtl.DealDes,
                    Cost       = j.repdtl.Cost,
                    Days       = DateTime.Now.Subtract(j.repair.ApplyDate).Days,
                    Flg        = j.flow.Status,
                    FlowUid    = j.flow.UserId,
                    FlowCls    = j.flow.Cls,
                    FlowDptId  = _context.AppUsers.Find(j.flow.UserId).DptId,
                    repdata    = j.repair
                }));
                break;

            /* 與登入者相關且流程在該登入者身上的文件 */
            case "待簽核":
                /* Get all dealing repair docs. */
                var repairFlows = _context.RepairFlows.Join(rps.DefaultIfEmpty(), f => f.DocId, r => r.DocId,
                                                            (f, r) => new
                {
                    repair = r,
                    flow   = f
                }).ToList();

                if (userManager.IsInRole(User, "Admin") || userManager.IsInRole(User, "RepAdmin") ||
                    userManager.IsInRole(User, "RepEngineer"))
                {
                    /* If has other search values, search all RepairDocs which flowCls is in engineer. */
                    /* Else return the docs belong the login engineer.  */
                    if (userManager.IsInRole(User, "RepEngineer") && searchAllDoc == true)
                    {
                        repairFlows = repairFlows.Where(f => f.flow.Status == "?" && f.flow.Cls.Contains("工程師")).ToList();
                    }
                    else
                    {
                        repairFlows = repairFlows.Where(f => (f.flow.Status == "?" && f.flow.UserId == ur.Id) ||
                                                        (f.flow.Status == "?" && f.flow.Cls == "驗收人" &&
                                                         _context.AppUsers.Find(f.flow.UserId).DptId == ur.DptId)).ToList();
                    }
                }
                else
                {
                    repairFlows = repairFlows.Where(f => (f.flow.Status == "?" && f.flow.UserId == ur.Id) ||
                                                    (f.flow.Status == "?" && f.flow.Cls == "驗收人" && f.repair.DptId == ur.DptId)).ToList();
                }

                //repairFlows.Select(f => new
                //{
                //    f.DocId,
                //    f.UserId,
                //    f.Status,
                //    f.Cls
                //}).Distinct().Join(rps.DefaultIfEmpty(), f => f.DocId, r => r.DocId,
                //(f, r) => new
                //{
                //    repair = r,
                //    flow = f
                //})
                //.Join(_context.Assets, r => r.repair.AssetNo, a => a.AssetNo,
                //(r, a) => new
                //{
                //    repair = r.repair,
                //    asset = a,
                //    flow = r.flow
                //})
                repairFlows.Join(_context.RepairDtls, m => m.repair.DocId, d => d.DocId,
                                 (m, d) => new
                {
                    repair = m.repair,
                    //asset = m.asset,
                    flow   = m.flow,
                    repdtl = d
                })
                .Join(_context.Departments, j => j.repair.AccDpt, d => d.DptId,
                      (j, d) => new
                {
                    repair = j.repair,
                    //asset = j.asset,
                    flow   = j.flow,
                    repdtl = j.repdtl,
                    dpt    = d
                }).ToList()
                .ForEach(j => rv.Add(new RepairListVModel
                {
                    DocType   = "請修",
                    RepType   = j.repair.RepType,
                    DocId     = j.repair.DocId,
                    ApplyDate = j.repair.ApplyDate,
                    //AssetNo = j.repair.AssetNo,
                    //AssetName = j.repair.AssetName,
                    //Brand = j.asset.Brand,
                    PlaceLoc = j.repair.LocType,
                    //Location1 = _context.Buildings.Where(b => b.BuildingId == Convert.ToInt32(j.repair.Building)).FirstOrDefault().BuildingName
                    //            + " " + _context.Floors.Where(f => f.BuildingId == Convert.ToInt32(j.repair.Building) && f.FloorId == j.repair.Floor).FirstOrDefault().FloorName,
                    //Location2 = " " + _context.Places.Where(p => p.BuildingId == Convert.ToInt32(j.repair.Building) && p.FloorId == j.repair.Floor && p.PlaceId == j.repair.Area).FirstOrDefault().PlaceName,
                    //Type = j.asset.Type,
                    ApplyDpt     = j.repair.DptId,
                    ApplyDptName = _context.Departments.Find(j.repair.DptId).Name_C,
                    AccDpt       = j.repair.AccDpt,
                    AccDptName   = j.dpt.Name_C,
                    TroubleDes   = j.repair.TroubleDes,
                    DealState    = _context.DealStatuses.Find(j.repdtl.DealState).Title,
                    DealDes      = j.repdtl.DealDes,
                    Cost         = j.repdtl.Cost,
                    Days         = DateTime.Now.Subtract(j.repair.ApplyDate).Days,
                    Flg          = j.flow.Status,
                    FlowUid      = j.flow.UserId,
                    FlowCls      = j.flow.Cls,
                    FlowDptId    = _context.AppUsers.Find(j.flow.UserId).DptId,
                    repdata      = j.repair
                }));
                break;
            }
            ;

            /* 設備編號"有"、"無"的對應,"有"讀取table相關data,"無"只顯示申請人輸入的設備名稱 */
            foreach (var item in rv)
            {
                //var repairDoc = _context.Repairs.Find(item.DocId);
                //if (repairDoc.AssetNo != null)
                if (!string.IsNullOrEmpty(item.repdata.AssetNo))
                {
                    var asset = _context.Assets.Where(a => a.AssetNo == item.repdata.AssetNo).FirstOrDefault();
                    if (asset != null)
                    {
                        item.AssetNo   = asset.AssetNo;
                        item.AssetName = asset.Cname;
                        item.Brand     = asset.Brand;
                        item.Type      = asset.Type;
                    }
                }
                else
                {
                    item.AssetName = item.repdata.AssetName;
                }
                if (!string.IsNullOrEmpty(item.repdata.Building) && !string.IsNullOrEmpty(item.repdata.Floor) &&
                    !string.IsNullOrEmpty(item.repdata.Area))
                {
                    item.Location1 = _context.Buildings.Where(b => b.BuildingId == Convert.ToInt32(item.repdata.Building)).FirstOrDefault().BuildingName
                                     + " "
                                     + _context.Floors.Where(f => f.BuildingId == Convert.ToInt32(item.repdata.Building) && f.FloorId == item.repdata.Floor).FirstOrDefault().FloorName;
                    PlaceModel pm = _context.Places.Where(p => p.BuildingId == Convert.ToInt32(item.repdata.Building) && p.FloorId == item.repdata.Floor && p.PlaceId == item.repdata.Area).FirstOrDefault();
                    if (pm != null)
                    {
                        item.Location2 = " " + pm.PlaceName;
                    }
                    else
                    {
                        item.Location1 = "(無資料)";
                        item.Location2 = item.repdata.Area + item.PlaceLoc;
                    }
                }
                else
                {
                    item.Location1 = "(無資料)";
                    item.Location2 = item.repdata.Area + item.PlaceLoc;
                }
            }

            /* Sorting search result. */
            if (rv.Count() != 0)
            {
                rv = rv.OrderByDescending(r => r.ApplyDate).ThenByDescending(r => r.DocId).ToList();
            }

            /* Search dealStatus. */
            if (!string.IsNullOrEmpty(qtyDealStatus))
            {
                rv = rv.Where(r => r.DealState == qtyDealStatus).ToList();
            }

            return(View("List", rv));
        }
        public async Task <IViewComponentResult> InvokeAsync()
        {
            // Get current user.
            var user = _userRepo.Find(u => u.UserName == User.Identity.Name).FirstOrDefault();

            /* 流程的下拉選單 */
            List <SelectListItem> FlowlistItem = new List <SelectListItem>();

            FlowlistItem.Add(new SelectListItem {
                Text = "待簽核", Value = "待簽核"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "流程中", Value = "流程中"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "已結案", Value = "已結案"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "請選擇", Value = "請選擇"
            });
            ViewData["BMEDFlowType"] = new SelectList(FlowlistItem, "Value", "Text", "待簽核");

            /* 成本中心 & 申請部門的下拉選單資料 */
            var dptList = new[] { "K", "P", "C" };   //本院部門
            //var departments = _context.Departments.Where(d => dptList.Contains(d.Loc)).ToList();
            var departments = _context.Departments.ToList();
            List <SelectListItem> listItem = new List <SelectListItem>();

            //foreach (var item in departments)
            //{
            //    listItem.Add(new SelectListItem
            //    {
            //        Text = item.Name_C + "(" + item.DptId + ")",    //show DptName(DptId)
            //        Value = item.DptId
            //    });
            //}
            ViewData["BMEDAccDpt"]   = new SelectList(listItem, "Value", "Text");
            ViewData["BMEDApplyDpt"] = new SelectList(listItem, "Value", "Text");

            /* 處理狀態的下拉選單 */
            var dealStatuses = _context.BMEDDealStatuses.ToList();
            List <SelectListItem> listItem2 = new List <SelectListItem>();

            foreach (var item in dealStatuses)
            {
                listItem2.Add(new SelectListItem
                {
                    Text  = item.Title,
                    Value = item.Title
                });
            }
            ViewData["BMEDDealStatus"] = new SelectList(listItem2, "Value", "Text");

            /* 處理有無費用的下拉選單 */
            List <SelectListItem> listItem3 = new List <SelectListItem>();

            listItem3.Add(new SelectListItem {
                Text = "有", Value = "Y"
            });
            listItem3.Add(new SelectListItem {
                Text = "無", Value = "N"
            });
            ViewData["BMEDIsCharged"] = new SelectList(listItem3, "Value", "Text");

            /* 處理日期查詢的下拉選單 */
            List <SelectListItem> listItem4 = new List <SelectListItem>();

            listItem4.Add(new SelectListItem {
                Text = "申請日", Value = "申請日"
            });
            listItem4.Add(new SelectListItem {
                Text = "完工日", Value = "完工日"
            });
            listItem4.Add(new SelectListItem {
                Text = "結案日", Value = "結案日"
            });
            ViewData["BMEDDateType"] = new SelectList(listItem4, "Value", "Text", "申請日");

            /* 處理工程師查詢的下拉選單 */
            var engs = roleManager.GetUsersInRole("MedEngineer").ToList();
            List <SelectListItem> listItem5 = new List <SelectListItem>();

            //foreach (string l in engs)
            //{
            //    var u = _context.AppUsers.Where(ur => ur.UserName == l).FirstOrDefault();
            //    if (u != null)
            //    {
            //        listItem5.Add(new SelectListItem
            //        {
            //            Text = u.FullName + "(" + u.UserName + ")",
            //            Value = u.Id.ToString()
            //        });
            //    }
            //}
            ViewData["BMEDEngs"] = new SelectList(listItem5, "Value", "Text");
            /* 擷取該使用者單位底下所有人員 */
            var dptUsers = _context.AppUsers
                           .Where(a => a.DptId == user.DptId && a.Status == "Y")
                           .ToList();

            List <SelectListItem> dptMemberList = new List <SelectListItem>();

            foreach (var item in dptUsers)
            {
                dptMemberList.Add(new SelectListItem
                {
                    Text  = item.FullName + "(" + item.UserName + ")",
                    Value = item.Id.ToString()
                });
            }

            // 使用者為工程師,帶工程師列表,其餘帶同部門人員
            if (user.DptId == "7084" || user.DptId == "8420")
            {
                ViewData["BMEDClsUsers"] = new SelectList(listItem5, "Value", "Text");
            }
            else
            {
                ViewData["BMEDClsUsers"] = new SelectList(dptMemberList, "Value", "Text");
            }
            List <SelectListItem> listItem6 = new List <SelectListItem>();

            listItem6.Add(new SelectListItem {
                Text = "總院", Value = "總院"
            });
            listItem6.Add(new SelectListItem {
                Text = "二林", Value = "L"
            });
            listItem6.Add(new SelectListItem {
                Text = "員林", Value = "B"
            });
            listItem6.Add(new SelectListItem {
                Text = "南投", Value = "N"
            });
            listItem6.Add(new SelectListItem {
                Text = "鹿基", Value = "U"
            });
            listItem6.Add(new SelectListItem {
                Text = "雲基", Value = "T"
            });
            ViewData["Location"] = new SelectList(listItem6, "Value", "Text");


            QryRepListData data = new QryRepListData();

            return(View(data));
        }
        public async Task <IViewComponentResult> InvokeAsync()
        {
            List <SelectListItem> FlowlistItem = new List <SelectListItem>();

            FlowlistItem.Add(new SelectListItem {
                Text = "待簽核", Value = "待簽核"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "流程中", Value = "流程中"
            });
            FlowlistItem.Add(new SelectListItem {
                Text = "已結案", Value = "已結案"
            });
            ViewData["BMEDFlowType"] = new SelectList(FlowlistItem, "Value", "Text", "待簽核");

            /* 成本中心 & 申請部門的下拉選單資料 */
            var dptList     = new[] { "K", "P", "C" }; //本院部門
            var departments = _context.Departments.Where(d => dptList.Contains(d.Loc)).ToList();
            List <SelectListItem> listItem = new List <SelectListItem>();

            foreach (var item in departments)
            {
                listItem.Add(new SelectListItem
                {
                    Text  = item.Name_C + "(" + item.DptId + ")",   //show DptName(DptId)
                    Value = item.DptId
                });
            }
            ViewData["BMEDAccDpt"]   = new SelectList(listItem, "Value", "Text");
            ViewData["BMEDApplyDpt"] = new SelectList(listItem, "Value", "Text");

            /* 處理狀態的下拉選單 */
            var dealStatuses = _context.BMEDDealStatuses.ToList();
            List <SelectListItem> listItem2 = new List <SelectListItem>();

            foreach (var item in dealStatuses)
            {
                listItem2.Add(new SelectListItem
                {
                    Text  = item.Title,
                    Value = item.Title
                });
            }
            ViewData["BMEDDealStatus"] = new SelectList(listItem2, "Value", "Text");

            /* 處理有無費用的下拉選單 */
            List <SelectListItem> listItem3 = new List <SelectListItem>();

            listItem3.Add(new SelectListItem {
                Text = "有", Value = "Y"
            });
            listItem3.Add(new SelectListItem {
                Text = "無", Value = "N"
            });
            ViewData["BMEDIsCharged"] = new SelectList(listItem3, "Value", "Text");

            /* 處理日期查詢的下拉選單 */
            List <SelectListItem> listItem4 = new List <SelectListItem>();

            listItem4.Add(new SelectListItem {
                Text = "申請日", Value = "申請日"
            });
            listItem4.Add(new SelectListItem {
                Text = "完工日", Value = "完工日"
            });
            listItem4.Add(new SelectListItem {
                Text = "結案日", Value = "結案日"
            });
            ViewData["BMEDDateType"] = new SelectList(listItem4, "Value", "Text", "申請日");

            /* 處理工程師查詢的下拉選單 */
            var engs = roleManager.GetUsersInRole("MedEngineer").ToList();
            List <SelectListItem> listItem5 = new List <SelectListItem>();

            foreach (string l in engs)
            {
                var u = _context.AppUsers.Where(ur => ur.UserName == l).FirstOrDefault();
                if (u != null)
                {
                    listItem5.Add(new SelectListItem
                    {
                        Text  = u.FullName + "(" + u.UserName + ")",
                        Value = u.Id.ToString()
                    });
                }
            }
            ViewData["BMEDEngs"] = new SelectList(listItem5, "Value", "Text");

            QryRepListData data = new QryRepListData();

            return(View(data));
        }