932 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			932 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using FCOMMON;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.ComponentModel.DataAnnotations;
 | |
| using System.Data;
 | |
| using System.Drawing;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace FPJ0000.JobReport_
 | |
| {
 | |
|     public partial class fJobReport_Add : fBase
 | |
|     {
 | |
|         dsPRJ.JobReportRow dr;
 | |
|         Boolean copyMOde = false;
 | |
|         Boolean bInit = false;
 | |
|         bool ReadMode = false;
 | |
|         public fJobReport_Add(dsPRJ.JobReportRow dr_, Boolean copy = false, Boolean read = false)
 | |
|         {
 | |
|             InitializeComponent();
 | |
|             dr = dr_;
 | |
|             ReadMode = read;
 | |
|             this.KeyPreview = true;
 | |
|             this.StartPosition = FormStartPosition.CenterScreen;
 | |
|             this.KeyDown += (s1, e1) =>
 | |
|             {
 | |
|                 if (e1.KeyCode == Keys.Escape) this.Close();
 | |
|             };
 | |
| 
 | |
|             foreach (Control ctl in this.panel1.Controls)
 | |
|             {
 | |
|                 if (ctl.GetType() == typeof(TextBox) || ctl.GetType() == typeof(ComboBox))
 | |
|                 {
 | |
|                     ctl.KeyDown += ctl_KeyDown;
 | |
|                 }
 | |
|             }
 | |
|             copyMOde = copy;
 | |
|             this.tbProject.SelectedIndexChanged += tbProject_SelectedIndexChanged;
 | |
|             this.grpkisul.Visible = getKisulInput;
 | |
|         }
 | |
| 
 | |
|         void tbProject_SelectedIndexChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (bInit == false || this.tbProject.SelectedIndex < 0) return;
 | |
|             var data = this.tbProject.SelectedValue;
 | |
|             if (data == null) return;
 | |
|             if (data.GetType() == typeof(DataRowView))
 | |
|             {
 | |
|                 var drv = data as DataRowView;
 | |
|                 var idx = int.Parse(drv["Code"].ToString());
 | |
|                 tbProjectIndex.Text = idx.ToString();
 | |
|                 tbProject.Tag = tbProject.Text;
 | |
|                 Console.WriteLine(string.Format("Project Select #1 {0}:{1}", idx, tbProject.Text));
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 var idx = int.Parse(data.ToString());
 | |
|                 tbProjectIndex.Text = idx.ToString();
 | |
|                 tbProject.Tag = tbProject.Text;
 | |
|                 Console.WriteLine(string.Format("Project Select #2 {0}:{1}", idx, tbProject.Text));
 | |
|             }
 | |
| 
 | |
|         }
 | |
|         private bool getKisulInput
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return FCOMMON.Util.getBit(
 | |
|                 FCOMMON.info.Login.gpermission,
 | |
|                 (int)FCOMMON.eGroupPermission.jobreport_kisul);
 | |
|             }
 | |
|         }
 | |
|         private void fJobReport_Add_Load(object sender, EventArgs e)
 | |
|         {
 | |
|             EnsureVisibleAndUsableSize();
 | |
|             //사용자목록
 | |
|             this.bs.DataSource = dr;
 | |
|             this.dateTimePicker1.CustomFormat = "yyyy-MM-dd HH:mm.ss";
 | |
|             this.dateTimePicker2.CustomFormat = "yyyy-MM-dd HH:mm.ss";
 | |
| 
 | |
|             //해당 사용자에 걸린 프로젝트 목록 가져오기
 | |
|             var userProject = FCOMMON.DBM.getUserProjectList(FCOMMON.info.Login.nameK);
 | |
|             this.tbProject.DataSource = userProject;
 | |
|             this.tbProject.ValueMember = "Code";
 | |
|             this.tbProject.DisplayMember = "NameOnly";
 | |
| 
 | |
|             //상태
 | |
|             var stateList = FCOMMON.DBM.getCodeTable("12");
 | |
|             this.cmbState.DisplayMember = "Value";
 | |
|             this.cmbState.ValueMember = "Value";
 | |
|             this.cmbState.DataSource = stateList;
 | |
|             this.cmbState.Text = dr.status;
 | |
| 
 | |
|             //요청부서
 | |
|             var dt_request = FCOMMON.DBM.getCodeTable("13");
 | |
|             this.cmbRequest.DisplayMember = "Value";
 | |
|             this.cmbRequest.ValueMember = "Value";
 | |
|             this.cmbRequest.DataSource = dt_request;
 | |
| 
 | |
|             //패키지
 | |
|             var dt_package = FCOMMON.DBM.getCodeTable("14");
 | |
|             this.cmbPackage.DisplayMember = "Value";
 | |
|             this.cmbPackage.ValueMember = "Value";
 | |
|             this.cmbPackage.DataSource = dt_package;
 | |
| 
 | |
|             //업무형태
 | |
|             var dt_type = FCOMMON.DBM.getCodeTable("15", "code,memo,svalue");
 | |
|             this.cmbType.DisplayMember = "Value";
 | |
|             this.cmbType.ValueMember = "Value";
 | |
|             this.cmbType.DataSource = dt_type;
 | |
| 
 | |
|             //업무분류
 | |
|             var dt_process = FCOMMON.DBM.getCodeTable("16", "code,memo,svalue");
 | |
|             this.cmbProcess.DisplayMember = "Value";
 | |
|             this.cmbProcess.ValueMember = "Value";
 | |
|             this.cmbProcess.DataSource = dt_process;
 | |
| 
 | |
|             if (getKisulInput)
 | |
|             {
 | |
|                 //기술분류
 | |
|                 var dt_kisuldiv = FCOMMON.DBM.getCodeTable("50");
 | |
|                 this.cmb_kisuldiv.DisplayMember = "Value";
 | |
|                 this.cmb_kisuldiv.ValueMember = "Value";
 | |
|                 this.cmb_kisuldiv.DataSource = dt_kisuldiv;
 | |
| 
 | |
|                 //기술레벨
 | |
|                 var dt_kisullv = FCOMMON.DBM.getCodeTable("51");
 | |
|                 this.cmb_kisullv.Items.Clear();
 | |
|                 this.cmb_kisullv.Items.Add("0");
 | |
|                 foreach (DataRow dr in dt_kisullv.Rows)
 | |
|                 {
 | |
|                     var v = dr["fvalue"];
 | |
|                     if (v == null || string.IsNullOrWhiteSpace(v.ToString())) continue;
 | |
|                     if (this.cmb_kisullv.Items.Contains(v.ToString()) == false)
 | |
|                         this.cmb_kisullv.Items.Add(v.ToString());
 | |
|                 }
 | |
|                 //this.cmb_kisullv.DisplayMember = "Value";
 | |
|                 //this.cmb_kisullv.ValueMember = "Value";
 | |
|                 //this.cmb_kisullv.DataSource = dt_kisullv;
 | |
|             }
 | |
| 
 | |
|             //담당자목록
 | |
| 
 | |
|             var dt_users = FCOMMON.DBM.getActiveUserTable();// getGroupList("name + '(' + id + ')'", "Users", "[level] > 0 and [level] < 10", false, false);
 | |
|             this.cmbUser.DisplayMember = "dispName";
 | |
|             this.cmbUser.ValueMember = "id";
 | |
|             this.cmbUser.DataSource = dt_users;
 | |
|             if (FCOMMON.info.Login.level < 5) cmbUser.Enabled = false;
 | |
| 
 | |
|             // tbWW.Text = dr.ww;
 | |
|             dtPdate.Value = DateTime.Parse(dr.pdate);   //일자선택
 | |
|             cmbUser.SelectedValue = dr.uid;
 | |
|             tbProject.Text = dr.projectName;
 | |
|             cmbRequest.SelectedValue = dr.requestpart;
 | |
|             cmbPackage.SelectedValue = dr.package;
 | |
|             cmbType.SelectedValue = dr.type;
 | |
|             cmbProcess.SelectedValue = dr.process;
 | |
|             tbTag.Text = dr.tag;
 | |
| 
 | |
|             if (dr.process.isEmpty() && cmbProcess.SelectedIndex < 0)	//기본값을 찾는다
 | |
|             {
 | |
|                 var dts = dt_process.AsEnumerable().Where(t => t.IsNull("SValue") == false).ToList();
 | |
|                 foreach (var dr in dts)
 | |
|                 {
 | |
|                     if (dr["Svalue"].ToString().Equals("O"))
 | |
|                     {
 | |
|                         cmbProcess.Text = dr["Value"].ToString();
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
| 
 | |
|             if (dr.ot > 0)
 | |
|             {
 | |
|                 if (dr.ot2 == 0)
 | |
|                 {
 | |
|                     lbOt2.Text = "관리자 연장/휴일 근무 승인이 완료되지 않았습니다";
 | |
|                     lbOt2.ForeColor = Color.Blue;
 | |
|                     lbotReason.Visible = false;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     lbOt2.Text = $"승인시간:{dr.ot2}";
 | |
|                     lbotReason.Text = $"사유:{dr.otReason}";
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 lbOt2.Visible = false;
 | |
|                 lbotReason.Visible = false;
 | |
|             }
 | |
| 
 | |
| 
 | |
|             if (getKisulInput)
 | |
|             {
 | |
|                 cmb_kisuldiv.Text = dr.kisuldiv;
 | |
|                 cmb_kisullv.Text = dr.kisullv;
 | |
|                 textBox1.Text = dr.kisulamt.ToString();
 | |
|             }
 | |
| 
 | |
|             if (dr.IsotStartNull()) dateTimePicker1.Value = DateTime.Now;
 | |
|             else dateTimePicker1.Value = dr.otStart;
 | |
|             if (dr.IsotEndNull()) dateTimePicker2.Value = DateTime.Now;
 | |
|             else dateTimePicker2.Value = dr.otEnd;
 | |
| 
 | |
|             //if (cmbRequest.Text == "") cmbRequest.Text = "EE1";
 | |
|             if (cmbPackage.Text == "") cmbPackage.Text = "Common";
 | |
| 
 | |
|             if (dr.ot != 0)
 | |
|             {
 | |
|                 dateTimePicker1.Enabled = true;
 | |
|                 dateTimePicker2.Enabled = true;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 dateTimePicker1.Enabled = false;
 | |
|                 dateTimePicker2.Enabled = false;
 | |
|             }
 | |
| 
 | |
|             //프로젝트 번호 확인(프로젝트번호가 바뀌면 데이터를 업데이트 해준다)
 | |
|             if (dr.IspidxNull())
 | |
|             {
 | |
|                 tbProjectIndex.Tag = -1;
 | |
|                 tbProjectIndex.Text = "-1";
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 tbProjectIndex.Tag = dr.pidx;
 | |
|                 tbProjectIndex.Text = dr.pidx.ToString();
 | |
|             }
 | |
| 
 | |
|             //신규일때만 사용가능 함
 | |
|             if (dr.RowState == DataRowState.Detached || dr.RowState == DataRowState.Added) chkAutoAdd.Enabled = true;
 | |
|             else chkAutoAdd.Enabled = false;
 | |
| 
 | |
| 
 | |
|             if (string.IsNullOrEmpty(dr.description2))
 | |
|             {
 | |
|                 this.richTextBoxEx1.Text = dr.description;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 try
 | |
|                 {
 | |
|                     this.richTextBoxEx1.Rtf = dr.description2;
 | |
|                 }
 | |
|                 catch
 | |
|                 {
 | |
|                     this.richTextBoxEx1.Text = dr.description;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             //231026
 | |
|             if(cmbProcess.Text.isEmpty())
 | |
|             {
 | |
|                 if (cmbProcess.Items.Count == 1)
 | |
|                     cmbProcess.SelectedIndex = 0;
 | |
|             }
 | |
| 
 | |
|             this.Show();
 | |
|             Application.DoEvents();
 | |
| 
 | |
| 
 | |
| 
 | |
|             var MaxVerstion = FCOMMON.DBM.GetMaxVersion();
 | |
|             if (string.IsNullOrEmpty(MaxVerstion) == false)
 | |
|             {
 | |
|                 var curversion = Application.ProductVersion;
 | |
|                 var verchk = curversion.CompareTo(MaxVerstion);
 | |
|                 if (verchk < 0)
 | |
|                 {
 | |
|                     //내버젼이 낮다
 | |
|                     FCOMMON.Util.MsgE("현재 구 버젼을 사용하고 있습니다.\n업데이트를 진행 하고 사용하시기 바랍니다");
 | |
|                 }
 | |
|             }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|             if (dr.ot > 0 && dr.ot2 > 0)
 | |
|             {
 | |
|                 tbOt.Enabled = false;
 | |
|                 FCOMMON.Util.MsgE("휴일/연장 근무시간이 관리자에의해 확정되었으므로 초과시간을 변경할 수 없습니다");
 | |
|             }
 | |
| 
 | |
|             //if (this.richTextBoxEx1.Text.Trim() != "")
 | |
|             //{
 | |
|             //    this.richTextBoxEx1.Focus();
 | |
|             //}
 | |
|             //else
 | |
|             //{
 | |
|             cmbRequest.Focus();
 | |
|             //    tbProject.SelectAll();
 | |
|             //}
 | |
|             tbProject.Tag = tbProject.Text;
 | |
| 
 | |
|             //  if (string.IsNullOrEmpty(richTextBox1.Text)) richTextBox1.Text = dr.description;
 | |
| 
 | |
|             //editor
 | |
|             // ed = new editform.editor();
 | |
|             //ed.AllowDiscAccess = true;
 | |
|             //ed.WindowTitle = "Quick Edit";
 | |
|             //ed.StartingFont = new Font("Courier New", 12.0f, FontStyle.Regular);
 | |
| 
 | |
|             //ed.DisplayEditForm(this.panel1);
 | |
|             //ed.AllowRtf = true;
 | |
| 
 | |
|             //관리자
 | |
|             int curLevel = Math.Max(FCOMMON.info.Login.level, FCOMMON.DBM.getAuth(FCOMMON.DBM.eAuthType.jobreport));
 | |
| 
 | |
| 
 | |
|             if (ReadMode)
 | |
|             {
 | |
|                 panel1.Enabled = false;
 | |
|                 this.Text += "(읽기전용)";
 | |
|             }
 | |
|             else if (dr.RowState != DataRowState.Detached && curLevel < 5)
 | |
|             {
 | |
|                 //신규자료가 아니라면 7일간만 편집을 허용한다
 | |
|                 var enableBlock = FCOMMON.Util.getBit(FCOMMON.info.Login.gpermission, (int)FCOMMON.eGroupPermission.jobreport_editblock);
 | |
|                 if (enableBlock)
 | |
|                 {
 | |
|                     var writedate = DateTime.Now - DateTime.Parse(dr.pdate);
 | |
|                     if (writedate.TotalDays > 7)
 | |
|                     {
 | |
|                         panel1.Enabled = false;
 | |
|                         this.Text += "(7일초과)";
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             //신규데이터라면 양식을 처리한다.
 | |
|             if (copyMOde == false && dr.RowState == DataRowState.Detached || dr.RowState == DataRowState.Added)
 | |
|             {
 | |
|                 //해당 데이터의 메일 양식을 검사해서 데이터를 적용해준다.
 | |
|                 var db = new EEEntities();
 | |
|                 var dr0 = db.EETGW_DocuForm.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.cate == "J0").FirstOrDefault();
 | |
|                 if (dr0 != null)
 | |
|                 {
 | |
|                     richTextBoxEx1.Rtf = dr0.body;
 | |
|                 }
 | |
|                 db.Dispose();
 | |
|             }
 | |
| 
 | |
| 
 | |
|             bInit = true;
 | |
|         }
 | |
|         //    editform.editor ed;
 | |
|         void ctl_KeyDown(object sender, KeyEventArgs e)
 | |
|         {
 | |
|             if (e.KeyCode == Keys.Enter)
 | |
|             {
 | |
|                 Control ctl = sender as Control;
 | |
|                 string nm = ctl.Name.ToLower();
 | |
|                 string search = ctl.Text.Trim();
 | |
| 
 | |
|                 Console.WriteLine("inner keydown " + nm + ":" + search);
 | |
| 
 | |
|                 switch (nm)
 | |
|                 {
 | |
|                     //case "cmbrequest":
 | |
| 
 | |
|                     //    //요청자가 마지막으로 입력한 자료의 process 를 찾아서 기입해준다.
 | |
|                     //    var lastprocess = FCOMMON.DBM.getFirstValue("process", "purchase", "request like '%" + this.cmbUser.Text + "%'", "pdate desc");
 | |
|                     //    if (lastprocess != "") cbProcess.Text = lastprocess;
 | |
|                     //    tbSID.Focus();
 | |
|                     //    break;
 | |
|                     case "tbdescription":
 | |
|                         if (e.Control)
 | |
|                         {
 | |
|                             btSave.Focus();
 | |
|                         }
 | |
|                         break;
 | |
|                     case "tbproject":
 | |
|                         if (search != "")
 | |
|                         {
 | |
|                             var f = new fLovProject("%" + search + "%");
 | |
|                             if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 | |
|                             {
 | |
|                                 this.tbProject.Text = f.Title;
 | |
|                                 this.tbProject.Tag = f.Title;
 | |
|                                 this.tbProjectIndex.Text = f.Index.ToString();
 | |
|                                 tbHrs.Focus();
 | |
|                                 tbHrs.SelectAll();
 | |
| 
 | |
|                                 if (tbProjectIndex.Tag.ToString() != f.Index.ToString() || f.Index == -1)
 | |
|                                 {
 | |
|                                     //마지막 데이터를 찾아서 공정등의 정보를 업데이트한다.
 | |
|                                     var uid = cmbUser.SelectedValue.ToString();
 | |
|                                     DataTable lastDt = null;
 | |
| 
 | |
|                                     if (f.Index != -1) lastDt = FCOMMON.DBM.getLastJobReportData(uid, f.Index);
 | |
|                                     else lastDt = FCOMMON.DBM.getLastJobReportDatabyProjectName(uid, f.Title);
 | |
| 
 | |
|                                     if (lastDt != null && lastDt.Rows.Count > 0)
 | |
|                                     {
 | |
|                                         var predr = lastDt.Rows[0];
 | |
| 
 | |
|                                         if (predr["requestpart"] != DBNull.Value)
 | |
|                                             this.cmbRequest.Text = predr["requestpart"].ToString(); //190506
 | |
| 
 | |
|                                         if (predr["package"] != DBNull.Value)
 | |
|                                             this.cmbPackage.Text = predr["package"].ToString(); //190506
 | |
| 
 | |
|                                         if (predr["type"] != DBNull.Value)
 | |
|                                             this.cmbType.Text = predr["type"].ToString(); //190506
 | |
| 
 | |
|                                         if (predr["process"] != DBNull.Value)
 | |
|                                             cmbProcess.Text = predr["process"].ToString(); //190506
 | |
|                                     }
 | |
|                                 }
 | |
|                             }
 | |
|                             else
 | |
|                             {
 | |
|                                 //이름만 사용한다.
 | |
|                                 tbProjectIndex.Text = "-1";
 | |
|                                 cmbRequest.Focus();
 | |
|                             }
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             FCOMMON.Util.MsgE("프로젝트 혹은 아이템이름은 반드시 입력되어야 합니다.");
 | |
|                             var tb = sender as ComboBox;
 | |
|                             tb.SelectAll();
 | |
|                             tb.Focus();
 | |
|                         }
 | |
|                         break;
 | |
| 
 | |
|                     default:
 | |
|                         SendKeys.Send("{TAB}");
 | |
|                         break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 | |
|         {
 | |
|             FCM0000.fSelectDate f = new FCM0000.fSelectDate(this.dtPdate.Value.ToShortDateString());
 | |
|             if (f.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
 | |
|             dtPdate.Value = f.dtSelect;
 | |
|         }
 | |
| 
 | |
|         private void button1_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             this.Invalidate();
 | |
|             if (tbProject.Text.Trim() == "")
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("프로젝트(아이템) 명칭이 없습니다.");
 | |
|                 tbProject.Focus();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             //시작일 마감여부
 | |
|             var smon = this.dtPdate.Value.ToString("yyyy-MM");
 | |
|             if (FCOMMON.DBM.GetMagamStatus(smon))
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("등록일이 속한 월이 마감되었습니다\n마감된 월에는 [추가/변경/삭제] 를 할 수 없습니다");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
| 
 | |
|             if (cmbType.Text != "휴가" && string.IsNullOrEmpty(this.richTextBoxEx1.Text) == true)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("진행 내용이 없습니다.");
 | |
|                 this.richTextBoxEx1.Focus();
 | |
|                 return;
 | |
|             }
 | |
|             float hour = Single.Parse(tbHrs.Text) + Single.Parse(tbOt.Text);
 | |
|             if (hour == 0)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("근무시간/초과시간이 입력되지 않았습니다.");
 | |
|                 if (tbHrs.Enabled) tbHrs.Focus();
 | |
|                 else tbOt.Focus();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Detached)
 | |
|             {
 | |
|                 if (FCOMMON.info.Disable_8hourover)
 | |
|                 {
 | |
|                     var h = Single.Parse(tbHrs.Text);
 | |
|                     if (h > 8)
 | |
|                     {
 | |
|                         FCOMMON.Util.MsgE("근무시간은 8시간을 초과할 수 없습니다. 초과 근무는 [초과시간] 을 사용하세요");
 | |
|                         tbHrs.Focus();
 | |
|                         tbHrs.SelectAll();
 | |
|                         return;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (cmbType.Text.Trim() == "")
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("업무형태를 선택하세요");
 | |
|                 cmbType.Focus();
 | |
|                 return;
 | |
|             }
 | |
|             if (cmbProcess.Text.Trim() == "")
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("업무분류를 선택하세요");
 | |
|                 cmbProcess.Focus();
 | |
|                 return;
 | |
|             }
 | |
|             if (cmbUser.SelectedIndex < 0)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("담당자가 선택되지 않았습니다.");
 | |
|                 cmbUser.Focus();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (tbProject.Tag.ToString() != tbProject.Text && tbProjectIndex.Text != "" && tbProjectIndex.Text != "-1")
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("프로젝트가 선택되었으나 이름이 임의 수정되어 프로젝트 연결을 해제 합니다\n\n" +
 | |
|                     "잘못된 프로젝트명은 프로젝트 관리화면에서 변경하시기 바랍니다.\n\n" +
 | |
|                     "원본 : " + tbProject.Tag.ToString() + "\n" +
 | |
|                     "현재 : " + tbProject.Text);
 | |
|                 tbProjectIndex.Text = "-1";
 | |
|             }
 | |
| 
 | |
|             ///휴일체크
 | |
|             var taQ = new dsQueryTableAdapters.QueriesTableAdapter();
 | |
|             var freeday = taQ.CheckHoliday(dtPdate.Value.ToShortDateString());
 | |
|             if (freeday != null && freeday == true)
 | |
|             {
 | |
|                 var hrs = float.Parse(tbHrs.Text);
 | |
|                 if (hrs > 0)
 | |
|                 {
 | |
|                     FCOMMON.Util.MsgI("입력일자는 휴일로 등록되어 있습니다.\n\n OT에 해당하면 수정하시기 바랍니다.");
 | |
|                     //tbOt.Text = tbHrs.Text;
 | |
|                     //dr.hrs = 0;
 | |
|                     //tbHrs.Text = "0";
 | |
|                     //tbHrs.Focus();
 | |
|                     //return;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (chkAutoAdd.Checked && (dr.RowState == DataRowState.Detached || dr.RowState == DataRowState.Added))
 | |
|             {
 | |
|                 if (tbProjectIndex.Text == "" || tbProjectIndex.Text == "-1")
 | |
|                 {
 | |
|                     FCOMMON.Util.MsgE("프로젝트 주간내역을 등록하려면 프로젝트가 지정되어야 합니다");
 | |
|                     tbProject.Focus();
 | |
|                     tbProject.SelectAll();
 | |
|                     return;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     //190906
 | |
|                     FCOMMON.DBM.addProjectHistory(int.Parse(tbProjectIndex.Text), dtPdate.Value.ToShortDateString(), this.richTextBoxEx1.Text, this.richTextBoxEx1.Rtf);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             double hrs2 = 0.0;
 | |
|             if (double.TryParse(tbHrs.Text, out hrs2) == false)
 | |
|             {
 | |
|                 FCOMMON.Util.MsgE("근무시간을 숫자로 입력하세요");
 | |
|                 tbHrs.Focus();
 | |
|                 tbHrs.SelectAll();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (double.TryParse(tbOt.Text, out double ot))
 | |
|             {
 | |
|                 var timeterm = dateTimePicker2.Value - dateTimePicker1.Value;
 | |
|                 if ((timeterm.TotalMinutes + 1) * 60 <= ot)
 | |
|                 {
 | |
|                     FCOMMON.Util.MsgE($"OT시간이 지정된 시간대보다 부족합니다.\nOT시간정보를 확인하세요\n" +
 | |
|                         $"\n입력시간범위 : {dateTimePicker1.Value.ToString("HH:mm:ss")}~{dateTimePicker2.Value.ToString("HH:mm:ss")}" +
 | |
|                         $"\n입력시간(시) : {timeterm.TotalMinutes * 60}");
 | |
|                     dateTimePicker1.Focus();
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 if (ot == 0)
 | |
|                 {
 | |
|                     dr.SetotNull();
 | |
|                     dr.SetotStartNull();
 | |
|                     dr.SetotEndNull();
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     dr.ot = ot;
 | |
|                     dr.otStart = dateTimePicker1.Value;
 | |
|                     dr.otEnd = dateTimePicker2.Value;
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 dr.SetotNull();
 | |
|                 dr.SetotStartNull();
 | |
|                 dr.SetotEndNull();
 | |
|             }
 | |
| 
 | |
|             //var MaxVerstion = FCOMMON.DBM.GetMaxVersion();
 | |
|             //if (string.IsNullOrEmpty(MaxVerstion) == false)
 | |
|             //{
 | |
|             //	var curversion = Application.ProductVersion;
 | |
|             //	var verchk = curversion.CompareTo(MaxVerstion);
 | |
|             //	if (verchk < 0)
 | |
|             //	{
 | |
|             //		//내버젼이 낮다
 | |
|             //		FCOMMON.Util.MsgE("현재 구 버젼을 사용하고 있습니다.\n업데이트를 진행 하고 사용하시기 바랍니다");
 | |
|             //	}
 | |
|             //}
 | |
|             ////if(hrs2 > 8)
 | |
|             //{
 | |
|             //    FCOMMON.Util.MsgE("1일 최대근무시간은 8시간을 초과할 수 없습니다\n초과시간을 사용하세요");
 | |
|             //    tbHrs.SelectAll();
 | |
|             //    tbHrs.Focus();
 | |
|             //    return;
 | |
|             //}
 | |
| 
 | |
|             this.dr.uid = this.cmbUser.SelectedValue.ToString();
 | |
|             this.dr.pdate = dtPdate.Value.ToShortDateString();
 | |
|             this.dr.status = cmbState.Text;
 | |
|             this.dr.projectName = tbProject.Text;
 | |
|             if (tbProjectIndex.Text != "") dr.pidx = int.Parse(tbProjectIndex.Text);
 | |
|             else dr.SetpidxNull();
 | |
|             this.dr.requestpart = cmbRequest.Text;
 | |
|             this.dr.package = cmbPackage.Text;
 | |
|             this.dr.type = cmbType.Text;
 | |
|             this.dr.process = cmbProcess.Text;
 | |
|             this.dr.tag = tbTag.Text.Trim();
 | |
| 
 | |
| 
 | |
|             if (tbHrs.Text != "") this.dr.hrs = double.Parse(tbHrs.Text);
 | |
|             else this.dr.hrs = 0;
 | |
| 
 | |
| 
 | |
|             if (getKisulInput)
 | |
|             {
 | |
|                 //기술금액을 계산해야함
 | |
|                 double amt = 0;
 | |
|                 if (float.TryParse(cmb_kisullv.Text, out float price))
 | |
|                 {
 | |
|                     //var price = FCOMMON.DBM.getCodeFvalue("51", cmb_kisullv.Text);
 | |
|                     amt = (dr.hrs + dr.ot) * price;
 | |
|                     this.dr.kisuldiv = cmb_kisuldiv.Text;
 | |
|                     this.dr.kisullv = cmb_kisullv.Text;
 | |
|                     this.dr.kisulamt = (Decimal)amt; // Decimal.Parse(textBox1.Text);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     dr.kisulamt = 0;
 | |
|                 }
 | |
|                 textBox1.Text = amt.ToString();
 | |
|             }
 | |
| 
 | |
|             //this.dr.description = richTextBox1.Text.Trim();
 | |
| 
 | |
|             //MessageBox.Show(richTextBox1.Text);
 | |
|             this.dr.description = richTextBoxEx1.Text;
 | |
|             this.dr.description2 = richTextBoxEx1.Rtf; // ef.DocumentText;//  richTextBox1.Rtf;
 | |
|             this.bs.EndEdit();
 | |
| 
 | |
|             if (chkManagerAlert.Checked)
 | |
|             {
 | |
|                 var dlg = FCOMMON.Util.MsgQ("관리자 메일을 전송할까요?\n업무일지 작성 내용이 전달 됩니다");
 | |
|                 if (dlg == DialogResult.Yes)
 | |
|                 {
 | |
|                     var db = new EEEntities();
 | |
|                     var mf = db.MailForm.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.cate == "MA").FirstOrDefault();
 | |
|                     if (mf != null)
 | |
|                     {
 | |
|                         try
 | |
|                         {
 | |
|                             var mbody = new MailData();
 | |
|                             mbody.tolist = maildataupdate(mf.tolist);
 | |
|                             mbody.bcc = maildataupdate(mf.bcc);
 | |
|                             mbody.cc = maildataupdate(mf.cc);
 | |
|                             mbody.project = dr.pidx;
 | |
|                             mbody.gcode = FCOMMON.info.Login.gcode;
 | |
|                             mbody.cate = mf.cate;
 | |
|                             mbody.fromlist = "gw@amkor.co.kr";
 | |
|                             mbody.pdate = DateTime.Now.ToShortDateString();
 | |
|                             mbody.subject = maildataupdate(mf.subject);
 | |
|                             mbody.body = maildataupdate(mf.body);
 | |
|                             mbody.wuid = FCOMMON.info.Login.no;
 | |
|                             mbody.wdate = DateTime.Now;
 | |
|                             db.MailData.Add(mbody);
 | |
|                             db.SaveChanges();
 | |
|                         }
 | |
|                         catch (Exception ex)
 | |
|                         {
 | |
|                             FCOMMON.Util.MsgE("업무일지 알림 메일 전송 실패" + ex.Message);
 | |
|                         }
 | |
|                     }
 | |
|                     else FCOMMON.Util.MsgE("관리자메일양식 MA가 등록되지 않았습니다. 메일 양식을 확인하세요");
 | |
|                 }
 | |
| 
 | |
|             }
 | |
| 
 | |
|             DialogResult = System.Windows.Forms.DialogResult.OK;
 | |
|         }
 | |
| 
 | |
|         string maildataupdate(string org)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(org)) return string.Empty;
 | |
|             org = org.Replace("{pname}", tbProject.Text);
 | |
|             org = org.Replace("{pidx}", tbProjectIndex.Text);
 | |
|             org = org.Replace("{sdate}", dtPdate.Value.ToShortDateString());
 | |
|             org = org.Replace("{edate}", dtPdate.Value.ToShortDateString());
 | |
|             org = org.Replace("{pdate}", dtPdate.Value.ToShortDateString());
 | |
|             org = org.Replace("{DATE}", dtPdate.Value.ToShortDateString());
 | |
|             org = org.Replace("{NAME}", cmbUser.Text);
 | |
|             org = org.Replace("{HR}", tbHrs.Text);
 | |
|             org = org.Replace("{OT}", tbOt.Text);
 | |
|             org = org.Replace("{PROJECT}", tbProject.Text);
 | |
|             org = org.Replace("{REMARK}", richTextBoxEx1.Text);
 | |
|             org = org.Replace("{SENDER}", FCOMMON.info.Login.email);
 | |
| 
 | |
| 
 | |
|             return org;
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (cmbType.Text.Trim() != "" &&
 | |
|                 cmbType.SelectedIndex >= 0 &&
 | |
|                 cmbProcess.SelectedIndex < 0 &&
 | |
|                 cmbUser.SelectedValue != null)
 | |
|             {
 | |
|                 //공정을 자동선택해준다.
 | |
|                 //마지막 데이터를 찾아서 공정등의 정보를 업데이트한다.
 | |
|                 var uid = cmbUser.SelectedValue.ToString();
 | |
|                 var lastDt = FCOMMON.DBM.getLastJobReportData(uid, cmbType.Text.Trim());
 | |
|                 if (lastDt != null && lastDt.Rows.Count > 0)
 | |
|                 {
 | |
|                     var predr = lastDt.Rows[0];// as dsPRJ.JobReportRow;
 | |
|                     if (predr["process"] != DBNull.Value)
 | |
|                         cmbProcess.Text = predr["process"].ToString(); //190506
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|             chkform_indexchan(sender, e);
 | |
| 
 | |
|         }
 | |
| 
 | |
|         void chkform_indexchan(object sender, EventArgs e)
 | |
|         {
 | |
|             if (cmbType.Text.Trim() != "" &&
 | |
|            cmbType.SelectedIndex >= 0 && String.IsNullOrEmpty(cmbState.Text.Trim()) == false)
 | |
|             {
 | |
| 
 | |
| 
 | |
|                 //해당 데이터의 메일 양식을 검사해서 데이터를 적용해준다.
 | |
|                 var formname = cmbType.Text.Trim() + "|" + cmbState.Text.Trim();
 | |
|                 var db = new EEEntities();
 | |
| 
 | |
|                 //프로젝트 제목 서포트
 | |
|                 var dr0 = db.EETGW_DocuForm.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.cate == "J2" && t.title == formname).FirstOrDefault();
 | |
|                 if (dr0 != null)
 | |
|                 {
 | |
|                     var rtx = new RichTextBox();
 | |
|                     rtx.Rtf = dr0.body;
 | |
|                     lbTitleTip.Text = rtx.Text;
 | |
|                     rtx.Dispose();
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     lbTitleTip.Text = "프로젝트가 있다면 해당 프로젝트 명을 입력한 후 Enter 키를 눌러서 연결 해주세요";
 | |
|                 }
 | |
| 
 | |
|                 var dr = db.EETGW_DocuForm.Where(t => t.gcode == FCOMMON.info.Login.gcode && t.cate == "J1" && t.title == formname).FirstOrDefault();
 | |
|                 if (dr != null)
 | |
|                 {
 | |
| 
 | |
|                     if (String.IsNullOrEmpty(this.richTextBoxEx1.Text))
 | |
|                     {
 | |
|                         this.richTextBoxEx1.Rtf = dr.body;
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         //뭔가 자료가 있는가?                            
 | |
|                         var header = string.Empty;
 | |
| 
 | |
| 
 | |
|                         var rt = new RichTextBoxEx.RichTextBoxEx();
 | |
|                         rt.Rtf = dr.body;
 | |
|                         if (rt.Text.Length > 10) header = rt.Text.Substring(0, 10).Trim();
 | |
|                         else header = rt.Text.Trim();
 | |
|                         rt.Dispose();
 | |
| 
 | |
|                         if (this.richTextBoxEx1.Text.StartsWith(header) == false)
 | |
|                         {
 | |
|                             //if (FCOMMON.Util.MsgQ("등록된 작성 양식이 있습니다. 적용할까요?") == DialogResult.Yes)
 | |
|                             {
 | |
|                                 var oldtext = this.richTextBoxEx1.Text;
 | |
|                                 this.richTextBoxEx1.Rtf = dr.body;
 | |
|                                 if (String.IsNullOrEmpty(this.richTextBoxEx1.Text) == false)
 | |
|                                 {
 | |
|                                     this.richTextBoxEx1.rtb.AppendText("\n\n");
 | |
|                                     this.richTextBoxEx1.rtb.SelectionLength = 1;
 | |
|                                     this.richTextBoxEx1.rtb.SelectionStart = this.richTextBoxEx1.rtb.TextLength;
 | |
|                                     this.richTextBoxEx1.rtb.ForeColor = Color.Black;
 | |
|                                     this.richTextBoxEx1.rtb.AppendText(oldtext);
 | |
|                                 }
 | |
|                                 //this.richTextBoxEx1.Text += oldtext;
 | |
| 
 | |
|                                 //this.richTextBoxEx1.Text += oldtext;
 | |
| 
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void dtPdate_ValueChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             var myCI = new System.Globalization.CultureInfo("ko-KR");
 | |
|             var myCal = myCI.Calendar;
 | |
|             var myCWR = myCI.DateTimeFormat.CalendarWeekRule;
 | |
|             DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;
 | |
|             var dat = myCal.GetWeekOfYear(dtPdate.Value, myCWR, myFirstDOW);
 | |
|             tbWW.Text = "ww" + dat.ToString();
 | |
|             UpdateWOrkTime();
 | |
| 
 | |
|             //공휴일이면 시간을 초기화한다.
 | |
|             if (tbHrs.Text == "") tbHrs.Text = "0";
 | |
|             if (tbOt.Text == "") tbOt.Text = "0";
 | |
|             float hrs = float.Parse(tbHrs.Text);
 | |
|             //if (dtPdate.Value.DayOfWeek == DayOfWeek.Saturday || dtPdate.Value.DayOfWeek == DayOfWeek.Sunday)
 | |
|             //{
 | |
|             //    tbHrs.Enabled = false;
 | |
|             //    if (hrs != 0)
 | |
|             //    {
 | |
|             //        FCOMMON.Util.MsgI("공휴일에는 근무시간을 입력할 수 없습니다.\n초과시간에 입력하세요.\n\n해당 값은 삭제 됩니다.");
 | |
|             //        dr.hrs = 0;
 | |
|             //        tbHrs.Text = "0";
 | |
|             //        if (hrs != 8) tbOt.Text = hrs.ToString();
 | |
|             //        tbOt.Focus();
 | |
|             //    }
 | |
|             //}
 | |
|             //else tbHrs.Enabled = true;
 | |
|         }
 | |
|         void UpdateWOrkTime()
 | |
|         {
 | |
|             //이번달 근무시간 및 초과시간 구하기
 | |
|             if (cmbUser.SelectedValue != null)
 | |
|             {
 | |
|                 float work, ot;
 | |
|                 int total;
 | |
|                 FCOMMON.DBM.getWorkTime(cmbUser.SelectedValue.ToString(), dtPdate.Value.ToString("yyyy-MM"), out work, out total, out ot);
 | |
|                 string msg = "금월 근무시간 : {0:N1}h / {1:N0}h, 금월 초과시간 : {2:N1}h";
 | |
|                 lbSummary.Text = string.Format(msg, work, total, ot);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 lbSummary.Text = "--";
 | |
|             }
 | |
|         }
 | |
|         private void cmbUser_SelectedIndexChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (cmbUser.SelectedIndex >= 0)
 | |
|                 UpdateWOrkTime(); ;
 | |
|         }
 | |
| 
 | |
|         private void tbOt_Validated(object sender, EventArgs e)
 | |
|         {
 | |
|             if (double.TryParse(tbOt.Text, out double ot))
 | |
|             {
 | |
|                 if (ot != 0)
 | |
|                 {
 | |
| 
 | |
|                     dateTimePicker1.Enabled = true;
 | |
|                     dateTimePicker2.Enabled = true;
 | |
| 
 | |
|                     //신규데이터라면 자동으로 시간을 설정해준다
 | |
|                     if (dr.RowState == DataRowState.Added || dr.RowState == DataRowState.Detached)
 | |
|                     {
 | |
|                         if (dateTimePicker1.Value == dateTimePicker2.Value)
 | |
|                         {
 | |
|                             dateTimePicker1.Value = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd" + " 18:00:00"));
 | |
|                             dateTimePicker2.Value = dateTimePicker1.Value.AddHours(ot);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     dateTimePicker1.Enabled = false;
 | |
|                     dateTimePicker2.Enabled = false;
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 dateTimePicker1.Enabled = false;
 | |
|                 dateTimePicker2.Enabled = false;
 | |
| 
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void tbProjectIndex_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             if (int.TryParse(tbProjectIndex.Text, out int pidx))
 | |
|             {
 | |
|                 if (pidx < 1) return;
 | |
| 
 | |
|                 var ta = new dsPRJTableAdapters.ProjectsTableAdapter();
 | |
|                 var dr = ta.GetbyIDX(pidx).First();
 | |
|                 var f = new fProjectData(dr, false);
 | |
|                 f.Show();
 | |
|                 //if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 | |
|                 //{
 | |
|                 //	this.Validate();
 | |
|                 //	dr.EndEdit();
 | |
|                 //	try
 | |
|                 //	{
 | |
|                 //		var cnt = ta.Update(this.dsPRJ.Projects);//.UpdateAll(this.dsMSSQL.Projects);
 | |
|                 //		dsPRJ.Projects.AcceptChanges();
 | |
|                 //		if(cnt != 1)
 | |
|                 //                    {
 | |
|                 //			FCOMMON.Util.MsgE("저장 실패");
 | |
|                 //                    }
 | |
|                 //	}
 | |
|                 //	catch (Exception ex)
 | |
|                 //	{
 | |
|                 //		FCOMMON.Util.MsgE(ex.Message);
 | |
|                 //	}
 | |
|                 //}
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
