Exemplo n.º 1
0
        private void btnXoaGio_Click(object sender, EventArgs e)
        {
            /* 1. lấy datasource để cập nhật lại sau khi thực hiện thêm xong hàng loạt
             * 2. lấy thông tin để thực hiện thêm giờ xuống csdl
             * 2. kiểm tra kết nối và thực hiện thêm giờ xuống csdl
             * 3. lưu lại ds tạm NV bị thay đổi giờ -> DSNV CầnReload
             * thực hiện remove khỏi danh sách nhân viên các NV bị thay đổi đó
             * 4. remove khỏi datasource các dòng có nhân viên bị thay đổi giờ
             * reload lại chấm công của dsnvCầnReload đó
             * 5. add lại các nhân viên bị thay đổi giờ vào listNhânviên
             * 6. tạo các dòng dữ liệu thỏa điều kiện của riêng các nhân viên cần reload
             * insert vào đầu datasource các dòng dữ liệu thỏa điều kiện đó
             */
            DataTable table = gridControl1.DataSource as DataTable;
            bool      checkXoaVao = checkBoxXoaVao.Checked, checkXoaRaa = checkBoxXoaRaa.Checked;

            int[]          arraySelectedRow = gridView1.GetSelectedRows();
            List <DataRow> listSelectedRow  = arraySelectedRow.Select(index => gridView1.GetDataRow(index)).ToList();

            // tbd kiểm tra kết nối trước khi thực hiện
            List <cUserInfo> DSNVReload = new List <cUserInfo>();

            this.ThucHienXoaGioXuongCSDL(ref DSNVReload, ref listSelectedRow, checkXoaVao, checkXoaRaa);
            this.RemoveDSNVCanReload(ref DSNVReload);
            XL.XemCongThoiGianChuaKetLuong(DSNVReload, m_NgayBD, m_NgayKT);
            m_DSNV.AddRange(DSNVReload);

            //reload GUI
            RemoveDataRowHaveDSNVReload(ref table, DSNVReload);
            XacDinhGioThieuChamCong(DSNVReload);

            MyUtility.CheckedCheckBox(false, checkBoxXoaVao, checkBoxXoaRaa);
        }
        private void ResetDataOfControl()
        {
            //chú ý ko xóa tag của button Chọn ca
            lbGioLV.Tag           = null;
            lbGioCheckVT.Tag      = null;
            lbVaoTre.Tag          = null;
            lbRaaSom.Tag          = null;
            lbOLaiChuaXN.Tag      = null;
            lbCurrentCIO.Tag      = null;       // ẩn ko hiển thị text
            lbCurrentNgayCong.Tag = null;       // ẩn ko hiển thị text
            timeEditXacNhanOT.Tag = null;

            MyUtility.CheckedCheckBox(false, checkChoPhepTre, checkChoPhepSom, checkVaoTreTinhCV, checkRaaSomTinhCV, checkXNLamThem);
            MyUtility.ClearControlText(lbGioLV, lbGioCheckVT, lbVaoTre, lbRaaSom, lbOLaiChuaXN, tbThongTinKhac, cbXNLyDo, tbXNGhiChu);

            timeEditXacNhanOT.Time = DateTime.Today.Date;             //reset về timezero 0:00
        }
        private void dgrdGioCoLamThem_SelectionChanged(object sender, EventArgs e)
        {
            if (dgrdGioCoLamThem.SelectedRows.Count == 0)
            {
                #region reset layout

                MyUtility.ClearControlText(tbTTTenNV, tbTTGioVao, tbTTGioRaa,
                                           tbTTThuocCa, tbTTGioLam, tbTTTongGio, tbTTTreSom,
                                           tbTTOLaiThem, tbTTLamThem,
                                           tbXNCa, tbXNGioLam,
                                           tbXNTre, tbXNSom, tbXN_OLaiThem);

                MyUtility.CheckedCheckBox(false, checkTTChoPhepTre, checkTTChoPhepSom, checkTTTinhPC50,
                                          checkXNChoPhepTre, checkXNChoPhepSom, checkXNLamThem, checkXNTinhPC50,
                                          checkTTVaoTreTinhCV, checkTTRaaSomTinhCV, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV);//ver 4.0.0.4

                //numPhutTinhLamThem.Value = 0;
                maskPhutTinhLamThem.Text = "00:00";                //ver 4.0.0.4
                maskPhutTinhLamThem.Tag  = TimeSpan.Zero;          //ver 4.0.0.4

                #endregion
                MyUtility.EnableDisableControl(false,
                                               btnXacNhan, btnDoiCa,                                           // ngoài reset layout thì disable nút xác nhận, nút sửa để tránh ấn nhầm gây lỗi
                                               checkXNChoPhepTre, checkXNChoPhepSom, checkXNLamThem, checkXNTinhPC50, numPhutTinhLamThem,
                                               maskPhutTinhLamThem, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV); //ver 4.0.0.4
            }
            else if (dgrdGioCoLamThem.SelectedRows.Count == 1)
            {
                MyUtility.EnableDisableControl(true,
                                               btnXacNhan, btnDoiCa,
                                               checkXNChoPhepTre, checkXNChoPhepSom, checkXNTinhPC50, checkXNLamThem, numPhutTinhLamThem,
                                               maskPhutTinhLamThem, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV); //ver 4.0.0.4
                var dataRowView = dgrdGioCoLamThem.SelectedRows[0].DataBoundItem as DataRowView;
                var nhanvien    = dataRowView["cUserInfo"] as cUserInfo;
                var CIO         = dataRowView["cCheckInOut"] as cCheckInOut;
                var ngaycong    = dataRowView["cNgayCong"] as cNgayCong;

                #region fill phần thông tin CIO
                //DateTime ngaydangchon = CIO.ThuocNgayCong;
                tbTTTenNV.Text              = nhanvien.TenNV;
                tbTTGioVao.Text             = (CIO.Vao != null) ? CIO.Vao.Time.ToString("H:mm d/M") : string.Empty;
                tbTTGioRaa.Text             = (CIO.Raa != null) ? CIO.Raa.Time.ToString("H:mm d/M") : string.Empty;
                tbTTThuocCa.Text            = CIO.CIOCodeFull();
                tbTTGioLam.Text             = (CIO.HaveINOUT == 0) ? CIO.TG.GioLamViec5.ToString(@"h\gmm\p") : string.Empty;
                tbTTTongGio.Text            = (CIO.HaveINOUT == 0) ? CIO.TG.GioThucTe5.ToString(@"h\gmm\p") : string.Empty;
                tbTTTreSom.Text             = (CIO.HaveINOUT == 0) ? (CIO.TG.VaoTre + CIO.TG.RaaSom).ToString(@"h\gmm\p") : string.Empty;
                tbTTOLaiThem.Text           = (CIO.HaveINOUT == 0) ? CIO.TG.OLai.ToString(@"h\gmm\p") : string.Empty;
                tbTTLamThem.Text            = (CIO.DaXN) ? CIO.TG.SoPhutLamThem5.ToString(@"h\gmm\p") : string.Empty;
                checkTTChoPhepTre.Checked   = CIO.DuyetChoPhepVaoTre;
                checkTTChoPhepSom.Checked   = CIO.DuyetChoPhepRaSom;
                checkTTTinhPC50.Checked     = ngaycong.TinhPC50;
                checkTTVaoTreTinhCV.Checked = CIO.VaoTreTinhCV;                //ver 4.0.0.4
                checkTTRaaSomTinhCV.Checked = CIO.RaaSomTinhCV;                //ver 4.0.0.4
                #endregion

                #region fill phần xác nhận CIO

                tbXNCa.Text        = CIO.CIOCodeFull();
                tbXNCa.Tag         = (CIO.HaveINOUT == 0) ? CIO.ThuocCa : null;
                tbXNGioLam.Text    = (CIO.HaveINOUT == 0) ? CIO.TG.GioLamViec5.ToString(@"h\gmm\p") : string.Empty;
                tbXNTre.Text       = (CIO.HaveINOUT == 0) ? CIO.TG.VaoTre.ToString(@"h\gmm\p") : string.Empty;
                tbXNSom.Text       = (CIO.HaveINOUT == 0) ? CIO.TG.RaaSom.ToString(@"h\gmm\p") : string.Empty;
                tbXN_OLaiThem.Text = (CIO.HaveINOUT == 0) ? CIO.TG.OLai.ToString(@"h\gmm\p") : string.Empty;
                //numPhutTinhLamThem.Maximum = (CIO.HaveINOUT == 0) ? Convert.ToInt32(CIO.TG.OLai.TotalMinutes) : 0;
                //numPhutTinhLamThem.Value = (CIO.HaveINOUT == 0) ? (Convert.ToInt32(CIO.TG.OLai.TotalMinutes) / 10) * 10 : 0;
                maskPhutTinhLamThem.Tag     = (CIO.TG.OLai == null) ? TimeSpan.Zero : CIO.TG.OLai;               //ver 4.0.0.4
                maskPhutTinhLamThem.Text    = (CIO.TG.OLai == null) ? "00:00" : CIO.TG.OLai.ToString(@"hh\:mm"); //ver 4.0.0.4
                checkXNChoPhepTre.Checked   = CIO.DuyetChoPhepVaoTre;
                checkXNChoPhepSom.Checked   = CIO.DuyetChoPhepRaSom;
                checkXNLamThem.Checked      = false;
                checkXNTinhPC50.Checked     = false;
                checkXNVaoTreTinhCV.Checked = CIO.VaoTreTinhCV;                //ver 4.0.0.4
                checkXNRaaSomTinhCV.Checked = CIO.RaaSomTinhCV;                //ver 4.0.0.4
                tbXNGhiChu.Text             = string.Empty;

                #endregion
            }
            else               // chế độ xác nhận hàng loạt
            {
                MyUtility.EnableDisableControl(true,
                                               btnXacNhan, btnDoiCa,
                                               checkXNChoPhepTre, checkXNChoPhepSom, checkXNTinhPC50, checkXNLamThem, numPhutTinhLamThem,
                                               maskPhutTinhLamThem, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV); //ver 4.0.0.4
                var dataRowView = dgrdGioCoLamThem.SelectedRows[0].DataBoundItem as DataRowView;
                var nhanvien    = dataRowView["cUserInfo"] as cUserInfo;
                var CIO         = dataRowView["cCheckInOut"] as cCheckInOut;
                var ngaycong    = dataRowView["cNgayCong"] as cNgayCong;

                #region fill thông tin CIO
                tbTTTenNV.Text              = nhanvien.TenNV;
                tbTTGioVao.Text             = (CIO.Vao != null) ? CIO.Vao.Time.ToString("H:mm d/M") : string.Empty;
                tbTTGioRaa.Text             = (CIO.Raa != null) ? CIO.Raa.Time.ToString("H:mm d/M") : string.Empty;
                tbTTThuocCa.Text            = CIO.CIOCodeFull();
                tbTTGioLam.Text             = (CIO.HaveINOUT == 0) ? CIO.TG.GioLamViec5.ToString(@"h\gmm\p") : string.Empty;
                tbTTTongGio.Text            = (CIO.HaveINOUT == 0) ? CIO.TG.GioThucTe5.ToString(@"h\gmm\p") : string.Empty;
                tbTTTreSom.Text             = (CIO.HaveINOUT == 0) ? (CIO.TG.VaoTre + CIO.TG.RaaSom).ToString(@"h\gmm\p") : string.Empty;
                tbTTOLaiThem.Text           = (CIO.HaveINOUT == 0) ? CIO.TG.OLai.ToString(@"h\gmm\p") : string.Empty;
                tbTTLamThem.Text            = (CIO.DaXN) ? CIO.TG.SoPhutLamThem5.ToString(@"h\gmm\p") : string.Empty;
                checkTTChoPhepTre.Checked   = CIO.DuyetChoPhepVaoTre;
                checkTTChoPhepSom.Checked   = CIO.DuyetChoPhepRaSom;
                checkTTTinhPC50.Checked     = ngaycong.TinhPC50;
                checkTTVaoTreTinhCV.Checked = CIO.VaoTreTinhCV;                //ver 4.0.0.4
                checkTTRaaSomTinhCV.Checked = CIO.RaaSomTinhCV;                //ver 4.0.0.4

                #endregion

                #region fill phần xác nhận CIO
                var listCIO = (from DataGridViewRow dataGridViewRow in dgrdGioCoLamThem.SelectedRows
                               let row = (DataRowView)dataGridViewRow.DataBoundItem
                                         select(cCheckInOut) row["cCheckInOut"]).ToList();

                var distinctShift   = (from cio in listCIO where cio.HaveINOUT == 0 select cio.ThuocCa).Distinct().ToList();
                var distinctList_KR = listCIO.Where(item => item.HaveINOUT == -1).ToList();
                var distinctList_KV = listCIO.Where(item => item.HaveINOUT == -2).ToList();

                // phần ca làm việc
                if (distinctShift.Count == 1)
                {
                    tbXNCa.Tag  = distinctShift[0];
                    tbXNCa.Text = distinctShift[0].Code;
                }
                else
                {
                    tbXNCa.Tag  = null;
                    tbXNCa.Text = string.Empty;
                }

                // phần giờ làm, ra trễ, về sớm, ở lại cần xn
                MyUtility.ClearControlText(tbXNGioLam, tbXNTre, tbXNSom, tbXN_OLaiThem);
                //numPhutTinhLamThem.Value = 0;
                //numPhutTinhLamThem.Maximum = 840;
                maskPhutTinhLamThem.Text = "00:00";                //ver 4.0.0.4
                maskPhutTinhLamThem.Tag  = XL2._16gio;             //ver 4.0.0.4

                MyUtility.CheckedCheckBox(false, checkXNChoPhepTre, checkXNChoPhepSom, checkXNLamThem, checkXNTinhPC50,
                                          checkXNVaoTreTinhCV, checkXNRaaSomTinhCV);//ver 4.0.0.4
                tbXNGhiChu.Text = string.Empty;


                #endregion
            }
        }
        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);
            }
        }