using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Common; using Wellan.Data; using Wellan.Common; using System.Text; using System.IO; using System.Drawing; using Wellan.Web.UI; using System.Collections.Generic; using NPOI.HSSF.UserModel; using System.Collections.Specialized; /// /// 勞健保加退保紀錄 /// public partial class forms_customer_fmRpir : Wellan.Web.UI.WUserControlBase { private string _RPENO = ""; private string _BPNME = ""; private string _RPREN = ""; private string _RPRENB = ""; private DateTime _RPXDT1 = new DateTime(); private DateTime _RPXDT2 = new DateTime(); private DateTime _RPBDT1 = new DateTime(); private DateTime _RPBDT2 = new DateTime(); private string _RPOPT = ""; private int _RPITM = 0; private BPSN_DAC bpsn; protected string tableName = ""; protected string mode = ""; protected string BPENO = ""; protected void Page_Load(object sender, EventArgs e) { _RPENO = ViewState["RPENO"] != null ? ViewState["RPENO"].ToString() : ""; _BPNME = ViewState["BPNME"] != null ? ViewState["BPNME"].ToString() : ""; _RPREN = ViewState["RPREN"] != null ? ViewState["RPREN"].ToString() : ""; _RPITM = ViewState["RPITM"] != null ? Convert.ToInt32(ViewState["RPITM"]) : 0; _RPXDT1 = ViewState["RPXDT1"] != null ? Convert.ToDateTime(ViewState["RPXDT1"]) : new DateTime(); _RPXDT2 = ViewState["RPXDT2"] != null ? Convert.ToDateTime(ViewState["RPXDT2"]) : new DateTime(); _RPOPT = ViewState["RPOPT"] != null ? ViewState["RPOPT"].ToString() : ""; _RPBDT1 = ViewState["RPBDT1"] != null ? Convert.ToDateTime(ViewState["RPBDT1"]) : new DateTime(); _RPBDT2 = ViewState["RPBDT2"] != null ? Convert.ToDateTime(ViewState["RPBDT2"]) : new DateTime(); tableName = ViewState["tableName"] != null ? ViewState["tableName"].ToString() : "RPIR"; // if (IsPostBack) // RPIRGrid.DataBind(); RegisterCalendarEvent(this, "txtRPXDT_1_DATE", "txtRPXDT_1"); RegisterCalendarEvent(this, "txtRPXDT_2_DATE", "txtRPXDT_2"); RegisterCalendarEvent(this, "txtRPBDT_1_DATE", "txtRPBDT_1"); RegisterCalendarEvent(this, "txtRPBDT_2_DATE", "txtRPBDT_2"); btnReturnBPSN.Enabled = GetStringParam("mode") == "BPSN"; } protected override void OnInit(EventArgs e) { if (GetStringParam("mode") == "BPSN") { FunctionName = "FMRPIR_BPSN"; } base.OnInit(e); _RPRENB = GetStringParam("RPRENB"); GetGridViewRowColor(RPIRGrid); ShowData(); } private void ShowData() { switch (tableName) { case "": case "RPIR": WLabel1.Text = "勞健保加退保紀錄"; RegisterLookupEvent(this, "btnRPIR_RPENO_WQRY", "txtRPIR_RPENO", "txtRPIR_RPENO,lbRPIR_RPENOX", "BPSN"); SetClientFocus(txtRPIR_RPENO); Search(); RPIRGrid.DataSourceID = "dsRPIRGrid"; RPIRForm.DataSourceID = "dsRPIRForm"; break; case "RPIB": WLabel1.Text = "勞健保加退保異動紀錄"; SearchB(); RPIRGrid.DataSourceID = "dsRPIBGrid"; RPIRForm.DataSourceID = "dsRPIBForm"; RPIRGrid.SelectedIndex = 0; RPIRGrid.PageIndex = 0; break; } } // 查詢按鈕 protected void btnSearch_Click(object sender, EventArgs e) { ParseSearchInput(); if (string.IsNullOrEmpty(_RPENO) && string.IsNullOrEmpty(_BPNME) && _RPXDT1.Ticks == 0 && _RPXDT2.Ticks == 0 && _RPBDT1.Ticks == 0 && _RPBDT2.Ticks == 0 && string.IsNullOrEmpty(_RPOPT)) { lbMessage.Text = GetString("NOSRHCOND"); lbMessage.Visible = true; } else { MultiView1.ActiveViewIndex = 1; Search(); RPIRGrid.DataSourceID = "dsRPIRGrid"; RPIRForm.DataSourceID = "dsRPIRForm"; RPIRGrid.PageIndex = 0; RPIRGrid.SelectedIndex = 0; RPIRGrid.DataBind(); // 查詢有資料時,才將查詢條件紀錄在 ViewState 中 if (RPIRGrid.Rows.Count > 0) { ViewState["RPENO"] = _RPENO; ViewState["BPNME"] = _BPNME; ViewState["RPXDT1"] = _RPXDT1; ViewState["RPXDT2"] = _RPXDT2; ViewState["RPBDT1"] = _RPBDT1; ViewState["RPBDT2"] = _RPBDT2; ViewState["RPOPT"] = _RPOPT; ViewState["tableName"] = ""; } } } private void ParseSearchInput() { _RPENO = txtRPIR_RPENO.Text; _BPNME = txtBPSN_BPNME.Text; WGuard1.CheckDate(txtRPXDT_1.Text, out _RPXDT1); WGuard1.CheckDate(txtRPXDT_2.Text, out _RPXDT2); WGuard1.CheckDate(txtRPBDT_1.Text, out _RPBDT1); WGuard1.CheckDate(txtRPBDT_2.Text, out _RPBDT2); var rpopts = new List(); for (int i = 0; i < rblRPOPT.Items.Count; i++) { if (rblRPOPT.Items[i].Selected) { rpopts.Add(rblRPOPT.Items[i].Value); } } _RPOPT = string.Join(",", rpopts.ToArray()); } // 查詢取消按鈕 protected void btnCancel_Click(object sender, EventArgs e) { //ViewState["RPENO"] = ""; //ViewState["BPNME"] = ""; //ViewState["tableName"] = ""; //_RPENO = ""; //_BPNME = ""; Search(); RPIRGrid.DataBind(); MultiView1.ActiveViewIndex = 1; } // 查詢動作 protected override void Search() { if (MultiView1.ActiveViewIndex == 1) { RPIRForm.Visible = true; } mode = GetStringParam("mode"); BPENO = GetStringParam("BPENO"); if (mode == "BPSN") { dsRPIRGrid.SelectParameters["orderBy"].DefaultValue = "A.RPREN DESC"; dsRPIRGrid.SelectParameters["RPENO"].DefaultValue = BPENO; } else { dsRPIRGrid.SelectParameters["orderBy"].DefaultValue = "A.RPREN DESC"; dsRPIRGrid.SelectParameters["RPENO"].DefaultValue = _RPENO; dsRPIRGrid.SelectParameters["BPNME"].DefaultValue = _BPNME; dsRPIRGrid.SelectParameters["RPXDT1"].DefaultValue = _RPXDT1.Ticks > 0 ? string.Format("{0:yyyy-MM-dd}", _RPXDT1) : ""; dsRPIRGrid.SelectParameters["RPXDT2"].DefaultValue = _RPXDT2.Ticks > 0 ? string.Format("{0:yyyy-MM-dd}", _RPXDT2) : ""; dsRPIRGrid.SelectParameters["RPOPT"].DefaultValue = _RPOPT; dsRPIRGrid.SelectParameters["RPBDT1"].DefaultValue = _RPBDT1.Ticks > 0 ? string.Format("{0:yyyy-MM-dd}", _RPBDT1) : ""; dsRPIRGrid.SelectParameters["RPBDT2"].DefaultValue = _RPBDT2.Ticks > 0 ? string.Format("{0:yyyy-MM-dd}", _RPBDT2) : ""; if (ViewState["RPIRGrid.RPREN"] != null) { RpirDAC rpir = new RpirDAC(); var rprenIndex = rpir.SelectRPRENIndex( ViewState["RPIRGrid.RPREN"].ToString() , _RPENO , _BPNME , _RPXDT1 , _RPXDT2 , _RPOPT , _RPBDT1 , _RPBDT2); if (rprenIndex >= 0) { RPIRGrid.PageIndex = rprenIndex / RPIRGrid.PageSize; RPIRGrid.SelectedIndex = rprenIndex % RPIRGrid.PageSize; } ViewState["RPIRGrid.RPREN"] = null; } } } private void SearchB() { if (MultiView1.ActiveViewIndex == 1) { RPIRForm.Visible = true; } dsRPIBGrid.SelectParameters["RPREN"].DefaultValue = _RPRENB; } private void CalcFields(ObjectDataSourceMethodEventArgs e) { e.InputParameters["RPOLD"] = (RPIRForm.FindControl("chbRPIR_RPOLD") as CheckBox).Checked ? "Y" : "N"; e.InputParameters["RPLIS"] = (RPIRForm.FindControl("chbRPIR_RPLIS") as CheckBox).Checked ? "Y" : "N"; e.InputParameters["RPHIS"] = (RPIRForm.FindControl("chbRPIR_RPHIS") as CheckBox).Checked ? "Y" : "N"; } protected void dsRPIRForm_Inserting(object sender, ObjectDataSourceMethodEventArgs e) { CalcFields(e); // 產生新的單號 switch (tableName) { case "RPIR": e.InputParameters["RPREN"] = WGuard1.WNextRen(DateTime.UtcNow.AddHours(8), "RPIR", "RPREN", "YYYYMM<9999>", ""); break; case "RPIB": e.InputParameters["RPREN"] = _RPREN; e.InputParameters["RPITM"] = 1; break; } } protected void dsRPIRForm_Updating(object sender, ObjectDataSourceMethodEventArgs e) { CalcFields(e); } protected void RPIRGrid_DataBound(object sender, EventArgs e) { GridView_DataBound(sender, e); mode = GetStringParam("mode"); BPENO = GetStringParam("BPENO"); if (RPIRGrid.Rows.Count > 0) { if (RPIRGrid.SelectedIndex == -1) RPIRGrid.SelectedIndex = 0; if (RPIRGrid.SelectedIndex > RPIRGrid.Rows.Count - 1) RPIRGrid.SelectedIndex = RPIRGrid.Rows.Count - 1; RPIRForm.DataBind(); _RPREN = RPIRGrid.SelectedDataKey["RPREN"].ToString(); _RPITM = Convert.ToInt32(RPIRGrid.SelectedDataKey["RPITM"]); ViewState["RPREN"] = _RPREN; ParamList["RPRENB"] = _RPREN; ViewState["RPITM"] = _RPITM; } } protected void RPIRGrid_PageIndexChanged(object sender, EventArgs e) { Search(); RPIRGrid.SelectedIndex = 0; RPIRGrid.DataBind(); } protected void dsRPIRGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e) { // if (e.ReturnValue == null || (e.ReturnValue as DataTable).Rows.Count == 0) if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0) { mode = GetStringParam("mode"); BPENO = GetStringParam("BPENO"); if (mode == "BPSN") { RPIRForm.ChangeMode(FormViewMode.Insert); RPIRForm_ModeChanged(sender, e); RPIRForm.DataBind(); } else { MultiView1.ActiveViewIndex = 0; lbMessage.Text = GetString("NODATA"); lbMessage.Visible = true; } /* switch (MultiView1.ActiveViewIndex) { case 0: lbMessage.Text = GetString("NODATA"); lbMessage.Visible = true; break; case 1: RPIRForm.ChangeMode(FormViewMode.Insert); RPIRForm_ModeChanged(sender, e); break; } */ } } protected void RPIRForm_ItemCommand(object sender, FormViewCommandEventArgs e) { mode = GetStringParam("mode"); BPENO = GetStringParam("BPENO"); switch (e.CommandName) { case "New": switch (e.CommandArgument.ToString()) { case "1": tableName = "RPIR"; break; case "2": tableName = "RPIB"; break; } ViewState["tableName"] = tableName; break; case "Search": MultiView1.ActiveViewIndex = 0; break; case "Cancel": tableName = "RPIR"; ViewState["tableName"] = tableName; Search(); RPIRForm.ChangeMode(FormViewMode.ReadOnly); RPIRForm_ModeChanged(sender, e); break; case "RPIR": tableName = "RPIR"; ViewState["tableName"] = tableName; ShowData(); break; case "RPIBSearch": tableName = "RPIB"; ViewState["tableName"] = tableName; // 紀錄目前的PK ViewState["RPIRGrid.RPREN"] = RPIRGrid.SelectedDataKey.Values["RPREN"]; ShowData(); break; case "BPSN": ParamList["BPENO"] = GetStringParam("BPENO"); DoAfterCommand("BPSN"); break; } } protected void RPIRForm_ItemDeleted(object sender, FormViewDeletedEventArgs e) { Search(); RPIRGrid.DataBind(); if (RPIRGrid.SelectedIndex < 0 || RPIRGrid.SelectedIndex > RPIRGrid.Rows.Count - 1) { RPIRGrid.SelectedIndex = RPIRGrid.Rows.Count - 1; // RPIRGrid.DataBind(); } if (RPIRGrid.Rows.Count > 0) { RPIRForm.DataBind(); } } protected void RPIRForm_ItemInserted(object sender, FormViewInsertedEventArgs e) { tableName = "RPIR"; ViewState["tableName"] = tableName; Search(); } protected void RPIRForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { Search(); } protected void RPIRForm_ModeChanged(object sender, EventArgs e) { switch (RPIRForm.CurrentMode) { case FormViewMode.ReadOnly: RPIRGrid.Visible = true; RPIRGrid.DataBind(); if (RPIRGrid.Rows.Count > 0) { if (RPIRGrid.SelectedIndex == -1) { RPIRGrid.SelectedIndex = 0; } /* if (OldMode == FormViewMode.Insert) { RPIRGrid.PageIndex = RPIRGrid.PageCount - 1; RPIRGrid.DataBind(); RPIRGrid.SelectedIndex = RPIRGrid.Rows.Count - 1; } RPIRGrid.DataBind(); RPIRForm.DataBind(); */ } break; case FormViewMode.Edit: RPIRGrid.Visible = false; break; case FormViewMode.Insert: RPIRGrid.Visible = false; break; } } protected void RPIRForm_ModeChanging(object sender, FormViewModeEventArgs e) { OldMode = (sender as FormView).CurrentMode; } protected void RPIRForm_DataBound(object sender, EventArgs e) { var rasnDao = new RasnDAC(Query); DataTable rasn; switch (RPIRForm.CurrentMode) { case FormViewMode.ReadOnly: if ((RPIRForm.FindControl("lbRPIR_RPENO") as ITextControl) != null) { BPENO = (RPIRForm.FindControl("lbRPIR_RPENO") as ITextControl).Text; DateTime RPBDT; WGuard1.CheckDate((RPIRForm.FindControl("lbRPIR_RPBDT") as ITextControl).Text, out RPBDT); rasn = rasnDao.SelectRecentByDate(BPENO, RPBDT); if (rasn.Rows.Count > 0) { var bpsrm = WDAC.GetInt32Value(rasn.Rows[0]["BPSRM"]); var lbRPSLY = (RPIRForm.FindControl("lbRPIR_RPSLY") as ITextControl); if (lbRPSLY != null && bpsrm > 0) { lbRPSLY.Text = string.Format("{0:###,###,###,###,##0.####}", bpsrm); } } } break; case FormViewMode.Edit: RegisterLookupEvent(RPIRForm, "btnRPIR_RPENO_WQRY", "txtRPIR_RPENO", "txtRPIR_RPENO,lbRPIR_RPENOX", "BPSN1"); RegisterCalendarEvent(RPIRForm, "btnRPIR_RPSDT_DATE", "txtRPIR_RPSDT"); RegisterCalendarEvent(RPIRForm, "btnRPIR_RPEDT_DATE", "txtRPIR_RPEDT"); RegisterCalendarEvent(RPIRForm, "btnRPIR_RPXDT_DATE", "txtRPIR_RBPDT"); SetClientFocus(RPIRForm, "txtRPIR_RPENO"); if (_RPITM == 0) { RPIRForm.FindControl("lbRPIR_RPBDTLabel").Visible = false; RPIRForm.FindControl("btnRPIR_RPBDT_DATE").Visible = false; RPIRForm.FindControl("txtRPIR_RPBDT").Visible = false; } else { RegisterCalendarEvent(RPIRForm, "btnRPIR_RPBDT_DATE", "txtRPIR_RPBDT"); } FormControl(); break; case FormViewMode.Insert: RegisterLookupEvent(RPIRForm, "btnRPIR_RPENO_WQRY", "txtRPIR_RPENO", "txtRPIR_RPENO,lbRPIR_RPENOX", "BPSN1"); RegisterCalendarEvent(RPIRForm, "btnRPIR_RPSDT_DATE", "txtRPIR_RPSDT"); RegisterCalendarEvent(RPIRForm, "btnRPIR_RPEDT_DATE", "txtRPIR_RPEDT"); // RegisterCalendarEvent(RPIRForm, "btnRPIR_RPXDT_DATE", "txtRPIR_RPXDT"); switch (tableName) { case "RPIR": SetClientFocus(RPIRForm, "txtRPIR_RPENO"); (RPIRForm.FindControl("txtRPIR_RPSLY") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPAMT") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPAM2") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPAM3") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPSLA") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPFMY") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPFM1") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPFM2") as ITextControl).Text = "0"; (RPIRForm.FindControl("txtRPIR_RPFM3") as ITextControl).Text = "0"; (RPIRForm.FindControl("chbRPIR_RPLIS") as WCheckBox).Value = "Y"; (RPIRForm.FindControl("chbRPIR_RPHIS") as WCheckBox).Value = "Y"; (RPIRForm.FindControl("chbRPIR_RPOLD") as WCheckBox).Value = "N"; RPIRForm.FindControl("lbRPIR_RPBDTLabel").Visible = false; RPIRForm.FindControl("btnRPIR_RPBDT_DATE").Visible = false; RPIRForm.FindControl("txtRPIR_RPBDT").Visible = false; (RPIRForm.FindControl("rfvRPBDT") as RequiredFieldValidator).Enabled = false; // (RPIRForm.FindControl("txtRPIR_RPXDT") as ITextControl).Text = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); (RPIRForm.FindControl("lbRPIR_RPXDT") as Label).Text = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); (RPIRForm.FindControl("hfRPIR_RPXDT") as HiddenField).Value = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); (RPIRForm.FindControl("txtRPIR_RPSDT") as ITextControl).Text = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); (RPIRForm.FindControl("ddlRPIR_RPPTP") as WDropDownList).SelectedValue = "2"; // 一般勞工 mode = GetStringParam("mode"); BPENO = GetStringParam("BPENO"); if (mode == "BPSN") { (RPIRForm.FindControl("txtRPIR_RPENO") as ITextControl).Text = BPENO; (RPIRForm.FindControl("lbRPIR_RPENOX") as ITextControl).Text = GetLookup("BPSN", BPENO, "BPNME", ""); rasn = rasnDao.SelectRecent(BPENO); if (rasn.Rows.Count > 0) { (RPIRForm.FindControl("txtRPIR_RPSLY") as ITextControl).Text = string.Format("{0:#####0}", WDAC.GetInt32Value(rasn.Rows[0]["BPSRM"])); (RPIRForm.FindControl("txtRPIR_RPAMT") as ITextControl).Text = string.Format("{0:#####0}", WDAC.GetInt32Value(rasn.Rows[0]["BPSRM"])); (RPIRForm.FindControl("txtRPIR_RPAM2") as ITextControl).Text = string.Format("{0:#####0}", WDAC.GetInt32Value(rasn.Rows[0]["BPSRM"])); (RPIRForm.FindControl("txtRPIR_RPAM3") as ITextControl).Text = string.Format("{0:#####0}", WDAC.GetInt32Value(rasn.Rows[0]["BPSRM"])); } } break; case "RPIB": // 取得目前資料,複製進畫面的控制項 //ClientShowMessage(_RPREN); RegisterCalendarEvent(RPIRForm, "btnRPIR_RPBDT_DATE", "txtRPIR_RPBDT"); RpirDAC rpir = new RpirDAC(); DataTable rpirData = rpir.SelectOne(_RPREN, _RPITM); (RPIRForm.FindControl("txtRPIR_RPBDT") as ITextControl).Text = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); if (rpirData.Rows.Count > 0) { (RPIRForm.FindControl("lbRPIR_RPREN") as ITextControl).Text = rpirData.Rows[0]["RPREN"].ToString(); (RPIRForm.FindControl("txtRPIR_RPENO") as ITextControl).Text = rpirData.Rows[0]["RPENO"].ToString(); (RPIRForm.FindControl("txtRPIR_RPSDT") as ITextControl).Text = rpirData.Rows[0]["RPSDT"] != DBNull.Value ? Convert.ToDateTime(rpirData.Rows[0]["RPSDT"]).ToString("yyyyMMdd") : ""; (RPIRForm.FindControl("txtRPIR_RPEDT") as ITextControl).Text = rpirData.Rows[0]["RPEDT"] != DBNull.Value ? Convert.ToDateTime(rpirData.Rows[0]["RPEDT"]).ToString("yyyyMMdd") : ""; (RPIRForm.FindControl("chbRPIR_RPLIS") as WCheckBox).Value = rpirData.Rows[0]["RPLIS"].ToString(); (RPIRForm.FindControl("chbRPIR_RPHIS") as WCheckBox).Value = rpirData.Rows[0]["RPHIS"].ToString(); (RPIRForm.FindControl("chbRPIR_RPOLD") as WCheckBox).Value = rpirData.Rows[0]["RPOLD"].ToString(); (RPIRForm.FindControl("chbRPIR_RPOVR") as WCheckBox).Value = rpirData.Rows[0]["RPOVR"].ToString(); (RPIRForm.FindControl("txtRPIR_RPSLY") as ITextControl).Text = rpirData.Rows[0]["RPSLY"].ToString(); (RPIRForm.FindControl("txtRPIR_RPAMT") as ITextControl).Text = rpirData.Rows[0]["RPAMT"].ToString(); (RPIRForm.FindControl("txtRPIR_RPAM2") as ITextControl).Text = rpirData.Rows[0]["RPAM2"].ToString(); (RPIRForm.FindControl("txtRPIR_RPAM3") as ITextControl).Text = rpirData.Rows[0]["RPAM3"].ToString(); (RPIRForm.FindControl("txtRPIR_RPSLA") as ITextControl).Text = rpirData.Rows[0]["RPSLA"].ToString(); (RPIRForm.FindControl("ddlRPIR_RPPTP") as WDropDownList).SelectedValue = rpirData.Rows[0]["RPPTP"].ToString(); (RPIRForm.FindControl("ddlRPIR_RPNAT") as WDropDownList).SelectedValue = rpirData.Rows[0]["RPNAT"].ToString(); (RPIRForm.FindControl("ddlRPIR_RPDIS") as WDropDownList).SelectedValue = rpirData.Rows[0]["RPDIS"].ToString(); (RPIRForm.FindControl("ddlRPIR_RPDIH") as WDropDownList).SelectedValue = rpirData.Rows[0]["RPDIH"].ToString(); (RPIRForm.FindControl("txtRPIR_RPFMY") as ITextControl).Text = rpirData.Rows[0]["RPFMY"].ToString(); (RPIRForm.FindControl("txtRPIR_RPFM1") as ITextControl).Text = rpirData.Rows[0]["RPFM1"].ToString(); (RPIRForm.FindControl("txtRPIR_RPFM2") as ITextControl).Text = rpirData.Rows[0]["RPFM2"].ToString(); (RPIRForm.FindControl("txtRPIR_RPFM3") as ITextControl).Text = rpirData.Rows[0]["RPFM3"].ToString(); // (RPIRForm.FindControl("ddlRPIR_RPCPY") as WDropDownList).SelectedValue = rpirData.Rows[0]["RPCPY"].ToString(); (RPIRForm.FindControl("hfRPIR_RPFMD") as HiddenField).Value = rpirData.Rows[0]["RPFMD"].ToString(); // (RPIRForm.FindControl("txtRPIR_RPXDT") as ITextControl).Text = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); (RPIRForm.FindControl("lbRPIR_RPXDT") as Label).Text = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); (RPIRForm.FindControl("hfRPIR_RPXDT") as HiddenField).Value = string.Format("{0:yyyyMMdd}", DateTime.UtcNow.AddHours(8)); } break; } FormControl(); break; } } private void FormControl() { var rpoptCtrl = (RPIRForm.FindControl("rblRPIR_RPOPT") as RadioButtonList); var rpopt = rpoptCtrl != null && !string.IsNullOrEmpty(rpoptCtrl.SelectedValue) ? rpoptCtrl.SelectedValue : "-"; // 新增 if (RPIRForm.CurrentMode == FormViewMode.Insert && tableName == "RPIR") { //if (rpoptCtrl.SelectedValue == "") // rpoptCtrl.SelectedValue = "加保"; rpoptCtrl.Items[0].Enabled = true; rpoptCtrl.Items[1].Enabled = false; rpoptCtrl.Items[2].Enabled = false; rpoptCtrl.Items[3].Enabled = false; rpoptCtrl.Items[4].Enabled = false; rpoptCtrl.Items[5].Enabled = false; rpoptCtrl.Items[6].Enabled = false; } // 更正加保那筆 else if (RPIRForm.CurrentMode == FormViewMode.Edit && Convert.ToInt32((RPIRForm.FindControl("hfRPIR_RPITM") as HiddenField).Value) == 0) { //if (rpoptCtrl.SelectedValue == "") // rpoptCtrl.SelectedValue = "加保"; rpoptCtrl.Items[0].Enabled = true; rpoptCtrl.Items[1].Enabled = false; rpoptCtrl.Items[2].Enabled = false; rpoptCtrl.Items[3].Enabled = false; rpoptCtrl.Items[4].Enabled = false; rpoptCtrl.Items[5].Enabled = false; rpoptCtrl.Items[6].Enabled = false; } else // 新增異動與更正異動 { //if (rpoptCtrl.SelectedValue == "") // rpoptCtrl.SelectedValue = "其他"; rpoptCtrl.Items[0].Enabled = false; rpoptCtrl.Items[1].Enabled = true; rpoptCtrl.Items[2].Enabled = true; rpoptCtrl.Items[3].Enabled = true; rpoptCtrl.Items[4].Enabled = true; rpoptCtrl.Items[5].Enabled = true; rpoptCtrl.Items[6].Enabled = true; } SetControlEnabled(RPIRForm, "txtRPIR_RPENO", true); SetControlEnabled(RPIRForm, "btnRPIR_RPENO_WQRY", true); /* +---------------------+----------------------------------------------------------------------------------------------+ | 申請表欄位 | 說明 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 作業類別 | 加保 | 退保 | 眷屬加保 | 眷屬退保 | 薪資調整 | 留職停薪 | 其他 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 人員編號 | 系統帶入 | +---------------------+----------------------------------------------------------------------------------------------+ | 人員姓名 | 系統帶入 | +---------------------+----------------------------------------------------------------------------------------------+ | 表單申請日期 | 開放填寫 | +---------------------+----------------------------------------------------------------------------------------------+ | 生效日期 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 加保日期 | 開放填寫 | 鎖 | 鎖 | 鎖 | 開放填寫 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 退保日期 | 鎖 | 開放填寫 | 鎖 | 鎖 | 鎖 | 開放填寫 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 薪資 | 人員派遣紀錄帶入 | 鎖 | 鎖 | 鎖 | 開放填寫 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 投保金額 | 系統自動帶出(但可手動修改) | 鎖 | 鎖 | 鎖 | 開放填寫 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 勞退自提 | 開放填寫 | 鎖 | 鎖 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 身份別 | 下拉式選單 | 鎖 | 鎖 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 國籍別 | 下拉式選單 | 鎖 | 鎖 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 勞保/健保減免比例 | 人資填寫,建議鎖起來 | 鎖 | 鎖 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 眷口數~減免100%眷口 | 系統帶入,建議鎖起來 | 鎖 | 鎖 | 鎖 | 鎖 | 鎖 | 鎖 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 備註 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 眷屬姓名 | 開放填寫 | 鎖 | 開放填寫 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 身分證字號 | 開放填寫 | 鎖 | 開放填寫 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 出生年月日 | 開放填寫 | 鎖 | 開放填寫 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 關係 | 開放 | 鎖 | 開放 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 減免比例 | 開放 | 鎖 | 開放 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 眷屬加保日 | 開放填寫 | 鎖 | 開放填寫 | 鎖 | 鎖 | 鎖 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ | 眷屬退保日 | 鎖 | 開放填寫 | 鎖 | 開放填寫 | 鎖 | 開放填寫 | 開放填寫 | +---------------------+----------------------------+----------+----------+----------+----------+----------+----------+ */ SetControlEnabled(RPIRForm, "txtRPIR_RPSDT", "|加保|薪資調整|其他|".Contains(rpopt)); // 加保日期 SetControlEnabled(RPIRForm, "btnRPIR_RPSDT_DATE", "|加保|薪資調整|其他|".Contains(rpopt)); SetControlEnabled(RPIRForm, "txtRPIR_RPEDT", "|退保|留職停薪|其他|".Contains(rpopt)); // 退保日期 SetControlEnabled(RPIRForm, "btnRPIR_RPEDT_DATE", "|退保|留職停薪|其他|".Contains(rpopt)); // (RPIRForm.FindControl("txtRPIR_RPSDT") as WebControl).Enabled = "|加保|薪資調整|其他|".Contains(rpopt); // 加保日期 // (RPIRForm.FindControl("btnRPIR_RPSDT_DATE") as WebControl).Enabled = "|加保|薪資調整|其他|".Contains(rpopt); // (RPIRForm.FindControl("txtRPIR_RPEDT") as WebControl).Enabled = "|退保|留職停薪|其他|".Contains(rpopt); // 退保日期 // (RPIRForm.FindControl("btnRPIR_RPEDT_DATE") as WebControl).Enabled = "|退保|留職停薪|其他|".Contains(rpopt); SetControlEnabled(RPIRForm, "chbRPIR_RPLIS", true); SetControlEnabled(RPIRForm, "chbRPIR_RPHIS", true); SetControlEnabled(RPIRForm, "chbRPIR_RPOLD", true); SetControlEnabled(RPIRForm, "chbRPIR_RPOVR", true); // (RPIRForm.FindControl("chbRPIR_RPLIS") as WebControl).Enabled = true; // (RPIRForm.FindControl("chbRPIR_RPHIS") as WebControl).Enabled = true; // (RPIRForm.FindControl("chbRPIR_RPOLD") as WebControl).Enabled = true; // (RPIRForm.FindControl("chbRPIR_RPOVR") as WebControl).Enabled = true; SetControlEnabled(RPIRForm, "txtRPIR_RPSLY", false); // 薪資 SetControlEnabled(RPIRForm, "txtRPIR_RPAMT", "|加保|薪資調整|其他|".Contains(rpopt)); // 投保金額 SetControlEnabled(RPIRForm, "txtRPIR_RPAM2", "|加保|薪資調整|其他|".Contains(rpopt)); // 投保金額 SetControlEnabled(RPIRForm, "txtRPIR_RPAM3", "|加保|薪資調整|其他|".Contains(rpopt)); // 投保金額 SetControlEnabled(RPIRForm, "txtRPIR_RPSLA", "|加保|其他|".Contains(rpopt)); // 勞退自提 SetControlEnabled(RPIRForm, "ddlRPIR_RPPTP", "|加保|其他|".Contains(rpopt)); // 身份別 SetControlEnabled(RPIRForm, "ddlRPIR_RPNAT", "|加保|其他|".Contains(rpopt)); // 國籍別 SetControlEnabled(RPIRForm, "ddlRPIR_RPDIS", "|加保|其他|".Contains(rpopt)); // 勞保減免比例 SetControlEnabled(RPIRForm, "ddlRPIR_RPDIH", "|加保|其他|".Contains(rpopt)); // 健保減免比例 //(RPIRForm.FindControl("txtRPIR_RPSLY") as WebControl).Enabled = false; // 薪資 //(RPIRForm.FindControl("txtRPIR_RPAMT") as WebControl).Enabled = "|加保|薪資調整|其他|".Contains(rpopt); // 投保金額 //(RPIRForm.FindControl("txtRPIR_RPSLA") as WebControl).Enabled = "|加保|其他|".Contains(rpopt); // 勞退自提 //(RPIRForm.FindControl("ddlRPIR_RPPTP") as WebControl).Enabled = "|加保|其他|".Contains(rpopt); // 身份別 //(RPIRForm.FindControl("ddlRPIR_RPNAT") as WebControl).Enabled = "|加保|其他|".Contains(rpopt); // 國籍別 //(RPIRForm.FindControl("ddlRPIR_RPDIS") as WebControl).Enabled = "|加保|其他|".Contains(rpopt); // 勞保減免比例 //(RPIRForm.FindControl("ddlRPIR_RPDIH") as WebControl).Enabled = "|加保|其他|".Contains(rpopt); // 健保減免比例 SetControlEnabled(RPIRForm, "txtRPIR_RPFMY", false); // 眷口數 SetControlEnabled(RPIRForm, "txtRPIR_RPFM1", false); // 眷口數 SetControlEnabled(RPIRForm, "txtRPIR_RPFM2", false); // 眷口數 SetControlEnabled(RPIRForm, "txtRPIR_RPFM3", false); // 眷口數 // (RPIRForm.FindControl("txtRPIR_RPFMY") as WebControl).Enabled = "".Contains(rpopt); // 眷口數 // (RPIRForm.FindControl("txtRPIR_RPFM1") as WebControl).Enabled = "".Contains(rpopt); // 眷口數 // (RPIRForm.FindControl("txtRPIR_RPFM2") as WebControl).Enabled = "".Contains(rpopt); // 眷口數 // (RPIRForm.FindControl("txtRPIR_RPFM3") as WebControl).Enabled = "".Contains(rpopt); // 眷口數 } protected void RPIRGrid_RowDataBound(object sender, GridViewRowEventArgs e) { SetGridViewMouseBehavier(RPIRGrid, e.Row); //GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void RPIRGrid_SelectedIndexChanged(object sender, EventArgs e) { foreach (GridViewRow row in RPIRGrid.Rows) SetGridViewMouseBehavier(RPIRGrid, row); _RPREN = RPIRGrid.SelectedDataKey["RPREN"].ToString(); _RPITM = Convert.ToInt32(RPIRGrid.SelectedDataKey["RPITM"]); ViewState["RPREN"] = _RPREN; ParamList["RPRENB"] = _RPREN; ViewState["RPITM"] = _RPITM; } protected void RPIRForm_ItemDeleting(object sender, FormViewDeleteEventArgs e) { // 刪除前檢查 // TODO: 檢查關帳日 } protected override bool CheckInput(System.Collections.Specialized.IOrderedDictionary values) { cvMessage.ErrorMessage = ""; cvMessage.IsValid = true; bool result = true; if (string.IsNullOrEmpty(values["RPOPT"].ToString())) { result = false; cvMessage.ErrorMessage += "請選擇作業類別
"; cvMessage.IsValid = false; } values["RPSDT"] = CheckDate(values["RPSDT"], "請輸入正確的加保日期", ref result, cvMessage); values["RPXDT"] = CheckDate(values["RPXDT"], "請輸入正確的申請日期", ref result, cvMessage); if (values["RPEDT"].ToString() != "") { values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的退保日期", ref result, cvMessage); if (WDAC.GetDateTimeValue(values["RPSDT"]) > WDAC.GetDateTimeValue(values["RPEDT"])) { result = false; cvMessage.IsValid = false; cvMessage.ErrorMessage += "退保日期不可早於加保日期
"; } } if (values["RPBDT"].ToString() != "") values["RPBDT"] = CheckDate(values["RPBDT"], "請輸入正確的生效日期", ref result, cvMessage); // 公司別固定 TY values["RPCPY"] = "TY"; // 檢查加保眷屬資料 var rpfmd = Newtonsoft.Json.JsonConvert.DeserializeObject(values["RPFMD"].ToString()); if (rpfmd != null) { var rpfmdValid = rpfmd.FindAll(x => x.Valid); if (rpfmd.Count != rpfmdValid.Count) { result = false; (RPIRForm.FindControl("hfRPIR_RPFMD") as HiddenField).Value = Newtonsoft.Json.JsonConvert.SerializeObject(rpfmd); cvMessage.ErrorMessage += "眷屬資料有錯誤
"; cvMessage.IsValid = false; } values["RPFMD"] = Newtonsoft.Json.JsonConvert.SerializeObject(rpfmdValid); values["RPFMY"] = rpfmdValid.FindAll(x => x.DEDUCT == "0" && x.OnBoard).Count; values["RPFM1"] = rpfmdValid.FindAll(x => x.DEDUCT == "25" && x.OnBoard).Count; values["RPFM2"] = rpfmdValid.FindAll(x => x.DEDUCT == "50" && x.OnBoard).Count; values["RPFM3"] = rpfmdValid.FindAll(x => x.DEDUCT == "100" && x.OnBoard).Count; } // 異動時,退保日期與其他異動不可同時輸入 var RPEDTChanged = false; var OtherChanged = false; if (tableName == "RPIB" && RPIRForm.CurrentMode == FormViewMode.Insert || tableName == "RPIR" && RPIRForm.CurrentMode == FormViewMode.Edit) { // 比對上一筆(異動)資料與輸入資料 RpirDAC rpir = new RpirDAC(); DataTable rpibData = rpir.SelectRPIB(_RPREN, null, "RPITM ASC", true); DataRow rpibRow = null; if (RPIRForm.CurrentMode == FormViewMode.Insert && rpibData.Rows.Count > 0) { rpibRow = rpibData.Rows[rpibData.Rows.Count - 1]; } if (RPIRForm.CurrentMode == FormViewMode.Edit && rpibData.Rows.Count > 1) { rpibRow = rpibData.Rows[rpibData.Rows.Count - 2]; } if (rpibRow != null) { RPEDTChanged = rpibRow["RPEDT"].ToString() != values["RPEDT"].ToString(); OtherChanged = rpibRow["RPSDT"].ToString() != values["RPSDT"].ToString() || rpibRow["RPLIS"].ToString() != values["RPLIS"].ToString() || rpibRow["RPHIS"].ToString() != values["RPHIS"].ToString() || rpibRow["RPOLD"].ToString() != values["RPOLD"].ToString() || rpibRow["RPOVR"].ToString() != values["RPOVR"].ToString() || rpibRow["RPSLY"].ToString() != values["RPSLY"].ToString() || rpibRow["RPAMT"].ToString() != values["RPAMT"].ToString() || rpibRow["RPAM2"].ToString() != values["RPAM2"].ToString() || rpibRow["RPAM3"].ToString() != values["RPAM3"].ToString() || rpibRow["RPSLA"].ToString() != values["RPSLA"].ToString() || rpibRow["RPPTP"].ToString() != values["RPPTP"].ToString() || rpibRow["RPNAT"].ToString() != values["RPNAT"].ToString() || rpibRow["RPDIS"].ToString() != values["RPDIS"].ToString() || rpibRow["RPDIH"].ToString() != values["RPDIH"].ToString() || rpibRow["RPFMY"].ToString() != values["RPFMY"].ToString() || rpibRow["RPFM1"].ToString() != values["RPFM1"].ToString() || rpibRow["RPFM2"].ToString() != values["RPFM2"].ToString() || rpibRow["RPFM3"].ToString() != values["RPFM3"].ToString() // || rpibRow["RPCPY"].ToString() != values["RPCPY"].ToString() || rpibRow["RPFMD"].ToString() != values["RPFMD"].ToString(); } } if (RPEDTChanged && OtherChanged) { result = false; cvMessage.ErrorMessage += "退保日期異動與其他資料異動請分開輸入,不可在同一筆異動
"; cvMessage.IsValid = false; } ProcessCustomValidatorMessage(cvMessage); return result; } protected void RPIRForm_ItemInserting(object sender, FormViewInsertEventArgs e) { e.Values["RPDIS"] = (RPIRForm.FindControl("ddlRPIR_RPDIS") as DropDownList).SelectedValue; e.Values["RPNAT"] = (RPIRForm.FindControl("ddlRPIR_RPNAT") as DropDownList).SelectedValue; e.Values["RPPTP"] = (RPIRForm.FindControl("ddlRPIR_RPPTP") as DropDownList).SelectedValue; e.Cancel = !CheckInput(e.Values); } protected void RPIRForm_ItemUpdating(object sender, FormViewUpdateEventArgs e) { e.Cancel = !CheckInput(e.NewValues); } protected void cvNumber_ServerValidate(object source, ServerValidateEventArgs args) { int i = 0; args.IsValid = !string.IsNullOrEmpty(args.Value) && Int32.TryParse(args.Value, out i); if (!args.IsValid) return; var validator = (CustomValidator)source; var chbRPIR_RPLIS = (WCheckBox)validator.NamingContainer.FindControl("chbRPIR_RPLIS"); // 有勞保 var chbRPIR_RPHIS = (WCheckBox)validator.NamingContainer.FindControl("chbRPIR_RPHIS"); // 有健保 var chbRPIR_RPOLD = (WCheckBox)validator.NamingContainer.FindControl("chbRPIR_RPOLD"); // 已領老年給付 var chbRPIR_RPOVR = (WCheckBox)validator.NamingContainer.FindControl("chbRPIR_RPOVR"); // 超過65歲 bool isRPLIS = chbRPIR_RPLIS != null && chbRPIR_RPLIS.Value == "Y"; bool isRPHIS = chbRPIR_RPHIS != null && chbRPIR_RPHIS.Value == "Y"; bool isRPOLD = chbRPIR_RPOLD != null && chbRPIR_RPOLD.Value == "Y"; bool isRPOVR = chbRPIR_RPOVR != null && chbRPIR_RPOVR.Value == "Y"; switch (validator.ID) { case "cvRPSLY": // 薪資必須大於 0 args.IsValid = (i > 0); break; case "cvRPAMT": // 勞保投保級距必須大於 0 (有勞保) args.IsValid = (i > 0) || !isRPLIS; break; case "cvRPAM2": // 健保投保級距必須大於 0 (有健保) args.IsValid = (i > 0) || !isRPHIS; break; case "cvRPAM3": // 勞退投保級距必須大於 0 (未領老年給付 未超過65歲) args.IsValid = (i > 0) || (isRPOLD || isRPOVR); break; //case "cvRPFMY": // 眷口數必須大於等於 0 // args.IsValid = i >= 0; // break; case "cvRPSLA": // 勞退自提必須 0-6 (未領老年給付 未超過65歲) args.IsValid = (i >= 0 && i <= 6) || (isRPOLD || isRPOVR); break; } } protected void cvRPENO_ServerValidate(object source, ServerValidateEventArgs args) { if (bpsn == null) bpsn = new BPSN_DAC(WConfig.GetConnectionConfig(), WConfig.GetConnectionConfigName()); args.IsValid = args.Value != "" && bpsn.IsExist(args.Value, true); } protected void rblRPIR_RPOPT_SelectedIndexChanged(object sender, EventArgs e) { FormControl(); } protected void btnRPOPTSelectAll_Click(object sender, EventArgs e) { for (var i = 0; i < rblRPOPT.Items.Count; i++) { rblRPOPT.Items[i].Selected = true; } } protected void btnExport_Click(object sender, EventArgs e) { lbMessage.Visible = false; List messages = new List(); ParseSearchInput(); var rpopts = _RPOPT.Split(','); if (_RPXDT1.Ticks == 0 && _RPXDT2.Ticks == 0 && _RPBDT1.Ticks == 0 && _RPBDT2.Ticks == 0) { messages.Add("請輸入申請日期範圍或生效日期範圍"); } if (string.IsNullOrEmpty(_RPOPT)) { messages.Add("請選擇匯出作業類別"); } if (messages.Count > 0) { lbMessage.Text = string.Join("
", messages.ToArray()); lbMessage.Visible = true; return; } RpirDAC rpirDao = new RpirDAC(Query); DataTable rpirData = rpirDao.SelectPage(0, Int32.MaxValue, _RPENO, _BPNME, _RPXDT1, _RPXDT2, _RPOPT, _RPBDT1, _RPBDT2, null); if (rpirData.Rows.Count == 0) { lbMessage.Text = GetString("NOSRHCOND"); lbMessage.Visible = true; return; } HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.CreateSheet("報表") as HSSFSheet; sheet.ForceFormulaRecalculation = true; Excel excel = new Excel(); excel.WorkBook = workbook; excel.Sheet = sheet; int row = 0; int col = 0; string[] familyRpopts = { "加保", "眷屬加保", "退保", "眷屬退保" }; // 抬頭 excel.SetCellValue(row, col++, "作業類型"); excel.SetCellValue(row, col++, "單號"); excel.SetCellValue(row, col++, "申請人"); excel.SetCellValue(row, col++, "申請日期"); excel.SetCellValue(row, col++, "生效日期"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "姓名"); excel.SetCellValue(row, col++, "眷屬姓名"); excel.SetCellValue(row, col++, "身分證字號"); excel.SetCellValue(row, col++, "出生年月日"); excel.SetCellValue(row, col++, "加保日期"); excel.SetCellValue(row, col++, "退保日期"); excel.SetCellValue(row, col++, "薪資"); excel.SetCellValue(row, col++, "勞保級距"); excel.SetCellValue(row, col++, "健保級距"); excel.SetCellValue(row, col++, "勞退級距"); excel.SetCellValue(row, col++, "勞退自提"); excel.SetCellValue(row, col++, "加保狀況"); excel.SetCellValue(row, col++, "備註"); row++; // 內容 foreach (DataRow r in rpirData.Rows) { // 取出異動資料 DataTable rpibData = rpirDao.SelectRPIB(WDAC.GetStringValue(r["RPREN"])); foreach (DataRow br in rpibData.Rows) { var rpeno = WDAC.GetStringValue(br["RPENO"]); var bpnme = WDAC.GetStringValue(br["BPNME"]); var rpopt = WDAC.GetStringValue(br["RPOPT"]); var rpxdt = WDAC.GetDateTimeValue(br["RPXDT"]); var rpbdt = WDAC.GetDateTimeValue(br["RPBDT"]); var rpedt = WDAC.GetDateTimeValue(br["RPEDT"]); // 排除異動資料不在查詢範圍中 if (!string.IsNullOrEmpty(_RPENO) && !rpeno.StartsWith(_RPENO) || !string.IsNullOrEmpty(_BPNME) && !bpnme.StartsWith(_BPNME) || _RPXDT1.Ticks > 0 && _RPXDT2.Ticks > 0 && (rpxdt < _RPXDT1 || rpxdt > _RPXDT2) || _RPXDT1.Ticks > 0 && _RPXDT2.Ticks == 0 && rpxdt < _RPXDT1 || _RPXDT1.Ticks == 0 && _RPXDT2.Ticks > 0 && rpxdt > _RPXDT2 || rpopts.Length > 0 && Array.IndexOf(rpopts, rpopt) < 0 || _RPBDT1.Ticks > 0 && _RPBDT2.Ticks > 0 && (rpbdt < _RPBDT1 || rpxdt > _RPBDT2) || _RPBDT1.Ticks > 0 && _RPBDT2.Ticks == 0 && rpbdt < _RPBDT1 || _RPBDT1.Ticks == 0 && _RPBDT2.Ticks > 0 && rpbdt > _RPBDT2 ) { continue; } var trusr = !string.IsNullOrEmpty(br["TRUSR"].ToString()) ? GetLookup("BPSN", WDAC.GetStringValue(br["TRUSR"]), "BPNME") : ""; if (true /* || rpopt != "眷屬加保" && rpopt != "眷屬退保" */) { col = 0; excel.SetCellValue(row, col++, rpopt); excel.SetCellValue(row, col++, WDAC.GetStringValue(br["RPREN"])); excel.SetCellValue(row, col++, trusr); excel.SetCellValue(row, col++, rpxdt.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpxdt) : ""); excel.SetCellValue(row, col++, rpbdt.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpbdt) : ""); excel.SetCellValue(row, col++, rpeno); excel.SetCellValue(row, col++, bpnme); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, WDAC.GetStringValue(br["BPIDN"])); excel.SetCellValue(row, col++, br["BPBDY"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(br["BPBDY"])) : ""); excel.SetCellValue(row, col++, br["RPSDT"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(br["RPSDT"])) : ""); excel.SetCellValue(row, col++, br["RPEDT"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(br["RPEDT"])) : ""); excel.SetCellValue(row, col++, WDAC.GetInt32Value(br["RPSLY"])); excel.SetCellValue(row, col++, WDAC.GetInt32Value(br["RPAMT"])); excel.SetCellValue(row, col++, WDAC.GetInt32Value(br["RPAM2"])); excel.SetCellValue(row, col++, WDAC.GetInt32Value(br["RPAM3"])); excel.SetCellValue(row, col++, WDAC.GetInt32Value(br["RPSLA"])); // excel.SetCellValue(row, col++, rpedt.Ticks == 0 ? "加保" : "退保"); excel.SetCellValue(row, col++, string.Format("有勞保:{0} / 有健保:{1} / 已領老年給付:{2} / 超過65歲:{3}" , WDAC.GetStringValue(br["RPLIS"]) == "Y" ? "是" : "否" , WDAC.GetStringValue(br["RPHIS"]) == "Y" ? "是" : "否" , WDAC.GetStringValue(br["RPOLD"]) == "Y" ? "是" : "否" , WDAC.GetStringValue(br["RPOVR"]) == "Y" ? "是" : "否")); excel.SetCellValue(row, col++, WDAC.GetStringValue(br["RPDOC"])); row++; } // 眷屬 if (Array.IndexOf(familyRpopts, rpopt) < 0) { continue; } var rpfmd = Newtonsoft.Json.JsonConvert.DeserializeObject(br["RPFMD"].ToString()); var rpfmd_prev = Newtonsoft.Json.JsonConvert.DeserializeObject(br["RPFMD_PREV"].ToString()); if (rpfmd_prev == null) { rpfmd_prev = new RPFMDList(); } if (rpfmd != null) { foreach (var rpfmdItem in rpfmd) { var rpfmdRpopt = ""; DateTime rpfmdBirthday, rpfmdStartDate, rpfmdEndDate; WGuard1.CheckDate(rpfmdItem.BIRTHDAY, out rpfmdBirthday); WGuard1.CheckDate(rpfmdItem.START_DATE, out rpfmdStartDate); WGuard1.CheckDate(rpfmdItem.END_DATE, out rpfmdEndDate); if (rpfmd_prev.Find(x => rpfmdItem.Equals(x)) != null) { continue; } //switch (rpopt) //{ // case "加保": // case "眷屬加保": // rpfmdRpopt = "眷屬加保"; // if (rpfmd_prev != null && rpfmd_prev.Find(x => // string.Compare(x.NAME, rpfmdItem.NAME) == 0 // && string.Compare(x.BIRTHDAY, rpfmdItem.BIRTHDAY) == 0 // && string.Compare(x.IDNO, rpfmdItem.IDNO) == 0 // && string.Compare(x.START_DATE, rpfmdItem.START_DATE) == 0 // ) != null // && !string.IsNullOrEmpty(rpfmdItem.END_DATE)) // { // continue; // } // break; // case "退保": // case "眷屬退保": // rpfmdRpopt = "眷屬退保"; // if (rpfmd_prev != null && rpfmd_prev.Find(x => // string.Compare(x.NAME, rpfmdItem.NAME) == 0 // && string.Compare(x.BIRTHDAY, rpfmdItem.BIRTHDAY) == 0 // && string.Compare(x.IDNO, rpfmdItem.IDNO) == 0 // && string.Compare(x.START_DATE, rpfmdItem.START_DATE) == 0 // ) != null // && string.IsNullOrEmpty(rpfmdItem.END_DATE)) // { // continue; // } // break; //} col = 0; excel.SetCellValue(row, col++, rpfmdRpopt); excel.SetCellValue(row, col++, WDAC.GetStringValue(br["RPREN"])); excel.SetCellValue(row, col++, trusr); excel.SetCellValue(row, col++, rpxdt.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpxdt) : ""); excel.SetCellValue(row, col++, rpbdt.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpbdt) : ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, rpfmdItem.NAME); excel.SetCellValue(row, col++, rpfmdItem.IDNO); excel.SetCellValue(row, col++, rpfmdBirthday.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpfmdBirthday) : ""); excel.SetCellValue(row, col++, rpfmdStartDate.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpfmdStartDate) : ""); excel.SetCellValue(row, col++, rpfmdEndDate.Ticks > 0 ? string.Format("{0:yyyy/MM/dd}", rpfmdEndDate) : ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, ""); excel.SetCellValue(row, col++, rpfmdEndDate.Ticks == 0 ? "健保加保" : "健保退保"); excel.SetCellValue(row, col++, ""); row++; } } } } // 設定欄寬 col = 0; excel.SetColumnWidth(col++, 10); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 54); excel.SetColumnWidth(col++, 50); MemoryStream ms = new MemoryStream(); workbook.Write(ms); ResponseWriteFile(ms, String.Format("作業類別清單_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); } /// /// 匯出勞健保投退保異常清單 /// /// /// protected void btnExportAbnormal_Click(object sender, EventArgs e) { lbMessage.Visible = false; List messages = new List(); ParseSearchInput(); if (_RPXDT1.Ticks == 0 || _RPXDT2.Ticks == 0) { messages.Add("請輸入匯出日期範圍"); } if (messages.Count > 0) { lbMessage.Text = string.Join("
", messages.ToArray()); lbMessage.Visible = true; return; } var result = new DataTable(); result.Columns.Add("ABNORMAL_TYPE", typeof(string)); result.Columns.Add("BPENO", typeof(string)); result.Columns.Add("BPNME", typeof(string)); result.Columns.Add("BPSDY", typeof(DateTime)); result.Columns.Add("BPEDY", typeof(DateTime)); result.Columns.Add("RPSDT", typeof(DateTime)); result.Columns.Add("RPEDT", typeof(DateTime)); var cmdSource = Query.NewCommand(); var cmdCheck = Query.NewCommand(); #region 取資料 // 1. 檢查到職未加保 cmdSource.CommandText = @"SELECT BPENO, BPNME, BPSDY FROM BPSNView WHERE BPSDY BETWEEN @DATE1 AND @DATE2 ORDER BY BPENO"; Query.AddParam(cmdSource, "DATE1", _RPXDT1); Query.AddParam(cmdSource, "DATE2", _RPXDT2); foreach (DataRow r in Query.Select(cmdSource).Rows) { cmdCheck.CommandText = @"SELECT RPREN, RPSDT FROM RPIR WHERE RPENO = @RPENO AND RPSDT = @RPSDT UNION SELECT RPREN, RPSDT FROM RPIB WHERE RPENO = @RPENO AND RPSDT = @RPSDT"; Query.AddParam(cmdCheck, "RPENO", r["BPENO"]); Query.AddParam(cmdCheck, "RPSDT", r["BPSDY"]); if (Query.Select(cmdCheck).Rows.Count == 0) { result.Rows.Add("到職未加保", r["BPENO"], r["BPNME"], r["BPSDY"], DBNull.Value, DBNull.Value, DBNull.Value); } } // 2. 檢查離職未退保 cmdSource.CommandText = @"SELECT BPENO, BPNME, BPEDY FROM BPSNView WHERE BPEDY BETWEEN @DATE1 AND @DATE2 ORDER BY BPENO"; cmdSource.Parameters.Clear(); Query.AddParam(cmdSource, "DATE1", _RPXDT1); Query.AddParam(cmdSource, "DATE2", _RPXDT2); foreach (DataRow r in Query.Select(cmdSource).Rows) { cmdCheck.CommandText = @"SELECT RPREN, RPEDT FROM RPIR WHERE RPENO = @RPENO AND RPEDT = @RPEDT UNION SELECT RPREN, RPEDT FROM RPIB WHERE RPENO = @RPENO AND RPEDT = @RPEDT"; Query.AddParam(cmdCheck, "RPENO", r["BPENO"]); Query.AddParam(cmdCheck, "RPEDT", r["BPEDY"]); if (Query.Select(cmdCheck).Rows.Count == 0) { result.Rows.Add("離職未退保", r["BPENO"], r["BPNME"], DBNull.Value, r["BPEDY"], DBNull.Value, DBNull.Value); } } // 3. 檢查加保未到職 cmdSource.CommandText = @"SELECT DISTINCT * FROM ( SELECT RPENO, BPNME, RPSDT FROM RPIR JOIN BPSNView ON RPENO=BPENO WHERE RPSDT BETWEEN @DATE1 AND @DATE2 UNION SELECT RPENO, BPNME, RPSDT FROM RPIB JOIN BPSNView ON RPENO=BPENO WHERE RPSDT BETWEEN @DATE1 AND @DATE2 ) T ORDER BY RPENO"; cmdSource.Parameters.Clear(); Query.AddParam(cmdSource, "DATE1", _RPXDT1); Query.AddParam(cmdSource, "DATE2", _RPXDT2); foreach (DataRow r in Query.Select(cmdSource).Rows) { cmdCheck.CommandText = @"SELECT BPENO, BPEDY FROM BPSNView WHERE BPENO = @BPENO AND BPSDY = @BPSDY"; Query.AddParam(cmdCheck, "BPENO", r["RPENO"]); Query.AddParam(cmdCheck, "BPSDY", r["RPSDT"]); if (Query.Select(cmdCheck).Rows.Count == 0) { result.Rows.Add("加保未到職", r["RPENO"], r["BPNME"], DBNull.Value, DBNull.Value, r["RPSDT"], DBNull.Value); } } // 4. 檢查退保未離職 cmdSource.CommandText = @"SELECT DISTINCT * FROM ( SELECT RPENO, BPNME, RPEDT FROM RPIR JOIN BPSNView ON RPENO=BPENO WHERE RPEDT BETWEEN @DATE1 AND @DATE2 UNION SELECT RPENO, BPNME, RPEDT FROM RPIB JOIN BPSNView ON RPENO=BPENO WHERE RPEDT BETWEEN @DATE1 AND @DATE2 ) T ORDER BY RPENO"; cmdSource.Parameters.Clear(); Query.AddParam(cmdSource, "DATE1", _RPXDT1); Query.AddParam(cmdSource, "DATE2", _RPXDT2); foreach (DataRow r in Query.Select(cmdSource).Rows) { cmdCheck.CommandText = @"SELECT BPENO, BPEDY FROM BPSNView WHERE BPENO = @BPENO AND BPEDY = @BPEDY"; Query.AddParam(cmdCheck, "BPENO", r["RPENO"]); Query.AddParam(cmdCheck, "BPEDY", r["RPEDT"]); if (Query.Select(cmdCheck).Rows.Count == 0) { result.Rows.Add("退保未離職", r["RPENO"], r["BPNME"], DBNull.Value, DBNull.Value, DBNull.Value, r["RPEDT"]); } } if (result.Rows.Count == 0) { lbMessage.Text = "查詢日期區間內無投退保異常資料"; lbMessage.Visible = true; return; } #endregion 取資料 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.CreateSheet("報表") as HSSFSheet; sheet.ForceFormulaRecalculation = true; Excel excel = new Excel(); excel.WorkBook = workbook; excel.Sheet = sheet; int row = 0; int col = 0; // 抬頭 excel.SetCellValue(row, col++, "異常類型"); excel.SetCellValue(row, col++, "人員編號"); excel.SetCellValue(row, col++, "人員姓名"); excel.SetCellValue(row, col++, "到職日期"); excel.SetCellValue(row, col++, "離職日期"); excel.SetCellValue(row, col++, "加保日期"); excel.SetCellValue(row, col++, "退保日期"); row++; // 內容 foreach (DataRow r in result.Rows) { col = 0; excel.SetCellValue(row, col++, WDAC.GetStringValue(r["ABNORMAL_TYPE"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["BPENO"])); excel.SetCellValue(row, col++, WDAC.GetStringValue(r["BPNME"])); excel.SetCellValue(row, col++, r["BPSDY"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(r["BPSDY"])) : ""); excel.SetCellValue(row, col++, r["BPEDY"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(r["BPEDY"])) : ""); excel.SetCellValue(row, col++, r["RPSDT"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(r["RPSDT"])) : ""); excel.SetCellValue(row, col++, r["RPEDT"] != DBNull.Value ? string.Format("{0:yyyy/MM/dd}", WDAC.GetDateTimeValue(r["RPEDT"])) : ""); row++; } // 設定欄寬 col = 0; excel.SetColumnWidth(col++, 20); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); excel.SetColumnWidth(col++, 12); MemoryStream ms = new MemoryStream(); workbook.Write(ms); ResponseWriteFile(ms, String.Format("投退保異常清單_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8))); } protected void btnReturnBPSN_Click(object sender, EventArgs e) { DoAfterCommand("BPSN"); } } public class RPFMDItem { public string NAME; public string BIRTHDAY; public string IDNO; public string RELATIONSHIP; public string DEDUCT; public string START_DATE; public string END_DATE; public string Message; private DateTime rpfmdBirthday, rpfmdStartDate, rpfmdEndDate; public bool Valid { get { if (!string.IsNullOrEmpty(NAME)) { NAME = NAME.Trim(); } if (!string.IsNullOrEmpty(BIRTHDAY)) { BIRTHDAY = BIRTHDAY.Trim(); } if (!string.IsNullOrEmpty(IDNO)) { IDNO = IDNO.ToUpper().Trim(); } if (!string.IsNullOrEmpty(START_DATE)) { START_DATE = START_DATE.Trim(); } if (!string.IsNullOrEmpty(END_DATE)) { END_DATE = END_DATE.Trim(); } var messages = new List(); var valid = true; WGuard1.CheckDate(BIRTHDAY, out rpfmdBirthday); WGuard1.CheckDate(START_DATE, out rpfmdStartDate); WGuard1.CheckDate(END_DATE, out rpfmdEndDate); if (string.IsNullOrEmpty(NAME)) { valid = false; messages.Add("姓名未輸入"); } if (string.IsNullOrEmpty(BIRTHDAY)) { valid = false; messages.Add("出生年月日未輸入"); } if (!string.IsNullOrEmpty(BIRTHDAY) && rpfmdBirthday.Ticks == 0) { valid = false; messages.Add("出生年月日不正確"); } if (string.IsNullOrEmpty(IDNO)) { valid = false; messages.Add("身份證字號未輸入"); } if (!string.IsNullOrEmpty(IDNO) && WGuard1.WCheckIdCardNumber(IDNO) != 0) { valid = false; messages.Add("身份證字號不正確"); } if (string.IsNullOrEmpty(RELATIONSHIP)) { valid = false; messages.Add("關係未選擇"); } if (string.IsNullOrEmpty(DEDUCT)) { valid = false; messages.Add("減免比例未選擇"); } if (string.IsNullOrEmpty(START_DATE)) { valid = false; messages.Add("加保日期未輸入"); } if (!string.IsNullOrEmpty(START_DATE) && rpfmdStartDate.Ticks == 0) { valid = false; messages.Add("加保日期不正確"); } if (!string.IsNullOrEmpty(END_DATE) && rpfmdEndDate.Ticks == 0) { valid = false; messages.Add("退保日期不正確"); } if (rpfmdStartDate.Ticks > 0 && rpfmdEndDate.Ticks > 0 && rpfmdStartDate.Ticks > rpfmdEndDate.Ticks) { valid = false; messages.Add("退保日期不可先於加保日期"); } Message = string.Join(" / ", messages.ToArray()); return valid; } } public bool OnBoard { get { return string.IsNullOrEmpty(END_DATE); } } public bool Equals(RPFMDItem obj) { return obj != null && NAME == obj.NAME && BIRTHDAY == obj.BIRTHDAY && IDNO == obj.IDNO && RELATIONSHIP == obj.RELATIONSHIP && DEDUCT == obj.DEDUCT && START_DATE == obj.START_DATE && END_DATE == obj.END_DATE; } } public class RPFMDList : List { }