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();
        }
 public static void TachKC_ChuaKC(List <List <DateTime> > arrDoanThoigian, out List <List <DateTime> > arrDoanTGChuaKetCong, out List <List <DateTime> > arrDoanTGDaKetCong)
 {
     arrDoanTGDaKetCong   = new List <List <DateTime> >();
     arrDoanTGChuaKetCong = new List <List <DateTime> >();
     for (int i = 0; i < arrDoanThoigian.Count; i++)
     {
         List <DateTime> x                 = arrDoanThoigian[i];
         DateTime        ngaydauthang      = MyUtility.FirstDayOfMonth(x[0]);
         SqlParameter    paramNgayDauThang = new SqlParameter {
             ParameterName = "@NgayDauThang", Value = ngaydauthang
         };
         SqlParameter outParamKetQua = new SqlParameter {
             Direction = ParameterDirection.ReturnValue
         };
         SqlDataAccessHelper.ExecSPQuery(SPName.KiemTraKetLuongThang.ToString(), paramNgayDauThang, outParamKetQua);
         int kq = (int)outParamKetQua.Value;
         if (kq == 1)
         {
             arrDoanTGDaKetCong.Add(x);
         }
         else
         {
             arrDoanTGChuaKetCong.Add(x);
         }
     }
 }
 private void XacDinhKhoangThoiGianChon(out DateTime ngayBd, out DateTime ngayKt)
 {
     if (radDate.Checked)
     {
         ngayBd = dtpNgayBD.Value;
         ngayKt = dtpNgayKT.Value;
     }
     else if (radMonth.Checked)
     {
         ngayBd = MyUtility.FirstDayOfMonth(dtpThang.Value);
         ngayKt = MyUtility.LastDayOfMonth(dtpThang.Value);
     }
     else if (radQuarter.Checked)
     {
         int quy           = (int)numQuy.Value;
         int nam           = dtpQuyNam.Value.Year;
         int thangBD_Value = (3 * (quy - 1)) + 1;
         int thangKT_Value = thangBD_Value + 2;                                               // BD: 1;4;7;10; KT: 3;6;9;12
         ngayBd = new DateTime(nam, thangBD_Value, 1);                                        // nam 2015 thang 10 ngay 1
         ngayKt = new DateTime(nam, thangKT_Value, DateTime.DaysInMonth(nam, thangKT_Value)); //2015 thang 12 ngay 31
     }
     else
     {
         ngayBd = DateTime.Today;
         ngayKt = DateTime.Today;
     }
 }
        private void lbThieuChamCong_Click(object sender, EventArgs e)
        {
            zMisc.fmXacNhanCa frm = new zMisc.fmXacNhanCa();
            frm.m_DSNV   = (List <cUserInfo>)lbThieuChamCong.Tag;
            frm.m_NgayBD = MyUtility.FirstDayOfMonth(dateNavigator1.DateTime);
            frm.m_NgayKT = MyUtility.LastDayOfMonth(frm.m_NgayBD);

            frm.Show();
        }
 public frm_KetCongBoPhan()
 {
     InitializeComponent();
     if (Settings.Default.LastThangKetCong == null || Settings.Default.LastThangKetCong == DateTime.MinValue)
     {
         dtpThang.Value = MyUtility.FirstDayOfMonth(DateTime.Today);
     }
     else
     {
         dtpThang.Value = Settings.Default.LastThangKetCong;
     }
 }
        public static void ChiaDoanThoiGian(DateTime NgayBd, DateTime NgayKt, out List <List <DateTime> > ArrDoanThoigian)
        {
            ArrDoanThoigian = new List <List <DateTime> >();
            DateTime cursorDate = new DateTime(NgayBd.Year, NgayBd.Month, NgayBd.Day);

            while (cursorDate.Month < NgayKt.Month && cursorDate.Year <= NgayKt.Year)             // vẫn chưa phải tháng cuối cùng trong khoảng thời gian
            {
                DateTime ngayBD_Doan, ngayKT_Doan;
                ngayBD_Doan = new DateTime(cursorDate.Year, cursorDate.Month, cursorDate.Day); // ngày đầu tháng bị dang dở hoặc ngày 1 đầu tháng
                ngayKT_Doan = MyUtility.LastDayOfMonth(ngayBD_Doan);                           // ngày cuối tháng
                ArrDoanThoigian.Add(new List <DateTime> {
                    ngayBD_Doan, ngayKT_Doan
                });
                cursorDate = MyUtility.FirstDayOfMonth(cursorDate).AddMonths(1);                 // đưa ngày đầu dang dở về đầu tháng rồi mới add thêm 1 tháng mới. VD: 16 -> 1 rồi mới add monnth
            }
            // ra khỏi vòng lặp là tháng cuối có thể bị dang dở cursorDate.Month = NgayKT.Month . VD: 01/01/2015 -16/01/2015
            ArrDoanThoigian.Add(new List <DateTime> {
                cursorDate, NgayKt
            });
        }
Exemple #7
0
        private void btnThucHien_CCThang_Click(object sender, EventArgs e)
        {
            //1. kiểm tra tháng chấm công hợp lệ, lấy dsnv ( chưa chọn thì báo)
            DateTime thangChamCong;

            if (Validate_ThangChamCong(dateEdit_ThangCC, out thangChamCong) == false)
            {
                return;
            }

            List <cUserInfo> dsnv_duocChon = new List <cUserInfo>();

            LayDSNV_DuocChon(gridView_DSNV, dsnv_duocChon);

            BUS_ChamCong   busChamCong = new BUS_ChamCong();
            FromToDateTime khoangTg    = new FromToDateTime {
                From = MyUtility.FirstDayOfMonth(thangChamCong), To = MyUtility.LastDayOfMonth(thangChamCong)
            };

            busChamCong.ChamCong2(dsnv_duocChon, khoangTg);
        }
Exemple #8
0
        private void frmKBVang_DaiHan_Load(object sender, EventArgs e)
        {
            dtpNgayBD.Value = MyUtility.FirstDayOfMonth(DateTime.Today);
            dtpNgayKT.Value = MyUtility.LastDayOfMonth(DateTime.Today);

            var tableLV  = SqlDataAccessHelper.ExecuteQueryString("Select * from LoaiVang");
            var dataRows = (from DataRow row in tableLV.Rows
                            let absentCode = row["AbsentCode"].ToString()
                                             where absentCode != "BD" && absentCode != "TS"
                                             select row).ToList();

            for (int i = 0; i < dataRows.Count; i++)
            {
                tableLV.Rows.Remove(dataRows[i]);
            }

            cbLoaiVang.ValueMember   = "AbsentCode";
            cbLoaiVang.DisplayMember = "AbsentDescription";
            cbLoaiVang.DataSource    = tableLV;
            cbLoaiVang.SelectedIndex = 0;
        }
Exemple #9
0
        private void btnHuyKetluong_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;                                              // kiểm tra kết nối csdl trước khi thực hiện
            }
            //confirm trước khi thực hiện
            if (MessageBox.Show(string.Format("Bạn muốn hủy kết lương tháng {0}?", m_Thang.ToString("MM/yyyy")), Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            if (XL.HuyKetLuongThang(MyUtility.FirstDayOfMonth(m_Thang)))
            {
                ACMessageBox.Show("Đã huỷ kết lương tháng " + m_Thang.ToString("MM/yyyy"), Resources.Caption_ThongBao, 3000);
            }
            else
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }
        private void fmTKeCongTheoNVu_Load(object sender, EventArgs e)
        {
            //load mặc định các dateTimePicker
            DateTime ngayBD = MyUtility.FirstDayOfMonth(DateTime.Today);
            DateTime ngayKT = MyUtility.LastDayOfMonth(DateTime.Today);

            dtpNgayBD.Value = ngayBD;
            dtpNgayKT.Value = ngayKT;
            dtpThang.Value  = ngayBD;
            numQuy.Value    = (DateTime.Today.Month - (DateTime.Today.Month % 4) / 4);
            int thangDauQuy = (int)numQuy.Value;

            dtpQuyNam.Value = new DateTime(DateTime.Today.Year, thangDauQuy, 1);

            //load tree
            XL.loadTreePhgBan(treePhongBan);
            treePhongBan.AfterSelect += treePhongBan_AfterSelect;

            //load danh sách nhiệm vụ
            DataTable tableNhiemVu = SqlDataAccessHelper.ExecSPQuery(SPName.NhiemVu_DocBang.ToString());

            checkedListNhiemVu.DataSource    = tableNhiemVu;
            checkedListNhiemVu.ValueMember   = "MaNhiemVu";
            checkedListNhiemVu.DisplayMember = "TenNhiemVu";

            /*tạo sẵn cấu trúc table exclude các nhân viên để mỗi lần thêm mới thì chỉ cần lấy cấu trúc datarow
             * của template table này
             */
            DataTable templateTable = new DataTable("ExcludeNhanVien");

            templateTable.Columns.Add(new DataColumn {
                ColumnName = "UserEnrollNumber", DataType = typeof(int)
            });
            templateTable.Columns.Add(new DataColumn {
                ColumnName = "UserFullName", DataType = typeof(string)
            });
            listExcludeNV.DataSource    = templateTable;
            listExcludeNV.ValueMember   = "UserEnrollNumber";
            listExcludeNV.DisplayMember = "UserFullName";
        }
        public frm_PhucHoiGioChamCong()
        {
            InitializeComponent();
            log4net.Config.XmlConfigurator.Configure();
            dtpNgayBD.Value = MyUtility.FirstDayOfMonth(DateTime.Today);
            dtpNgayKT.Value = MyUtility.LastDayOfMonth(DateTime.Today);

            m_listIDPhongBan = new List <int>();
            m_DSNV           = new List <cUserInfo>();
            m_Bang_DSNV      = TaoBang_DSNV_PhucHoi();
            m_Bang_PH_Them   = TaoBang_PH_Them();
            m_Bang_GioDaXN   = TaoBang_GioDaXN();
            dgrdDSNVTrgPhg.AutoGenerateColumns = dgrdPH_Them.AutoGenerateColumns = dgrdPH_Xoaa.AutoGenerateColumns = dgrdPH_GioGoc.AutoGenerateColumns = dgrdGioDaXN.AutoGenerateColumns = false;

            DataView dataView = new DataView(m_Bang_DSNV);

            dgrdDSNVTrgPhg.DataSource = dataView;

            dgrdPH_Them.DataSource = m_Bang_PH_Them;
            //3. vẽ 3 checkbox checkall cho DSNV trong phòng
            XL2.VeCheckBox_CheckAll(dgrdDSNVTrgPhg, checkAll_GridDSNV, checkAll_CheckedChanged, new Point(7, 3));
        }
        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);
        }
        private void btnChamCong_Click(object sender, EventArgs e)
        {
            DateTime Thang = dateNavigator1.DateTime;

            Thang = MyUtility.FirstDayOfMonth(Thang);
            //1. xác định danh sach nhan vien dang check;  LẬP DS nhân viên đó để chấm công
            List <int> listUEN;

            GetList_UEN_Checked(checkedDSNV, out listUEN);            // lấy danh sách các mã nhân viên check vì checkcomboBox ko cho phép lấy datarowview
            List <cUserInfo> listDSNV;
            BUS_NhanVien     busNhanVien = new BUS_NhanVien();

            busNhanVien.KhoiTaoDSNV_DuocChon(listUEN, this.m_NhanVienDR, this.m_SelectedPhong, this.m_AllNhomCa, out listDSNV);
            BUS_ChamCong busChamCong = new BUS_ChamCong();
            //busChamCong.ChamCong2(listDSNV, new FromToDateTime{From=MyUtility.FirstDayOfMonth(Thang), To = MyUtility.LastDayOfMonth(Thang)});
            zTestForm frm = new zTestForm()
            {
                m_DSNV = listDSNV, KhoangTG = new FromToDateTime {
                    From = MyUtility.FirstDayOfMonth(Thang), To = MyUtility.LastDayOfMonth(Thang)
                }
            };

            frm.Show();
        }
        private void XuatBBChamCong(object sender, WaitWindowEventArgs e)
        {
            string           filePath     = e.Arguments[0].ToString();
            string           tenNVLapBieu = e.Arguments[1].ToString();
            string           tenTrgBP     = e.Arguments[2].ToString();
            DateTime         thang        = (DateTime)e.Arguments[3];
            List <cPhongBan> dsphongban   = (List <cPhongBan>)e.Arguments[4];
            var tongCongKoTinhCV          = 0f;
            var congTinhLuong             = 0f;
            var congKOtinhLuong           = 0f;

            try              //general try catch
            {
                List <WarningMessage> warningMessages = new List <WarningMessage>();
                #region lấy thông tin từ csdl và khỏi tạo  nv

                DateTime ngaydauthang = MyUtility.FirstDayOfMonth(dtpThang.Value), ngaycuoithang = MyUtility.LastDayOfMonth(dtpThang.Value);
                var      tableKetcongNgay          = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang);
                var      tableKetcongCa            = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang);
                var      tableXPVang               = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang);
                var      tableNgayLe               = DAO.DocNgayLe(ngaydauthang, ngaycuoithang);
                var      tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang);

                var dsnv = new List <cUserInfo>();
                XL.KhoiTaoDSNV_ChamCong(dsnv, (from p in dsphongban select p.ID).ToList(), dsphongban);                 // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng

                /*
                 *                      List<cPhongBan> dsphongban = new List<cPhongBan>();
                 *                      // đưa về root node trước khi thực hiện
                 *                      var root = treePhongBan.TopNode;
                 *                      GetTopLevelNode(ref root);// mỗi lần duyệt node sẽ làm root node chuyển về parent của node cuối nên phải trả về node gốc để duyệt từ đầu
                 *                      while (root.PrevNode != null) root = root.PrevNode;
                 *                      GetNode_DuocThaotac_CheckKetcong(root, dsphongban);
                 */

                #endregion
                // xác định công chuẩn của tháng
                var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang);

                #region                 //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi

                try {
                    foreach (var nv in dsnv)
                    {
                        nv.ThongKeThang = new ThongKeCong_PC();
                        nv.DSNgayCong   = new List <cNgayCong>();
                        nv.DSVang       = new List <cLoaiVang>();
                        for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                        {
                            XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                        }
                        //load ds xp vắng
                        //XL.LoadDSXPVang(nv.MaCC, nv.DSNgayCong, tableXPVang);
                        //XL.LoadNgayLe(nv.DSNgayCong, tableNgayLe);
                        XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);                        //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới
                        XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);
                        XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);
                    }

                    var soNgayChuNhat = XL.DemSoNgayNghiChunhat(ngaydauthang, true, false);
                    var soNgayThu7 = XL.DemSoNgayNghiChunhat(ngaydauthang, false, true);                    //v 4.0.0.1
                    int soNgayChamCongx2 = 0, soNgayNghiAnhHuongCongx2 = 0;
                    foreach (var nv in dsnv)
                    {
                        XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN, out soNgayChamCongx2, out soNgayNghiAnhHuongCongx2);
                        // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                        if (nv.LoaiCN == LoaiCongNhat.NVCongNhat)                        // nhân viên làm công nhật, công cv tự động, khai báo = 0
                        {
                            nv.ThongKeThang.CongCV_Auto = 0f;
                            nv.ThongKeThang.CongCV_KB   = 0f;
                        }
                        else
                        {
                            if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc)                            // nhân viên chính thức
                            {
                                congTinhLuong = (nv.ThongKeThang.TongNgayLV4008
                                                 + nv.ThongKeThang.Phep + nv.ThongKeThang.Le                                 //ver4.0.0.8
                                                 + nv.ThongKeThang.H_CT_PT);
                                congKOtinhLuong = nv.ThongKeThang.TongTruCongTreVR + nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong
                                                  + nv.ThongKeThang.BHXH + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo;                                                 //ko có nv.ThongKeThang.CongCV_KB
                                tongCongKoTinhCV = congTinhLuong + congKOtinhLuong;

/*
 *                                                              tongCongKoTinhCV =  (nv.ThongKeThang.TongNgayLV4008
 + nv.ThongKeThang.TongTruCongTreVR+nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong
 + nv.ThongKeThang.Phep + nv.ThongKeThang.Le //ver4.0.0.8
 + nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT
 + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);//DANGLAM
 */

                                nv.ThongKeThang.CongCV_Auto = congChuanThang - tongCongKoTinhCV;
                                if (nv.ThongKeThang.CongCV_Auto < 0f)
                                {
                                    nv.ThongKeThang.CongCV_Auto = 0f;
                                }
                            }
                            else                            // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi
                            {
                                nv.ThongKeThang.CongCV_Auto = 0f;
                            }
                        }
                        nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB;
                        if (XL.KiemTraDieuKienCongCVAuto_VuotNguong(nv.ThongKeThang.CongCV_Auto, soNgayThu7, soNgayChuNhat))
                        {
                            warningMessages.Add(
                                new WarningMessage {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Có số công chờ việc được tính tự động [{0}] công theo quy định vượt quá [{1}] ngày thứ Bảy trong tháng.",
                                    nv.ThongKeThang.CongCV_Auto.ToString("#0.0#"), soNgayThu7)
                            });
                        }
                        if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 1)
                        {
                            warningMessages.Add(
                                new WarningMessage
                            {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Chấm công làm việc ngày nghỉ hàng tuần chưa đúng quy định ([{0}] ngày nghỉ >= [{1}] ngày chủ nhật).",
                                    soNgayNghiAnhHuongCongx2, soNgayChuNhat)
                            });
                        }
                        else if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 2)
                        {
                            warningMessages.Add(
                                new WarningMessage
                            {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Chấm công làm việc ngày nghỉ hàng tuần chưa đúng quy định ([{0}] ngày chấm công làm việc ngày nghỉ hàng tuần + [{1}] ngày nghỉ > [{2}] ngày chủ nhật).",
                                    soNgayChamCongx2, soNgayNghiAnhHuongCongx2, soNgayChuNhat)
                            });
                        }
                        else if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 3)
                        {
                            warningMessages.Add(
                                new WarningMessage
                            {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Nhân viên có [{0}] công làm việc vượt [{1}] ngày công chuẩn của tháng.",
                                    congTinhLuong.ToString("#0.0#"), congChuanThang.ToString(""))
                            });
                        }
                    }
                } catch (Exception ex) {
                    lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                }

                #endregion


                using (var p = new ExcelPackage()) {
                    //2. xuat bb bang ket cong thang
                    #region ghi sheet bang ket cong thang trinh ky

                    p.Workbook.Worksheets.Add("BangKetCong");
                    var ws = p.Workbook.Worksheets["BangKetCong"];
                    ws.Name = "BangKetCong";                                                                                                                  //Setting Sheet's name
                    XL.ExportSheetBangKetcongThang(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                   dsnv, tenNVLapBieu, tenTrgBP, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290); //info dsnv kết công bộ phận gồm cả nv công nhật, chính thức, vừa chính thức vừa công nhật  khác với bảng lương

                    #endregion
                    //3. xuat bb chi tiết kết công
                    #region ghi sheet chi tiết kết công

                    p.Workbook.Worksheets.Add("ChiTietKetCong");
                    ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                    ws.Name = "ChiTietKetCong";                     //Setting Sheet's name
                    XL.ExportSheetBangChiTietKetCong(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                     dsnv, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                    #endregion
                    //4. xuất bb lưu ý nếu có
                    if (warningMessages.Count > 0)
                    {
                        p.Workbook.Worksheets.Add("LUUY");
                        ws      = p.Workbook.Worksheets["LUUY"];
                        ws.Name = "LuuY";                         //Setting Sheet's name
                        ws.Cells.Style.Font.Name = "Times New Roman";
                        ws.Cells.Style.Font.Size = 12;
                        int top = 1, left = 1;
                        int ir = top, ic = left;
                        XL.FormatCell_T(ws, ref ir, ref ic, "Mã NV", plusCol: 1);
                        XL.FormatCell_T(ws, ref ir, ref ic, "Tên NV", plusCol: 1);
                        XL.FormatCell_T(ws, ref ir, ref ic, "Nội dung lưu ý", plusCol: 1, plusRow: 1);
                        foreach (WarningMessage message in warningMessages)
                        {
                            ic = left;
                            XL.FormatCell_W(ws, ref ir, ref ic, message.MaNV, colWidth: (int)L.MANV, plusCol: 1);
                            XL.FormatCell_W(ws, ref ir, ref ic, message.TenNV, colWidth: (int)L.HOTEN, plusCol: 1);
                            XL.FormatCell_W(ws, ref ir, ref ic, message.NoiDung, colWidth: 60, plusCol: 1, plusRow: 1);
                        }
                    }
                    Byte[] bytes = p.GetAsByteArray();
                    XL.XuatFileExcel(filePath, bytes, "frm_KetCongBoPhan XuatBBChamCong ");
                }

                if (warningMessages.Count > 0)
                {
                    MessageBox.Show("Vui lòng xem lại các cảnh báo của quá trình kết công trong sheet lưu ý.", Resources.Caption_ThongBao);
                }
            } catch (Exception ex)              //general try catch
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }
        public void ThucHienKetCong(object sender, WaitWindowEventArgs e)
        {
            #region

            string TemplateShiftParams = @"Ca: [{0}]; ID: [{1}]; Onn: [{2}]; Off: [{3}]; 
BD_NDVao: [{4}]; KT_NDVao: [{5}]; BD_NDRa: [{6}]; KT_NDRa: [{7}];
CPTre: [{8}]ph: [{9}]; CPSom: [{10}]ph: [{11}]; AfterOT: [{12}]ph: [{13}]; LunchMin: [{14}];
WKTime: [{15}]; WKDay: [{16}]; DayCount: [{17}]; QuaDem: [{18}];
CaMoRong: [{19}]; CaTuDo: [{20}]; TachCaDem: [{21}];";
            string templateThongTinCa = @"Thông tin ca [{10}] (ký hiệu [{11}]):  Vào ca lúc [{0}], Ra ca lúc [{1}], Ca [{2}], 
Ca làm việc [{3}] tiếng, được nghỉ trưa [{4}] phút, tính [{5}] công, 
cho phép trễ [{6}] phút, ra sớm [{7}] phút, thời gian làm thêm tối thiểu [{8}] phút, [{9}] qua xác nhận quản lý";
            string shiftParams = string.Empty, thongtinCa = string.Empty;

            #endregion

            DateTime         thang      = (DateTime)e.Arguments[0];
            List <cPhongBan> dsphongban = (List <cPhongBan>)e.Arguments[1];
            #region  lấy ngày BD và kết thúc

            DateTime ngaydauthang = MyUtility.FirstDayOfMonth(thang), ngaycuoithang = MyUtility.LastDayOfMonth(thang);
            var      ngayBD_Bef2D = ngaydauthang.AddDays(-2d);
            var      ngayKT_Aft2D = ngaycuoithang.AddDays(2d);

            #endregion

            try             //general try catch
            {
                // khởi tạo các nhân viên chấm công thuộc phòng ban check kết công (được thao tác) và tính toán công, phụ cấp
                XL.KhoiTaoDSNV_ChamCong(m_DSNV, (from cPhongBan item in dsphongban select item.ID).ToList(), dsphongban);
                XL.XemCong_v08(m_DSNV, ngayBD_Bef2D, ngayKT_Aft2D);
                // sau khi tính công xong thì cập nhật lại xử lý các trường hợp công nhật
                var tableCongNhat = DAO.LayTableCongNhat(thang);
                foreach (DataRow row in tableCongNhat.Rows)
                {
                    int      macc   = (int)row["UserEnrollNumber"];
                    DateTime ngayBD = (DateTime)row["NgayBatDau"];
                    DateTime ngayKT = (DateTime)row["NgayKetThuc"];
                    var      nv     = m_DSNV.Find(o => o.MaCC == macc);            //tìm nv , ko tìm thấy thì tiếp tục
                    if (nv == null)
                    {
                        continue;
                    }
                    //duyệt qua các ngày công để set lại phụ cấp, xoá hết các ds vắng
                    float CongCongnhat = 0f;
                    foreach (var ngayCong in nv.DSNgayCong.Where(o => o.Ngay >= ngayBD && o.Ngay <= ngayKT))
                    {
                        ngayCong.PhuCaps = new PhuCap();
                        ngayCong.QuaDem  = false;
                        ngayCong.DSVang.Clear();
                        CongCongnhat += ngayCong.TongCong_4008;
                    }
                    // cập nhật số ngày công công nhật xuống csdl
                    int kq1 = SqlDataAccessHelper.ExecNoneQueryString(" update DSNVChiCongNhatThang set SoNgayCong = @SoNgayCong where UserEnrollNumber= @UserEnrollNumber", new string[] { "@SoNgayCong", "@UserEnrollNumber" }, new object[] { CongCongnhat, macc });                    //info ko cần log
                    if (kq1 == 0)
                    {
                        MessageBox.Show(Resources.Text_CoLoi);
                    }
                }

                // xoá bỏ các kết công cũ của tháng (nếu có) để ghi kết công mới cho tháng
                int kq = DAO.DelKetCongCa_Ngay(ngaydauthang, ngaycuoithang, (from nv in m_DSNV select nv.MaCC).ToList());
                //bool flagError = false;
                foreach (var nv in m_DSNV)
                {
                    foreach (var ngayCong in nv.DSNgayCong.Where(item => item.Ngay >= ngaydauthang && item.Ngay <= ngaycuoithang))
                    {
                        foreach (var CIO in ngayCong.DSVaoRa)
                        {
                            int kq1 = 0;
                            if (CIO.HaveINOUT < 0)
                            {
                                kq1 = DAO.InsKetCongCa(nv.MaCC, ngayCong.Ngay,
                                                       (CIO.Vao != null) ? (DateTime?)CIO.Vao.Time : null,
                                                       (CIO.Raa != null) ? (DateTime?)CIO.Raa.Time : null,
                                                       null, string.Empty, false, false, false,
                                                       false, false,                                                    //ver 4.0.0.4	VaoTreLaCV, RaSomLaCV
                                                       false, false, false, 0f, false, 0f,                              //ver 4.0.0.8@BuGioTre, @BuGioSom, @BuPhepTre, @CongBuPhepTre, @BuPhepSom, @CongBuPhepSom,
                                                       0f, 0f, 0f, 0f, 0f, 0f,                                          //ver 4.0.0.8 CongTrongCa, CongNgoaiCa, TruCongTreVR, TruCongSomVR, TruCongTreBu, TruCongSomBu,
                                                       0, false, string.Empty,
                                                       null, null, null, null, null, null, null, null, string.Empty, string.Empty, CIO.HaveINOUT, 0f);
                            }
                            else
                            {
                                #region tạo shiftParams

                                var sp = CIO.ThuocCa;
                                shiftParams = string.Format(TemplateShiftParams, sp.Code, sp.ID, sp.Duty.Onn.ToString(@"d\ hh\:mm"), sp.Duty.Off.ToString(@"d\ hh\:mm"),
                                                            sp.NhanDienVao.Onn.ToString(@"d\ hh\:mm"), sp.NhanDienVao.Off.ToString(@"d\ hh\:mm"),
                                                            sp.NhanDienRaa.Onn.ToString(@"d\ hh\:mm"), sp.NhanDienRaa.Off.ToString(@"d\ hh\:mm"),
                                                            sp.LateeMin.Minutes, sp.chophepTreTS.ToString(@"d\ hh\:mm"),
                                                            sp.EarlyMin.Minutes, sp.chophepSomTS.ToString(@"d\ hh\:mm"),
                                                            sp.AfterOTMin.Minutes, sp.batdaulamthemTS.ToString(@"d\ hh\:mm"),
                                                            sp.LunchMin.Minutes, sp.WorkingTimeTS.TotalMinutes.ToString("#####"),
                                                            sp.Workingday.ToString("0.0"), sp.DayCount, Convert.ToInt32(sp.QuaDem),
                                                            Convert.ToInt32(sp.IsExtended), Convert.ToInt32(sp.Is_CaTuDo), Convert.ToInt32(sp.TachCaDem));

                                thongtinCa = string.Format(templateThongTinCa,
                                                           sp.Duty.Onn.ToString(@"d\ hh\:mm"), sp.Duty.Off.ToString(@"d\ hh\:mm"), sp.Code, sp.WorkingTimeTS.TotalMinutes.ToString("#####"),
                                                           sp.LunchMin.Minutes, sp.Workingday.ToString("0.0#"),
                                                           sp.LateeMin.Minutes, sp.EarlyMin.Minutes, Convert.ToInt32(sp.AfterOTMin.TotalMinutes), CIO.DaXN ? "đã" : "chưa",
                                                           sp.Code, sp.KyHieuCC);

                                #endregion

                                kq1 = DAO.InsKetCongCa(nv.MaCC, ngayCong.Ngay, CIO.Vao.Time, CIO.Raa.Time,
                                                       CIO.ThuocCa.ID, CIO.ThuocCa.Code, CIO.DaXN, CIO.DuyetChoPhepVaoTre, CIO.DuyetChoPhepRaSom,
                                                       CIO.VaoTreTinhCV, CIO.RaaSomTinhCV,                                                                                       //ver 4.0.0.4
                                                       CIO.ChoBuGioTre, CIO.ChoBuGioSom, CIO.ChoBuPhepTre, CIO.BuCongPhepTreCongDon, CIO.ChoBuPhepSom, CIO.BuCongPhepSomCongDon, //ver 4.0.0.8
                                                       CIO.CongTrongCa, CIO.CongNgoaiCa, CIO.TruCongTreVR, CIO.TruCongSomVR, CIO.TruCongTreBu, CIO.TruCongSomBu,                 //ver 4.0.0.8
                                                       CIO.OTMin, CIO.QuaDem, CIO.ThuocCa.KyHieuCC, CIO.TG.GioLamViec, CIO.TG.LamThem, CIO.TG.LamBanDem, CIO.TG.GioThuc,
                                                       CIO.TG.VaoTre, CIO.TG.RaaSom,
                                                       CIO.TD.BD_LV, CIO.TD.KT_LV, thongtinCa, shiftParams,
                                                       CIO.HaveINOUT, CIO.Cong);
                            }
                        }
                        if (ngayCong.DSVaoRa.Count != 0)
                        {
                            int kq2 = DAO.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong_4008, /*ngayCong.TongNgayLVtest*/ 0f, ngayCong.PhuCaps._TongPC,                            //ver4.0.0.1 //ver 4.0.0.8 ngayCong.TongCong_4008,TongNgayLV=0f
                                                         ngayCong.PhuCaps._30_dem, ngayCong.PhuCaps._50_TC, ngayCong.PhuCaps._100_TCC3,
                                                         ngayCong.PhuCaps._100_LVNN_Ngay, ngayCong.PhuCaps._150_LVNN_Dem,
                                                         ngayCong.PhuCaps._200_LeTet_Ngay, ngayCong.PhuCaps._250_LeTet_Dem,
                                                         ngayCong.PhuCaps._Cus, ngayCong.TG.GioLamViec, ngayCong.TG.LamThem,
                                                         ngayCong.TG.LamBanDem, ngayCong.TG.GioThuc, ngayCong.QuaDem,
                                                         ngayCong.CongDinhMucDuoi8Tieng, ngayCong.CongTichLuy, ngayCong.TruCongTreVR, ngayCong.TruCongSomVR,                                                 //ver 4.0.0.8
                                                         ngayCong.TruCongTreBu, ngayCong.TruCongSomBu, ngayCong.CongBuPhepTre, ngayCong.CongBuPhepSom                                                        //ver 4.0.0.8
                                                         );
                        }

                        //tbd fix lỗi phụ cấp công tác những ngày ko có làm việc
                        else
                        {
                            if (ngayCong.DSVang.Count != 0)
                            {
                                int kq2 = DAO.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong_4008, /*ngayCong.TongNgayLVtest*/ 0f, ngayCong.PhuCaps._TongPC,                                //ver4.0.0.1 //ver 4.0.0.8 ngayCong.TongCong_4008,TongNgayLV=0f
                                                             ngayCong.PhuCaps._30_dem, ngayCong.PhuCaps._50_TC, ngayCong.PhuCaps._100_TCC3,
                                                             ngayCong.PhuCaps._100_LVNN_Ngay, ngayCong.PhuCaps._150_LVNN_Dem,
                                                             ngayCong.PhuCaps._200_LeTet_Ngay, ngayCong.PhuCaps._250_LeTet_Dem,
                                                             ngayCong.PhuCaps._Cus, ngayCong.TG.GioLamViec, ngayCong.TG.LamThem,
                                                             ngayCong.TG.LamBanDem, ngayCong.TG.GioThuc, ngayCong.QuaDem,
                                                             ngayCong.CongDinhMucDuoi8Tieng, ngayCong.CongTichLuy, ngayCong.TruCongTreVR, ngayCong.TruCongSomVR,                                             //ver 4.0.0.8
                                                             ngayCong.TruCongTreBu, ngayCong.TruCongSomBu, ngayCong.CongBuPhepTre, ngayCong.CongBuPhepSom                                                    //ver 4.0.0.8
                                                             );
                            }
                        }
                    }
                }
                // sau khi ghi kết công thì cập nhật tình trạng kết công (đã kết công), đồng thời ghi log đã kết công
                DAO.UpdInsKetCongBoPhan(ngaydauthang, (from cPhongBan item in dsphongban select item).ToList());
            } catch (Exception ex)             //general try catch
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }
        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();

            if (string.IsNullOrEmpty(strChecked_ArrMaCC))
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000); return;
            }
            List <int> arrMaCC = new List <int>();

            strChecked_ArrMaCC.Split(new char[] { ',' }).ToList().ForEach(item => arrMaCC.Add(int.Parse(item)));

            List <cUserInfo> listNhanVien = new List <cUserInfo>();
            DataTable        tableDSNV    = checkedDSNV.Properties.DataSource as DataTable;

            if (tableDSNV == null)
            {
                return;
            }
            foreach (int maCC in arrMaCC)
            {
                DataRow[] row      = tableDSNV.Select("UserEnrollNumber=" + maCC);
                cUserInfo nhanvien = new cUserInfo {
                    MaCC  = (int)row[0]["UserEnrollNumber"],
                    MaNV  = row[0]["UserFullCode"].ToString(),
                    TenNV = row[0]["UserFullName"].ToString(),
                };
                XL.GetLichTrinhNV(nhanvien, row[0]["SchID"] != DBNull.Value ? (int)row[0]["SchID"] : (int?)null);
                listNhanVien.Add(nhanvien);
            }
            DateTime ngaybd = MyUtility.FirstDayOfMonth(dateNavigator1.DateTime);
            DateTime ngaykt = MyUtility.LastDayOfMonth(ngaybd);

            XL.XemCongThoiGianChuaKetLuong(listNhanVien, ngaybd, ngaykt);
            int soTH_ThieuChamCong,
                soTH_KoNhanDienCa,
                soTH_OLaiChuaXN,
                soTH_VaoTreRaSom,
                soTH_VaoRaEdited,
                soTH_DaXN,
                soTH_DaXN_LamThem,
                soTH_ChoPhepTreSom,
                soTH_VaoTre_RaSom_CoLamBu,
                soTH_XinPhepVang;

            this.GhiNhanThongBao(listNhanVien, ngaybd, ngaykt,
                                 out soTH_ThieuChamCong, out soTH_KoNhanDienCa, out soTH_OLaiChuaXN, out soTH_VaoTreRaSom,
                                 out soTH_VaoRaEdited, out soTH_DaXN, out soTH_DaXN_LamThem, out soTH_ChoPhepTreSom, out soTH_VaoTre_RaSom_CoLamBu,
                                 out soTH_XinPhepVang);
            lbThieuChamCong.Text    = string.Format(Resources.LabelText_ThieuChamCong, soTH_ThieuChamCong);
            lbKhongNhanDienCa.Text  = string.Format(Resources.LabelText_KoNhanDienCa, soTH_KoNhanDienCa);
            lbOLaiChuaXN.Text       = string.Format(Resources.LabelText_OLaiChuaXN, soTH_OLaiChuaXN);
            lbVaoTreRaSom.Text      = string.Format(Resources.LabelText_VaoTreRaSom, soTH_VaoTreRaSom);
            lbVaoRaBiChinhSua.Text  = string.Format(Resources.LabelText_VaoRaBiChinhSua, soTH_VaoRaEdited);
            lbDaXacNhanCa.Text      = string.Format(Resources.LabelText_DaXacNhanCa, soTH_DaXN);
            lbDaXacNhanLamThem.Text = string.Format(Resources.LabelText_DaXacNhanLamThemGio, soTH_DaXN_LamThem);
            lbChoPhepTreSom.Text    = string.Format(Resources.LabelText_ChoPhepTreSom, soTH_ChoPhepTreSom);
            lbTreSomCoLamBu.Text    = string.Format(Resources.LabelText_TreSomCoLamBu, soTH_VaoTre_RaSom_CoLamBu); lbXinPhepVang.Text = string.Format(Resources.LabelText_XinPhepVang, soTH_XinPhepVang);
            DataTable table = tao();

            populatedata(listNhanVien, table);
            //dataGridView1.DataSource = table;
            gridControl1.DataSource = table;
            lbThieuChamCong.Tag     = listNhanVien;
        }
Exemple #17
0
        private void KetLuong(object sender, WaitWindowEventArgs e)
        {
            #region lấy thông tin từ csdl và khỏi tạo  nv

            var ngaydauthang              = MyUtility.FirstDayOfMonth(m_Thang);
            var ngaycuoithang             = MyUtility.LastDayOfMonth(m_Thang);
            var tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang);
            var tableDSThuchiThang        = DAO.LayDSThuchiThang(ngaydauthang);
            var tableKetcongNgay          = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa            = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe = DAO.DocNgayLe(ngaydauthang, ngaycuoithang);

            var dsnv       = new List <cUserInfo>();
            var dsphongban = new List <cPhongBan>();
            XL.KhoiTaoDSPhongBan(dsphongban);             // khởi tạo các phòng ban để cập nhật thông tin phòng ban cho nhân viên tính công
            XL.KhoiTaoDSNV_TinhLuong(dsnv, dsphongban);   // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng

            #endregion

            #region             //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi

            foreach (var nv in dsnv)
            {
                nv.DSNgayCong = new List <cNgayCong>();
                nv.DSVang     = new List <cLoaiVang>();
                for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                {
                    XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                }
                XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);                //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới
                XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);

                XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);
            }


            #endregion

            //có được ds nhân viên với công, phụ cấp, các loại vắng, công ngày lễ --> bắt đầu tính lương
            #region lấy thông số để tính lương
            var sanluong01           = (int)(numSanLuong.Value);
            var dongia02             = (int)numDonGia.Value;
            var perTrichQuyLuong     = (int)numTrichQuyLuong.Value;
            var sanluongGiacongNoiBo = (int)numSanluongGiacongNoibo.Value;
            var dongiaGiacongNoiBo   = (int)numDongiaGiacongNoibo.Value;
            var sanluongGiacongNgoai = (int)numSanluongGiacongNgoai.Value;
            var dongiaGiacongNgoai   = (int)numDongiaGiacongNgoai.Value;
            var mucLuongToithieu     = (int)numLuongToiThieu.Value;
            var mucLuongTT17         = (int)numMucLuongTT17.Value;
            var DinhMuccomtrua       = (int)numDinhMucComTrua.Value;
            var luongPTT             = (float)num11LuongPTT.Value;
            var luongTrucBV          = (float)num12LuongLeTetBV.Value;
            var phuCapTN             = (float)num10PCTrachNhiem.Value;

            double tongQuy100Per03 = Convert.ToDouble(sanluong01) * Convert.ToDouble(dongia02);
            double _80perQuy100_04 = tongQuy100Per03 * (perTrichQuyLuong / 100d);             // ko cần round vì 220*0.8=176 chẵn

            #endregion
            // xác định công chuẩn của tháng
            var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang);
            int temp           = 0;
            #region             // thống kê công, phụ cấp hàng ngày của từng nhân viên chính thức//trường hợp nhân viên vừa công nhật vừa chính thức thì chỉ thống kê ngày công sau ngày kết thúc công nhật
            foreach (var nv in dsnv)
            {
                // thống kê công và phụ cấp từng nv
                XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN, out temp, out temp);
                // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                if (nv.LoaiCN == LoaiCongNhat.NVCongNhat)                // nhân viên làm công nhật, công cv tự động, khai báo = 0
                {
                    nv.ThongKeThang.CongCV_Auto = 0f;
                    nv.ThongKeThang.CongCV_KB   = 0f;
                }
                else
                {
                    if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc)                    // nhân viên chính thức
                    {
                        nv.ThongKeThang.CongCV_Auto = congChuanThang -
                                                      /*(nv.ThongKeThang.Cong + nv.ThongKeThang.Le + nv.ThongKeThang.Phep + //ver4.0.0.0*/
                                                                                                                                                                 /*(nv.ThongKeThang.TongNgayLV + nv.ThongKeThang.Le + nv.ThongKeThang.Phep + //ver4.0.0.1*/
                                                      (nv.ThongKeThang.TongNgayLV4008
                                                       + nv.ThongKeThang.TongTruCongTreVR + nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong //ver 4.0.0.8
                                                       + nv.ThongKeThang.Phep + nv.ThongKeThang.Le                                                               //ver4.0.0.8
                                                       + nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT
                                                       + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);                             //DANGLAM
                        if (nv.ThongKeThang.CongCV_Auto < 0f)
                        {
                            nv.ThongKeThang.CongCV_Auto = 0f;
                        }
                    }
                    else                    // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi
                    {
                        nv.ThongKeThang.CongCV_Auto = 0f;
                    }
                }
                nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB;
            }

            #endregion

            #region             // tính lương công nhật cho các nhân viên làm công nhật và tổng lương công nhật

            double TongLuongCongNhat_AllNV = 0d;

            foreach (DataRow row in tableDSNVChiCongnhatThang.Rows.Cast <DataRow>())
            {
                // lấy thông tin
                var macc        = (int)row["UserEnrollNumber"];
                var dongiaLuong = (int)row["DonGiaLuong"];
                var soNgayCong  = (float)row["SoNgayCong"];
                var TamUng      = (double)row["TamUng"];
                // xác định nhân viên
                var nv = dsnv.Find(o => o.MaCC == macc);
                if (nv == null)
                {
                    continue;
                }
                nv.ThongKeThang.Cong_Congnhat = soNgayCong;
                nv.chiTietLuong.CongNhat      = soNgayCong * dongiaLuong;            //ko trừ tạm ứng, tạm ứng chỉ ở phần thực lãnh mới ghi
                TongLuongCongNhat_AllNV      += nv.chiTietLuong.CongNhat;
            }

            #endregion

            #region             //đọc danh sách thu chi cho từng nhân viên (lưu ý ko đọc phụ cấp của nhân viên công nhật

            foreach (DataRow row in tableDSThuchiThang.Rows.Cast <DataRow>())
            {
                var macc = (int)row["UserEnrollNumber"];
                // xác định nhân viên
                var nv = dsnv.Find(o => o.MaCC == macc);
                if (nv == null)
                {
                    continue;
                }
                nv.chiTietLuong.KhauTru.TamUng     = (double)row["TamUng"];
                nv.chiTietLuong.LuongDieuChinh     = (double)row["LuongDieuChinh"];
                nv.chiTietLuong.MucDongBHXH        = (float)row["MucDongBHXH"];
                nv.chiTietLuong.KhauTru.ThuChiKhac = (double)row["ThuChiKhac"];
            }

            #endregion

            #region             // tính lương cho nv chính thức

            double tong_qlcb_2 = 0d, tong_SPLamRa_B2_2 = 0d, tongQuyLuongCV = 0d, tongQuyLuongNghiDinhCP = 0d, tongChiKhacTuQuyLuong = 0d, tongQuyLuongSP = 0d, tong_luong_dieuchinh = 0d, tongKhauTruThuChiKhac = 0d;
            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                //if (Math.Abs(nv.ThongKeThang.Cong - 0f) < 0.01f) nv.ThongKeThang.CongCV = 0f; //fortesting nếu ko chấm công thì cũng ko có công cv
                XL.TinhLuongCoBan_CongVaPC_A202(nv.HeSo.LuongCB, mucLuongToithieu, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC,
                                                nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le, nv.ThongKeThang.CongCV,                                                //DANGLAM
                                                out nv.chiTietLuong.LCB_Theo.CongThucTe, out nv.chiTietLuong.LCB_Theo.CheDoNghi, out nv.chiTietLuong.LCB_Theo.CongCV,
                                                out nv.chiTietLuong.LCB_Theo.PhuCap);
                tongQuyLuongCV += nv.chiTietLuong.LCB_Theo.CongCV;
                //tongQuyLuongNghiDinhCP += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC; // yêu cầu cũ (T1/2015) là có lương chờ việc
                tongQuyLuongNghiDinhCP += nv.chiTietLuong.LCB_Theo.Cong_CD_PC;                // yêu cầu mới (T8/2015) là tách lương chờ việc ra

                //ver4.0.0.7 tong_qlcb_2 += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC + nv.chiTietLuong.LuongDieuChinh; //yêu cầu mới (T8/2015) là tách lương chờ việc ra khỏi quỹ lương cơ bản đưa vào quỹ lương sản phẩm
                tong_qlcb_2           += nv.chiTietLuong.LCB_Theo.Cong_CD_PC;       //info tong_qlcb_2 bao gồm lương cb 1nv, bồi dưỡng ca 3 1nv, lương tháng trước 1 nv
                tong_luong_dieuchinh  += nv.chiTietLuong.LuongDieuChinh;
                tongKhauTruThuChiKhac += nv.chiTietLuong.KhauTru.ThuChiKhac;

                XL.TinhSPLamRa_CongVaPC_B102(nv.HeSo.LuongCV, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC, nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le,                //DANGLAM
                                             out nv.chiTietLuong.SPLamRa_Theo.CongThucTe, out nv.chiTietLuong.SPLamRa_Theo.CheDoNghi, out nv.chiTietLuong.SPLamRa_Theo.PhuCap);
                tong_SPLamRa_B2_2 += nv.chiTietLuong.SPLamRa_Theo.TongSPLamRa;
                // tính khấu trừ BHXH
                //nv.chiTietLuong.KhauTru.BHXH = Convert.ToDouble(nv.HeSo.BHXH_YT_TN * mucLuongToithieu * (nv.chiTietLuong.MucDongBHXH / 100f));
                nv.chiTietLuong.KhauTru.BHXH = Convert.ToDouble((nv.HeSo.LCBTT17 + nv.HeSo.PCTNTT17 + nv.HeSo.PCDHTT17 + nv.HeSo.PCCVTT17) * mucLuongTT17 * (nv.chiTietLuong.MucDongBHXH / 100f)); // tính BHXH theo TT17 [update T1/2018]
                // tính tiền cơm trưa
                var temp1 = DinhMuccomtrua - ((DinhMuccomtrua / congChuanThang) * nv.ThongKeThang.SoNgayNghiRO_NguyenNgay);
                nv.chiTietLuong.TienComTrua = (temp1 >= 0d) ? temp1 : 0d;
            }
            var chitienGiacongNoibo = Convert.ToDouble(sanluongGiacongNoiBo) * Convert.ToDouble(dongiaGiacongNoiBo);
            var chitienGiacongNgoai = Convert.ToDouble(sanluongGiacongNgoai) * Convert.ToDouble(dongiaGiacongNgoai);
            //var tong_qlSP_A71_1_VaGiaCong = (_80perQuy100_04 + chitienGiacongNoibo + chitienGiacongNgoai) - tong_qlcb_2 - TongLuongCongNhat_AllNV; // yêu cầu mới (T8/2015) là tách lương chờ việc ra
            var tong_qlSP_A71_1_VaGiaCong = (_80perQuy100_04 + chitienGiacongNoibo + chitienGiacongNgoai) - tong_qlcb_2 - tongQuyLuongCV - TongLuongCongNhat_AllNV - tong_luong_dieuchinh - phuCapTN - luongPTT - luongTrucBV - tongKhauTruThuChiKhac; // yêu cầu mới (T1/2018)
            tongChiKhacTuQuyLuong = tongQuyLuongCV + phuCapTN + luongPTT + luongTrucBV + tongKhauTruThuChiKhac;
            double giaTri_1SP_B3_1 = (Math.Abs(tong_SPLamRa_B2_2 - 0d) > 0.001d) ? (tong_qlSP_A71_1_VaGiaCong / tong_SPLamRa_B2_2) : 0d;                                                                                                               // tính ra được 1 đơn vị sản phẩm có giá bao nhiêu
            //double tong0 = 0d, tong1 = 0d, tong2 = 0d, tong3 = 0d, tong4 = 0d, tong5 = 0d, tong6 = 0d, tong7 = 0d, tong8 = 0d, tong9 = 0d, tong10 = 0d, tong11 = 0d, tong12 = 0d, tong13 = 0d, tong14 = 0d, tong15 = 0d, tong16 = 0d, tong17 = 0d, tong18 = 0d, tong19 = 0d, tong20 = 0d, tong21 = 0d, tong22 = 0d, tong23 = 0d, tong24 = 0d, tong25 = 0d, tong26 = 0d, tong27 = 0d, tong28 = 0d, tong29 = 0d, tong30 = 0d, tong31 = 0d, tong32 = 0d, tong33 = 0d, tong34 = 0d, tong35 = 0d, tong36 = 0d;

            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                nv.chiTietLuong.LSP_Theo.CongThucTe = nv.chiTietLuong.SPLamRa_Theo.CongThucTe * giaTri_1SP_B3_1;
                nv.chiTietLuong.LSP_Theo.CheDoNghi  = nv.chiTietLuong.SPLamRa_Theo.CheDoNghi * giaTri_1SP_B3_1;
                nv.chiTietLuong.LSP_Theo.PhuCap     = nv.chiTietLuong.SPLamRa_Theo.PhuCap * giaTri_1SP_B3_1;
                tongQuyLuongSP += nv.chiTietLuong.LSP_Theo.TongCong_CD_PC;
                //fortesting region [03]
            }

            #endregion

            //fortesting testing region [01]
            #region             // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ

            // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ
            int kq1 = SqlDataAccessHelper.ExecNoneQueryString(
                "delete from KetLuongThang where Thang = @Thang", new string[] { "@Thang" }, new object[] { m_Thang });                 //INFO LOG DO KẾT LƯƠNG THÁNG THỰC HIỆN

            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                int kq = DAO.InsKetLuongThang(m_Thang, nv);
                //if (kq == 0) MessageBox.Show("Xảy ra lỗi tại vị trí NV: " + nv.MaCC + nv.TenNV);//fortesting
            }

            // sau khi cập nhật lương từng nhân viên thì cập nhật thông số kết lương tháng
            int kq2 = DAO.UpdInsThongsoKetluongThang(m_Thang,
                                                     XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290,
                                                     sanluong01, dongia02, perTrichQuyLuong,
                                                     sanluongGiacongNoiBo, dongiaGiacongNoiBo, sanluongGiacongNgoai, dongiaGiacongNgoai,
                                                     mucLuongToithieu, /*donGiaBdCa3,*/ DinhMuccomtrua,
                                                     mucLuongTT17, luongPTT, luongTrucBV, phuCapTN,
                                                     tongQuyLuongCV, tongQuyLuongNghiDinhCP,
                                                     tongChiKhacTuQuyLuong, tongQuyLuongSP, giaTri_1SP_B3_1);

            //ghi log
            string noidung = string.Format("Kết lương tháng [{0}]", m_Thang.ToString("MM/yyyy"));
            DAO.GhiNhatKyThaotac("Kết lương", noidung);

            #endregion
        }
Exemple #18
0
        private void XuatBangChiTiet(object sender, WaitWindowEventArgs e)
        {
            string saveFileName = e.Arguments[0].ToString();

            var dsnv          = new List <cUserInfo>();
            var ngaydauthang  = MyUtility.FirstDayOfMonth(m_Thang);
            var ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang);

            #region lấy dữ liệu kết lương để xuất

            var tableKetLuongThang        = DAO.LayKetLuongThang(ngaydauthang);
            var tableThongsoKetluongThang = DAO.LayThongsoKetluongThang(ngaydauthang);
            var tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang);
            var tableTongLuongCongnhat    = SqlDataAccessHelper.ExecuteQueryString(
                @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
                new string[] { "@Thang" }, new object[] { ngaydauthang });
            var tongLuongCongnhat  = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
                                      let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
                                                                                                                           ? (double)row["LuongDieuChinh"]
                                                                                                                           : 0d
                                                           select luongdieuchinh).Sum();
            var tableKetcongNgay = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa   = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang      = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe      = DAO.DocNgayLe(ngaydauthang, ngaycuoithang);

            #endregion
            ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang);


            var      @continue = true;
            FileInfo template, fileResult;
            try {
                template = new FileInfo(Settings.Default.pathReportChiTietLuong);
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return;
                }
            }
            try {
                fileResult = new FileInfo(saveFileName);
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return;
                }
            }

            try {
                using (var packageResult = new ExcelPackage(template)) {
                    var workbook = packageResult.Workbook;
                    #region ghi sheet thong so

                    var ws = workbook.Worksheets["ThongSo"];
                    ws.Name = "ThongSo";                     //Setting Sheet's name
                    XL.ExportSheetThongSo1(ws, ngaydauthang, tableThongsoKetluongThang);
                    #endregion

                    #region ghi sheet chi tiết từng ngày công
                    ws      = workbook.Worksheets["BangChiTietNgayCong"];
                    ws.Name = "BangChiTietNgayCong";
                    //XL.ExportSheetChiTietNgayCong1(ws, dsnv);

                    #endregion

                    var ws_Template = workbook.Worksheets["BangChiTietLuong"];
                    XL.ExportSheetChiTietLuong1(ws_Template, dsnv);

                    while (@continue)
                    {
                        try {
                            packageResult.SaveAs(fileResult);
                            @continue = false;
                        } catch (Exception ex) {
                            lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                            if (ex is IOException)
                            {
                                MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi);
                                @continue = true;
                            }
                            else
                            {
                                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
                                @continue = false;
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is IOException)
                {
                    MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
                    return;
                }
            }
        }
Exemple #19
0
        private void XuatBBLuong(object sender, WaitWindowEventArgs e)
        {
            string tenNVLapBieu  = (string)e.Arguments[0];
            string saveFileName  = (string)e.Arguments[1];
            var    ngaydauthang  = MyUtility.FirstDayOfMonth(m_Thang);
            var    ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang);
            //#region lấy dữ liệu kết lương để xuất

            var tableKetLuongThang        = DAO.LayKetLuongThang(ngaydauthang);
            var tableThongsoKetluongThang = DAO.LayThongsoKetluongThang(ngaydauthang);
            var tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang);
            var tableTongLuongCongnhat    = SqlDataAccessHelper.ExecuteQueryString(
                @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
                new string[] { "@Thang" }, new object[] { ngaydauthang });
            var tongLuongCongnhat  = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
                                      let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
                                                                                                                           ? (double)row["LuongDieuChinh"]
                                                                                                                           : 0d
                                                           select luongdieuchinh).Sum();
            var tableKetcongNgay = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa   = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang      = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe      = DAO.DocNgayLe(ngaydauthang, ngaycuoithang);
            var dsnv             = new List <cUserInfo>();

            ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang);

            //#endregion

            //fortesting testing region [02]
            using (var p = new ExcelPackage()) {
                //1. xuat bb bang thong so san luong, don gia, he so pc
                #region lay thong so cac loai pc de ghi cot tieu de
                int pc30   = (int)tableThongsoKetluongThang.Rows[0]["HSPCDem"];
                int pc50   = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong"];
                int pctcc3 = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong_Dem"];
                int pc100  = (int)tableThongsoKetluongThang.Rows[0]["HSPC200"];
                int pc160  = (int)tableThongsoKetluongThang.Rows[0]["HSPC260"];
                int pc200  = (int)tableThongsoKetluongThang.Rows[0]["HSPC300"];
                int pc290  = (int)tableThongsoKetluongThang.Rows[0]["HSPC390"];
                #endregion
                //2. xuat bb bang ket cong thang
                #region ghi sheet bang ket cong thang trinh ky

                p.Workbook.Worksheets.Add("BangKetCong");
                var ws = p.Workbook.Worksheets["BangKetCong"];
                ws.Name = "BangKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangKetcongThang(ws, ngaydauthang, ngaycuoithang, dsnv, string.Empty, string.Empty, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290);

                #endregion
                //3. xuat bb chi tiết kết công
                #region ghi sheet chi tiết kết công

                p.Workbook.Worksheets.Add("ChiTietKetCong");
                ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                ws.Name = "ChiTietKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangChiTietKetCong(ws, ngaydauthang, ngaycuoithang, dsnv, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290);

                #endregion
                //4. xuat bb bang luong cong nhat
                #region ghi sheet bang luong cong nhat

                p.Workbook.Worksheets.Add("BangLuongCongNhat");
                ws      = p.Workbook.Worksheets["BangLuongCongNhat"];
                ws.Name = "BangLuongCongNhat";
                XL.ExportSheetBangLuongCongNhat(ws, ngaydauthang, tableDSNVChiCongnhatThang);

                #endregion
                //5. xuat bb bang luong chinh thuc
                #region ghi sheet bảng lương

                p.Workbook.Worksheets.Add("BangLuong");
                ws      = p.Workbook.Worksheets["BangLuong"];
                ws.Name = "BangLuong";
                XL.ExportSheetBangLuong(ws, m_Thang, dsnv, tenNVLapBieu);

                #endregion
                //6. xuat bb bang tong hop so lieu giam doc ky duyet
                #region ghi sheet bảng tổng hợp số liệu

                p.Workbook.Worksheets.Add("BangTongHopChi");
                ws      = p.Workbook.Worksheets["BangTongHopChi"];
                ws.Name = "BangTongHopChi";
                XL.ExportSheetTongHopChi(ws, m_Thang, tableThongsoKetluongThang, tongLuongCongnhat, tongLuongDieuchinh);

                #endregion
                //7. xuat sheet thong ke sữa
                #region ghi sheet thống kê BD ĐH

                p.Workbook.Worksheets.Add("BangThongKeBoiDuongDocHai");
                ws      = p.Workbook.Worksheets["BangThongKeBoiDuongDocHai"];
                ws.Name = "BangThongKeBoiDuongDocHai";
                XL.ExportSheetBangThongKeSua(ws, ngaydauthang, ngaycuoithang, dsnv);

                #endregion


                Byte[] bytes = p.GetAsByteArray();
                XL.XuatFileExcel(saveFileName, bytes, "frm4LuuHSPC XuatBBLuong");
            }
        }
        private void XuatBBKetCongThang(object sender, WaitWindowEventArgs e)
        {
            string saveFileName = (string)e.Arguments[0]; string tenNVLapBieu = (string)e.Arguments[1]; string tenTrgBP = (string)e.Arguments[2];

            #region lấy thông tin từ csdl và khỏi tạo  nv

            int[] listMaCC                  = (from nv in m_dsnv select nv.MaCC).ToArray();
            var   ngaydauthang              = MyUtility.FirstDayOfMonth(dtpThang.Value);
            var   ngaycuoithang             = MyUtility.LastDayOfMonth(dtpThang.Value);
            var   tableKetcongNgay          = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang, DSNV: listMaCC);
            var   tableKetcongCa            = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang, DSNV: listMaCC);
            var   tableXPVang               = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang, listMaCC);
            var   tableNgayLe               = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);
            var   tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang, DSNV: listMaCC);

            #endregion

            // xác định công chuẩn của tháng
            var soNgayChuNhat  = XL.DemSoNgayNghiChunhat(ngaydauthang, true, false);
            var congChuanThang = DateTime.DaysInMonth(ngaydauthang.Year, ngaydauthang.Month) - soNgayChuNhat;

            #region                    //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi
            List <cUserInfo> dsnv9 = new List <cUserInfo>();
            foreach (var nv in m_dsnv) // duyệt qua các nhân viên được check
            {
                cUserInfo nv9 = new cUserInfo {
                    MaCC         = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV, ChucVu = nv.ChucVu, IDChucVu = nv.IDChucVu,
                    HeSo         = nv.HeSo, PhongBan = nv.PhongBan, IsUserEnabled = nv.IsUserEnabled, LichTrinhLV = nv.LichTrinhLV,
                    ThongKeThang = new ThongKeCong_PC(), DSNgayCong = new List <cNgayCong>(), DSVang = new List <cLoaiVang>()
                };
                for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                {
                    XL.LoadNgayCong(nv9.MaCC, nv9.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                }

                XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);
                XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);

                XL.LoadThongtinLamViecCongNhat(nv9.MaCC, ref nv9.NgayBDCongnhat, ref nv9.NgayKTCongnhat, ref nv9.LoaiCN, nv9.DSNgayCong, tableDSNVChiCongnhatThang);
                dsnv9.Add(nv9);
            }

            foreach (var nv9 in dsnv9)
            {
                XL.ThongKeThang(ref nv9.ThongKeThang, nv9.DSNgayCong, nv9.NgayBDCongnhat, nv9.NgayKTCongnhat, nv9.LoaiCN);

                // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                if (nv9.NgayBDCongnhat != DateTime.MinValue)                 // nhân viên vừa làm chính thức vừa làm công nhật, công cv tự động = 0
                {
                    nv9.ThongKeThang.CongCV_Auto = 0f;
                }
                else                 // nhân viên chính thức
                {
                    nv9.ThongKeThang.CongCV_Auto = congChuanThang -
                                                   /*(nv9.ThongKeThang.Cong + nv9.ThongKeThang.Le + nv9.ThongKeThang.Phep +//ver4.0.0.0*/
                                                   (nv9.ThongKeThang.TongNgayLV + nv9.ThongKeThang.Le + nv9.ThongKeThang.Phep +                                               //ver4.0.0.1
                                                    nv9.ThongKeThang.BHXH + nv9.ThongKeThang.H_CT_PT
                                                    + nv9.ThongKeThang.PTDT + nv9.ThongKeThang.NghiRo + nv9.ThongKeThang.CongCV_KB);                                          //DANGLAM
                    if (nv9.ThongKeThang.CongCV_Auto < 0f)
                    {
                        nv9.ThongKeThang.CongCV_Auto = 0f;
                    }
                }
                nv9.ThongKeThang.CongCV = nv9.ThongKeThang.CongCV_Auto + nv9.ThongKeThang.CongCV_KB;
            }

            #endregion


            using (var p = new ExcelPackage()) {
                //2. xuat bb bang ket cong thang

                #region ghi sheet bang ket cong thang trinh ky

                p.Workbook.Worksheets.Add("BangKetCong");
                var ws = p.Workbook.Worksheets["BangKetCong"];
                ws.Name = "BangKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangKetcongThang(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                               dsnv9, tenNVLapBieu, tenTrgBP, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                #endregion

                //3. xuat bb chi tiết kết công

                #region ghi sheet chi tiết kết công

                p.Workbook.Worksheets.Add("ChiTietKetCong");
                ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                ws.Name = "ChiTietKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangChiTietKetCong(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                 dsnv9, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                #endregion

                Byte[] bytes = p.GetAsByteArray();
                XL.XuatFileExcel(saveFileName, bytes, "frmXuatBBCongPC XuatBBKetCongThang");
            }
        }