protected void Page_Load(object sender, EventArgs e) { if (!Authentication.HasResource(User.Identity.Name, "ForgotPunchList")) { Response.Redirect(@"/account/logon.aspx?ReturnUrl=%2f"); } if (!IsPostBack) { _forgotRepo = RepositoryFactory.CreateForgotPunchRepo(); //從QueryString取得 簽核代碼 string docID = String.IsNullOrEmpty(Request["SignDocID"]) ? String.Empty : Request["SignDocID"].ToString(); //根據查詢的 簽核代碼 搜尋忘刷單 model = _forgotRepo.GetForgotPunchForm(docID); WebUtils.PageDataBind(model, this.Page); } }
//簽核作業頁面 > 取得表單資料 public ForgotPunchViewModel GetForgotPunchForm(string signDocID) { ForgotPunchViewModel model = null; string strSQL = @"Select per.PunchName , forgot.*, apply.EmployeeName ApplayName, emp.EmployeeName, dep.DepartmentName from ForgotPunchForm forgot left outer join Employee apply on forgot.ApplyID_FK = apply.EmployeeID left outer join Employee emp on forgot.EmployeeID_FK = emp.EmployeeID left outer join Department dep on forgot.DepartmentID_FK = dep.DepartmentID left outer join PeriodType per on forgot.PeriodType = per.PunchID Where SignDocID_FK = @SignDocID_FK"; var strCondition = new Conditions() { { "@SignDocID_FK", signDocID } }; DataRow result = _dc.QueryForDataRow(strSQL, strCondition); if (result == null) { return(null); } model = new ForgotPunchViewModel() { SN = Int32.Parse(result["SN"].ToString()), FormID_FK = Int32.Parse(result["FormID_FK"].ToString()), SignDocID_FK = result["SignDocID_FK"].ToString(), ApplyID_FK = result["ApplyID_FK"].ToString(), ApplyName = result["ApplayName"].ToString(), ApplyDateTime = DateTime.Parse(result["ApplyDateTime"].ToString()), EmployeeID_FK = result["EmployeeID_FK"].ToString(), EmployeeName = result["EmployeeName"].ToString(), DepartmentID_FK = result["DepartmentID_FK"].ToString(), DepartmentName = result["DepartmentName"].ToString(), PeriodType = Int32.Parse(result["PeriodType"].ToString()), PunchName = result["PunchName"].ToString(), ForgotPunchInDateTime = !result["ForgotPunchInDateTime"].IsDBNullOrWhiteSpace() ? DateTime.Parse(result["ForgotPunchInDateTime"].ToString()) : (DateTime?)null, ForgotPunchOutDateTime = !result["ForgotPunchOutDateTime"].IsDBNullOrWhiteSpace() ? DateTime.Parse(result["ForgotPunchOutDateTime"].ToString()) : (DateTime?)null, Note = result["Note"].ToString() }; return(model); }
/// <summary> /// 簽核之前確認是否符合班別的時間 /// </summary> /// <param name="SignDocID"></param> /// <returns></returns> public bool CheckFogotPunchTimeHasInRule(string SignDocID) { bool chkIsInRule = true; try { ForgotPunchViewModel model = null; ForgotPunchRepository _forgotRepo = null; _forgotRepo = RepositoryFactory.CreateForgotPunchRepo(); //根據查詢的 簽核代碼 搜尋忘刷單 model = _forgotRepo.GetForgotPunchForm(SignDocID); if (model == null) { throw new Exception("查無相關忘刷單資料"); } string empID = model.EmployeeID_FK; string workDatStr = string.Empty; DateTime nFpDateInTime = new DateTime(); DateTime nFpDateOutTime = new DateTime(); string fFirstTime = string.Empty; string fLastTime = string.Empty; if (model.ForgotPunchInDateTime == null && model.ForgotPunchOutDateTime == null) { throw new Exception("無法取得忘間."); } if (model.ForgotPunchInDateTime != null) { nFpDateInTime = (DateTime)model.ForgotPunchInDateTime; fFirstTime = string.Format("{0}{1}", model.ForgotPunchInDateTime.Value.Hour.ToString().PadLeft(2, '0'), model.ForgotPunchInDateTime.Value.Minute.ToString().PadLeft(2, '0')); } if (model.ForgotPunchOutDateTime != null) { nFpDateOutTime = (DateTime)model.ForgotPunchOutDateTime; fLastTime = string.Format("{0}{1}", model.ForgotPunchOutDateTime.Value.Hour.ToString().PadLeft(2, '0'), model.ForgotPunchOutDateTime.Value.Minute.ToString().PadLeft(2, '0')); } //取得志元班表時間 var smartDc = ConnectionFactory.GetSmartManDC(); if (model.ForgotPunchInDateTime != null) { workDatStr = nFpDateInTime.ToString("yyyyMMdd"); } if (model.ForgotPunchOutDateTime != null) { workDatStr = nFpDateOutTime.ToString("yyyyMMdd"); } string strSQL = @" select w.morningtime, w.offworktime from dutywork d inner join worktime w on w.worktype = d.worktype where d.employecd = @EmployeeCD and d.workdate = @WorkDate "; var strCondition = new Conditions() { { "@EmployeeCD", empID }, { "@WorkDate", workDatStr }, }; DataRow result = smartDc.QueryForDataRow(strSQL, strCondition); var ruleWorkFirstTime = result["morningtime"]; var ruleWorkLastTime = result["offworktime"]; //CompareTo 大於會回傳1 不判斷上班時間 20170824 by 小遇 //if (!string.IsNullOrEmpty(fFirstTime)) // chkIsInRule = fFirstTime.CompareTo(ruleWorkFirstTime.ToString()) > 0 ? false : true; if (!string.IsNullOrEmpty(fLastTime)) { chkIsInRule = fLastTime.CompareTo(ruleWorkLastTime.ToString()) < 0 ? false : true; } } catch (Exception ex) { throw new Exception(ex.Message); } return(chkIsInRule); }
private MultiConditions getForgotPunchDML(ForgotPunchViewModel forgotPunch) { if (forgotPunch == null || !forgotPunch.AutoInsert) { throw new ArgumentNullException("忘刷資料為空!", new Exception("自動寫入值異常!")); } var result = new MultiConditions(); string tableName = RepositoryFactory.SmartManConn["DataSource"] + "." + RepositoryFactory.SmartManConn["Catelog"] + ".dbo.LostCard"; string strSQL = null; Conditions conditions = new Conditions() { { "@CARDNO", forgotPunch.EmployeeID_FK }, //20161104 志元改版,LostCard無EMPLOYECD欄位,新增Sequenceid紀錄電子簽核單號 //{ "@EMPLOYECD", forgotPunch.EmployeeID_FK}, { "@Sequenceid", forgotPunch.SignDocID_FK }, //20161114 不特地寫入Flag狀態,志元預設為0,才會自動比對刷卡資料 //20170411 因以直接寫入刷卡資料,故直接給1,至元不比對刷卡資料 //{ "@FLAG", "1"}, }; switch (forgotPunch.PeriodType) { // 上班 case 1: conditions.Add("@CARDDATE", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("yyyyMMdd") : (string)null); conditions.Add("@CARDTIME", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null); conditions.Add("@CARDTYPE", "01"); strSQL = _dc.ConstructInsertDML(tableName, conditions); result.Add(strSQL, conditions); break; // 下班 case 2: conditions.Add("@CARDDATE", forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("yyyyMMdd") : (string)null); conditions.Add("@CARDTIME", forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null); conditions.Add("@CARDTYPE", "02"); strSQL = _dc.ConstructInsertDML(tableName, conditions); result.Add(strSQL, conditions); break; // 全天 case 3: for (int i = 1; i < 3; i++) { conditions = new Conditions() { { "@CARDNO", forgotPunch.EmployeeID_FK }, //20161104 志元改版,LostCard無EMPLOYECD欄位,新增Sequenceid紀錄電子簽核單號 //{ "@EMPLOYECD", forgotPunch.EmployeeID_FK}, { "@Sequenceid", forgotPunch.SignDocID_FK }, //{ "@FLAG", "1"}, { String.Format("@CARDTYPE{0}", i), "0" + i.ToString() } }; if (i == 1) { conditions.Add("@CARDDATE", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("yyyyMMdd") : (string)null); conditions.Add("@CARDTIME", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null); } else { conditions.Add("@CARDDATE", forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("yyyyMMdd") : (string)null); conditions.Add("@CARDTIME", forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null); } strSQL = _dc.ConstructInsertDML(tableName, conditions); result.Add(strSQL, conditions); } break; default: throw new Exception("無此忘刷型別!"); } //----------start---------- var ForgotDate = new DateTime(); if (forgotPunch.ForgotPunchInDateTime != null) { ForgotDate = forgotPunch.ForgotPunchInDateTime.Value; } else if (forgotPunch.ForgotPunchOutDateTime != null) { ForgotDate = forgotPunch.ForgotPunchOutDateTime.Value; } //抓班表資料 var dutyWorkData = _smartRepo.QueryForDutyWork(ForgotDate.ToDateTimeFormateString("yyyyMMdd"), forgotPunch.EmployeeID_FK); //抓員工刷卡資料 var EmpdailyOnOff = _smartRepo.QueryForDailyOnOff(ForgotDate.ToString("yyyyMMdd"), forgotPunch.EmployeeID_FK); //20170302 add新增dailyOnOff時寫入計薪年月 var payRange = _smartRepo.QueryForPayRange(ForgotDate.ToDateTimeFormateString("yyyyMMdd"), ForgotDate.ToDateTimeFormateString("yyyyMMdd")); //var payYYYYMM = ParsePayRange(payRange["PayYYYYMM"].ToString()); var result_dailyOnOff = new MultiConditions(); string strSQL_dailyOnOff = null; var dateTimeNow = DateTime.Now; Conditions conditions_dailyOnOff = new Conditions() { { "@SYSTEMDATE", dateTimeNow.ToString("yyyyMMdd") }, { "@SYSTEMTIME", dateTimeNow.ToString("HHmm") }, { "@COMPANYCD", "A" }, { "@EMPLOYECD", forgotPunch.EmployeeID_FK }, { "@LOGINUSER", "System" }, { "@APPROVEUSER", "System" }, { "@APPROVEYN", "Y" }, { "@DUTYDATE", ForgotDate.ToDateTimeFormateString("yyyyMMdd") }, //{ "@BEGINTIME", "Y"}, //{ "@ENDTIME", "Y"}, { "@SEQNOX", forgotPunch.SignDocID_FK }, { "@PAYYYYYMM", payRange["PayYYYYMM"].ToString() }, { "@WORKTYPE", dutyWorkData["WORKTYPE"].ToString() }, { "@HOLIDAY", dutyWorkData["HOLIDAY"].ToString() }, { "@H_TYPE", dutyWorkData["H_TYPE"] }, { "@overwork1", 0 }, { "@overwork2", 0 }, { "@overwork3", 0 }, { "@overwork4", 0 }, { "@overwork5", 0 }, { "@recreatedays", 0 }, { "@workhours", 0 }, { "@workdays", 0 }, { "@offwork1", 0 }, { "@offwork2", 0 }, { "@offwork3", 0 }, { "@offwork4", 0 }, { "@offwork5", 0 }, { "@offwork6", 0 }, { "@offwork7", 0 }, { "@offwork8", 0 }, { "@offwork9", 0 }, { "@offwork10", 0 }, { "@offwork5m", 0 }, { "@offwork6m", 0 }, { "@offhours", 0 }, { "@addhours", 0 }, { "@overworkhours", 0 }, { "@mealdelay", 0 }, { "@offwork11", 0 }, { "@offwork12", 0 }, { "@offworkhours", 0 }, { "@taxhours", 0 }, //{ "@losttimes", 0}, { "@FixedPay18", 0 }, { "@FixedPay19", 0 }, { "@FixedPay20", 0 }, { "@FixedPay21", 0 }, { "@FixedPay22", 0 }, { "@RealOnDate", ForgotDate.ToDateTimeFormateString("yyyyMMdd") }, { "@RealOffDate", ForgotDate.ToDateTimeFormateString("yyyyMMdd") }, { "@OffWork14", 0 }, { "@OffWork15", 0 }, }; string tableName_dailyOnOff = RepositoryFactory.SmartManConn["DataSource"] + "." + RepositoryFactory.SmartManConn["Catelog"] + ".dbo.DailyOnOff"; if (dutyWorkData["HOLIDAY"].ToString() == "Y") { //假日忘刷 if (EmpdailyOnOff == null) { // insert dailyOnOff conditions_dailyOnOff.Add("@BEGINTIME", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null); conditions_dailyOnOff.Add("@ENDTIME", forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null); conditions_dailyOnOff.Add("@losttimes", 0); strSQL_dailyOnOff = String.Format(@"INSERT INTO {0} (SYSTEMDATE, SYSTEMTIME, COMPANYCD, EMPLOYECD, LOGINUSER, APPROVEUSER, APPROVEYN, DUTYDATE, SEQNOX, PAYYYYYMM, WORKTYPE, HOLIDAY, H_TYPE, overwork1, overwork2, overwork3, overwork4, overwork5, recreatedays, workhours, workdays, offwork1, offwork2, offwork3, offwork4, offwork5, offwork6, offwork7, offwork8, offwork9, offwork10, offwork5m, offwork6m, offhours, addhours, overworkhours, mealdelay, offwork11, offwork12, offworkhours, taxhours, FixedPay18, FixedPay19, FixedPay20, FixedPay21, FixedPay22, RealOnDate, RealOffDate, OffWork14, OffWork15, BEGINTIME, ENDTIME, losttimes) VALUES (@SYSTEMDATE, @SYSTEMTIME, @COMPANYCD, @EMPLOYECD, @LOGINUSER, @APPROVEUSER, @APPROVEYN, @DUTYDATE, @SEQNOX, @PAYYYYYMM, @WORKTYPE, @HOLIDAY, @H_TYPE, @overwork1, @overwork2, @overwork3, @overwork4, @overwork5, @recreatedays, @workhours, @workdays, @offwork1, @offwork2, @offwork3, @offwork4, @offwork5, @offwork6, @offwork7, @offwork8, @offwork9, @offwork10, @offwork5m, @offwork6m, @offhours, @addhours, @overworkhours, @mealdelay, @offwork11, @offwork12, @offworkhours, @taxhours, @FixedPay18, @FixedPay19, @FixedPay20, @FixedPay21, @FixedPay22, @RealOnDate, @RealOffDate, @OffWork14, @OffWork15, @BEGINTIME, @ENDTIME, @losttimes)", tableName_dailyOnOff); //strSQL_dailyOnOff = _dc.ConstructInsertDML(tableName_dailyOnOff, conditions_dailyOnOff); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); } else { //update dailyOnOff switch (forgotPunch.PeriodType) { // 上班 case 1: if (EmpdailyOnOff["BEGINTIME"].ToString() == "") { strSQL_dailyOnOff = String.Format( @"Update {0} Set Begintime = '{1}', LOSTTIMES = 0, SEQNOX = '{2}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); } //20170411 增加判斷事後補單(HR已先手動作業),只更新單號 else if ((EmpdailyOnOff["BEGINTIME"].ToString() != "") && (EmpdailyOnOff["ENDTIME"].ToString() != "")) { strSQL_dailyOnOff = String.Format( @"Update {0} Set LOSTTIMES= ( CASE WORKTYPE WHEN 'A' THEN 0 ELSE LOSTTIMES END) , REMARKOFF='', OFFWORK3=0, SEQNOX ='{1}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); } else { strSQL_dailyOnOff = String.Format( @"Update {0} Set Begintime = '{1}', ENDTIME = '{2}', LOSTTIMES = 0, SEQNOX = '{3}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null, EmpdailyOnOff["BEGINTIME"].ToString(), forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); //conditions.Add("@CARDTIME", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null); } break; // 下班 case 2: strSQL_dailyOnOff = String.Format( @"Update {0} Set ENDTIME = '{1}', LOSTTIMES = 0, SEQNOX = '{2}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); break; // 全天 case 3: strSQL_dailyOnOff = String.Format( @"Update {0} Set Begintime = '{1}', ENDTIME = '{2}', LOSTTIMES = 0, SEQNOX = '{3}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); break; default: throw new Exception("無此忘刷型別!"); } } } else { //上班日忘刷 switch (forgotPunch.PeriodType) { // 上班 case 1: if ((EmpdailyOnOff["BEGINTIME"].ToString() == "")) { strSQL_dailyOnOff = String.Format( @"Update {0} Set Begintime = '{1}', LOSTTIMES= ( CASE WORKTYPE WHEN 'A' THEN 0 ELSE LOSTTIMES END) , REMARKOFF='', OFFWORK3=0, SEQNOX ='{2}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); } //20170411 增加判斷事後補單(HR已先手動作業),只更新單號 else if ((EmpdailyOnOff["BEGINTIME"].ToString() != "") && (EmpdailyOnOff["ENDTIME"].ToString() != "")) { strSQL_dailyOnOff = String.Format( @"Update {0} Set LOSTTIMES= ( CASE WORKTYPE WHEN 'A' THEN 0 ELSE LOSTTIMES END) , REMARKOFF='', OFFWORK3=0, SEQNOX ='{1}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); } else { strSQL_dailyOnOff = String.Format( @"Update {0} Set Begintime = '{1}', ENDTIME = '{2}', LOSTTIMES= ( CASE WORKTYPE WHEN 'A' THEN 0 ELSE LOSTTIMES END) , REMARKOFF='', OFFWORK3=0, SEQNOX = '{3}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null, EmpdailyOnOff["BEGINTIME"].ToString(), forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); //conditions.Add("@CARDTIME", forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null); } break; // 下班 case 2: strSQL_dailyOnOff = String.Format( @"Update {0} Set ENDTIME = '{1}', LOSTTIMES= ( CASE WORKTYPE WHEN 'A' THEN 0 ELSE LOSTTIMES END) , REMARKOFF='', OFFWORK3=0, SEQNOX = '{2}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); break; // 全天 case 3: strSQL_dailyOnOff = String.Format( @"Update {0} Set Begintime = '{1}', ENDTIME = '{2}', LOSTTIMES= ( CASE WORKTYPE WHEN 'A' THEN 0 ELSE LOSTTIMES END) , REMARKOFF='', OFFWORK3=0, SEQNOX = '{3}' Where employecd = @employecd and dutydate=@dutydate", tableName_dailyOnOff, forgotPunch.ForgotPunchInDateTime.HasValue ? forgotPunch.ForgotPunchInDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.ForgotPunchOutDateTime.HasValue ? forgotPunch.ForgotPunchOutDateTime.Value.ToString("HHmm") : (string)null, forgotPunch.SignDocID_FK); result.Add(strSQL_dailyOnOff, conditions_dailyOnOff); break; default: throw new Exception("無此忘刷型別!"); } } //---------end--------- return(result); }
protected void SaveBtn_Click(object sender, EventArgs e) { _forgotRepo = RepositoryFactory.CreateForgotPunchRepo(); //取得頁面資料 model = PageDataBind(); var validResult = PunchDateTimeValidate(); var duplicateResult = IsDuplicateSubmit(); var theSameDateResult = IsTheSameDate(); if (!validResult.IsValid || !duplicateResult.IsValid || !theSameDateResult.IsValid) { var errorMessage = String.Concat(validResult.ErrorMessage, ",", duplicateResult.ErrorMessage, ",", theSameDateResult.ErrorMessage); Response.Write(String.Join("\r\n", errorMessage.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)).ToAlertFormat()); return; } //btn處理 ViewUtils.ButtonOff(SaveBtn, CoverBtn); var responseMessage = String.Empty; try { var modelList = new List <RinnaiForms>(); modelList.Add(model); //存檔 if (String.IsNullOrEmpty(Request["SignDocID_FK"])) { _forgotRepo.CreateData(modelList); responseMessage = "新增成功!"; } else { _forgotRepo.EditData(modelList); responseMessage = "編輯成功!"; } #region #0022忘刷送出新增email通知 //主管ADAccount string chiefID = _forgotRepo.FindChiefID(Request["SignDocID_FK"], User.Identity.Name); if (!string.IsNullOrEmpty(chiefID)) { MailerAPI.MailInfo mailInfo = new MailerAPI.MailInfo() { AddresseeTemp = System.Web.Configuration.WebConfigurationManager.AppSettings["MailTemplate"], Subject = String.Format("系統提醒!簽核單號 : {0} 已經送達!", model.SignDocID_FK), //Subject = "系統部測試,請勿理會此郵件,謝謝!", DomainPattern = ConfigUtils.ParsePageSetting("Pattern")["DomainPattern"], CC = new System.Collections.Generic.List <string>() { "*****@*****.**" }, //To = string.Format("{0}@rinnai.com.tw", chiefID) To = string.Format("{0}@rinnai.com.tw", chiefID) }; var portalDomain = ConfigUtils.ParsePageSetting("Domain")["Portal"]; string body = MailTools.BodyToTable( String.Format( @"系統提醒!簽核單號 : {0} 已經送達,請儘速檢視!<br /><a href='{1}/Area/Sign/ProcessWorkflowList.aspx?queryText={0}'>連結</a> <br />此件為系統發送,請勿回覆!", //@"系統部測試,請勿理會此郵件,謝謝!", model.SignDocID_FK, portalDomain)); mailInfo.Body.Append(body); if (PublicRepository.CurrentWorkflowMode == Enums.WorkflowTypeEnum.RELEASE) { new Mailer(mailInfo).SendMail(); } } #endregion ViewUtils.ButtonOn(SaveBtn, CoverBtn); responseMessage = responseMessage.ToAlertAndRedirect(@"/Area/Sign/WorkflowQueryList.aspx?orderField=CreateDate&descending=True"); } catch (Exception ex) { responseMessage = String.Concat("存檔失敗!\r\n錯誤訊息: ", ex.Message).ToAlertFormat(); ViewUtils.ShowRefreshBtn(CoverBtn, RefreshBtn); } finally { Response.Write(responseMessage); } }