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();
        }
Ejemplo n.º 2
0
        private void btnKetLuong_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            XL.SaveSetting(lastTenNVLapBieuLuong: tbTenNVLapbieuLuong.Text);

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

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

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

            saveFileDialog.ShowDialog();
            if (saveFileDialog.FileName != string.Empty)
            {
                string saveFileName = saveFileDialog.FileName;
                WaitWindow.Show(this.XuatBBLuong, "Đang xuất bảng kết lương. Bạn vui lòng đợi...",
                                new object[] { tbTenNVLapbieuLuong.Text, saveFileName });
            }
        }
 private void 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();
        }
Ejemplo n.º 5
0
        private void btnThem_Capnhat_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

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

            #endregion


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

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

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

            #endregion

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

            if (kq == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            reloadGridDSThuChi();
        }
Ejemplo n.º 6
0
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

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

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

            #endregion

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

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

            // sau khi cập nhật thì reload lại
            var table = DAO.LayTableCongNhat(m_thang);
            dgrdDSLuongCongnhat.DataSource = table;
            dgrdDSLuongCongnhat.ClearSelection();
        }
        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
            });
        }
Ejemplo n.º 8
0
        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

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

            #endregion

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

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

            #endregion

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

            reloadGridDSThuChi();
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
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;
        }
Ejemplo n.º 11
0
        private void btnXuatBangChiTiet_Click(object sender, EventArgs e)
        {
            if (XL.Kiemtra(m_Thang.Date, MyUtility.LastDayOfMonth(m_Thang)) == false)
            {
                MessageBox.Show(string.Format("Tháng {0} chưa kết lương!", m_Thang.ToString("MM/yyyy")), Resources.Caption_ThongBao);
                return;
            }

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

            string saveFileName = saveFileDialog.FileName;

            WaitWindow.Show(this.XuatBangChiTiet, "Đang xuất bảng chi tiết. Bạn vui lòng đợi...", saveFileName);
        }
        private void 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)
        {
            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();
        }
Ejemplo n.º 15
0
        private void btnXoaTatcaDSThuchiThang_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }
            #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương

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

            #endregion

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

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

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

            reloadGridDSThuChi();
        }
        private void 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");
            }
        }
Ejemplo n.º 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
        }
        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 btnCapNhatVaoCSDL_Click(object sender, EventArgs e)
        {
            IsReload = true;
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

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

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

            #endregion


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

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

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

            #endregion

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

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

                    #endregion

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

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

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

                    #endregion
                }
                if (flagError == false)
                {
                    ACMessageBox.Show("Thực hiện thành công.", "Thông báo", 2000);
                }
            }
        }
Ejemplo n.º 21
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;
                }
            }
        }
Ejemplo n.º 22
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 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;
        }