diff --git a/Project/Dialog/fHolyday.Designer.cs b/Project/Dialog/fHolyday.Designer.cs new file mode 100644 index 0000000..fd15a40 --- /dev/null +++ b/Project/Dialog/fHolyday.Designer.cs @@ -0,0 +1,46 @@ +namespace Project.Dialog +{ + partial class fHolyday + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // fHolyday + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1063, 567); + this.Name = "fHolyday"; + this.Text = "근태입력"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Project/Dialog/fHolyday.cs b/Project/Dialog/fHolyday.cs new file mode 100644 index 0000000..4bf2e30 --- /dev/null +++ b/Project/Dialog/fHolyday.cs @@ -0,0 +1,86 @@ +using FCM0000.Mail; +using FCOMMON; +using Microsoft.Web.WebView2.Core; +using Microsoft.Web.WebView2.WinForms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Project.Dialog +{ + public partial class fHolyday : fBase + { + private WebView2 webView21; + public fHolyday() + { + InitializeComponent(); + + + InitializeWebView2(); + + + } + private void InitializeWebView2() + { + // 수동으로 WebView2 컨트롤 생성 + this.webView21 = new WebView2(); + + // 기본 속성 설정 + this.webView21.CreationProperties = null; + this.webView21.DefaultBackgroundColor = Color.White; + this.webView21.Dock = DockStyle.Fill; + this.webView21.Location = new Point(0, 0); + this.webView21.Name = "webView21"; + this.webView21.Size = new Size(800, 600); + this.webView21.TabIndex = 0; + this.webView21.ZoomFactor = 1D; + + // 폼에 추가 + this.Controls.Add(this.webView21); + + // 비동기 초기화 + InitializeAsync(); + } + private async void InitializeAsync() + { + try + { + // Fixed Version 경로 설정 + string runtimePath = Path.Combine(Application.StartupPath, "WebView2Runtime"); + + if (Directory.Exists(runtimePath)) + { + var env = await CoreWebView2Environment.CreateAsync(runtimePath); + await this.webView21.EnsureCoreWebView2Async(env); + } + else + { + // 시스템에 설치된 WebView2 사용 + await this.webView21.EnsureCoreWebView2Async(); + } + // OWIN 서버의 DashBoard 페이지로 연결 + webView21.Source = new Uri($"{Pub.setting.WebServiceURL}/kuntae"); + } + catch (Exception ex) + { + MessageBox.Show($"WebView2 초기화 실패: {ex.Message}"); + } + } + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + EnsureVisibleAndUsableSize(); + } + private void label1_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/Project/Dialog/fHolyday.resx b/Project/Dialog/fHolyday.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Project/Dialog/fHolyday.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Project/EETGW.csproj b/Project/EETGW.csproj index 76a3985..eb64304 100644 --- a/Project/EETGW.csproj +++ b/Project/EETGW.csproj @@ -259,6 +259,12 @@ + + Form + + + fHolyday.cs + Form @@ -280,6 +286,7 @@ + @@ -474,6 +481,9 @@ fDisableItem.cs + + fHolyday.cs + fJobReport.cs @@ -656,6 +666,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Project/EETGW.csproj.user b/Project/EETGW.csproj.user index 0789c32..f6caabb 100644 --- a/Project/EETGW.csproj.user +++ b/Project/EETGW.csproj.user @@ -1,4 +1,4 @@ - + ftp://10.131.36.205:2121/Install/GroupWare/|ftp://10.131.36.205:2121/Install/|ftp://10.131.36.205/Install/|게시\ diff --git a/Project/Web/Controller/KuntaeController.cs b/Project/Web/Controller/KuntaeController.cs new file mode 100644 index 0000000..e05e8f0 --- /dev/null +++ b/Project/Web/Controller/KuntaeController.cs @@ -0,0 +1,293 @@ +using FCM0000; +using Microsoft.Owin; +using Newtonsoft.Json; +using System; +using System.Linq; +using System.Net.Http; +using System.Web; +using System.Web.Http; + +namespace Project.Web.Controllers +{ + public class KuntaeController : BaseController + { + + [HttpGet] + public HttpResponseMessage GetList(string sd = null, string ed = null) + { + var sql = string.Empty; + sql = "select idx,gcode,uid,dbo.getUserName(uid) as uname,cate,sdate,edate,term,termdr,drtime,DrTimePMS,crtime,title,contents, tag, extcate,extidx, wuid,wdate" + + " from Holyday" + + " where gcode = @gcode" + + " and uid = @uid" + + " and sdate between @sd and @ed" + + " order by wdate desc"; + + + var cs = Properties.Settings.Default.gwcs;// "Data Source=K4FASQL.kr.ds.amkor.com,50150;Initial Catalog=EE;Persist Security Info=True;User ID=eeadm;Password=uJnU8a8q&DJ+ug-D!"; + var cn = new System.Data.SqlClient.SqlConnection(cs); + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + cmd.Parameters.AddWithValue("gcode", FCOMMON.info.Login.gcode); + cmd.Parameters.AddWithValue("uid", FCOMMON.info.Login.no); + + // 날짜 파라미터가 없으면 기본값 사용 (현재 월) + var startDate = !string.IsNullOrEmpty(sd) ? sd : DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd"); + var endDate = !string.IsNullOrEmpty(ed) ? ed : DateTime.Now.ToString("yyyy-MM-dd"); + + cmd.Parameters.AddWithValue("sd", startDate); + cmd.Parameters.AddWithValue("ed", endDate); + var da = new System.Data.SqlClient.SqlDataAdapter(cmd); + var dt = new System.Data.DataTable(); + da.Fill(dt); + da.Dispose(); + cmd.Dispose(); + cn.Dispose(); + + var txtjson = JsonConvert.SerializeObject(dt, new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + + var resp = new HttpResponseMessage() + { + Content = new StringContent( + txtjson, + System.Text.Encoding.UTF8, + "application/json") + }; + + return resp; + } + + + [HttpGet] + public HttpResponseMessage Index() + { + // 직접 파일을 읽어서 반환 + var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "kuntae", "index.html"); + var contents = string.Empty; + + if (System.IO.File.Exists(filePath)) + { + contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); + } + else + { + // 파일이 없으면 404 에러 페이지 또는 기본 메시지 + contents = "

404 - File Not Found

The requested file was not found: " + filePath + "

"; + } + + + var resp = new HttpResponseMessage() + { + Content = new StringContent( + contents, + System.Text.Encoding.UTF8, + "text/html") + }; + + return resp; + } + + [HttpPost] + public HttpResponseMessage Insert([FromBody] KuntaeModel model) + { + try + { + var sql = @"INSERT INTO Holyday (gcode, uid, cate, sdate, edate, term, termdr, drtime, DrTimePMS, crtime, title, contents, tag, extcate, extidx, wuid, wdate) + VALUES (@gcode, @uid, @cate, @sdate, @edate, @term, @termdr, @drtime, @DrTimePMS, @crtime, @title, @contents, @tag, @extcate, @extidx, @wuid, @wdate)"; + + var cs = Properties.Settings.Default.gwcs; + var cn = new System.Data.SqlClient.SqlConnection(cs); + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + + cmd.Parameters.AddWithValue("gcode", FCOMMON.info.Login.gcode); + cmd.Parameters.AddWithValue("uid", FCOMMON.info.Login.no); + cmd.Parameters.AddWithValue("cate", (object)model.cate ?? DBNull.Value); + cmd.Parameters.AddWithValue("sdate", model.sdate); + cmd.Parameters.AddWithValue("edate", (object)model.edate ?? DBNull.Value); + cmd.Parameters.AddWithValue("term", (object)model.term ?? DBNull.Value); + cmd.Parameters.AddWithValue("termdr", (object)model.termdr ?? DBNull.Value); + cmd.Parameters.AddWithValue("drtime", (object)model.drtime ?? DBNull.Value); + cmd.Parameters.AddWithValue("DrTimePMS", (object)model.DrTimePMS ?? DBNull.Value); + cmd.Parameters.AddWithValue("crtime", (object)model.crtime ?? DBNull.Value); + cmd.Parameters.AddWithValue("title", (object)model.title ?? DBNull.Value); + cmd.Parameters.AddWithValue("contents", (object)model.contents ?? DBNull.Value); + cmd.Parameters.AddWithValue("tag", (object)model.tag ?? DBNull.Value); + cmd.Parameters.AddWithValue("extcate", (object)model.extcate ?? DBNull.Value); + cmd.Parameters.AddWithValue("extidx", (object)model.extidx ?? DBNull.Value); + cmd.Parameters.AddWithValue("wuid", FCOMMON.info.Login.no); + cmd.Parameters.AddWithValue("wdate", DateTime.Now); + + cn.Open(); + var result = cmd.ExecuteNonQuery(); + cn.Close(); + cmd.Dispose(); + cn.Dispose(); + + var response = new { success = true, message = "근태가 추가되었습니다." }; + var json = JsonConvert.SerializeObject(response); + + return new HttpResponseMessage() + { + Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") + }; + } + catch (Exception ex) + { + var response = new { success = false, message = "근태 추가 중 오류가 발생했습니다: " + ex.Message }; + var json = JsonConvert.SerializeObject(response); + + return new HttpResponseMessage() + { + Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") + }; + } + } + + [HttpPut] + public HttpResponseMessage Update([FromBody] KuntaeModel model) + { + try + { + var sql = @"UPDATE Holyday SET cate = @cate, sdate = @sdate, edate = @edate, term = @term, termdr = @termdr, + drtime = @drtime, DrTimePMS = @DrTimePMS, crtime = @crtime, title = @title, contents = @contents, + tag = @tag, extcate = @extcate, extidx = @extidx + WHERE gcode = @gcode AND uid = @uid AND idx = @idx"; + + var cs = Properties.Settings.Default.gwcs; + var cn = new System.Data.SqlClient.SqlConnection(cs); + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + + cmd.Parameters.AddWithValue("gcode", FCOMMON.info.Login.gcode); + cmd.Parameters.AddWithValue("uid", FCOMMON.info.Login.no); + cmd.Parameters.AddWithValue("cate", (object)model.cate ?? DBNull.Value); + cmd.Parameters.AddWithValue("sdate", model.sdate); + cmd.Parameters.AddWithValue("edate", (object)model.edate ?? DBNull.Value); + cmd.Parameters.AddWithValue("term", (object)model.term ?? DBNull.Value); + cmd.Parameters.AddWithValue("termdr", (object)model.termdr ?? DBNull.Value); + cmd.Parameters.AddWithValue("drtime", (object)model.drtime ?? DBNull.Value); + cmd.Parameters.AddWithValue("DrTimePMS", (object)model.DrTimePMS ?? DBNull.Value); + cmd.Parameters.AddWithValue("crtime", (object)model.crtime ?? DBNull.Value); + cmd.Parameters.AddWithValue("title", (object)model.title ?? DBNull.Value); + cmd.Parameters.AddWithValue("contents", (object)model.contents ?? DBNull.Value); + cmd.Parameters.AddWithValue("tag", (object)model.tag ?? DBNull.Value); + cmd.Parameters.AddWithValue("extcate", (object)model.extcate ?? DBNull.Value); + cmd.Parameters.AddWithValue("extidx", (object)model.extidx ?? DBNull.Value); + cmd.Parameters.AddWithValue("idx", model.idx); + + cn.Open(); + var result = cmd.ExecuteNonQuery(); + cn.Close(); + cmd.Dispose(); + cn.Dispose(); + + var response = new { success = true, message = "근태가 수정되었습니다." }; + var json = JsonConvert.SerializeObject(response); + + return new HttpResponseMessage() + { + Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") + }; + } + catch (Exception ex) + { + var response = new { success = false, message = "근태 수정 중 오류가 발생했습니다: " + ex.Message }; + var json = JsonConvert.SerializeObject(response); + + return new HttpResponseMessage() + { + Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") + }; + } + } + + [HttpDelete] + public HttpResponseMessage Delete(string id) + { + try + { + var sql = "DELETE FROM Holyday WHERE gcode = @gcode AND uid = @uid AND idx = @idx"; + + var cs = Properties.Settings.Default.gwcs; + var cn = new System.Data.SqlClient.SqlConnection(cs); + var cmd = new System.Data.SqlClient.SqlCommand(sql, cn); + + cmd.Parameters.AddWithValue("gcode", FCOMMON.info.Login.gcode); + cmd.Parameters.AddWithValue("uid", FCOMMON.info.Login.no); + cmd.Parameters.AddWithValue("idx", id); + + cn.Open(); + var result = cmd.ExecuteNonQuery(); + cn.Close(); + cmd.Dispose(); + cn.Dispose(); + + var response = new { success = true, message = "근태가 삭제되었습니다." }; + var json = JsonConvert.SerializeObject(response); + + return new HttpResponseMessage() + { + Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") + }; + } + catch (Exception ex) + { + var response = new { success = false, message = "근태 삭제 중 오류가 발생했습니다: " + ex.Message }; + var json = JsonConvert.SerializeObject(response); + + return new HttpResponseMessage() + { + Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") + }; + } + } + } + + public class KuntaeModel + { + /* + idx : 데이터고유번호 + gcode : 그룹코드(데이터 그룹간 식별) + uid : 사원번호 + cate : 근태구분 + sdate : 시작일 + edate : 종료일 + term : 사용일 + termdr : 발생일 + drtime : 발생시간, + crtime : 사용시간 + DrTimePMS : PMS등록시간 + title : 제목 + contents : 내용 + tag : 입력방식특이사항(clipboard=클립보드에서붙여넣었다) + extcate : 외부에서생성된 경우 외부 출처 + extidx : 외부출처인경우 데이터고유번호 + wuid : 데이터기록자 사원번호 + wdate : 데이터를기록한일시 + */ + + public int idx { get; set; } // 데이터고유번호 + public string gcode { get; set; } // 그룹코드(데이터 그룹간 식별) + public string uid { get; set; } // 사원번호 + public string uname { get; set; } // 성명 + public string cate { get; set; } // 근태구분 + public string sdate { get; set; } // 시작일 + public string edate { get; set; } // 종료일 + public string term { get; set; } // 사용일 + public string termdr { get; set; } // 발생일 + public string drtime { get; set; } // 발생시간 + public string DrTimePMS { get; set; } // PMS등록시간 + public string crtime { get; set; } // 사용시간 + public string title { get; set; } // 제목 + public string contents { get; set; } // 내용 + public string tag { get; set; } // 입력방식특이사항 + public string extcate { get; set; } // 외부에서생성된 경우 외부 출처 + public string extidx { get; set; } // 외부출처인경우 데이터고유번호 + public string wuid { get; set; } // 데이터기록자 사원번호 + public string wdate { get; set; } // 데이터를기록한일시 + } +} + + + diff --git a/Project/Web/wwwroot/Kuntae/index.html b/Project/Web/wwwroot/Kuntae/index.html new file mode 100644 index 0000000..eceecba --- /dev/null +++ b/Project/Web/wwwroot/Kuntae/index.html @@ -0,0 +1,692 @@ + + + + + + + + + 근태입력 조회 + + + + + + +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ + +
+
+
+
+ + + +
+
+

휴가사용

+

0

+
+
+
+
+
+
+ + + +
+
+

대체사용

+

0

+
+
+
+
+
+
+ + + +
+
+

잔량(년차)

+

0

+
+
+
+
+
+
+ + + +
+
+

잔량(대체)

+

0

+
+
+
+
+ + +
+
+

근태 상세 내역

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분시작일종료일사번성명사용(일)사용(H)발생(일)발생(H)내용#잔량(일)잔량(H)전일(일)전일(H)소스등록자등록일
+
+
+ + + + + + +
+ + + + diff --git a/Project/fMain.cs b/Project/fMain.cs index cb263cc..60c83be 100644 --- a/Project/fMain.cs +++ b/Project/fMain.cs @@ -274,7 +274,16 @@ namespace Project { string formkey = "HOLY"; if (!ShowForm(formkey)) - AddForm(formkey, new FBS0000.fHolyday()); + { + Form f; + if (webok && Pub.InitWebView == 1 && System.Diagnostics.Debugger.IsAttached) + f = new FBS0000.fHolyday(); + else + f = new FBS0000.fHolyday(); + + AddForm(formkey, f); + } + } void _SetLang()