using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using Newtonsoft.Json; using FCOMMON; namespace Project.Web { public partial class MachineBridge { #region Holiday API (월별근무표) /// /// 월별근무표 목록 조회 /// public string Holiday_GetList(string month) { try { var monthPattern = month + "%"; var sql = @"SELECT idx, pdate, free, memo, wuid, wdate FROM HolidayList WITH (nolock) WHERE pdate LIKE @month ORDER BY pdate"; var cs = Properties.Settings.Default.gwcs; using (var cn = new SqlConnection(cs)) using (var cmd = new SqlCommand(sql, cn)) { cmd.Parameters.AddWithValue("@month", monthPattern); using (var da = new SqlDataAdapter(cmd)) { var dt = new DataTable(); da.Fill(dt); return JsonConvert.SerializeObject(new { Success = true, Data = dt }); } } } catch (Exception ex) { return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message }); } } /// /// 월별근무표 저장 (없으면 생성) /// public string Holiday_Save(string month, string holidaysJson) { try { var holidays = JsonConvert.DeserializeObject>(holidaysJson); var cs = Properties.Settings.Default.gwcs; using (var cn = new SqlConnection(cs)) { cn.Open(); using (var tran = cn.BeginTransaction()) { try { foreach (var item in holidays) { var sql = @" IF EXISTS (SELECT 1 FROM HolidayList WHERE pdate = @pdate) UPDATE HolidayList SET free = @free, memo = @memo, wuid = @wuid, wdate = GETDATE() WHERE pdate = @pdate ELSE INSERT INTO HolidayList (pdate, free, memo, wuid, wdate) VALUES (@pdate, @free, @memo, @wuid, GETDATE())"; using (var cmd = new SqlCommand(sql, cn, tran)) { cmd.Parameters.AddWithValue("@pdate", item.pdate); cmd.Parameters.AddWithValue("@free", item.free); cmd.Parameters.AddWithValue("@memo", item.memo ?? ""); cmd.Parameters.AddWithValue("@wuid", info.Login.no); cmd.ExecuteNonQuery(); } } tran.Commit(); return JsonConvert.SerializeObject(new { Success = true, Message = "저장되었습니다." }); } catch { tran.Rollback(); throw; } } } } catch (Exception ex) { return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message }); } } /// /// 월별근무표 초기 데이터 생성 (해당 월에 데이터가 없을 때) /// public string Holiday_Initialize(string month) { try { // 해당 월 데이터 존재 여부 확인 var monthPattern = month + "%"; var checkSql = "SELECT COUNT(*) FROM HolidayList WITH (nolock) WHERE pdate LIKE @month"; var cs = Properties.Settings.Default.gwcs; using (var cn = new SqlConnection(cs)) { cn.Open(); using (var checkCmd = new SqlCommand(checkSql, cn)) { checkCmd.Parameters.AddWithValue("@month", monthPattern); var count = (int)checkCmd.ExecuteScalar(); if (count > 0) { return JsonConvert.SerializeObject(new { Success = true, Message = "이미 데이터가 존재합니다.", Created = false }); } } // 해당 월의 모든 날짜 생성 var startDate = DateTime.Parse(month + "-01"); var endDate = startDate.AddMonths(1).AddDays(-1); using (var tran = cn.BeginTransaction()) { try { for (var date = startDate; date <= endDate; date = date.AddDays(1)) { var isFree = date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday; var memo = date.DayOfWeek == DayOfWeek.Saturday ? "토요일" : date.DayOfWeek == DayOfWeek.Sunday ? "일요일" : ""; var sql = @"INSERT INTO HolidayList (pdate, free, memo, wuid, wdate) VALUES (@pdate, @free, @memo, @wuid, GETDATE())"; using (var cmd = new SqlCommand(sql, cn, tran)) { cmd.Parameters.AddWithValue("@pdate", date.ToString("yyyy-MM-dd")); cmd.Parameters.AddWithValue("@free", isFree); cmd.Parameters.AddWithValue("@memo", memo); cmd.Parameters.AddWithValue("@wuid", info.Login.no); cmd.ExecuteNonQuery(); } } tran.Commit(); return JsonConvert.SerializeObject(new { Success = true, Message = "초기 데이터가 생성되었습니다.", Created = true }); } catch { tran.Rollback(); throw; } } } } catch (Exception ex) { return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message }); } } #endregion } public class HolidayItem { public int idx { get; set; } public string pdate { get; set; } public bool free { get; set; } public string memo { get; set; } } }