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);
        }
Пример #5
0
        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);
            }
        }