using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FPJ0000.OtConfirm { public partial class fHolyRequestAdd : Form { DSKuntae.EETGW_HolydayRequestRow dr; Boolean binit = false; public fHolyRequestAdd(DSKuntae.EETGW_HolydayRequestRow dr_) { InitializeComponent(); dr = dr_; var 구분목록 = FCOMMON.DBM.getCodeList("50"); var 사유목록 = FCOMMON.DBM.getCodeList("51"); var 위치목록 = FCOMMON.DBM.getCodeList("52"); var 백업목록 = FCOMMON.DBM.getCodeList("53"); tbCate.Items.Clear(); tbReason.Items.Clear(); tbLocation.Items.Clear(); tbBackup.Items.Clear(); foreach (var item in 구분목록) tbCate.Items.Add(item.Value); foreach (var item in 사유목록) tbReason.Items.Add(item.Value); foreach (var item in 위치목록) tbLocation.Items.Add(item.Value); foreach (var item in 백업목록) tbBackup.Items.Add(item.Value); var userlist = FCOMMON.DBM.getUserTable(); this.cmbUser.DataSource = userlist; this.cmbUser.ValueMember = "id"; this.cmbUser.DisplayMember = "dispname"; if (dr.RowState == DataRowState.Detached) { this.Text = "휴가신청 추가"; cmbUser.Text = $"{FCOMMON.info.Login.nameK}({FCOMMON.info.Login.no})"; //tbProcess.Text = FCOMMON.info.Login.process; //tbTel.Text = FCOMMON.info.Login.tel; } else { this.Text = "휴가신청 편집"; cmbUser.Text = $"{dr.name}({dr.uid})"; //dr.name; ////.Text = dr.processs; // tbTel.Text = dr.tel; } if (dr.conf == 1) rad1.Checked = true; else if (dr.conf == 2) rad2.Checked = true; else rad0.Checked = true; tbCate.Text = dr.cate; tbRemark.Text = dr.Remark; tbResponse.Text = dr.Response; tbSD.Value = DateTime.Parse(dr.sdate); tbED.Value = DateTime.Parse(dr.edate); tbReason.Text = dr.HolyReason; tbLocation.Text = dr.HolyLocation; tbBackup.Text = dr.HolyBackup; tbDays.Text = dr.HolyDays.ToString(); //211224 tbTimes.Text = dr.HolyTimes.ToString(); if (dr.cate == "대체") { tbTimes.Enabled = true; tbDays.Enabled = false; tbCate.Enabled = false; radTime.Checked = true; } else { tbCate.Enabled = true; tbTimes.Enabled = false; tbDays.Enabled = true; radioButton2.Checked = true; } } int curLevel = 0; private void fHolyRequestAdd_Load(object sender, EventArgs e) { curLevel = Math.Max(FCOMMON.info.Login.level, FCOMMON.DBM.getAuth(FCOMMON.DBM.eAuthType.holyreq)); //관리자라면 관리자패널을 활성해준다. if (dr.RowState == DataRowState.Detached) { cmbUser.Enabled = curLevel >= 5; grpAdmin.Enabled = false; grpAdmin.Text = "관리자(추가작업시에는 사용할 수 없습니다)"; UpdateStatus(); } else { cmbUser.Enabled = false; grpAdmin.Enabled = curLevel >= 5; if (curLevel >= 5) { grpUser.Text = "신청자(편집상태에서는 사용자를 변경할 수 없습니다)"; } var 관리자사전멘트 = FCOMMON.DBM.getCodeList("54"); cmbPreset.Items.Clear(); cmbPreset.Items.Add(" -- 저장된 문구를 선택하세요(공용:54) --"); cmbPreset.Items.AddRange(관리자사전멘트.Select(t => t.Value).ToArray()); cmbPreset.SelectedIndex = 0; } binit = true; } private void button1_Click(object sender, EventArgs e) { var cate = tbCate.Text.Trim(); if (radTime.Checked) cate = "대체"; var remark = tbRemark.Text.Trim(); var response = tbResponse.Text.Trim(); if (string.IsNullOrEmpty(cate)) { FCOMMON.Util.MsgE("구분을 입력하세요"); tbCate.Focus(); return; } if (tbED.Value.ToShortDateString().CompareTo(tbSD.Value.ToShortDateString()) < 0) { FCOMMON.Util.MsgE("시작일~종료일 범위를 확인하세요"); return; } var vDay = 0; var vTime = 0f; if (tbDays.Enabled == false) tbDays.Text = string.Empty; if (tbTimes.Enabled == false) tbTimes.Text = string.Empty; if (double.TryParse(tbDays.Text, out double val_days)) vDay = int.Parse(tbDays.Text.Trim()); if (double.TryParse(tbTimes.Text, out double val_times)) vTime = float.Parse(tbTimes.Text.Trim()); //라디오버튼에 따른 시간 값 할당 if (radTime.Checked) vDay = 0; else vTime = 0; if (vDay > 0 && vTime > 0) { FCOMMON.Util.MsgE("사용일/시간을 동시에 입력할 수는 없습니다.\r\n" + "대체휴가의 경우에만 시간을 입력하시기 바랍니다"); return; } if (vDay < 1 && vTime < 0.1) { FCOMMON.Util.MsgE("사용 일/시간 값을 입력해주세요\n대체휴가에는 시간을 입력하세요"); return; } //하나도 입력안했다면 경고한다 if (String.IsNullOrEmpty(tbReason.Text) && String.IsNullOrEmpty(tbLocation.Text) && String.IsNullOrEmpty(tbBackup.Text) && String.IsNullOrEmpty(tbRemark.Text)) { FCOMMON.Util.MsgE("비고를 입력해주세요"); tbRemark.Focus(); return; } var uid = this.cmbUser.SelectedValue; if (uid == null) { FCOMMON.Util.MsgE("사용자가 선택되지 않았습니다"); return; } if (tbRemark.Text.StartsWith("테스트") && chkSendMail.Checked) { FCOMMON.Util.MsgI("테스트라 메일 체크를 끕니다"); chkSendMail.Checked = false; } //동일날짜에 등록된 자료가있다면 오류로 처리한다. var db = new EEEntities(); string chkdt = tbSD.Value.ToShortDateString(); var existdb = db.EETGW_HolydayRequest.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.uid == uid.ToString() && t.sdate == chkdt).Any(); if(existdb) { FCOMMON.Util.MsgE("동일 날짜에 등록된 자료가 있습니다"); return ; } if (dr.RowState == DataRowState.Detached) { var dlg = FCOMMON.Util.MsgQ("입력을 완료하시겠습니까?\r\n관리자에게 메일로 알림이 발생 합니다"); if (dlg != DialogResult.Yes) return; } if (curLevel >= 5 && rad2.Checked) { if (string.IsNullOrEmpty(response)) { FCOMMON.Util.MsgE("거절 사유를 입력 해주세요"); tbResponse.Focus(); return; } } dr.uid = uid.ToString(); dr.HolyReason = tbReason.Text.Trim(); dr.HolyLocation = tbLocation.Text.Trim(); dr.HolyBackup = tbBackup.Text.Trim(); dr.cate = cate;// tbCate.Text.Trim(); if (dr.Remark.Contains(richTextBox1.Text) == false) dr.Remark = tbRemark.Text.Trim() + "\r\n" + this.richTextBox1.Text; else dr.Remark = tbRemark.Text.Trim(); dr.Response = tbResponse.Text.Trim(); dr.sdate = tbSD.Value.ToShortDateString(); dr.edate = tbED.Value.ToShortDateString(); dr.sendmail = chkSendMail.Checked; //220104 dr.HolyDays = vDay; dr.HolyTimes = vTime;// if (rad0.Checked) dr.conf = 0; else if (rad1.Checked) dr.conf = 1; else if (rad2.Checked) dr.conf = 2; else dr.conf = 0; dr.EndEdit(); DialogResult = DialogResult.OK; } private void cmbPreset_SelectedIndexChanged(object sender, EventArgs e) { if (cmbPreset.SelectedIndex > 0) tbResponse.Text = cmbPreset.Text; } private void tbED_ValueChanged(object sender, EventArgs e) { UpdateStatus(); } void UpdateStatus() { //해당 값이 오늘보다 이전이라면 메일전송을 자동 해제하낟. var v = tbED.Value.ToShortDateString(); var s = tbSD.Value.ToShortDateString(); var c = DateTime.Now.ToShortDateString(); if (v.CompareTo(c) < 0) chkSendMail.Checked = false; else chkSendMail.Checked = true; //일수계산 var term = tbED.Value - tbSD.Value; var days = term.Days + 1; if (radTime.Checked == false) { //if(tbDays.Text.isEmpty() || tbDays.Text=="0") { tbDays.Text = (days).ToString(); } } else { //여기는 시간 //if (tbTimes.Text.isEmpty() || tbTimes.Text == "0") { tbTimes.Text = (days * 8).ToString(); } } } private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radTime.Checked) { tbCate.Enabled = false; tbDays.Enabled = false; tbTimes.Enabled = true; tbDays.BackColor = Color.DimGray; tbTimes.BackColor = Color.Gold; groupBox1.Text = "사용시간"; } else { tbCate.Enabled = true; tbDays.Enabled = true; tbTimes.Enabled = false; tbTimes.BackColor = Color.DimGray; tbDays.BackColor = Color.Gold; groupBox1.Text = "사용일"; } if (binit) UpdateStatus(); } private void label11_Click(object sender, EventArgs e) { } private void tbDays_TextChanged(object sender, EventArgs e) { } private void grpUser_Enter(object sender, EventArgs e) { } private void tbLocation_SelectedIndexChanged(object sender, EventArgs e) { } private void tbReason_SelectedIndexChanged(object sender, EventArgs e) { } private void label9_Click(object sender, EventArgs e) { } private void cmbUser_SelectedIndexChanged(object sender, EventArgs e) { var uiddt = this.cmbUser.SelectedValue; if (uiddt == null) return; var uid = uiddt.ToString(); var lst = FCOMMON.DBM.GetUserHolidayJan(FCOMMON.info.Login.gcode, uid, DateTime.Now.AddDays(-1).ToShortDateString()); this.richTextBox1.Clear(); foreach (var item in lst) { var val = item.Value.Split('|'); if (val[2] != "0") { var perc = 0f; if (val[0] != "0") perc = float.Parse(val[1]) / float.Parse(val[0]); if (richTextBox1.TextLength > 0) richTextBox1.AppendText(","); richTextBox1.AppendText($"[{item.Key}] {val[2]}일 남음({perc * 100:N1}%사용)"); } else if (val[5] != "0") { var perc = 0f; if (val[3] != "0") perc = float.Parse(val[4]) / float.Parse(val[3]); if (richTextBox1.TextLength > 0) richTextBox1.AppendText(","); richTextBox1.AppendText($"[{item.Key}] {val[5]}시간 남음({perc * 100:N1}%사용)"); } } } } }