private void btnChuyenDoi_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;
            var row      = ((DataRowView)((dgrdGioKDQD.SelectedRows[0]).DataBoundItem)).Row;
            var checkold = (cChk)row["cChk"];
            var loaiCuu  = (checkold.GetType() == typeof(cChkInn_A));
            var loaiMoi  = !loaiCuu;
            var giocuu   = checkold.Time;
            var lydo     = (cbLyDo_Suaa.SelectedItem != null) ? cbLyDo_Suaa.SelectedItem.ToString() : cbLyDo_Suaa.SelectedText;
            var ghichu   = tbGhiChu_Suaa.Text;

            #region thông báo ko cho chuyển đõi nếu đã xn

            if (checkold is cChkInn_V || checkold is cChkOut_V)
            {
                MessageBox.Show(Resources.GioDaXacnhanKhongTheThayDoi, Resources.capThongBao);
                return;
            }

            #endregion

            #region hỏi lại trước khi sửa

            if (loaiCuu)
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanChuyenDoiGioDonGian, "vào", giocuu.ToString("H:mm dddd d/M"), "ra", nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanChuyenDoiGioDonGian, "ra", giocuu.ToString("H:mm dddd d/M"), "vào", nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }

            #endregion
            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();

            cChk checknew;
            if (loaiMoi)
            {
                checknew = new cChkInn_A {
                    Type = "I", MaCC = nhanvien_goc.MaCC, IsEdited = 1, Time = giocuu, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi {
                        IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa
                    }
                }
            }
            ;                                                                                                                                                                                                                                                                 // tbd trạng thái?? tạm thời lấy int.maxvalue tức sửa > 0
            else
            {
                checknew = new cChkOut_A {
                    Type = "O", MaCC = nhanvien_goc.MaCC, IsEdited = 1, Time = giocuu, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi {
                        IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa
                    }
                }
            };                                                                                                                                                                                                                                                                // tbd trạng thái?? tạm thời lấy int.maxvalue tức sửa > 0
            XL.SuaGioChoNV(checkold, checknew, nhanvien_goc, XL2.currUserID, lydo, ghichu);
            XL.SapXepDS_Check(new[] { nhanvien_goc.DS_Check_A });
            XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A);
            XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            if (nhanvien_goc.DS_Check_KoHopLe.Count > 0)
            {
                DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe);
                nhanvien_goc.DS_Check_KoHopLe.Clear();
            }

            XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A);            //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
            XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa);
            XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50);
            XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            m_Bang_ChiTiet.Rows.Clear();
            loadGrid();
        }
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;

            #region lấy thông tin từ màn hình

            var giovao           = dtpVao_Them.Value.Add(XL2._01giay);
            var gioraa           = dtpRaa_Them.Value;
            var lydo             = (cbLyDo_Them.SelectedItem != null) ? cbLyDo_Them.SelectedItem.ToString() : cbLyDo_Them.SelectedText;
            var ghichu           = tbGhichu_Them.Text;
            var UserEnrollNumber = nhanvien_goc.MaCC;

            #endregion

            if (chkGioVao.Checked)
            {
                #region hỏi lại trước khi thêm

                if (MessageBox.Show(string.Format(Resources.xacNhanThemGioVaoDonGian, giovao.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }

                #endregion

                var checkinn = new cChkInn_A {
                    IsEdited = 1, Type = "I", MachineNo = 21, Source = "PC", MaCC = UserEnrollNumber, Time = giovao, PhucHoi = new cPhucHoi {
                        Them = true, IDGioGoc = -1, Xoaa = false
                    }
                };
                XL.ThemGioChoNV(checkinn, nhanvien_goc, XL2.currUserID, lydo, ghichu);
            }

            if (chkGioRaa.Checked)
            {
                #region hỏi lại trước khi thêm

                if (MessageBox.Show(string.Format(Resources.xacNhanThemGioRaaDonGian, gioraa.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }

                #endregion

                var checkout = new cChkOut_A {
                    IsEdited = 1, Type = "O", MachineNo = 22, Source = "PC", MaCC = UserEnrollNumber, Time = gioraa, PhucHoi = new cPhucHoi {
                        Them = true, IDGioGoc = -1, Xoaa = false
                    }
                };
                XL.ThemGioChoNV(checkout, nhanvien_goc, XL2.currUserID, lydo, ghichu);
            }
            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();

            XL.SapXepDS_Check(new[] { nhanvien_goc.DS_Check_A });
            XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A);
            XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            if (nhanvien_goc.DS_Check_KoHopLe.Count > 0)
            {
                DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe);
                nhanvien_goc.DS_Check_KoHopLe.Clear();
            }
            XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A);            //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
            XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa);
            XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50);
            XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            m_Bang_ChiTiet.Rows.Clear();
            loadGrid();
        }
        private void btnThucHien_Click(object sender, EventArgs e)
        {
            #region kiểm tra kết nối csdl trước khi thực hiện

            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                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
            IEnumerable <DataGridViewRow> lstGridViewRow = dgrdDSNVTrgPhg.Rows.Cast <DataGridViewRow>();
            var listDataRow = from row in (lstGridViewRow)select row.DataBoundItem as DataRowView;
            var listNV      = (from rowView in listDataRow
                               where (rowView["check"] != DBNull.Value && (bool)rowView["check"])
                               select((cUserInfo)rowView["cUserInfo"]).MaCC).ToArray();

            if (listNV.Length == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn Nhân viên", "Thông báo", 2000);
                return;
            }

            #endregion

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

            var DSNgayCheck = checklistNgay.Items.Cast <object>().Where((t, i) => checklistNgay.GetItemChecked(i)).Cast <DateTime>().ToList();
            if (DSNgayCheck.Count == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn ngày làm việc.", "Thông báo", 2000);
                return;
            }

            #endregion

            #region lấy ca được chọn

            // kiểm tra chọn ca làm việc chưa? chưa thì báo
            cCaAbs ca = cbCa.SelectedItem as cCaAbs;
            if (ca == null || cbCa.SelectedIndex == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn ca làm việc.", "Thông báo", 1500);
                return;
            }

            #endregion

            #region lấy check xác nhận làm thêm và check pc 50, lý do, ghi chú

            string lydo   = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            string ghichu = tbGhiChu.Text;

            #endregion

            #region lấy thời gian

            //đã chọn ca làm việc

/*
 *                      TimeSpan tgInn = dtpBDLam.Value.TimeOfDay;
 *                      TimeSpan tgOut = dtpKTLam.Value.TimeOfDay;
 *                      if (tgInn > tgOut) tgOut = tgOut.Add(XL2._1ngay);
 */

            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;
            var TinhPCTC = (checkTinhPC150.Checked);
            var giolam   = TimeSpan.Zero;
            var Cong     = 0d;
            var PhuCap   = 0d;

            #endregion

            var TreSomTinhCV = checkTreSomTinhCV.Checked;
            if (ca.QuaDem && TimeSpanBD < TimeSpanKT && TimeSpanBD < XL2._04h30)
            {
                timeBD = timeBD.AddDays(1d);
                timeKT = timeKT.AddDays(1d);
            }

            if (TinhToan(ngay1, ca.ID, ca.WorkingTimeTS, ca.Workingday, ca.LunchMin, ngay1.Add(ca.OnnTS), ngay1.Add(ca.OffTS), ngay1.Add(ca.chophepTreTS), ngay1.Add(ca.chophepSomTS),
                         timeBD, timeKT, sophutOT, TinhPCTC, out giolam, out Cong, out PhuCap) == false)
            {
                return;
            }

            bool flagError = false;
            #region hỏi lại trước khi thực hiện

            if (
                MessageBox.Show(
                    "Bạn muốn thêm các giờ chấm công tay cho các nhân viên?\nVui lòng kiểm tra kỹ thời gian nhập để không làm sai lệch công của nhân viên.",
                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            foreach (var macc 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((cCaTuDo)ca, TimeStrInn, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8");
                    }
                    else if (ca.ID == int.MinValue + 1)
                    {
                        XL.TaoCaTuDo((cCaTuDo)ca, TimeStrInn, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D");
                    }

                    if (ngay <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue)
                    {
                        continue;                                                               //tbd temp patch
                    }
                    if (checkXNLamThem.Checked || TinhPCTC || TreSomTinhCV)                     //1.có XN làm thêm --> thêm giờ XN,  2.không xác nhận làm thêm thì thêm giờ A
                    {
                        var nv = new cUserInfo {
                            MaCC = macc,
                        };
                        var chkinn = new cChkInn_A {
                            Time = TimeStrInn, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        };
                        var chkout = new cChkOut_A {
                            Time = TimeStrOut, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        };
                        var cio_a = new cChkInOut_A {
                            Vao           = chkinn, Raa = chkout, TimeDaiDien = chkinn.Time,
                            HaveINOUT     = 0,
                            ThuocCa       = ca,
                            ThuocNgayCong = XL.ThuocNgayCong(TimeStrInn),
                            TD            = new ThoiDiem(),
                        };
                        XL.ThemGioChoNVQL(chkinn, nv, XL2.currUserID, lydo, ghichu);
                        XL.ThemGioChoNVQL(chkout, nv, XL2.currUserID, lydo, ghichu);
                        if (ca.TachCa)
                        {
                            XL.XacNhanCoTachCaChoQL(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV);
                        }
                        else
                        {
                            XL.XacNhanKoTachCaChoQL(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV);
                        }
                    }
                    else                      // không xác nhận làm thêm thì thêm giờ A
                    {
                        XL.ThemGioChoNVQL(new cChkInn_A {
                            Time = TimeStrInn, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        }, new cUserInfo {
                            MaCC = macc
                        }, XL2.currUserID, lydo, ghichu);
                        XL.ThemGioChoNVQL(new cChkOut_A {
                            Time = TimeStrOut, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        }, new cUserInfo {
                            MaCC = macc
                        }, XL2.currUserID, lydo, ghichu);
                        XL.CheckTinhPC50(new cUserInfo {
                            MaCC = macc
                        }, (TimeStrInn.TimeOfDay < XL2._04h30 ? TimeStrInn.Date.AddDays(-1) : TimeStrInn.Date), TinhPCTC);
                    }
                }
            }
            if (flagError)
            {
                AutoClosingMessageBox.Show("Thêm giờ chấm công tay cho các nhân viên thành công.", "Thông báo", 2000);
            }
        }
Пример #4
0
        private void btnSuaa_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;
            var timespanGioVao = dtpVao.Value.TimeOfDay;
            var timespanGioRaa = dtpRaa.Value.TimeOfDay;
            var lydo           = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            var ghichu         = tbGhiChu.Text;

            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }

            #region hỏi lại trước khi sửa

            if (radGioVao.Checked)
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanSuaGioHangLoat, "vào", dtpVao.Value.ToString("H:mm")),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanSuaGioHangLoat, "ra", dtpRaa.Value.ToString("H:mm")),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }

            #endregion

            var flagThongBao = false;             // flag thông báo không cho phép sửa giờ đã CN
            IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>();
            var arrRecord = (from row in dataGridViewRows
                             let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"])
                                      let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"])
                                                      let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"])
                                                                 select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();
            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();
            foreach (var group in arrRecord)
            {
                var nhanvien = group.Key;
                foreach (var item in group)
                {
                    if (item.CIO.GetType() == typeof(cChkInOut_V))
                    {
                        flagThongBao = true;
                        continue;
                    }
                    if (radGioVao.Checked)
                    {
                        if (item.CIO.HaveINOUT == -2)
                        {
                            continue;
                        }
                        var giovao      = item.Ngay.Add(timespanGioVao);
                        var checkinnold = item.CIO.Vao;
                        var checkinnnew = new cChkInn_A {
                            MaCC    = nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, IsEdited = 1,
                            PhucHoi = new cPhucHoi {
                                IDGioGoc = int.MaxValue, Them = checkinnold.PhucHoi.Them, Xoaa = checkinnold.PhucHoi.Xoaa
                            }
                        };
                        XL.SuaGioChoNV(checkinnold, checkinnnew, nhanvien, XL2.currUserID, lydo, ghichu);
                    }
                    else
                    {
                        if (item.CIO.HaveINOUT == -1)
                        {
                            continue;
                        }
                        var gioraa      = item.Ngay.Add(timespanGioRaa);
                        var checkoutold = item.CIO.Raa;
                        var checkoutnew = new cChkOut_A {
                            MaCC    = nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, IsEdited = 1,
                            PhucHoi = new cPhucHoi {
                                IDGioGoc = int.MaxValue, Them = checkoutold.PhucHoi.Them, Xoaa = checkoutold.PhucHoi.Xoaa
                            }
                        };
                        XL.SuaGioChoNV(checkoutold, checkoutnew, nhanvien, XL2.currUserID, lydo, ghichu);
                    }
                }
                XL.SapXepDS_Check(new[] { nhanvien.DS_Check_A });
                XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                if (nhanvien.DS_Check_KoHopLe.Count > 0)
                {
                    DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe);
                    nhanvien.DS_Check_KoHopLe.Clear();
                }

                XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A);
                XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50);
                XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
            }
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();
            if (flagThongBao)
            {
                AutoClosingMessageBox.Show("Không thể sửa các giờ đã xác nhận.", "Thông báo", 2000);
            }
        }
Пример #5
0
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;

            #region lấy thông tin

            var timespanGioVao = dtpVao.Value.TimeOfDay;
            var timespanGioRaa = dtpRaa.Value.TimeOfDay;
            var lydo           = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            var ghichu         = tbGhiChu.Text;

            #endregion

            var tempstring = radGioVao.Checked ? "vào" : "ra";
            var temptime   = (radGioVao.Checked) ? dtpVao.Value : dtpRaa.Value;
            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }

            #region hỏi lại trước khi thêm

            if (MessageBox.Show(string.Format(Resources.xacNhanThemGioHangLoat, tempstring, temptime.ToString("H:mm")),
                                Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            #region lấy ds các giờ vào ra, group lại theo từng nhân viên để thực hiện thêm 1 loạt rồi sau đó xử lý tính toán lại checkinout và ngày công

            IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>();
            var arrRecord = (from row in dataGridViewRows
                             let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"])
                                      let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"])
                                                      let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"])
                                                                 select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();

            #endregion

            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();
            foreach (var group in arrRecord)
            {
                var nhanvien = group.Key;
                foreach (var item in group)
                {
                    if (item.CIO.HaveINOUT == 1)
                    {
                        continue;                               // 1. bỏ qua các giờ đủ IO
                    }
                    if (radGioVao.Checked)                      //2. thêm I cho O kv
                    {
                        if (item.CIO.HaveINOUT == -2)
                        {
                            var giovao = item.Ngay.Add(timespanGioVao);
                            if (giovao > item.CIO.Raa.Time)
                            {
                                giovao = giovao.AddDays(-1d);                                                        // trừ đi 1 ngày nếu (giờ vào thêm) > giờ ra
                            }
                            var checkinn = new cChkInn_A {
                                IsEdited = 1, MaCC = item.nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi {
                                    Them = true, IDGioGoc = -1, Xoaa = false
                                }
                            };
                            XL.ThemGioChoNV(checkinn, item.nhanvien, XL2.currUserID, lydo, ghichu);
                        }
                    }
                    else
                    {
                        if (item.CIO.HaveINOUT == -1)                          //3. thêm O cho I kr
                        {
                            var gioraa = item.Ngay.Add(timespanGioRaa);
                            if (gioraa < item.CIO.Vao.Time)
                            {
                                gioraa = gioraa.AddDays(1d);                                                        // cộng thêm 1 ngày nếu (giờ vào thêm) > giờ ra
                            }
                            var checkout = new cChkOut_A()
                            {
                                IsEdited = 1, MaCC = item.nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi {
                                    Them = true, IDGioGoc = -1, Xoaa = false
                                }
                            };
                            XL.ThemGioChoNV(checkout, item.nhanvien, XL2.currUserID, lydo, ghichu);
                        }
                    }
                }

                XL.SapXepDS_Check(new[] { nhanvien.DS_Check_A });

                XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe);
                if (nhanvien.DS_Check_KoHopLe.Count > 0)
                {
                    DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe);
                    nhanvien.DS_Check_KoHopLe.Clear();
                }

                XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A);
                XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50);
                XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
            }
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();
        }
Пример #6
0
        private void btnThucHien_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            // kiểm tra chọn ca làm việc chưa? chưa thì báo
            cCaAbs ca = cbCa.SelectedItem as cCaAbs;

            if (ca == null || cbCa.SelectedIndex == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn ca làm việc.", "Thông báo", 1500);
                return;
            }

            //đã chọn ca làm việc
            var      ngay       = dtpNgay.Value.Date;
            TimeSpan timespanBD = dtpBDLam.Value.TimeOfDay;
            TimeSpan timeSpanKT = dtpKTLam.Value.TimeOfDay;
            var      timeBD     = ngay.Add(timespanBD);
            var      timeKT     = ngay.Add(timeSpanKT);

            if (timespanBD > timeSpanKT)
            {
                timeKT = timeKT.AddDays(1d);
            }

            var sophutOT     = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0;
            var TinhPCTC     = (checkTinhPC150.Checked);
            var TreSomTinhCV = checkTreSomTinhCV.Checked;
            var giolam       = TimeSpan.Zero;
            var Cong         = 0d;
            var PhuCap       = 0d;

            if (ca.QuaDem && timespanBD < timeSpanKT && timespanBD < XL2._04h30)
            {
                timeBD = timeBD.AddDays(1d);
                timeKT = timeKT.AddDays(1d);
            }
            if (TinhToan(ngay, ca.ID, ca.WorkingTimeTS, ca.Workingday, ca.LunchMin, ngay.Add(ca.OnnTS), ngay.Add(ca.OffTS), ngay.Add(ca.chophepTreTS), ngay.Add(ca.chophepSomTS),
                         timeBD, timeKT, sophutOT, TinhPCTC, out giolam, out Cong, out PhuCap) == false)
            {
                tbGioLam.Text = giolam.TotalHours.ToString("#0.##");
                tbCong.Text   = Cong.ToString("0.0#");
                tbPC.Text     = PhuCap.ToString("0.0#");
                return;
            }

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

            if (
                MessageBox.Show(
                    "Bạn muốn thêm các giờ chấm công tay cho các nhân viên?\nVui lòng kiểm tra kỹ thời gian nhập để không làm sai lệch công của nhân viên.",
                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion


            // kiểm tra chọn NV chưa, chưa thì báo
            DataView tableCheckNV = dgrdDSNVTrgPhg.DataSource as DataView;
            if (tableCheckNV == null)
            {
                return;
            }
            DataRow[] arrRows = tableCheckNV.Table.Select("check = true", "UserEnrollNumber asc");
            if (arrRows.Length == 0)
            {
                AutoClosingMessageBox.Show("Bạn chưa chọn nhân viên.", "Thông báo", 1500);
                return;
            }

            // đã chọn NV, lấy ds mã CC đã chọn
            string lydo   = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText;
            string ghichu = tbGhiChu.Text;

            bool flag = true;

            try {
                foreach (DataRow row in arrRows)
                {
                    //dsNVcheck.Add((int)row["UserEnrollNumber"]);
                    int iUserEnrollNumber = (int)row["UserEnrollNumber"];
                    if (ca.ID == int.MinValue)
                    {
                        XL.TaoCaTuDo((cCaTuDo)ca, timeBD, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8");
                    }
                    else if (ca.ID == int.MinValue + 1)
                    {
                        XL.TaoCaTuDo((cCaTuDo)ca, timeBD, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D");
                    }

                    if (checkXNLamThem.Checked || TinhPCTC || TreSomTinhCV)                     //1.có XN làm thêm --> thêm giờ XN,  2.không xác nhận làm thêm thì thêm giờ A
                    {
                        var nv = new cUserInfo {
                            MaCC = iUserEnrollNumber, NgayCongBD_Bef2D = ngay.Date.AddDays(-2d), NgayCongKT_Aft2D = ngay.Date.AddDays(2d)
                        };
                        var chkinn = new cChkInn_A {
                            Time = timeBD, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        };

                        var chkout = new cChkOut_A {
                            Time = timeKT, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        };
                        var cio_a = new cChkInOut_A {
                            Vao           = chkinn,
                            Raa           = chkout,
                            HaveINOUT     = 1,
                            ThuocCa       = ca,
                            TimeDaiDien   = chkinn.Time,
                            ThuocNgayCong = XL.ThuocNgayCong(chkinn.Time),
                            TD            = new ThoiDiem()
                        };
                        if (cio_a.ThuocNgayCong <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue)
                        {
                            continue;                                                                                                           //tbd temp patch
                        }
                        nv.DS_CIO_A.Add(cio_a);
                        XL.ThemGioChoNV(chkinn, nv, XL2.currUserID, lydo, ghichu);
                        XL.ThemGioChoNV(chkout, nv, XL2.currUserID, lydo, ghichu);
                        if (ca.TachCa)
                        {
                            XL.XacNhanCoTachCa(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV);
                        }
                        else
                        {
                            XL.XacNhanKoTachCa(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV);
                        }
                    }
                    else                      //2.không xác nhận làm thêm thì thêm giờ A
                    {
                        if (timeBD.Date <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue)
                        {
                            continue;                                                                                                   //tbd temp patch
                        }
                        var nv = new cUserInfo {
                            MaCC = iUserEnrollNumber, NgayCongBD_Bef2D = ngay.Date.AddDays(-2d), NgayCongKT_Aft2D = ngay.Date.AddDays(2d)
                        };
                        XL.ThemGioChoNV(new cChkInn_A {
                            Time = timeBD, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        }, new cUserInfo {
                            MaCC = iUserEnrollNumber
                        }, XL2.currUserID, lydo, ghichu);
                        XL.ThemGioChoNV(new cChkOut_A {
                            Time = timeKT, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi {
                                Them = true, IDGioGoc = -1, Xoaa = false
                            }
                        }, new cUserInfo {
                            MaCC = iUserEnrollNumber
                        }, XL2.currUserID, lydo, ghichu);
                        XL.CheckTinhPC50(nv, (timeBD.TimeOfDay < XL2._04h30 ? timeBD.Date.AddDays(-1) : timeBD.Date), TinhPCTC);
                    }
                }
            } catch (Exception exception) {
                lg.Error("", exception);
            }
            if (flag)
            {
                AutoClosingMessageBox.Show("Thêm giờ chấm công tay cho các nhân viên thành công.", "Thông báo", 2000);
            }
        }