///---------------------------------------------------------------------- /// <summary> /// 計算用出勤日数で出勤日数を算出する </summary> /// <param name="r"> /// MTYSDataSet.勤務票ヘッダRow</param> /// <returns> /// 出勤日数</returns> ///---------------------------------------------------------------------- private double getShukkinDays(MTYSDataSet.勤務票ヘッダRow r) { double sVal = 0; double sShDays = r.計算用出勤日数; double sSeDays = r.生理分娩日数; double sKeDays = r.勤日数合計; double sYukyu = 0; double sYukyu1 = r.休日数合計; double sYukyu2 = r.休日数2; double sTokDays = r.特休日数合計; // 小数点以下あり有給日数 sYukyu = (sYukyu1 * 10 + sYukyu2) / 10; // 出勤日数算出 sVal = sShDays - sSeDays - sKeDays - sYukyu - sTokDays; return(sVal); }
///------------------------------------------------------------------------------------ /// <summary> /// データを画面に表示します </summary> /// <param name="iX"> /// ヘッダデータインデックス</param> ///------------------------------------------------------------------------------------ private void showOcrData(int iX) { // 勤務票ヘッダテーブル行を取得 //MTYSDataSet.勤務票ヘッダRow r = (MTYSDataSet.勤務票ヘッダRow)dts.勤務票ヘッダ.Rows[iX]; // 2015/10/30 MTYSDataSet.勤務票ヘッダRow r = (MTYSDataSet.勤務票ヘッダRow)dts.勤務票ヘッダ.Single(a => a.ID == sKey[iX]); // フォーム初期化 formInitialize(dID, iX); // ヘッダ情報表示 txtYear.Text = Utility.EmptytoZero(r.年.ToString()); txtMonth.Text = Utility.EmptytoZero(r.月.ToString()); global.ChangeValueStatus = false; // チェンジバリューステータス txtNo.Text = string.Empty; global.ChangeValueStatus = true; // チェンジバリューステータス txtNo.Text = Utility.EmptytoZero(r.人番号.ToString()); // 社員番号 // 時間合計欄 txtZangyoTL.Text = r.残業時.ToString() + ":" + r.残業分.ToString().PadLeft(2, '0'); txtShinyaTL.Text = r.深夜時.ToString() + ":" + r.深夜分.ToString().PadLeft(2, '0'); txtKyujitsuTL.Text = r.休日勤務時.ToString() + ":" + r.休日勤務分.ToString().PadLeft(2, '0'); txtChikokuTL.Text = r.遅刻時間時.ToString() + ":" + r.遅刻時間分.ToString().PadLeft(2, '0'); txtSoutaiTL.Text = r.早退時間時.ToString() + ":" + r.早退時間分.ToString().PadLeft(2, '0'); // 日数合計欄 txtShukkin.Text = r.出勤日数合計.ToString() + "." + r.出勤日数2.ToString(); txtYukyu.Text = r.休日数合計.ToString() + "." + r.休日数2.ToString(); txtTokukyu.Text = r.特休日数合計.ToString(); txtKekkin.Text = r.勤日数合計.ToString(); txtSeiri.Text = r.生理分娩日数.ToString(); txtJisa.Text = r.時差出勤日数.ToString(); txtHoanH.Text = r.平日保安回数.ToString(); txtHoanK.Text = r.休日保安回数.ToString(); txtShukuH.Text = r.平日宿日直回数.ToString(); txtShukuK.Text = r.休日宿日直回数.ToString(); txt1L.Text = r._1L勤回数.ToString(); txt2Kin.Text = r._2勤回数.ToString(); txtMaru3Kin.Text = r.丸3勤回数.ToString(); txt3Kin.Text = r._3勤回数.ToString(); txtshukujitsu.Text = r.日祝日勤務回数.ToString(); txtKoujyoNissu.Text = r.控除日数.ToString(); // 帳票種別表示 global gl = new global(); label4.Text = r.帳票番号.ToString(); if (r.帳票番号 > 0 && r.帳票番号 <= gl.arrayChohyoID.Length) { label27.Text = gl.arrayChohyoID[r.帳票番号 - 1]; } // 日別勤怠表示 showItem(r.帳票番号.ToString(), r.ID, dGV, r.年.ToString(), r.月.ToString()); // エラー情報表示初期化 lblErrMsg.Visible = false; lblErrMsg.Text = string.Empty; // 画像表示 ShowImage(global.pblImagePath + r.画像名.ToString()); if (cSR != null) { OCRData ocr = new OCRData(); // 計算用出勤日数を取得 int days = ocr.getWorkDays(1, Utility.StrtoInt(txtYear.Text), Utility.StrtoInt(txtMonth.Text), r.帳票番号, cSR.大阪製造部勤務グループ); txtKeisanDays.Text = days.ToString(); // 印刷用出勤日数を取得 days = ocr.getWorkDays(0, Utility.StrtoInt(txtYear.Text), Utility.StrtoInt(txtMonth.Text), r.帳票番号, cSR.大阪製造部勤務グループ); lblNissu.Text = days.ToString(); } }
/// ------------------------------------------------------------------------------------------ /// <summary> /// 該当月1日からの「累計残業時間及び日曜を除く休日勤務時間」が60Hを超えた日以降の平日の /// 残業時間数および日曜を除く休日勤務時間数を算出する </summary> /// <param name="r"> /// MTYSDataSet.勤務票ヘッダRow</param> /// <param name="zan60"> /// 60Hを超えた日以降の平日の残業時間数</param> /// <param name="kyujitsu60"> /// 60Hを超えた日以降の日曜を除く休日勤務時間数</param> /// <returns> /// true:終了</returns> /// ------------------------------------------------------------------------------------------ private bool getOver60ZanTime(MTYSDataSet.勤務票ヘッダRow r, out int zan60, out int kyujitsu60) { int zanKyu = 0; int zan = 0; int kyujitsu = 0; bool over60 = false; DateTime eDate; string w = string.Empty; zan60 = 0; // 残業60H超・平日 kyujitsu60 = 0; // 残業60H超・休日 var s = _mTbl.Where(a => a.ヘッダID == r.ID).OrderBy(a => a.ID); foreach (var t in s) { string sDate = r.年.ToString() + "/" + r.月.ToString() + "/" + t.日付; // 存在する日付と認識された場合 if (DateTime.TryParse(sDate, out eDate)) { // 曜日を取得する w = ("日月火水木金土").Substring(int.Parse(eDate.DayOfWeek.ToString("d")), 1); zan = Utility.StrtoInt(t.時間外時) * 60 + Utility.StrtoInt(t.時間外分); // 残業時間有り if (zan > 0) { // 残業時間加算 zanKyu += zan; // 60H超チェック if (zanKyu > 3600) { // 2015/10/29 土曜日が平日扱いの日を条件に追加 if (w == "月" || w == "火" || w == "水" || w == "木" || w == "金" || w == "土") { if (!over60) { // 今、60Hを超えたので60Hを超えた分をセット zan60 = zanKyu - 3600; // ステータスを60H超えにする over60 = true; } else { // 既に60Hを超えているのでそのまま60H超平日残業時間に加算 zan60 += zan; } } } } // 日曜日以外の休日勤務時間数 if (w != "日") { kyujitsu = Utility.StrtoInt(t.休日出勤時) * 60 + Utility.StrtoInt(t.休日出勤分); if (kyujitsu > 0) { // 休日勤務時間加算 zanKyu += kyujitsu; // 60H超チェック if (zanKyu > 3600) { if (!over60) { // 今、60Hを超えたので60Hを超えた分をセット kyujitsu60 = zanKyu - 3600; // ステータスを60H超えにする over60 = true; } else { // 既に60Hを超えているのでそのまま60H超休日勤務時間に加算 kyujitsu60 += kyujitsu; } } } } } } return(true); }
///---------------------------------------------------------------------------------- /// <summary> /// 給与計算用受入データ集計処理</summary> /// <param name="m"> /// MTYSDataSet.勤務票ヘッダRow</param> ///---------------------------------------------------------------------------------- private void setDataShain(MTYSDataSet.勤務票ヘッダRow r) { try { sShainNo = r.人番号.ToString(); sName = r.氏名; sFuri = Utility.NulltoStr(r.フリガナ); sShukkinSubekiDays = (r.計算用出勤日数 - r.生理分娩日数).ToString(); // 2014/10/10 計算用日数で出勤日数を再計算する double sDays = getShukkinDays(r); int d1 = (int)System.Math.Floor(sDays); int d2 = (int)((sDays * 10) % 10); sShukkinDays = d1.ToString() + "." + d2.ToString(); sKekkinDays = r.勤日数合計.ToString() + ".0"; sYuKyuDays = r.休日数合計.ToString() + "." + r.休日数2.ToString(); sTokuKyuDays = r.特休日数合計.ToString() + ".0"; sSeiriDays = r.生理分娩日数.ToString() + ".0"; sChikokuH = hhmmTo30min(r.遅刻時間時, r.遅刻時間分); sSoutaiH = hhmmTo30min(r.早退時間時, r.早退時間分); sZanH = hhmmTo30min(r.残業時, r.残業分); sShinyaH = hhmmTo30min(r.深夜時, r.深夜分); sKyujitsuH = hhmmTo30min(r.休日勤務時, r.休日勤務分); sShukuH = r.平日宿日直回数.ToString(); sShukuK = r.休日宿日直回数.ToString(); sHoanH = r.平日保安回数.ToString(); sHoanK = r.休日保安回数.ToString(); sJisaDays = r.時差出勤日数.ToString(); s1LKinDays = r._1L勤回数.ToString(); s2KinDays = r._2勤回数.ToString(); sMaru3KinDays = r.丸3勤回数.ToString(); s3KinDays = r._3勤回数.ToString(); sShukujitsuDays = r.日祝日勤務回数.ToString(); sKoujyoDays = r.控除日数.ToString(); // 60時間超残業・日曜以外休日勤務時間を取得 int zan60 = 0; int kyujitsu60 = 0; getOver60ZanTime(r, out zan60, out kyujitsu60); // 残業60H超・平日 if (zan60 > 0) { sZan60HH = (zan60 / 60).ToString(); sZan60MH = (zan60 - (Utility.StrtoInt(sZan60HH) * 60)).ToString(); sZan60HH = sZan60HH + "." + sZan60MH.PadLeft(2, '0'); } else { sZan60HH = "0.00"; } // 残業60H超・休日 if (kyujitsu60 > 0) { sZan60HK = (kyujitsu60 / 60).ToString(); sZan60MK = (kyujitsu60 - (Utility.StrtoInt(sZan60HK) * 60)).ToString(); sZan60HK = sZan60HK + "." + sZan60MK.PadLeft(2, '0'); } else { sZan60HK = "0.00"; } } catch (Exception e) { MessageBox.Show("給与計算用受入データ作成中" + Environment.NewLine + e.Message, "エラー", MessageBoxButtons.OK); } }