private void save_quyet_dinh() { if (check_data_is_ok() == false) { return; } try { m_us_v_gd_cong_tac.BeginTransaction(); #region Xử lý file đính kèm switch (m_e_file_mode) { case DataEntryFileMode.UploadFile: // Kiểm tra file đã tồn tại trên server hay chưa if (FileExplorer.IsExistedFile(m_str_directory_to + FileExplorer.fileName)) { BaseMessages.MsgBox_Infor("Tên file đã tồn tại. Vui lòng đổi tên khác"); return; } // Nếu đã chọn file if (m_lbl_file_name.Text != "") { // Upload server có sử dụng user và pass if (m_str_user_name != "") { FileExplorer.UploadFile(m_str_domain, m_str_directory_to, m_str_user_name, m_str_password); } // Upload không sử dụng user và pass else { FileExplorer.UploadFile(m_str_domain, m_str_directory_to); } } break; case DataEntryFileMode.EditFile: // Nếu ko up lên file mới sẽ bỏ qua bước này if (m_str_link_old != m_lbl_file_name.Text) { // Kiểm tra file vừa upload đã tồn tại hay chưa if (FileExplorer.IsExistedFile(m_str_directory_to + FileExplorer.fileName)) { BaseMessages.MsgBox_Infor("Tên file đã tồn tại. Vui lòng đổi tên khác"); return; } // Xóa file cũ if (FileExplorer.IsExistedFile(m_str_directory_to + m_str_link_old)) { FileExplorer.DeleteFile(m_str_directory_to + m_str_link_old); } // Upload file mới lên if (m_str_user_name != "") { FileExplorer.UploadFile(m_str_domain, m_str_directory_to, m_str_user_name, m_str_password); } else { FileExplorer.UploadFile(m_str_domain, m_str_directory_to); } } break; case DataEntryFileMode.DeleteFile: // Kiểm tra file có tồn tại hay không if (FileExplorer.IsExistedFile(m_str_directory_to + m_str_link_old) == false) { BaseMessages.MsgBox_Infor("File không tồn tại!"); return; } FileExplorer.DeleteFile(m_str_directory_to + m_str_link_old); break; } #endregion #region Xử lý Quyết định form_2_us_object_quyet_dinh(); switch (m_e_form_mode) { case DataEntryFormMode.InsertDataState: if (is_exist_quyet_dinh(m_txt_ma_quyet_dinh.Text)) { BaseMessages.MsgBox_Error("Mã quyết định đã tồn tại."); m_txt_ma_quyet_dinh.Focus(); return; } m_us_v_gd_cong_tac.Insert(); break; case DataEntryFormMode.UpdateDataState: if (!m_txt_ma_quyet_dinh.Text.Equals(m_str_ma_quyet_dinh_old)) { if (is_exist_quyet_dinh(m_txt_ma_quyet_dinh.Text)) { BaseMessages.MsgBox_Error("Mã quyết định đã tồn tại."); m_txt_ma_quyet_dinh.Focus(); return; } } m_us_v_gd_cong_tac.Update(); break; } #endregion #region Xử lý nhân sự US_GD_CONG_TAC v_us_gd_cong_tac = new US_GD_CONG_TAC(); v_us_gd_cong_tac.UseTransOfUSObject(m_us_v_gd_cong_tac); form_to_us_cong_tac(v_us_gd_cong_tac, m_us_v_gd_cong_tac); v_us_gd_cong_tac.DeleteByID(m_us_dm_quyet_dinh.dcID); for (int i = m_fg.Rows.Fixed; i < m_fg.Rows.Count - 1; i++) { v_us_gd_cong_tac.dcID_NHAN_SU = CIPConvert.ToDecimal(m_fg[i, (int)e_col_Number.ID_NHAN_SU]); v_us_gd_cong_tac.datNGAY_DI = DateTime.Parse(m_fg[i, (int)e_col_Number.NGAY_DI].ToString()); v_us_gd_cong_tac.datNGAY_VE = DateTime.Parse(m_fg[i, (int)e_col_Number.NGAY_VE].ToString()); v_us_gd_cong_tac.strDIA_DIEM = m_fg[i, (int)e_col_Number.DIA_DIEM].ToString(); v_us_gd_cong_tac.strMO_TA_CONG_VIEC = m_fg[i, (int)e_col_Number.MO_TA_CONG_VIEC].ToString(); v_us_gd_cong_tac.Insert(); } #endregion #region Xử lý Quyết định - Pháp nhân US_GD_QUYET_DINH_PHAP_NHAN v_us_quyet_dinh_phap_nhan = new US_GD_QUYET_DINH_PHAP_NHAN(); v_us_quyet_dinh_phap_nhan.UseTransOfUSObject(m_us_v_gd_cong_tac); form_to_us_quyet_dinh_phap_nhan(v_us_quyet_dinh_phap_nhan, m_us_v_gd_cong_tac); if (m_e_form_mode == DataEntryFormMode.InsertDataState) { v_us_quyet_dinh_phap_nhan.Insert(); } #endregion m_us_v_gd_cong_tac.CommitTransaction(); BaseMessages.MsgBox_Infor("Lưu dữ liệu thành công."); this.Close(); } catch (Exception) { if (m_us_v_gd_cong_tac.is_having_transaction()) { m_us_v_gd_cong_tac.Rollback(); } throw; } }
/// <summary> /// Insert/Update vào Table DM_QUYET_DINH trước, nếu thành công thì tiếp tục với GD_LUONG_THEO_QD. /// Nếu GD_LUONG_THEO_QD gặp exception thì Rollback() bản ghi DM_QUYET_DINH đã Insert/Update trước đó. /// </summary> /// <returns>Trả về True nếu thành công</returns> private bool save_data() { US_GD_QUYET_DINH_PHAP_NHAN v_us_qd_pn; try { #region Validate Data // Nếu validate có vấn đề if (!validate_data()) { return(false); } #endregion // Chưa hiểu rõ về xử lý file lắm #region Xử lý file đính kèm // Xử lý file đính kèm switch (m_e_file_mode) { case DataEntryFileMode.UploadFile: // Kiểm tra file đã tồn tại trên server hay chưa if (FileExplorer.IsExistedFile(m_str_directory_to + FileExplorer.fileName)) { BaseMessages.MsgBox_Infor("Tên file đã tồn tại. Vui lòng đổi tên khác"); return(false); } // Nếu đã chọn file if (m_lbl_file_name.Text != "") { // Upload server có sử dụng user và pass if (m_str_user_name != "") { FileExplorer.UploadFile(m_str_domain, m_str_directory_to, m_str_user_name, m_str_password); } // Upload không sử dụng user và pass else { FileExplorer.UploadFile(m_str_domain, m_str_directory_to); } } break; case DataEntryFileMode.EditFile: // Nếu ko up lên file mới sẽ bỏ qua bước này if (m_str_previous_link != m_lbl_file_name.Text && m_lbl_file_name.Text != "") { // Kiểm tra file vừa upload đã tồn tại hay chưa if (FileExplorer.IsExistedFile(m_str_directory_to + FileExplorer.fileName)) { BaseMessages.MsgBox_Infor("Tên file đã tồn tại. Vui lòng đổi tên khác"); return(false); } // Xóa file cũ if (FileExplorer.IsExistedFile(m_str_directory_to + m_str_previous_link)) { FileExplorer.DeleteFile(m_str_directory_to + m_str_previous_link); } // Upload file mới lên if (m_str_user_name != "") { FileExplorer.UploadFile(m_str_domain, m_str_directory_to, m_str_user_name, m_str_password); } else { FileExplorer.UploadFile(m_str_domain, m_str_directory_to); } } break; case DataEntryFileMode.DeleteFile: // Kiểm tra file có tồn tại hay không if (FileExplorer.IsExistedFile(m_str_directory_to + m_str_previous_link) == false) { BaseMessages.MsgBox_Infor("File không tồn tại!"); return(false); } FileExplorer.DeleteFile(m_str_directory_to + m_str_previous_link); break; } #endregion m_us_v_gd_luong_theo_qd.BeginTransaction(); #region Prepare for update // Bởi vì ở đây ta cần Update bảng DM_QUYET_DINH nhưng mà nó lại relate với GD_LUONG_THEO_QD theo MA_QD chứ không phải ID // Do đó ở đây ta cần Update cột MA_QD trong GD_LUONG_THEO_QD thành NULL để có thể Update ở DM_QUYET_DINH if (m_e_form_mode == DataEntryFormMode.UpdateDataState) { load_data_2_us_gd_luong_theo_qd(); m_us_v_gd_luong_theo_qd.strMA_QD = String.Empty; m_us_v_gd_luong_theo_qd.Update(); } #endregion #region Save Quyết định load_data_2_us_qd(); // Commit trans thông qua US m_us_gd_luong_theo_qd. // Việc này giúp Rollback() - ngừng connection tới DB nếu xảy ra lỗi. m_us_dm_quyet_dinh.UseTransOfUSObject(m_us_v_gd_luong_theo_qd); switch (m_e_form_mode) { case DataEntryFormMode.InsertDataState: m_us_dm_quyet_dinh.Insert(); // Trực tiếp thêm vào DataBase thành công ở bước này. // throw new Exception("DucVT: DEBUG"); // Đã Test OK. Nếu giả sử ở bước này xảy ra lỗi thì sẽ catch exception gọi RollBack() và // Xóa đi bản ghi vừa được m_us_dm_quyet_dinh.Insert() khỏi DataBase ở dòng trên đây. #region Save Gd quyết định, pháp nhân v_us_qd_pn = new US_GD_QUYET_DINH_PHAP_NHAN(); v_us_qd_pn.dcID_PHAP_NHAN = CAppContext_201.getCurrentIDPhapnhan(); // Lấy Id của bản ghi quyết định vừa được Insert ở trên vào Table DM_QUYET_DINH v_us_qd_pn.dcID_QUYET_DINH = CUtils.get_current_auto_id("DM_QUYET_DINH"); // Commit trans thông qua US m_us_gd_luong_theo_qd. v_us_qd_pn.UseTransOfUSObject(m_us_v_gd_luong_theo_qd); // Insert gd quyết định, pháp nhân v_us_qd_pn.Insert(); #endregion break; case DataEntryFormMode.SelectDataState: break; case DataEntryFormMode.UpdateDataState: m_us_dm_quyet_dinh.Update(); break; case DataEntryFormMode.ViewDataState: break; default: break; } #endregion #region Save Gd lương theo quyết định load_data_2_us_gd_luong_theo_qd(); switch (m_e_form_mode) { case DataEntryFormMode.InsertDataState: m_us_v_gd_luong_theo_qd.Insert(); // Refresh mới lại form để insert bản ghi mới CUtils.show_success_message("Thêm thành công Lương theo quyết định mới"); reset_form(); break; case DataEntryFormMode.SelectDataState: break; case DataEntryFormMode.UpdateDataState: m_us_v_gd_luong_theo_qd.Update(); this.Close(); break; case DataEntryFormMode.ViewDataState: break; default: break; } #endregion m_us_v_gd_luong_theo_qd.CommitTransaction(); if (m_e_form_mode == DataEntryFormMode.UpdateDataState) { this.Close(); } } catch (Exception v_e) { if (m_us_v_gd_luong_theo_qd.is_having_transaction()) { m_us_v_gd_luong_theo_qd.Rollback(); } CDBExceptionHandler v_objErrHandler = new CDBExceptionHandler(v_e, new CDBClientDBExceptionInterpret()); v_objErrHandler.showErrorMessage(); return(false); } return(true); }