467 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			467 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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;
 | |
| 
 | |
|         public bool IsAdmin { get { return curLevel >= 5; } }
 | |
|         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 = IsAdmin;// curLevel >= 5;
 | |
|                 grpAdmin.Enabled = false;
 | |
|                 grpAdmin.Text = "관리자(추가작업시에는 사용할 수 없습니다)";
 | |
|                 UpdateStatus();
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 cmbUser.Enabled = false;
 | |
|                 grpAdmin.Enabled = IsAdmin;// curLevel >= 5;
 | |
|                 if (IsAdmin)
 | |
|                 {
 | |
|                     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;
 | |
|             }
 | |
| 
 | |
|             if (IsAdmin)
 | |
|             {
 | |
|                 tbCate.DropDownStyle = ComboBoxStyle.DropDown;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 tbCate.DropDownStyle = ComboBoxStyle.DropDownList;
 | |
|             }
 | |
| 
 | |
| 
 | |
| 
 | |
|             binit = true;
 | |
| 
 | |
|             cmbUser_SelectedIndexChanged(null, null);
 | |
|         }
 | |
| 
 | |
|         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;
 | |
|             }
 | |
| 
 | |
|             //일반사용인데 내용이 대체 라는 문자라면 오류로 한다  220627
 | |
|             if (radTime.Checked == false && cate.Equals("대체"))
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("일반 휴가 사용에 '대체' 문자는 입력할 수 없습니다\n대체 시간을 사용하는 경우 라면 '대체시간사용'을 입력하세요");
 | |
|                 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 && curLevel < 5)
 | |
|             {
 | |
|                 var dlg = FCOMMON.Util.MsgQ("사용 일/시간 값을 입력해주세요\n대체휴가에는 시간을 입력하세요\n값을 입력하지 않고 계속할까요?");
 | |
|                 if (dlg != DialogResult.Yes) return;
 | |
|             }
 | |
| 
 | |
| 
 | |
| 
 | |
|             var uid = this.cmbUser.SelectedValue;
 | |
|             if (uid == null)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("사용자가 선택되지 않았습니다");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             //사용시간여부 확인
 | |
|             var minmsg = "해당 항목 [{0}]의 신청 가능 일(시간)이 없습니다\n\n남은 일(시간) : {1} \n\n관리자 문의 하세요";
 | |
|             if(IsAdmin)
 | |
|                 minmsg = "해당 항목 [{0}]의 신청 가능 일(시간)이 없습니다\n\n남은 일(시간) : {1} \n\n관리자 권한으로 기록은 진행 됩니다";
 | |
| 
 | |
|             bool oktime = false;
 | |
|             if (radTime.Checked)    //대체사용
 | |
|             {
 | |
|                 minmsg = minmsg.Replace("{0}", "대체");
 | |
|                 if (holydata.ContainsKey("대체"))
 | |
|                 {
 | |
|                     var data = holydata["대체"].Split('|');
 | |
|                     var 발생 = float.Parse(data[3]);
 | |
|                     var 사용 = float.Parse(data[4]);
 | |
|                     var 잔량 = float.Parse(data[5]);
 | |
|                     if (vTime <= 잔량) oktime = true;
 | |
|                     else minmsg = minmsg.Replace("{1}", 잔량.ToString());
 | |
|                 }
 | |
|                 else minmsg = minmsg.Replace("{1}", "(자료없음)");
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 var 항목 = tbCate.Text;
 | |
|                 minmsg = minmsg.Replace("{0}", 항목);
 | |
|                 if (holydata.ContainsKey(항목))
 | |
|                 {
 | |
|                     var data = holydata[항목].Split('|');
 | |
|                     var 발생 = float.Parse(data[0]);
 | |
|                     var 사용 = float.Parse(data[1]);
 | |
|                     var 잔량 = float.Parse(data[2]);
 | |
|                     if (vDay <= 잔량) oktime = true;
 | |
|                     else minmsg = minmsg.Replace("{1}", 잔량.ToString());
 | |
|                 }
 | |
|                 else minmsg = minmsg.Replace("{1}", "(자료없음)");
 | |
|             }
 | |
|             if (oktime == false)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE(minmsg);
 | |
|                 if (IsAdmin == false) return;
 | |
|             }
 | |
| 
 | |
|             //   return;
 | |
| 
 | |
|             //하나도 입력안했다면 경고한다
 | |
|             if (String.IsNullOrEmpty(tbReason.Text) && String.IsNullOrEmpty(tbLocation.Text) && String.IsNullOrEmpty(tbBackup.Text) && String.IsNullOrEmpty(tbRemark.Text))
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("비고를 입력해주세요");
 | |
|                 tbRemark.Focus();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (tbRemark.Text.StartsWith("테스트") && chkSendMail.Checked)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgI("테스트라 메일 체크를 끕니다");
 | |
|                 chkSendMail.Checked = false;
 | |
|             }
 | |
| 
 | |
|             //동일날짜에 등록된 자료가있다면 오류로 처리한다.
 | |
|             if (dr.RowState == DataRowState.Detached)
 | |
|             {
 | |
|                 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;
 | |
|                 }
 | |
| 
 | |
|             }
 | |
| 
 | |
| 
 | |
|             //마감확인  220501
 | |
|             if (FCOMMON.DBM.GetMagamStatus(tbSD.Value))
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("마감된 월 입니다. 입력할 수 없습니다");
 | |
|                 return;
 | |
|             }
 | |
|             if (FCOMMON.DBM.GetMagamStatus(tbED.Value))
 | |
|             {
 | |
|                 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.RowState == DataRowState.Detached && 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)
 | |
|         {
 | |
| 
 | |
|         }
 | |
| 
 | |
|         Dictionary<string, string> holydata = new Dictionary<string, string>();
 | |
| 
 | |
|         string updateuserinfo = string.Empty;
 | |
|         private void cmbUser_SelectedIndexChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             var uiddt = this.cmbUser.SelectedValue;
 | |
|             if (uiddt == null) return;
 | |
|             var uid = uiddt.ToString();
 | |
|             if (uid.isEmpty()) return;
 | |
| 
 | |
| 
 | |
|             holydata = FCOMMON.DBM.GetUserHolidayJan(FCOMMON.info.Login.gcode, uid, DateTime.Now.AddDays(-1).ToShortDateString());
 | |
| 
 | |
|             this.richTextBox1.Clear();
 | |
|             foreach (var item in holydata)
 | |
|             {
 | |
|                 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}%사용)");
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|             if (holydata.Any())
 | |
|                 updateuserinfo = uid; //업데이트한 사용자 id 기록
 | |
|         }
 | |
|     }
 | |
| }
 | 
