public async Task <IViewComponentResult> InvokeAsync(string id)
        {
            Assign          assign = new Assign();
            Instrument      data   = _db.Instruments.Find(id);
            OutsideBmedFlow of     = _db.OutsideBmedFlows.Where(o => o.DocId == id).OrderBy(o => o.Rtt == data.ApplyDate).ToList().Last();

            assign.item1       = of.item1;
            assign.item2       = of.item2;
            assign.item3       = of.item3;
            assign.item4       = of.item4;
            assign.item5       = of.item5;
            assign.item6       = of.item6;
            assign.item7       = of.item7;
            assign.Application = data.Application;
            assign.Content     = data.Content;

            return(View(assign));
        }
        public ActionResult TransToMe(string docid)
        {
            Instrument instrument = _db.Instruments.Find(docid);

            //AppUser appUser = db.AppUsers.Where(u => u.UserName == User.Identity.Name).FirstOrDefault();
            if (ModelState.IsValid)
            {
                string[]        s  = new string[] { "?", "2" };
                OutsideBmedFlow rf = _db.OutsideBmedFlows.Where(f => f.DocId == docid && s.Contains(f.Status)).FirstOrDefault();
                //
                //轉送下一關卡
                rf.Opinion = "[改變流程]" + Environment.NewLine
                             + "流程已經被" + "" + "更改。";
                rf.Status           = "1";
                rf.Rtt              = DateTime.Now;
                rf.Rtp              = 123456;
                _db.Entry(rf).State = EntityState.Modified;
                _db.SaveChanges();
                //
                OutsideBmedFlow flow = new OutsideBmedFlow();
                flow.DocId    = docid;
                flow.StepId   = rf.StepId + 1;
                flow.UserId   = 123456;
                flow.UserName = "******";
                flow.Status   = "?";
                flow.Cls      = "";
                flow.Rtt      = DateTime.Now;
                _db.OutsideBmedFlows.Add(flow);
                _db.SaveChanges();
                ///Send Mail
                throw new Exception(" ");
            }
            else
            {
                string msg = "";
                foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors))
                {
                    msg += error.ErrorMessage + Environment.NewLine;
                }
                throw new Exception(msg);
            }
        }
        public async Task <IViewComponentResult> InvokeAsync(string id)
        {
            Assign assign = new Assign();

            assign.DocId = id;
            List <SelectListItem> listItem = new List <SelectListItem>();

            listItem.Add(new SelectListItem {
                Text = "申請者", Value = "申請者"
            });
            listItem.Add(new SelectListItem {
                Text = "單位主管", Value = "單位主管"
            });
            listItem.Add(new SelectListItem {
                Text = "醫工承辦", Value = "醫工承辦"
            });
            listItem.Add(new SelectListItem {
                Text = "醫工工程師", Value = "醫工工程師"
            });
            //listItem.Add(new SelectListItem { Text = "專責單位", Value = "專責單位" });
            listItem.Add(new SelectListItem {
                Text = "醫工部主管", Value = "醫工部主管"
            });

            Instrument      sdata = _db.Instruments.Find(id);
            OutsideBmedFlow of    = _db.OutsideBmedFlows.Where(f => f.DocId == id && f.Status == "?").FirstOrDefault();
            var             ur    = _userRepo.Find(uf => uf.UserName == this.User.Identity.Name).FirstOrDefault();
            var             rel   = roleManager.GetRolesForUser(ur.Id);

            //AppUser appUser = db.AppUsers.Where(u => u.UserName == User.Identity.Name).FirstOrDefault();
            if (of != null)
            {
                assign.ClsNow = of.Cls;
                if (sdata != null)
                {
                    if (of.Cls == "醫工主管" && rel.Contains("MedMgr"))
                    {
                        listItem.Add(new SelectListItem {
                            Text = "結案", Value = "結案"
                        });
                    }
                }

                if (of.Cls == "申請人")
                {
                    listItem.Add(new SelectListItem {
                        Text = "廢除", Value = "廢除"
                    });
                }
            }
            ViewData["FlowCls"] = new SelectList(listItem, "Value", "Text", "");

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

            ViewData["ClsNow"] = new SelectList(listItem3, "Value", "Text", "");


            //assign.Hint = "";
            assign.FlowUid     = sdata.ToUserId;
            assign.Application = sdata.Application;
            assign.item1       = of.item1;
            assign.item2       = of.item2;
            assign.item3       = of.item3;
            assign.item4       = of.item4;
            assign.item5       = of.item5;
            assign.item6       = of.item6;
            assign.item7       = of.item7;

            assign.Hint = "申請者→申請單位主管→醫工承辦(施曉婷)→醫工部工程師→醫工部主管→結案";

            return(View(assign));
        }
        public ActionResult NextFlow(Assign assign)
        {
            var ur = _userRepo.Find(u => u.UserName == this.User.Identity.Name).FirstOrDefault();

            if (assign.FlowCls == "結案" || assign.FlowCls == "廢除")
            {
                assign.FlowUid = ur.Id;
            }
            else
            {
                assign.FlowUid = _context.AppUsers.Where(u => u.FullName == assign.ClsNow).Select(u => u.Id).FirstOrDefault();
            }
            Instrument instrument = _db.Instruments.Find(assign.DocId);

            if (ModelState.IsValid)
            {
                OutsideBmedFlow of = _db.OutsideBmedFlows.Where(f => f.DocId == assign.DocId && f.Status == "?").FirstOrDefault();

                if (assign.FlowCls == "結案")
                {
                    of.Opinion = "[" + assign.AssignCls + "]";
                    if (!string.IsNullOrEmpty(assign.AssignOpn))
                    {
                        of.Opinion += (Environment.NewLine + assign.AssignOpn);
                    }
                    of.Status = "2";
                    of.Rtt    = DateTime.Now;
                    of.Rtp    = assign.FlowUid;
                    of.item1  = assign.item1;
                    of.item2  = assign.item2;
                    of.item3  = assign.item3;
                    of.item4  = assign.item4;
                    of.item5  = assign.item5;
                    of.item6  = assign.item6;
                    of.item7  = assign.item7;

                    _db.Entry(of).State = EntityState.Modified;
                    _db.SaveChanges();
                }
                else if (assign.FlowCls == "廢除")
                {
                    of.Opinion = "[廢除]";
                    if (!string.IsNullOrEmpty(assign.AssignOpn))
                    {
                        of.Opinion += (Environment.NewLine + assign.AssignOpn);
                    }
                    of.Status           = "3";
                    of.Rtt              = DateTime.Now;
                    of.Rtp              = assign.FlowUid;
                    of.item1            = assign.item1;
                    of.item2            = assign.item2;
                    of.item3            = assign.item3;
                    of.item4            = assign.item4;
                    of.item5            = assign.item5;
                    of.item6            = assign.item6;
                    of.item7            = assign.item7;
                    _db.Entry(of).State = EntityState.Modified;
                    _db.SaveChanges();
                }
                else
                {
                    //轉送下一關卡
                    of.Opinion = "[" + assign.AssignCls + "]";
                    if (!string.IsNullOrEmpty(assign.AssignOpn))
                    {
                        of.Opinion += (Environment.NewLine + assign.AssignOpn);
                    }
                    of.Status           = "1";
                    of.Rtt              = DateTime.Now;
                    of.Rtp              = ur.Id;
                    of.item1            = assign.item1;
                    of.item2            = assign.item2;
                    of.item3            = assign.item3;
                    of.item4            = assign.item4;
                    of.item5            = assign.item5;
                    of.item6            = assign.item6;
                    of.item7            = assign.item7;
                    _db.Entry(of).State = EntityState.Modified;
                    _db.SaveChanges();
                    //
                    OutsideBmedFlow flow = new OutsideBmedFlow();
                    flow.DocId    = assign.DocId;
                    flow.StepId   = of.StepId + 1;
                    flow.UserId   = assign.FlowUid.Value;
                    flow.UserName = _db.AppUsers.Find(assign.FlowUid.Value).UserName;
                    flow.Status   = "?";
                    flow.Cls      = assign.FlowCls;
                    flow.Rtt      = DateTime.Now;
                    flow.item1    = assign.item1;
                    flow.item2    = assign.item2;
                    flow.item3    = assign.item3;
                    flow.item4    = assign.item4;
                    flow.item5    = assign.item5;
                    flow.item6    = assign.item6;
                    flow.item7    = assign.item7;
                    _db.OutsideBmedFlows.Add(flow);
                    _db.SaveChanges();
                    //Send Mail
                    //To user and the next flow user.
                    Tmail        mail = new Tmail();
                    string       body = "";
                    AppUserModel u;
                    //RepairModel repair = _context.BMEDRepairs.Find(assign.DocId);
                    mail.from = new System.Net.Mail.MailAddress(ur.Email); //ur.Email
                    u         = _context.AppUsers.Find(flow.UserId);
                    mail.to   = new System.Net.Mail.MailAddress(u.Email);  //u.Email
                                                                           //mail.cc = new System.Net.Mail.MailAddress("*****@*****.**");
                    mail.message.Subject = "醫工智能保修系統[外部醫療使用申請] : 品名 : " + instrument.Name;
                    body += "<p>表單編號:" + instrument.DocId + "</p>";
                    body += "<p>申請日期:" + instrument.ApplyDate.ToString("yyyy/MM/dd") + "</p>";
                    body += "<p>申請人:" + instrument.UserName + "</p>";
                    body += "<p>品名:" + instrument.Name + "</p>";
                    body += "<p><a href='http://dms.cch.org.tw/BMED/Account/Login'" + "?docId=" + instrument.DocId + "&dealType=BMEDRepEdit" + ">處理案件</a></p>";
                    body += "<br/>";
                    body += "<h3>此封信件為系統通知郵件,請勿回覆。</h3>";
                    body += "<br/>";
                    //body += "<h3 style='color:red'>如有任何疑問請聯絡工務部,分機3033或7033。<h3>";
                    mail.message.Body       = body;
                    mail.message.IsBodyHtml = true;
                    mail.SendMail();
                }
                return(new JsonResult(assign)
                {
                    Value = new { success = true, error = "" }
                });
            }
            else
            {
                string msg = "";
                foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors))
                {
                    msg += error.ErrorMessage + Environment.NewLine;
                }
                throw new Exception(msg);
            }
        }