You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

595 lines
23 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.Sql;
  6. using System.Data.SqlClient;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using ManagementSystem.Utility;
  13. namespace ManagementSystem
  14. {
  15. public partial class HRDataCorrect : Form
  16. {
  17. //程式內共用物件
  18. string strFrmStatus = ""; //表單狀態
  19. string strActiveUserID = ""; //取得登入作用的使用者帳號
  20. SqlConnection sqlConn = UtilityClass.GetConn(MainForm.strAccountingBookID);
  21. SqlCommand sqlCmd = new SqlCommand();
  22. string strPKey = ""; //程式內的Key值
  23. string strKey = ""; //程式內加密的Key值
  24. public HRDataCorrect()
  25. {
  26. InitializeComponent();
  27. }
  28. #region 自定義程式
  29. private string CheckForm() //確認畫面必填欄位
  30. {
  31. string strResult = "";
  32. return strResult;
  33. }
  34. private void SetupStatus() //畫面載入設定
  35. {
  36. try
  37. {
  38. strActiveUserID = MainForm.strActiveUserID;
  39. strKey = MainForm.strKey;
  40. if (MainForm.strKey == "")
  41. {
  42. //設定Toolbar初始狀態
  43. tsbSave.Enabled = false;
  44. tsbDelete.Enabled = false;
  45. }
  46. //設定畫面初始狀態
  47. GetMemberData();
  48. CleanForm();
  49. CleanToolbar();
  50. LockForm();
  51. }
  52. catch (Exception ex)
  53. {
  54. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  55. }
  56. }
  57. private void GetMemberData() //取得成員資料
  58. {
  59. try
  60. {
  61. string strSQL = "Select MemberID, MemberName, IsOutside From OTB_SYS_Members Where Effective = 'Y' And IsNull(IsOutside, 'N') = 'N'";
  62. //進行查詢
  63. dgvHRItem.DataSource = UtilityClass.GetSQLResult(strSQL).Tables["Result"];
  64. Application.DoEvents();
  65. }
  66. catch (Exception ex)
  67. {
  68. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  69. }
  70. }
  71. private void LockForm() //限制唯讀物件
  72. {
  73. }
  74. private void UnLockForm() //解除限制唯讀物件
  75. {
  76. }
  77. private void StatusChange(string strStatus) //變更主畫面狀態
  78. {
  79. switch (strStatus.ToUpper())
  80. {
  81. case "NONE":
  82. ((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "";
  83. strFrmStatus = "";
  84. CleanForm();
  85. CleanToolbar();
  86. dgvHRItem.ReadOnly = false;
  87. break;
  88. case "SEARCH":
  89. tsbSearch.Visible = false;
  90. tsbEdit.Enabled = false;
  91. tsbDelete.Enabled = false;
  92. tsbOK.Visible = true;
  93. tsbCancel.Visible = true;
  94. ((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "搜尋";
  95. strFrmStatus = "SEARCH";
  96. break;
  97. case "ADD":
  98. ((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "新增";
  99. strFrmStatus = "ADD";
  100. break;
  101. case "MODIFY":
  102. tsbSearch.Enabled = false;
  103. tsbEdit.Visible = false;
  104. tsbSave.Visible = true;
  105. tsbDelete.Enabled = false;
  106. tsbCancel.Visible = true;
  107. ((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "修改";
  108. strFrmStatus = "MODIFY";
  109. break;
  110. case "DEL":
  111. tsbDelete.Visible = false;
  112. tsbSearch.Enabled = false;
  113. tsbEdit.Enabled = false;
  114. ((MainForm)ParentForm).SsStatus.Items["tsslStatus"].Text = "刪除";
  115. strFrmStatus = "DEL";
  116. break;
  117. }
  118. }
  119. private void CleanToolbar() //清除工具列
  120. {
  121. //設定Toolbar狀態
  122. tsbSearch.Enabled = false;
  123. tsbSearch.Visible = false;
  124. tsbEdit.Enabled = false;
  125. tsbEdit.Visible = false;
  126. tsbDelete.Enabled = false;
  127. tsbDelete.Visible = false;
  128. tsbSave.Visible = false;
  129. tsbOK.Visible = false;
  130. tsbCancel.Visible = false;
  131. }
  132. private void CleanForm() //清除畫面
  133. {
  134. //GetMemberData();
  135. cbStartDate.Checked = false;
  136. cbEndDate.Checked = false;
  137. cbSubject.Checked = false;
  138. txtSubject.Text = "";
  139. txtDescription.Text = "";
  140. cbProjectNumber.Checked = false;
  141. txtProjectNumber.Text = "";
  142. txtEventID.Text = "";
  143. Application.DoEvents();
  144. }
  145. private void AddEven() //新增事件
  146. {
  147. try
  148. {
  149. //本功能無新增功能
  150. }
  151. catch (Exception ex)
  152. {
  153. throw ex;
  154. }
  155. }
  156. private void SaveEven() //儲存事件
  157. {
  158. try
  159. {
  160. StringBuilder sbSQL = new StringBuilder();
  161. switch (tbPage.SelectedTab.Name.ToString())
  162. {
  163. case "tbPage1": //更正工作資料及狀態
  164. string strEventID = txtEventID.Text.Trim();
  165. if (cbProjectNumber.Checked)
  166. sbSQL.AppendLine("Update OTB_MNG_DayWork Set ProjectNumber = '" + txtProjectNumber.Text.Trim() + "', Worktype = 'Prj' Where EventID = '" + strEventID + "';");
  167. if(cbSubject.Checked)
  168. sbSQL.AppendLine("Update OTB_MNG_DayWork Set Subject = '" + txtSubject.Text.Trim() + "', description = '" + txtDescription.Text.Trim() + "' Where EventID = '" + strEventID + "';");
  169. if (cbStartDate.Checked)
  170. sbSQL.AppendLine("Update OTB_MNG_DayWork Set StartDate = '" + dtPickStart.Text.Trim() + "' Where EventID = '" + strEventID + "';");
  171. if (cbEndDate.Checked)
  172. sbSQL.AppendLine("Update OTB_MNG_DayWork Set EndDate = '" + dtPickEnd.Text.Trim() + "' Where EventID = '"+ strEventID + "';");
  173. break;
  174. case "tbPage2": //更正加班資料
  175. sbSQL.AppendLine("Declare @EventID char(36);");
  176. foreach (DataGridViewRow row in dgvDetail1.Rows)
  177. {
  178. if (!UtilityClass.IsExist("Select * from OTB_MNG_DayWork Where UserID = '" + row.Cells["cMemberIDDetail"].Value.ToString() + "' And EndDate ='" + row.Cells["cSignOutTime"].Value.ToString() + "'"))
  179. {
  180. if (row.Cells["cSelected"].Value != null)
  181. {
  182. //查詢卻變更的EventID
  183. sbSQL.AppendLine(" Select Top 1 @EventID = EventID From OTB_MNG_DayWork Where UserID = '" + row.Cells["cMemberIDDetail"].Value.ToString() + "' And convert(varchar,EndDate,23) = '" + row.Cells["cSignOutTime"].Value.ToString().Substring(0, 10) + "' Order By EndDate DESC;");
  184. //進行變更
  185. sbSQL.AppendLine(" Insert Into OTB_MNG_DayWork(OrganizationID, UserID, EventID, Subject, Description, StartDate, EndDate, IsPublic, Skin, Memo, CreateUser, CreateDate, ProjectNumber, Worktype, Comment, WeekPlanID)");
  186. sbSQL.AppendLine(" Select OrganizationID, UserID, NewID() AS EventID, Subject, Description, EndDate AS StartDate, '" + row.Cells["cSignOutTime"].Value.ToString() + "' AS EndDate, IsPublic, Skin, '加班' as Memo, CreateUser,CreateDate, ProjectNumber, Worktype ,Comment, WeekPlanID");
  187. sbSQL.AppendLine(" From OTB_MNG_DayWork Where EventID = @EventID;");
  188. }
  189. }
  190. }
  191. break;
  192. case "tbPage3": //更正簽到資料
  193. if(cbSignIn1.Checked)
  194. {
  195. sbSQL.AppendLine("Update OTB_HR_CheckAttendance Set SignTime = '" + dtPickerSignIn.Text.Trim() + "' Where SignID ='" + dgvDetail2.CurrentRow.Cells["clSignID"].Value.ToString() +"' And MemberID = '" + dgvDetail2.CurrentRow.Cells["clMemberID"].Value.ToString() + "';");
  196. }
  197. if (cbSignOut1.Checked)
  198. {
  199. sbSQL.AppendLine("Update OTB_HR_CheckAttendance Set SignOutTime = '" + dtPickerSignOut.Text.Trim() + "' Where SignID ='" + dgvDetail2.CurrentRow.Cells["clSignID"].Value.ToString() + "' And MemberID = '" + dgvDetail2.CurrentRow.Cells["clMemberID"].Value.ToString() + "';");
  200. }
  201. break;
  202. }
  203. using (SqlDataAdapter sqlAdapter = new SqlDataAdapter())
  204. {
  205. sqlAdapter.UpdateCommand = new SqlCommand();
  206. sqlAdapter.UpdateCommand.Connection = sqlConn;
  207. sqlAdapter.UpdateCommand.CommandText = sbSQL.ToString();
  208. if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
  209. {
  210. sqlConn.Open();
  211. }
  212. sqlAdapter.UpdateCommand.ExecuteNonQuery();
  213. }
  214. MessageBox.Show("儲存成功", "提示");
  215. StatusChange("None");
  216. LockForm();
  217. }
  218. catch (Exception ex)
  219. {
  220. MessageBox.Show("儲存失敗","提示");
  221. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  222. }
  223. }
  224. private void DelEven() //刪除事件
  225. {
  226. StringBuilder sbSQL = new StringBuilder();
  227. try
  228. {
  229. string strEventID = txtEventID.Text.Trim();
  230. //執行Delete命令
  231. sbSQL.Append("Delete From OTB_MNG_DayWork Where EventID = '" + strEventID + "'");
  232. using (SqlDataAdapter sqlAdapter = new SqlDataAdapter())
  233. {
  234. sqlAdapter.DeleteCommand = new SqlCommand();
  235. sqlAdapter.DeleteCommand.Connection = sqlConn;
  236. sqlAdapter.DeleteCommand.CommandText = sbSQL.ToString();
  237. if (sqlConn.State == ConnectionState.Closed) //判斷連線狀態
  238. {
  239. sqlConn.Open();
  240. }
  241. sqlAdapter.DeleteCommand.ExecuteNonQuery();
  242. }
  243. //執行命令
  244. MessageBox.Show("刪除成功", "提示");
  245. StatusChange("None");
  246. LockForm();
  247. }
  248. catch (Exception ex)
  249. {
  250. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  251. }
  252. }
  253. private void GoEvent() //執行事件
  254. {
  255. try
  256. {
  257. StringBuilder strSQL = new StringBuilder("");
  258. switch (strFrmStatus.ToString())
  259. {
  260. case "SEARCH": //搜尋
  261. break;
  262. }
  263. StatusChange("None");
  264. LockForm();
  265. }
  266. catch (Exception ex)
  267. {
  268. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  269. }
  270. }
  271. #endregion
  272. #region 事件觸發及問題處理
  273. private void tsbAdd_Click(object sender, EventArgs e)
  274. {
  275. try
  276. {
  277. CleanToolbar();
  278. tsbSearch.Enabled = false;
  279. tsbEdit.Enabled = false;
  280. tsbSave.Visible = true;
  281. CleanForm();
  282. UnLockForm();
  283. StatusChange("ADD");
  284. }
  285. catch (Exception ex)
  286. {
  287. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  288. }
  289. }
  290. private void tsbEdit_Click(object sender, EventArgs e)
  291. {
  292. try
  293. {
  294. if (strPKey == "")
  295. {
  296. MessageBox.Show("請先選擇資料", "提示");
  297. return;
  298. }
  299. CleanToolbar();
  300. UnLockForm();
  301. StatusChange("Modify");
  302. }
  303. catch (Exception ex)
  304. {
  305. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  306. }
  307. }
  308. private void tsbSave_Click(object sender, EventArgs e)
  309. {
  310. try
  311. {
  312. string strMessage = CheckForm();
  313. if (strMessage == "")
  314. {
  315. this.SaveEven();
  316. //GetMemberData(strPKey);
  317. }
  318. else
  319. {
  320. MessageBox.Show(strMessage,"提示");
  321. }
  322. }
  323. catch (Exception ex)
  324. {
  325. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  326. }
  327. }
  328. private void tsbDelete_Click(object sender, EventArgs e)
  329. {
  330. try
  331. {
  332. if (MessageBox.Show("請問您確定要刪除本資料?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
  333. {
  334. this.DelEven();
  335. }
  336. }
  337. catch (Exception ex)
  338. {
  339. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  340. }
  341. }
  342. private void tsbSearch_Click(object sender, EventArgs e)
  343. {
  344. try
  345. {
  346. //設定Toolbar狀態
  347. CleanToolbar();
  348. //開放查詢條件
  349. UnLockForm();
  350. //設定畫面物件狀態
  351. CleanForm();
  352. StatusChange("Search");
  353. }
  354. catch (Exception ex)
  355. {
  356. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  357. }
  358. }
  359. private void tsbOK_Click(object sender, EventArgs e)
  360. {
  361. try
  362. {
  363. GoEvent();
  364. //還原Toolbar狀態
  365. tsbSearch.Enabled = true;
  366. tsbOK.Visible = false;
  367. //關閉查詢條件
  368. LockForm();
  369. StatusChange("Search");
  370. }
  371. catch (Exception ex)
  372. {
  373. ErrorHandler.WriteErrorLog("HRDataCorrect.cs", ex);
  374. }
  375. }
  376. private void tsbCancel_Click(object sender, EventArgs e)
  377. {
  378. CleanForm();
  379. CleanToolbar();
  380. LockForm();
  381. StatusChange("None");
  382. }
  383. private void HRDataCorrect_Load(object sender, EventArgs e)
  384. {
  385. SetupStatus(); //設定畫面狀態
  386. }
  387. private void tsbExit_Click(object sender, EventArgs e)
  388. {
  389. this.Close();
  390. }
  391. private void tsbClean_Click(object sender, EventArgs e)
  392. {
  393. CleanForm();
  394. }
  395. #endregion
  396. private void dgvHRItem_CellClick(object sender, DataGridViewCellEventArgs e)
  397. {
  398. txtEventID.Text = "";
  399. GetCurrentData();
  400. }
  401. private void GetCurrentData()
  402. {
  403. StringBuilder strSQL = new StringBuilder();
  404. switch (tbPage.SelectedTab.Name.ToString())
  405. {
  406. case "tbPage1":
  407. //更新工作資料及狀態
  408. strSQL.Append(" Select EventID,Subject, description, StartDate, EndDate, ProjectNumber, Worktype From OTB_MNG_DayWork Where 1 = 1 and UserID = '" + (string)dgvHRItem.CurrentRow.Cells["cMemberID"].Value + "' ");
  409. strSQL.Append(" And StartDate Between '" + dpStart.Text.ToString() + " 00:00:00' And '" + dpEnd.Text.ToString() + " 23:59:59'");
  410. strSQL.Append(" Order by StartDate");
  411. //進行查詢
  412. dgvDetail.DataSource = UtilityClass.GetSQLResult(strSQL.ToString()).Tables["Result"];
  413. Application.DoEvents();
  414. break;
  415. case "tbPage2":
  416. //更正加班資料
  417. strSQL.Append(" Select Trim(MemberID) MemberID, convert(varchar,SignTime,120) SignTime, convert(varchar,SignOutTime,120) SignOutTime From OTB_HR_CheckAttendance Where SignID Between '" + dpStart.Text.ToString().Replace("-","") +"' And '" + dpEnd.Text.ToString().Replace("-", "") + "'");
  418. strSQL.Append(" And MemberID = '" + (string)dgvHRItem.CurrentRow.Cells["cMemberID"].Value + "' And SignOutTime is not null And Convert(varchar(50), SignOutTime,108) >= '19:00:00'");
  419. strSQL.Append(" And Not Exists(Select * From OTB_MNG_DayWork Where UserID = '" + (string)dgvHRItem.CurrentRow.Cells["cMemberID"].Value + "' And EndDate > '" + dpEnd.Text.ToString() + " 19:00:00' And convert(varchar, EndDate, 23) = convert(varchar, " + dpEnd.Text.ToString() + ", 23))"); //未填寫加班匯報
  420. dgvDetail1.DataSource = UtilityClass.GetSQLResult(strSQL.ToString()).Tables["Result"];
  421. Application.DoEvents();
  422. break;
  423. case "tbPage3":
  424. //更正打卡資料
  425. strSQL.Append(" Select B.SignID,A.MemberID, A.MemberName, B.SignTime, B.SignOutTime From OTB_SYS_Members A left Join OTB_HR_CheckAttendance B on A.MemberID = B.MemberID ");
  426. strSQL.Append(" Where 1 = 1 ");
  427. strSQL.Append(" and A.Effective = 'Y' ");
  428. strSQL.Append(" and A.AskLeaveGuid in ('28fec832-43bc-4a80-9d90-0036f0afb979', '2b312d72-ea6b-4a31-b94f-a506349558e2', '86C99B29-90B5-44EB-A7A8-172D319EAB66', '9e6e5f9f-fdb3-4da5-81d5-f5aba85acafd') ");
  429. strSQL.Append(" and SignID Between '" + dpStart.Text.ToString().Replace("-","") + "' and '" + dpEnd.Text.ToString().Replace("-", "") + "'");
  430. strSQL.Append(" And A.MemberID = '" + (string)dgvHRItem.CurrentRow.Cells["cMemberID"].Value + "'");
  431. strSQL.Append(" Order by SignID DESC");
  432. dgvDetail2.DataSource = UtilityClass.GetSQLResult(strSQL.ToString()).Tables["Result"];
  433. Application.DoEvents();
  434. break;
  435. }
  436. }
  437. private void btnUpdate_Click(object sender, EventArgs e)
  438. {
  439. SaveEven();
  440. int intNowRow = dgvDetail.Rows.IndexOf(dgvDetail.CurrentRow);
  441. CleanForm();
  442. GetCurrentData();
  443. dgvDetail.Rows[intNowRow].Selected = true;
  444. }
  445. private void btnUpdate1_Click(object sender, EventArgs e)
  446. {
  447. int intSelectedCount = 0;
  448. foreach (DataGridViewRow row in dgvDetail1.Rows)
  449. {
  450. if (row.Cells["cSelected"].Value != null)
  451. {
  452. if ((bool)row.Cells["cSelected"].Value == true)
  453. {
  454. intSelectedCount += 1;
  455. }
  456. }
  457. }
  458. if (intSelectedCount > 0)
  459. {
  460. SaveEven();
  461. CleanForm();
  462. GetCurrentData();
  463. }
  464. }
  465. private void dgvDetail_CellClick(object sender, DataGridViewCellEventArgs e)
  466. {
  467. txtEventID.Text = (string)dgvDetail.CurrentRow.Cells["cEventID"].Value;
  468. dtPickEnd.Value = (DateTime)dgvDetail.CurrentRow.Cells["cEndDate"].Value;
  469. dtPickStart.Value = (DateTime)dgvDetail.CurrentRow.Cells["cStartDate"].Value;
  470. txtProjectNumber.Text = (string)dgvDetail.CurrentRow.Cells["cProjectNumber"].Value;
  471. txtSubject.Text = (string)dgvDetail.CurrentRow.Cells["cSubject"].Value;
  472. txtDescription.Text = (string)dgvDetail.CurrentRow.Cells["cDescription"].Value;
  473. }
  474. private void btnPickProject_Click(object sender, EventArgs e)
  475. {
  476. PickProject pkItemForm = new PickProject();
  477. pkItemForm.txtProjectNumber.Text = txtProjectNumber.Text.Trim();
  478. pkItemForm.strOwnerForm = "HRDataCorrect";
  479. pkItemForm.Owner = this;
  480. pkItemForm.StartPosition = FormStartPosition.CenterParent;
  481. pkItemForm.ShowDialog();
  482. }
  483. public void ReturnProjectInfo(string[] strProjectInfo) //回傳專案資料
  484. {
  485. txtProjectNumber.Text = strProjectInfo[0].ToString();
  486. }
  487. private void btnDEL_Click(object sender, EventArgs e)
  488. {
  489. if (MessageBox.Show("請問是否確認刪除資料?","確認",MessageBoxButtons.YesNo) == DialogResult.Yes)
  490. {
  491. DelEven();
  492. int intNowRow = dgvDetail.Rows.IndexOf(dgvDetail.CurrentRow);
  493. CleanForm();
  494. GetCurrentData();
  495. dgvDetail.Rows[intNowRow].Selected = true;
  496. }
  497. }
  498. private void tbPage_SelectedIndexChanged(object sender, EventArgs e)
  499. {
  500. txtEventID.Text = "";
  501. GetCurrentData();
  502. }
  503. private void btnUpdate2_Click(object sender, EventArgs e)
  504. {
  505. SaveEven();
  506. int intNowRow = dgvDetail2.Rows.IndexOf(dgvDetail2.CurrentRow);
  507. CleanForm();
  508. GetCurrentData();
  509. dgvDetail2.Rows[intNowRow].Selected = true;
  510. }
  511. private void dgvDetail2_CellClick(object sender, DataGridViewCellEventArgs e)
  512. {
  513. dtPickerSignIn.Value = (DateTime)dgvDetail2.CurrentRow.Cells["clSignIn"].Value;
  514. if (dgvDetail2.CurrentRow.Cells["clSignOut"].Value.GetType().ToString() != "System.DBNull")
  515. {
  516. dtPickerSignOut.Value = (DateTime)dgvDetail2.CurrentRow.Cells["clSignOut"].Value;
  517. }
  518. else
  519. {
  520. dtPickerSignOut.Value = (DateTime)dgvDetail2.CurrentRow.Cells["clSignIn"].Value;
  521. }
  522. }
  523. }
  524. }