Пример #1
0
        private void btnKetLuong_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            XL.SaveSetting(lastTenNVLapBieuLuong: tbTenNVLapbieuLuong.Text);

            //nếu đã kết lương tháng này rồi thì ko cho kết lương, phải hủy kết lương trước
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(m_Thang.Date, MyUtility.LastDayOfMonth(m_Thang)))
            {
                MessageBox.Show(string.Format("Tháng {0} đã kết lương! Trường hợp muốn kết lương lại tháng này yêu cầu hủy kết lương tháng và thực hiện kết lương lại.", m_Thang.ToString("MM/yyyy")),
                                Resources.Caption_ThongBao);
                return;
            }

            #endregion
            WaitWindow.Show(this.KetLuong, "Đang kết lương tháng. Bạn vui lòng đợi trong giây lát...");

            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName != string.Empty)
            {
                string saveFileName = saveFileDialog.FileName;
                WaitWindow.Show(this.XuatBBLuong, "Đang xuất bảng kết lương. Bạn vui lòng đợi...",
                                new object[] { tbTenNVLapbieuLuong.Text, saveFileName });
            }
        }
        private void btnThucHien_Click(object sender, EventArgs e)
        {
            #region kiểm tra kết nối csdl , nếu mất kết nối thì đóng

            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                ACMessageBox.Show(Resources.Text_MatKetNoiCSDL, Resources.Caption_Loi, 4000);
                Close();
                return;
            }

            #endregion

            if (XL.Kiemtra(MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value)) == false)
            {
                ACMessageBox.Show(string.Format("Tháng {0} chưa thực hiện kết lương.", dtpThang.Value.ToString("MM/yyyy")), Resources.Caption_ThongBao, 3000);
                return;
            }

            if (MessageBox.Show("Bạn muốn huỷ kết lương tháng " + dtpThang.Value.ToString("MM/yyyy"), Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            if (XL.HuyKetLuongThang(MyUtility.FirstDayOfMonth(dtpThang.Value)))
            {
                ACMessageBox.Show("Đã huỷ kết lương tháng " + dtpThang.Value.ToString("MM/yyyy"), Resources.Caption_ThongBao, 3000);
            }
            else
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }

            Close();
        }
Пример #3
0
        private void btnThem_Capnhat_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(m_thang.Date, MyUtility.LastDayOfMonth(m_thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "chỉnh sửa thu chi tháng", "thực hiện thao tác", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion


            #region lấy thông tin từ form

            int?macc = (int?)lbUserEnrollNumber.Tag;
            if (macc == null)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }
            double tamung = 0d, thuchiKhac = 0d, luongDieuchinh = 0d;
            float  mucDongBHXH = 0f;
            if (float.TryParse(tbMucDongBHXH.Text, out mucDongBHXH) == false)
            {
                ACMessageBox.Show("Mức đóng BHXH chưa hợp lệ. Vui lòng nhập lại.", Resources.Caption_Loi, 2000);
                return;
            }

            tamung         = Convert.ToDouble(numTamUng.Value);
            thuchiKhac     = Convert.ToDouble(numThuchiKhac.Value);
            luongDieuchinh = Convert.ToDouble(numLuongdieuchinh.Value);

            #endregion

            // thực hiện query
            int kq = DAO5.CapnhatThuchiThang((int)macc, m_thang, luongDieuchinh, tamung, thuchiKhac, mucDongBHXH);
            DAO5.GhiNhatKyThaotac("Thêm khoản thu chi tháng",
                                  string.Format("Thêm tạm ứng [{2}], lương điều chỉnh [{3}], mức đóng BHXH [{4}], thu chi khác [{5}] tháng [{0}]... cho 1 NV có mã chấm công [{1}]",
                                                m_thang.ToString("dd/MM/yyyy"), macc,
                                                tamung.ToString("###,###,###,###,###,##0"),
                                                luongDieuchinh.ToString("###,###,###,###,###,##0"),
                                                mucDongBHXH.ToString("#0.00"),
                                                thuchiKhac.ToString("###,###,###,###,###,##0")), maCC: macc);

            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            reloadGridDSThuChi();
        }
Пример #4
0
        private void btnXacNhanPC100_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(dtpNgayBD.Value.Date, dtpNgayKT.Value.Date))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "xem công", "xác nhận phụ cấp", "xem công"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion


            // xác định đang chọn datagrid nào để lấy các datarow của các datagrid đó
            DataGridView currDataGrid = XacDinhDataGridViewDangChon();

            // lọc lấy các datarow được check, nếu không có row nào được check thì chế độ view all, ngược lại thì xem các ngày được check
            if (currDataGrid.SelectedRows.Count != 0)
            {
                var arrRecord = (from DataGridViewRow row in currDataGrid.SelectedRows
                                 select(((DataRowView)row.DataBoundItem).Row)).ToArray();

                if (arrRecord.Length == 0)
                {
                    return;
                }

                frm_XN_PC100 frm112 = new frm_XN_PC100 {
                    StartPosition = FormStartPosition.CenterParent,
                    m_arrRecd     = arrRecord
                };
                //frm112.Location = new Point((int)((Size.Width - frm112.Size.Width) / 2f), (int)((Size.Height - frm112.Size.Height) / 2f));
                //frm112.m_DSNV = m_DSNV;
                frm112.ShowDialog();

                // lấy dsnv đang chọn
                var listNV = (from DataGridViewRow dataGridViewRow in dgrdDSNVTrgPhg.Rows
                              let rowView = dataGridViewRow.DataBoundItem as DataRowView
                                            where (rowView["check"] != DBNull.Value && (bool)rowView["check"])
                                            select(cUserInfo) rowView["cUserInfo"])
                             .ToList();

                if (frm112.IsReload)
                {
                    Reload4DataGrid(listNV);
                }
            }
        }
Пример #5
0
        private void btnThemXoaSuaDonGian_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(dtpNgayBD.Value.Date, dtpNgayKT.Value.Date))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "xem công", "chỉnh sửa giờ chấm công", "xem công"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            // xác định datagrid nào đang chọn thì lấy dòng SelectedRows[0] của datagrid đó
            DataGridView currDataGrid = XacDinhDataGridViewDangChon();

            if (currDataGrid.SelectedRows.Count == 0)
            {
                return;
            }
            var arrRecord = ((DataRowView)((currDataGrid.SelectedRows[0]).DataBoundItem)).Row;

            // gọi form editTime và truyền dòng dữ liệu đang chọn sang cho form đó
            var frm1 = new frm_XemCT_GioCC {
                StartPosition = FormStartPosition.CenterParent,
                selectedRow   = arrRecord
            };
            frm1.ShowDialog();

            #region             // sau khi edit giờ chấm công xong thì reload lại và tô màu 2 dataGrid tổng hợp và giờ KDQD

            if (frm1.IsReload)
            {
                // lấy dsnv đang chọn
                var listNV = (from DataGridViewRow dataGridViewRow in dgrdDSNVTrgPhg.Rows
                              let rowView = dataGridViewRow.DataBoundItem as DataRowView
                                            where (rowView["check"] != DBNull.Value && (bool)rowView["check"])
                                            select(cUserInfo) rowView["cUserInfo"])
                             .ToList();

                Reload4DataGrid(listNV);
            }

            #endregion
        }
        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1), new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, DateTime.DaysInMonth(dtpThang.Value.Year, dtpThang.Value.Month))))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo vắng", "xoá khai báo vắng", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }


            #endregion


            #region hỏi lại trước khi thực hiện

            if (MessageBox.Show(Resources.Text_XacNhanXoaKhaiBaoVang, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            dgrdNgayVang.EndEdit();
            dgrdNgayVang.Update();

            var arrRecord = (from DataGridViewRow dataGridViewRow in dgrdNgayVang.SelectedRows
                             select((DataRowView)dataGridViewRow.DataBoundItem)).ToList();
            if (arrRecord.Count == 0)
            {
                return;
            }

            var kqThaotac = DAO.XoaNgayVangNV(arrRecord);
            if (kqThaotac == false)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            GC.Collect();

            Thread.Sleep(20);
            btnLietKe.PerformClick();
        }
Пример #7
0
        private void btnXoaKBVang_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(dtpNgayBD.Value.Date, dtpNgayKT.Value.Date))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "xem công", "xoá khai báo vắng", "xem công"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            DataGridView currDataGrid = XacDinhDataGridViewDangChon();

            if (MessageBox.Show("Xoá các khai báo vắng của nhân viên với các ngày được chọn?", Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            if (currDataGrid.SelectedRows.Count != 0)
            {
                IEnumerable <dynamic> arrRecord = (from DataGridViewRow row in currDataGrid.SelectedRows
                                                   let rowViews = (DataRowView)row.DataBoundItem
                                                                  select new { MaCC = (int)rowViews["UserEnrollNumber"], NgayVang = (DateTime)rowViews["TimeStrNgay"] }).ToList();

                if (arrRecord.Any() == false)
                {
                    return;
                }

                string query = " delete from Absent where UserEnrollNumber = @UserEnrollNumber and TimeDate = @TimeDate ";
                foreach (dynamic obj in arrRecord)
                {
                    int kq = SqlDataAccessHelper.ExecNoneQueryString(
                        query,
                        new string[] { "@UserEnrollNumber", "@TimeDate" },
                        new object[] { obj.MaCC, obj.NgayVang });
                    DAO.GhiNhatKyThaotac("Xoá các khai báo vắng trong ngày",
                                         string.Format("Xoá tất cả khai báo vắng của NV có mã chấm công [{0}] trong ngày [{1}]", (int)obj.MaCC, ((DateTime)obj.NgayVang).ToString("dd/MM/yyyy")), maCC: (int)obj.MaCC);
                }
                btnXem.PerformClick();
            }
        }
Пример #8
0
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho cập nhật lương công nhật nếu tháng này đã đã kết lương

            if (XL.Kiemtra(m_thang, MyUtility.LastDayOfMonth(m_thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "cập nhật thông tin làm việc công nhật", "cập nhật thông tin làm việc công nhật", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            // lấy thông tin từ form
            var UserEnrollNumber = (lbUserEnrollNumber.Tag == null) ? -1 : (int)lbUserEnrollNumber.Tag;
            var DonGiaLuong      = (int)numDonGiaLuong.Value;
            var TamUng           = Convert.ToDouble(numTamUng.Value);

            #region update đơn giá lương , tạm ứng xuống csdl
            //info ko cần lưu thành tiền vì lúc lưu xuống đã tính thành tiền để có cơ sở tính lương, lúc lấy lên thì tính ra số tổng rồi mới xuất bb
            string query = @" 
update DSNVChiCongNhatThang 
set DonGiaLuong=@DonGiaLuong, TamUng=@TamUng 
where UserEnrollNumber=@UserEnrollNumber and Thang=@Thang ";
            int    kq2   = SqlDataAccessHelper.ExecNoneQueryString(query,
                                                                   new string[] { "@DonGiaLuong", "@TamUng", "@UserEnrollNumber", "@Thang" },
                                                                   new object[] { DonGiaLuong, TamUng, UserEnrollNumber, m_thang });
            DAO.GhiNhatKyThaotac("Cập nhật lương công nhật và tạm ứng",
                                 string.Format("Cập nhật đơn giá lương công nhật [{1}], tạm ứng [{2}] cho NV có mã chấm công [{0}]",
                                               UserEnrollNumber, DonGiaLuong.ToString(Settings.Default.numFormatMoney), TamUng.ToString(Settings.Default.numFormatMoney)), maCC: UserEnrollNumber);
            #endregion

            // sau khi cập nhật thì reload lại
            var table = DAO.LayTableCongNhat(m_thang);
            dgrdDSLuongCongnhat.DataSource = table;
            dgrdDSLuongCongnhat.ClearSelection();
        }
Пример #9
0
        private void btnThemKBVang_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(dtpNgayBD.Value.Date, dtpNgayKT.Value.Date))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "xem công", "khai báo vắng", "xem công"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }
            #endregion

            // xác định đang chọn datagrid nào để lấy các datarow của các datagrid đó
            DataGridView currDataGrid = XacDinhDataGridViewDangChon();

            if (currDataGrid.SelectedRows.Count != 0)
            {
                IEnumerable <dynamic> arrRecord = (from DataGridViewRow row in currDataGrid.SelectedRows
                                                   let rowViews = (DataRowView)row.DataBoundItem
                                                                  select new { MaCC = (int)rowViews["UserEnrollNumber"], NgayVang = (DateTime)rowViews["TimeStrNgay"] }).ToList();

                if (arrRecord.Any() == false)
                {
                    return;
                }

                frm_KBVang_Nhanh frm = new frm_KBVang_Nhanh {
                    StartPosition     = FormStartPosition.CenterParent,
                    listMaCC_NgayVang = arrRecord
                };
                frm.ShowDialog();
                if (frm.IsReload)
                {
                    btnXem.PerformClick();
                }
            }
        }
Пример #10
0
        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(m_thang.Date, MyUtility.LastDayOfMonth(m_thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "chỉnh sửa thu chi tháng", "thực hiện thao tác", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            #region lấy thông tin từ form

            int?macc = (int?)lbUserEnrollNumber.Tag;
            if (macc == null)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }

            #endregion

            // thực hiện query
            int kq = SqlDataAccessHelper.ExecNoneQueryString(
                " delete from DSThuChiThang where Thang=@Thang and UserEnrollNumber=@UserEnrollNumber ",
                new string[] { "@Thang", "@UserEnrollNumber" },
                new object[] { m_thang, macc });
            DAO5.GhiNhatKyThaotac("Xoá khoản thu chi tháng", string.Format("Xoá tạm ứng, lương điều chỉnh, mức đóng BHXH, thu chi khác tháng [{0}]... của 1 NV có mã chấm công [{1}]", m_thang.ToString("dd/MM/yyyy"), macc), maCC: macc);
            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }

            reloadGridDSThuChi();
        }
Пример #11
0
        private void btnXuatBangChiTiet_Click(object sender, EventArgs e)
        {
            if (XL.Kiemtra(m_Thang.Date, MyUtility.LastDayOfMonth(m_Thang)) == false)
            {
                MessageBox.Show(string.Format("Tháng {0} chưa kết lương!", m_Thang.ToString("MM/yyyy")), Resources.Caption_ThongBao);
                return;
            }

            if (saveFileDialog.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            if (saveFileDialog.FileName == string.Empty)
            {
                return;
            }

            string saveFileName = saveFileDialog.FileName;

            WaitWindow.Show(this.XuatBangChiTiet, "Đang xuất bảng chi tiết. Bạn vui lòng đợi...", saveFileName);
        }
        private void btnChamCong_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            /* 1. lấy dsnv check, lấy tháng
             *
             */
            string     strChecked_ArrMaCC = checkedDSNV.EditValue.ToString();
            List <int> arrMaCC            = new List <int>();

            strChecked_ArrMaCC.Split(',').ToList().ForEach(item => arrMaCC.Add(int.Parse(item)));
            DataTable tableArrMaCC = MyUtility.Array_To_DataTable("tableArrMaCC", arrMaCC);

            DateTime ngayDauThang  = MyUtility.FirstDayOfMonth(dateNavigator1.DateTime);
            DateTime ngayCuoiThang = MyUtility.FirstDayOfMonth(dateNavigator1.DateTime);

            //kiểm tra tình trạng kết công
            XL.Kiemtra(ngayDauThang, ngayCuoiThang);
            this.ChamCong(tableArrMaCC, ngayDauThang);
        }
Пример #13
0
        private void btnXoaTatcaDSThuchiThang_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(m_thang.Date, MyUtility.LastDayOfMonth(m_thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "chỉnh sửa thu chi tháng", "thực hiện thao tác", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            //xác nhận trước khi xóa
            string messContent = "Bạn muốn xóa tất cả danh sách thu chi tháng {0}?.";
            messContent = string.Format(messContent, m_thang.ToString("MM/yyyy"));
            if (MessageBox.Show(messContent, Resources.Caption_XacNhan) == DialogResult.No)
            {
                return;
            }

            // thực hiện query
            int kq = SqlDataAccessHelper.ExecNoneQueryString("delete from DSThuChiThang where thang=@Thang ", new string[] { "@Thang" }, new object[] { m_thang });
            DAO5.GhiNhatKyThaotac("Xoá tất cả khoản thu chi tháng", string.Format("Xoá tạm ứng, lương điều chỉnh, mức đóng BHXH, thu chi khác của TẤT CẢ NV tháng [{0}]", m_thang.ToString("dd/MM/yyyy")));

            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }

            reloadGridDSThuChi();
        }
        private void btnCapNhatVaoCSDL_Click(object sender, EventArgs e)
        {
            IsReload = true;
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(m_Thang.Date, MyUtility.LastDayOfMonth(m_Thang)))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "chỉnh sửa thu chi tháng", "thực hiện thao tác", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion


            var      table     = dgrdDThuchiExcel.DataSource as DataTable;
            DateTime thang     = m_Thang;
            var      flagError = false;

            #region xác nhận trước khi thực hiện

            if (
                MessageBox.Show(string.Format("Bạn muốn cập nhật cho tháng {0}?", thang.ToString("M/yyyy")), Resources.Caption_XacNhan,
                                MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            if (table != null)
            {
                var tableTatCaNV = XL.LayDSNV(true);                //tbd
                foreach (DataRow row in table.Rows)
                {
                    #region lấy thông tin

                    var userFullcode = row["UserFullCode"].ToString().TrimStart().TrimEnd().ToLower();
                    //var arrRows = tableTatCaNV.Select("UserFullCode = '" +userFullcode + "'","", DataViewRowState.CurrentRows);
                    var resultRow = (tableTatCaNV.Rows.Cast <DataRow>().Where(
                                         dataRow => dataRow["UserFullCode"].ToString().TrimStart().TrimEnd().ToLower() == userFullcode)).SingleOrDefault();
                    if (resultRow == null)
                    {
                        continue;
                    }
                    var tenNV             = resultRow["UserFullName"].ToString();
                    var UserEnrollNumber  = (int)resultRow["UserEnrollNumber"];
                    var luongdieuchinh    = (double)row["LuongDieuChinh"];
                    var tamung            = (double)row["TamUng"];
                    var thuchikhac        = (double)row["ThuChiKhac"];
                    var mucdongbhxhDouble = (double)row["MucDongBHXH"];
                    var mucdongbhxhFloat  = Convert.ToSingle(mucdongbhxhDouble);

                    #endregion

                    var kq = DAO.CapnhatThuchiThang(UserEnrollNumber, thang, luongdieuchinh, tamung, thuchikhac, mucdongbhxhFloat);

                    #region báo lỗi nếu ko cập nhật được

                    if (kq == 0)
                    {
                        flagError = true;
                        ACMessageBox.Show(string.Format("Xảy ra lỗi trong quá trình cập nhật tại vị trí nhân viên {0}, mã {1}.\nVui lòng thử lại.", tenNV,
                                                        userFullcode), "Lỗi", 3000);
                        break;
                    }

                    #endregion
                }
                if (flagError == false)
                {
                    ACMessageBox.Show("Thực hiện thành công.", "Thông báo", 2000);
                }
            }
        }
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            // lấy ngày check
            List <DateTime> DSNgayCheck = (from object item in checklistNgay.CheckedItems select(DateTime) item).ToList();

            if (DSNgayCheck.Count == 0)
            {
                ACMessageBox.Show("Bạn chưa chọn ngày vắng", "Thông báo", 2000);
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(DSNgayCheck[0], DSNgayCheck[DSNgayCheck.Count - 1]))
            {
                MessageBox.Show(String.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo vắng", "khai báo vắng", "khai báo vắng"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion


            #region hỏi lại trước khi thực hiện
            if (MessageBox.Show(Resources.Text_XacNhanThemKhaiVang, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            #endregion
            //1. lấy dữ liệu từ form
            dtpThang.Update();
            currMonth = dtpThang.Value;

            dgrdDSNVTrgPhg.EndEdit();
            dgrdDSNVTrgPhg.Update();

            BindingContext[dgrdDSNVTrgPhg.DataSource].EndCurrentEdit();
            //2. lấy danh sách nhân viên check, nếu chưa có nv nào check thì thông báo
            var listMaCC_NV = (from DataGridViewRow dataGridViewRow  in dgrdDSNVTrgPhg.Rows
                               let row = (DataRowView)dataGridViewRow.DataBoundItem
                                         where (row["check"] != DBNull.Value && (bool)row["check"])
                                         select((cUserInfo)row["cUserInfo"]).MaCC)
                              .ToList();

            if (listMaCC_NV.Count == 0)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);
                return;
            }

            // lấy loại vắng
            if (cbLoaiVang.SelectedItem == null)
            {
                ACMessageBox.Show("Bạn chưa chọn loại vắng", "Thông báo", 2000);
                return;
            }
            var rowLV = cbLoaiVang.SelectedItem as DataRowView;

            var   absentCode = rowLV["AbsentCode"].ToString();
            float workingDay = 0f;
            if (rad2Gio.Checked)
            {
                workingDay = 0.25f;
            }
            else if (radNuaNgay.Checked)
            {
                workingDay = 0.5f;
            }
            else if (rad1ngay.Checked)
            {
                workingDay = 1f;
            }
            else
            {
                workingDay = 0f;
            }
            var workingTime  = 0f;
            var phuCapString = maskedTextBox1.Text;
            var phuCapInt    = 0;
            var phuCapFloat  = 0f;
            if (int.TryParse(phuCapString, out phuCapInt) == false || phuCapString.Length < 3)
            {
                ACMessageBox.Show("Nhập phụ cấp chưa đúng định dạng.", Resources.Caption_Loi, 2000); return;
            }
            phuCapFloat = Convert.ToSingle(phuCapInt) / 100f;

            #region set working time tùy theo workingDay

            if (Math.Abs(workingDay - 0f) < 0.01f)
            {
                workingTime = 0f;
            }
            else if (Math.Abs(workingDay - 0.25f) < 0.01f)
            {
                workingTime = 2f;
            }
            else if (Math.Abs(workingDay - 0.5f) < 0.01f)
            {
                workingTime = 4f;
            }
            else if (Math.Abs(workingDay - 1f) < 0.01f)
            {
                workingTime = 8f;
            }

            #endregion

            if (Math.Abs(workingDay - 0.25f) < 0.01f)
            {
                if (!(absentCode.ToLower() == "p" || absentCode.ToLower() == "ro"))
                {
                    ACMessageBox.Show("Chưa hỗ trợ vắng 2 tiếng ngoài phép và việc riêng.", "Chức năng chưa được hỗ trợ", 3000);
                    return;
                }
            }

            var formatString = "[{0}] đã xin phép vắng [{1}] [{2}] ngày ngày [{3}]";
            var tableVang    = DAO.LietKeNgayVangChoNV(listMaCC_NV, DSNgayCheck.Min(), DSNgayCheck.Max());
            if (tableVang.Rows.Count > 0)
            {
                List <Warning> listWarning = new List <Warning>();
                foreach (var nv in listMaCC_NV)                  //duyệt từng nhân viên
                {
                    foreach (var ngay in DSNgayCheck)            // duyệt từng ngày check vắng của nhân viên
                    {
                        DateTime ngay1  = ngay;
                        int      nv1    = nv;
                        var      result = (from DataRow item in tableVang.Rows
                                           where (int)item["UserEnrollNumber"] == nv1 && (DateTime)item["TimeDate"] == ngay1
                                           select item).ToList();                                // lấy danh sách các xin phép vắng trong ngày xác định
                        if (result.Any())
                        {
                            // nếu có xin phép vắng thì ghi lại chuỗi các xin phép vắng đó
                            var userfullname = result[0]["UserFullName"].ToString();
                            listWarning.AddRange(result.Select(row123 => new Warning()
                            {
                                CB = "Đã có xin phép vắng",
                                ND = string.Format(formatString, userfullname, row123["AbsentCode"],
                                                   ((float)row123["Workingday"]).ToString("0.0#"),
                                                   ((DateTime)row123["TimeDate"]).ToString("dd/MM/yyyy"))
                            }));
                        }
                    }
                }

                // hiện form cảnh báo, nếu xác nhận tiếp tục thì thực hiện , ko thì dừng
                frmWarning frm = new frmWarning {
                    StartPosition = FormStartPosition.CenterParent
                };
                frm.listWarning = listWarning;
                frm.ShowDialog();
                if (frm.TiepTuc == false)
                {
                    return;
                }
            }

            IEnumerable <dynamic> tempList = (from macc in listMaCC_NV
                                              from ngay in DSNgayCheck
                                              select new { MaCC = macc, NgayVang = ngay });
            DAO.ThemNgayVang(tempList, workingDay, workingTime, phuCapFloat, absentCode);


            // sau khi thao tác xong thì clear check các ngày liệt kê lại
            chk2ExceptSat.Checked = false;
            chk2ExceptSun.Checked = false;
            for (int i = 0; i < checklistNgay.Items.Count; i++)
            {
                checklistNgay.SetItemChecked(i, false);
            }

            Thread.Sleep(20);
            btnLietKe.PerformClick();
        }
Пример #16
0
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            // lấy ngày check
            var ngayBD = dtpNgayBD.Value.Date;
            var ngayKT = dtpNgayKT.Value.Date;

            if (ngayBD > ngayKT)
            {
                MyUtility.Swap(ref ngayBD, ref ngayKT);
            }
            List <DateTime> DSNgayCheck = new List <DateTime>();

            for (DateTime indexNgay = ngayBD; indexNgay <= ngayKT; indexNgay = indexNgay.AddDays(1d))
            {
                DSNgayCheck.Add(indexNgay);
            }


            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(DSNgayCheck[0], DSNgayCheck[DSNgayCheck.Count - 1]))
            {
                MessageBox.Show(String.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo vắng", "khai báo vắng", "khai báo vắng"),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion

            #region hỏi lại trước khi thực hiện
            if (MessageBox.Show(Resources.Text_XacNhanThemKhaiVang, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            #endregion

            // lấy loại vắng
            if (cbLoaiVang.SelectedItem == null)
            {
                ACMessageBox.Show("Bạn chưa chọn loại vắng", "Thông báo", 2000);
                return;
            }
            var rowLV = cbLoaiVang.SelectedItem as DataRowView;

            var absentCode  = rowLV["AbsentCode"].ToString();
            var workingDay  = 1f;
            var workingTime = 8f;

            var formatString = "[{0}] đã xin phép vắng [{1}] [{2}] ngày ngày [{3}]";
            var tableVang    = DAO.LietKeNgayVangChoNV(listMaCC_NV, DSNgayCheck.Min(), DSNgayCheck.Max());

            if (tableVang.Rows.Count > 0)
            {
                List <Warning> listWarning = new List <Warning>();
                foreach (var nv in listMaCC_NV)                  //duyệt từng nhân viên
                {
                    foreach (var ngay in DSNgayCheck)            // duyệt từng ngày check vắng của nhân viên
                    {
                        DateTime ngay1  = ngay;
                        int      nv1    = nv;
                        var      result = (from DataRow item in tableVang.Rows
                                           where (int)item["UserEnrollNumber"] == nv1 && (DateTime)item["TimeDate"] == ngay1
                                           select item).ToList();                                // lấy danh sách các xin phép vắng trong ngày xác định
                        if (result.Any())
                        {
                            // nếu có xin phép vắng thì ghi lại chuỗi các xin phép vắng đó
                            var userfullname = result[0]["UserFullName"].ToString();
                            listWarning.AddRange(result.Select(row123 => new Warning()
                            {
                                CB = "Đã có xin phép vắng",
                                ND = string.Format(formatString, userfullname, row123["AbsentCode"],
                                                   ((float)row123["Workingday"]).ToString("0.0#"),
                                                   ((DateTime)row123["TimeDate"]).ToString("dd/MM/yyyy"))
                            }));
                        }
                    }
                }

                // hiện form cảnh báo, nếu xác nhận tiếp tục thì thực hiện , ko thì dừng
                frmWarning frm = new frmWarning {
                    listWarning = listWarning, WindowState = FormWindowState.Normal, StartPosition = FormStartPosition.CenterParent
                };
                //Point temp = XL2.GetCenterLocation(this.MdiParent.Size.Width, this.MdiParent.Size.Height, frm.Size.Width, frm.Size.Height);
                //frm.Location = new Point(this.MdiParent.Location.X + temp.X, this.MdiParent.Location.Y + temp.Y);
                frm.ShowDialog();
                if (frm.TiepTuc == false)
                {
                    return;
                }
            }

            IsReload = true;
            IEnumerable <dynamic> listMaCC_NgayVang = (from macc in listMaCC_NV
                                                       from ngay in DSNgayCheck
                                                       select new { MaCC = macc, NgayVang = ngay });

            List <Error> listError = new List <Error>();
            XL.ThemNgayVang(listMaCC_NgayVang, workingDay, workingTime, 0f, absentCode, listError);
            if (listError.Count > 0)
            {
                frmError frm = new frmError {
                    StartPosition = FormStartPosition.CenterParent, listError = listError
                };
                frm.ShowDialog();
            }

            Close();
        }
        private void btnThucHien_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

            if (XL.Kiemtra(new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1), new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, DateTime.DaysInMonth(dtpThang.Value.Year, dtpThang.Value.Month))))
            {
                MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo chấm công cho quản lý", "khai báo chấm công", ""),
                                Resources.Caption_ThongBao, MessageBoxButtons.OK);
                return;
            }

            #endregion


            #region lấy và kiểm tra dsnv được chọn

            BindingContext[dgrdDSNVTrgPhg.DataSource].EndCurrentEdit();
            //2. lấy danh sách nhân viên check, nếu chưa có nv nào check thì thông báo
            var listNV = (from DataGridViewRow dataGridViewRow in dgrdDSNVTrgPhg.Rows
                          let rowView = dataGridViewRow.DataBoundItem as DataRowView
                                        where (rowView["check"] != DBNull.Value && (bool)rowView["check"])
                                        select((cUserInfo)rowView["cUserInfo"]))
                         .ToArray();

            if (listNV.Length == 0)
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000);                 //
                GC.Collect();
            }

            #endregion

            #region lấy ds các ngày đã check

            var DSNgayCheck = (from object item in checklistNgay.CheckedItems select(DateTime) item).ToList();
            if (DSNgayCheck.Count == 0)
            {
                ACMessageBox.Show("Bạn chưa chọn ngày làm việc.", "Thông báo", 2000);
                return;
            }

            #endregion

            #region lấy thông tin

            var      ngay1      = DateTime.Today.Date;
            TimeSpan TimeSpanBD = dtpBDLam.Value.TimeOfDay;
            TimeSpan TimeSpanKT = dtpKTLam.Value.TimeOfDay;
            var      timeBD     = ngay1.Add(TimeSpanBD);
            var      timeKT     = ngay1.Add(TimeSpanKT);
            if (TimeSpanBD > TimeSpanKT)
            {
                timeKT = timeKT.AddDays(1d);
            }
            //var sophutOT = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0;
            TimeSpan OTCa = TimeSpan.Zero;            //ver 4.0.0.4
            if (checkXNLamThem.Checked && TimeSpan.TryParseExact(maskPhutTinhLamThem.Text, @"hh\:mm", CultureInfo.InvariantCulture, out OTCa) == false)
            {
                ACMessageBox.Show(Resources.Text_NhapThoiGianLamThemChuaHopLe, Resources.Caption_Loi, 2000);
                return;
            }
            var    sophutOT    = Convert.ToInt32(OTCa.TotalMinutes);  //ver 4.0.0.4
            var    TinhPCTC    = (checkTinhPC150.Checked);
            var    bVaoTreLaCV = checkXNVaoTreTinhCV.Checked;         //ver 4.0.0.4
            var    bRaaSomLaCV = checkXNRaaSomTinhCV.Checked;         //ver 4.0.0.4
            string lydo        = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.Text;
            string ghichu      = tbGhiChu.Text;

            #endregion

            #region hỏi lại trước khi thực hiện

            if (MessageBox.Show(Resources.Text_XacNhanThemChamCongTayChoQL, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            try
            {
                var ca = (tbCa.Tag == null) ? null : (cCa)tbCa.Tag;
                foreach (var nv in listNV)
                {
                    foreach (var ngay in DSNgayCheck)
                    {
                        DateTime TimeStrInn = ngay.Date.Add(TimeSpanBD);
                        DateTime TimeStrOut = ngay.Date.Add(TimeSpanKT);
                        if (TimeSpanBD > TimeSpanKT)
                        {
                            TimeStrOut = TimeStrOut.AddDays(1d);
                        }

                        if (ca.QuaDem && TimeSpanBD < TimeSpanKT && TimeSpanBD < XL2._04h30)
                        {
                            TimeStrInn = TimeStrInn.AddDays(1d);
                            TimeStrOut = TimeStrOut.AddDays(1d);
                        }

/*
 *                                              if (ca.ID == int.MinValue)
 *                                                      XL.TaoCaTuDo(ca, TimeStrInn, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8");
 *                                              else if (ca.ID == int.MinValue + 1)
 *                                                      XL.TaoCaTuDo(ca, TimeStrInn, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D");
 */
                        if (ca.ID < int.MinValue + 100)
                        {
                            XL.TaoCaTuDo(ca, TimeStrInn);                                                    //ver 4.0.0.4
                        }
                        bool match = XL.KiemtraThuocCa(TimeStrInn, TimeStrOut, ngay, ca);
                        // trường hợp chỉ chấm công bình thường thì chỉ thêm giờ cho đơn giản
                        // các trường hợp xác nhận làm thêm x phút thì chuyển sang xác nhận
                        if (ca.ID < 0)
                        {
                            DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu);
                            DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu);
                            XL.XacNhan_CIO_A(nv.MaCC, TimeStrInn, TimeStrOut, ca, false, false, sophutOT, TinhPCTC, lydo, ghichu,
                                             bVaoTreLaCV, bRaaSomLaCV);
                        }
                        else if (ca.IsExtended || sophutOT > 0 || match == false)
                        {
                            // các trường hợp phải xác nhận là ca tự do, ca mở rộng, ca có làm thêm và giờ nhập ko nằm trong khoảng nhận diện
                            if (ca.TachCaDem)
                            {
                                var timeOutCa3 = ngay.Add(ca.catruoc.Duty.Off);
                                var timeInnCa1 = ngay.AddDays(1d).Add(ca.casauuu.Duty.Onn).Add(XL2._01giay);
                                DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu);
                                DAO.ThemGioChoNV(nv.MaCC, timeOutCa3, "O", 22, "Hệ thống tự động thêm giờ đệm tách ca qua ngày", "Thực hiện tự động");
                                DAO.ThemGioChoNV(nv.MaCC, timeInnCa1, "I", 21, "Hệ thống tự động thêm giờ đệm tách ca qua ngày", "Thực hiện tự động");
                                DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu);
                                XL.XacNhan_CIO_A(nv.MaCC, TimeStrInn, timeOutCa3, ca.catruoc, false, false, 0, TinhPCTC, lydo, ghichu,
                                                 bVaoTreLaCV, bRaaSomLaCV);                       //ver 4.0.0.4
                                XL.XacNhan_CIO_A(nv.MaCC, timeInnCa1, TimeStrOut, ca.casauuu, false, false, sophutOT, TinhPCTC, lydo, ghichu,
                                                 bVaoTreLaCV, bRaaSomLaCV);                       //ver 4.0.0.4
                            }
                            else
                            {
                                DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu);
                                DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu);
                                XL.XacNhan_CIO_A(nv.MaCC, TimeStrInn, TimeStrOut, ca, false, false, sophutOT, TinhPCTC, lydo, ghichu,
                                                 bVaoTreLaCV, bRaaSomLaCV);                       //ver 4.0.0.4
                            }
                        }
                        else
                        {
                            DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu);
                            DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu);
                        }
                    }
                }
                MyUtility.CheckedCheckBox(false, chkAllWKDays, chkAddSat, chkAddSun);                //ver 4.0.0.4
                ACMessageBox.Show("Đã thêm giờ chấm công cho quản lý.", Resources.Caption_ThongBao, 2000);
            }
            catch (Exception ex)
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }