Exemple #1
0
        private void btnDaoKieuChamCong_Click(object sender, EventArgs e)
        {
            dgrdTongHop.EndEdit();
            DataTable table = (dgrdTongHop.DataSource) as DataTable;

            if (table == null)
            {
                return;
            }
            DataRow[] arrRecord = table.Select("check = true", "UserEnrollNumber asc");
            if (arrRecord.Length == 0)
            {
                AutoClosingMessageBox.Show("Chưa chọn dòng dữ liệu thao tác.", "Thông báo", 2000);
                return;
            }

            bool flag = false;

            foreach (DataRow row in arrRecord)
            {
                // kiểm tra trước khi thực hiện
                if (row["TimeStrVao"] != DBNull.Value && row["TimeStrRa"] != DBNull.Value)
                {
                    flag = true;
                    continue;
                }
                cUserInfo tmpNV   = flstDSNVChk.Find(item => item.UserEnrollNumber == (int)row["UserEnrollNumber"]);
                cNgayCong tmpNgay = tmpNV.DSNgayCong.Find(item => item.NgayCong == (DateTime)row["TimeStrNgay"]);
                DateTime  tmpOldTime;
                cChk      tmpChkOld;
                bool      tmpIsCheckInOld;
                if (row["TimeStrVao"] != DBNull.Value)
                {
                    tmpOldTime      = (DateTime)row["TimeStrVao"];
                    tmpChkOld       = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkIn));
                    tmpIsCheckInOld = true;
                }
                else
                {
                    tmpOldTime      = (DateTime)row["TimeStrRa"];
                    tmpChkOld       = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkOut));
                    tmpIsCheckInOld = false;
                }
                if (tmpChkOld == null)
                {
                    MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
                    continue;
                }

                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpChkOld, tmpChkOld.TimeStr, !tmpIsCheckInOld, "Chấm nhầm máy", "Thay đổi Số máy check") == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                    break;
                }
            }

            if (flag)
            {
                AutoClosingMessageBox.Show("Không thể đảo ngược giờ có đủ giờ vào và giờ ra", "Thông báo", 2000);
            }

            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
            }
            GC.Collect();
        }
Exemple #2
0
        private void btnXoaGio_Click(object sender, EventArgs e)
        {
            DataTable table = dgrdTongHop.DataSource as DataTable;

            if (table == null)
            {
                return;
            }
            DataRow[] arrRows = table.Select("check = true", "UserEnrollNumber asc");
            //1 nếu chưa chọn ai thì thông báo
            if (arrRows.Length == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn Nhân viên.", "Thông báo", 1000);
                return;
            }

            if (MessageBox.Show("Xoá giờ chấm công của các nhân viên?", "Xác nhận", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return;
            }
            bool flagThongBao = false, flagLoiThaoTacDL = false;

            foreach (DataRow row in arrRows)
            {
                cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == (int)row["UserEnrollNumber"]);
                DateTime  t_Vao = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue;
                DateTime  t_Raa = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue;

                if (rdXoaVao.Checked)
                {
                    if (t_Vao == DateTime.MinValue)
                    {
                        continue;
                    }
                    cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Vao && o.GetType() == typeof(cChkIn));
                    if (tmpCheck == null)
                    {
                        flagThongBao = true;                  // giờ chưa xl thì xóa, giờ xác nhận thì bỏ qua
                    }
                    else
                    {
                        if (XL.XoaGioChoNV(tmpNV, tmpCheck, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                        {
                            flagLoiThaoTacDL = true;
                            break;
                        }
                    }
                }
                else if (rdXoaRa.Checked)
                {
                    if (t_Raa == DateTime.MinValue)
                    {
                        continue;
                    }
                    cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Raa && o.GetType() == typeof(cChkOut));
                    if (tmpCheck == null)
                    {
                        flagThongBao = true;
                    }
                    else
                    {
                        if (XL.XoaGioChoNV(tmpNV, tmpCheck, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                        {
                            flagLoiThaoTacDL = true;
                            break;
                        }
                    }
                }
                else
                {
                    if (t_Vao != DateTime.MinValue && t_Raa != DateTime.MinValue)
                    {
                        cChk tmpCheckIn  = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Vao && o.GetType() == typeof(cChkIn));
                        cChk tmpCheckOut = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Raa && o.GetType() == typeof(cChkOut));
                        if (tmpCheckIn != null && tmpCheckOut != null)
                        {
                            if (XL.XoaGioChoNV(tmpNV, tmpCheckIn, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                            {
                                flagLoiThaoTacDL = true; break;
                            }
                            if (XL.XoaGioChoNV(tmpNV, tmpCheckOut, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false)
                            {
                                flagLoiThaoTacDL = true; break;
                            }
                        }
                        else
                        {
                            flagThongBao = true;
                        }
                    }
                }
            }
            if (flagThongBao)
            {
                MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
            }
            if (flagLoiThaoTacDL)
            {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại.", "Lỗi", MessageBoxButtons.OK);
            }
            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại.", "Lỗi", MessageBoxButtons.OK);
            }
            GC.Collect();
        }
Exemple #3
0
        private void btnXem_Click(object sender, EventArgs e)
        {
            //1. lấy dữ liệu từ form
            #region lấy ngày BD và kết thúc, và update lại Ngày BD = 1 ngày trước 31/08 12:00 AM, ngày KT là 1 ngày sau ngay 1 23:59:59
            dtpNgayBD.Update(); dtpNgayKT.Update();
            DateTime ngayBD = dtpNgayBD.Value.Date;
            ngayBD = ngayBD.AddDays(-1d);
            DateTime ngayKT = dtpNgayKT.Value.Date;
            ngayKT = ngayKT.AddDays(2d).Subtract(new TimeSpan(0, 0, 1));
            #endregion
            //-----------BUG [KHÔNG PHẢI BUG] CHỈ TÔ MÀU ĐỂ CHÚ Ý] bắt buộc EndEdit thao tác trên Grid rồi mới thực hiện xử lý tác vụ

            dgrdDSNVTrgPhg.EndEdit();
            dgrdDSNVTrgPhg.Update();
            //2. lấy danh sách nhân viên check
            if (flstDSNVChkXemCong == null)
            {
                flstDSNVChkXemCong = new List <cUserInfo>();
            }
            else
            {
                flstDSNVChkXemCong.Clear();
            }
            LayDSNVXemCong(dgrdDSNVTrgPhg.DataSource as DataTable, flstDSNVChkXemCong, flstDSNV);
            //3. lấy dữ liệu chấm công của các nhân viên
            if (flstDSNVChkXemCong.Count == 0)
            {
                AutoClosingMessageBox.Show("Chưa chọn Nhân viên", "Thông báo", 2000);
                return;
            }
            //[CHÚ Ý] ngày bắt đầu và kết thúc đã cộng trừ thêm 1 ngày trước sau ở bở trên
            try {
                WaitWindow.Show(this.abc, "Đang xử lý...", new object[] { flstDSNVChkXemCong, ngayBD, ngayKT });
                //XL.XemCong(flstDSNVChkXemCong, ngayBD, ngayKT);

                //4. xử lý dữ liệu để đưa lên lưới tổng hợp

                DataTable dataTableTongHop = dgrdTongHop.DataSource as DataTable;
                if (dataTableTongHop == null)
                {
                    dataTableTongHop = TaoCauTrucDataTableTongHop();
                }
                else
                {
                    dataTableTongHop.Rows.Clear();
                }

                DataTable dataTableKDQD = dgrdGioKDQD.DataSource as DataTable;
                if (dataTableKDQD == null)
                {
                    dataTableKDQD = TaoCauTrucDataTableKDQD();
                }
                else
                {
                    dataTableKDQD.Rows.Clear();
                }

                const string shiftid = "ShiftID";
                int          i1      = 1;
                #region fill vào dataTable
                foreach (cUserInfo nhanvien in flstDSNVChkXemCong)
                {
                    for (int i = 1; i < nhanvien.DSNgayCong.Count - 1; i++)               //[CHÚ Ý] ở đây chỉ chạy từ 1-> kế cuối
                    //Debug.WriteLine(nhanvien.DSNgayCong[0]);
                    //Debug.WriteLine(nhanvien.DSNgayCong[nhanvien.DSNgayCong.Count - 1]);
                    {
                        cNgayCong ngayCong = nhanvien.DSNgayCong[i];
                        //Debug.WriteLine(cChkInOut1.ToString());
                        DataRow rowTH = dataTableTongHop.NewRow();
                        rowTH["check"]            = false;
                        rowTH["UserEnrollNumber"] = nhanvien.UserEnrollNumber; rowTH["UserFullName"] = nhanvien.UserFullName;
                        rowTH["TimeStrNgay"]      = rowTH["TimeStrThu"] = ngayCong.NgayCong;
                        rowTH["Cong"]             = ngayCong.TongCong;
                        rowTH["PhuCap"]           = ngayCong.TongPhuCap;
                        rowTH["TimeStrTre"]       = Math.Floor(ngayCong.TongTre.TotalMinutes);
                        rowTH["TimeStrSom"]       = Math.Floor(ngayCong.TongSom.TotalMinutes);
                        rowTH["TongGioLam"]       = ngayCong.TongGioLam.TotalHours;
                        rowTH["TongGioThuc"]      = ngayCong.TongGioThuc.TotalHours;
                        if (ngayCong.HasCheck)
                        {
                            i1 = 1;
                            foreach (cChkInOut cChkInOut1 in ngayCong.DSVaoRa)
                            {
                                if (i1 > 3)
                                {
                                    break;
                                }
                                rowTH[ThamSo.nameVao + i1] = cChkInOut1.Vao != null ? (object)cChkInOut1.Vao.TimeStr : DBNull.Value;
                                rowTH[ThamSo.nameRa + i1]  = cChkInOut1.Raa != null ? (object)cChkInOut1.Raa.TimeStr : DBNull.Value;
                                rowTH[shiftid + i1]        = (cChkInOut1.HaveINOUT > 0) ? (object)cChkInOut1.ThuocCa.ShiftID : DBNull.Value;
                                rowTH["ShiftCode"]        += (cChkInOut1.HaveINOUT > 0) ? cChkInOut1.ThuocCa.ShiftCode + "; " : ((cChkInOut1.HaveINOUT == -1) ? "KV; " : "KR; ");
                                i1++;
                            }
                            rowTH["ShiftCode"] += ngayCong.XuatChuoiVang();
                        }
                        else
                        {
                            if (ngayCong.DSVang != null && ngayCong.DSVang.Count != 0)
                            {
                                rowTH["ShiftCode"] += ngayCong.XuatChuoiVang();
                            }
                            else
                            {
                                rowTH["ShiftCode"] = "--";
                            }
                        }
                        dataTableTongHop.Rows.Add(rowTH);
                    }
                }
                #endregion

                dgrdTongHop.DataSource = dataTableTongHop;

                foreach (DataRow row in dataTableTongHop.Select("(ShiftID1 is NULL and (TimeStrVao1 is not null or TimeStrRa1 is not null)) " +
                                                                " or (ShiftID2 is NULL and (TimeStrVao2 is not null or TimeStrRa2 is not null))" +
                                                                " or (ShiftID3 is NULL and (TimeStrVao3 is not null or TimeStrRa3 is not null))" +
                                                                " OR (ShiftID1 is NOT NULL and ShiftID1 = " + int.MinValue + ")" +
                                                                " OR (ShiftID2 is NOT NULL and ShiftID2 = " + int.MinValue + ")" +
                                                                " OR (ShiftID3 is NOT NULL and ShiftID3 = " + int.MinValue + ")", string.Empty, DataViewRowState.CurrentRows).ToList())
                {
                    dataTableKDQD.ImportRow(row);
                }
                dgrdGioKDQD.DataSource           = dataTableKDQD;
                checkAllGridTH.CheckedChanged   -= checkAll_CheckedChanged;
                checkAllGridKDQD.CheckedChanged -= checkAll_CheckedChanged;
                checkAllGridTH.Checked           = false;
                checkAllGridKDQD.Checked         = false;
                checkAllGridTH.CheckedChanged   += checkAll_CheckedChanged;
                checkAllGridKDQD.CheckedChanged += checkAll_CheckedChanged;
                GC.Collect();
            } catch {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
                GC.Collect();
                return;
            }
        }