Ejemplo n.º 1
0
        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);
        }