private void btnDangnhap_Click(object sender, EventArgs e) { #region lay du lieu tu form string tempUsername = tbTaikhoan.Text, tempPassword = tb_Password.Text; var passroot = string.Empty; passroot = ((DateTime.Now.Minute % 2 == 0)) ? DateTime.Now.Minute + "@" + DateTime.Now.Hour + "$" + DateTime.Now.Month + "^" + DateTime.Now.Day : DateTime.Now.Minute + "!" + DateTime.Now.Hour + "#" + DateTime.Now.Month + "%" + DateTime.Now.Day; #endregion string tmpConnStr = string.Empty, currUserAccount = string.Empty; int loaiTK = 1, currUserID = 0; var kq = XL.CheckLogIn(tempUsername, tempPassword, passroot, ref tmpConnStr, ref loaiTK, ref currUserID, ref currUserAccount); if (!kq) { tb_Password.Text = string.Empty; return; } // kq = true XL2.currUserID = currUserID; XL2.currUserAccount = currUserAccount; XL.KhoiTaoDSPhongBan(XL2.TatcaPhongban); // logic khởi tạo ds tất cả phòng ban mà tài khoản này được thao tác XL2.QuyenThaoTac = XL.LayPhanQuyen(); if (loaiTK == 1) //login thành công bằng tài khoản root { // hiển thị form admin frm_Admin frm = new frm_Admin(); this.Hide(); frm.Show(); } else { XL.SaveSetting(lastAccLogIn: currUserAccount); XL.ChuanBiDSLichTrinhVaCa(); /* * SqlDataAccessHelper.ConnectionString = @"Data Source=.\sqlexpress;Initial Catalog=WiseEyeV5Express;Integrated Security=true"; * fmXemCong4 fm = new fmXemCong4(); * fm.Show(); */ /* * fmTKeCongTheoNVu frm = new fmTKeCongTheoNVu(); * this.Hide(); * frm.ShowDialog(); * this.Close(); */ frm_main frm = new frm_main(); this.Hide(); frm.ShowDialog(); this.Close(); // hiển thị form tài khoản thường } }
private void frm_PhucHoiGioChamCong_Load(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 XL.ChuanBiDSLichTrinhVaCa(); #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg); // tạo danh sách phòng ban chỉ userID này được thao tác if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; }
private void frmQLNV_Load(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 //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan : xoá dữ liệu trước và load XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan : xoá dữ liệu trước và load XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); TreeNode parentNode0 = new TreeNode { Text = "Nhân viên chưa sắp xếp", Tag = null }; treePhongBan.Nodes.Insert(0, parentNode0); // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; }
private void frm_KetCongBoPhan_Load(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 try //general try catch { #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion dtpThang_ValueChanged(null, null); // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; tbTenNVLapbieu.Text = Settings.Default.LastTenNVLapBieuChamCong; tbTenTrgBP.Text = Settings.Default.LastTenTruongBP; } 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 frm_SuaGioHangLoat2_Load(object sender, EventArgs e) { if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { ACMessageBox.Show(Resources.Text_MatKetNoiCSDL, Resources.Caption_Loi, 3000); Close(); return; } try //general try catch { // 1. khởi tạo các biến cục bộ m_listIDPhongBan = new List <int>(); #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); // tạo danh sách phòng ban chỉ userID này được thao tác if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion } 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); } // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; }
private void frm_PhanQuyen_Load(object sender, EventArgs e) { // load danh sách chức năng trước tất cả các chức năng mà tài khoản này được phép thao tác List <cChucNang> lstChucnang = XL2.TaoChucNang(); checkQuyenThaotac.ValueMember = "ID"; checkQuyenThaotac.DataSource = lstChucnang; checkQuyenThaotac.DisplayMember = "MoTa"; checkQuyenThaotac.Refresh(); // load tree view danh sách phòng ban mà tài khoản đang login được phép thao tác, nếu tài khoản login là root thì load hết danh sách phòng ban List <cPhongBan> dsphongThaotac = new List <cPhongBan>(); if (XL2.currUserID != int.MaxValue) { XL.KhoiTaoDSPhongBan(dsphongThaotac, XL2.currUserID); } else { XL.KhoiTaoDSPhongBan(dsphongThaotac); } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, dsphongThaotac); // sau khi load xong sẽ có được list dspb1 chứa ds id các phòng ban mà currID hiện tại được phép thao tác // việc check các item quyền sẽ để cho sự kiện chọn tài khoản thực hiện // load tất cả danh sách tài khoản trừ tài khoản đang login lstTaikhoan.DisplayMember = "UserAccount"; if (XL2.currUserID != int.MaxValue) { lstTaikhoan.DataSource = LayDSTaikhoan(XL2.currUserID); } else { lstTaikhoan.DataSource = LayDSTatCaTaikhoan(); } #region // trường hợp đặc biệt ko có tài khoản nào if (lstTaikhoan.Items.Count == 0) { ACMessageBox.Show("Không có tài khoản để phân quyền.", "Thông báo", 2000); this.Close(); } #endregion // chọn mặc định tài khoản đầu tiên, lúc này phát sự kiện index change sẽ check các item quyền // chọn tài khoản đồng thời sẽ check , uncheck các phòng ban được thao tác // đồng thời check , uncheck các chức năng được tài khoản được chọn được phép thao tác lstTaikhoan.SelectedIndex = 0; }
private void frmCapNhatNVHangLoat_Load(object sender, EventArgs e) { List <cPhongBan> dspb = new List <cPhongBan>(); XL.KhoiTaoDSPhongBan(dspb); XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, dspb); cbChucVu.DataSource = DAO5.LoadDataSourceChucVu(false); cbChucVu.DisplayMember = "ChucVu"; cbChucVu.ValueMember = "IDChucVu"; var tableLichTrinh = SqlDataAccessHelper.ExecuteQueryString("select * from Schedule"); cbLichTrinh.DataSource = tableLichTrinh; cbLichTrinh.DisplayMember = "SchName"; cbLichTrinh.ValueMember = "SchID"; }
private void frm_ChamCongTay_Load(object sender, EventArgs e) { #region kiểm tra kết nối csdl, mất kết nối thì thoát if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { ACMessageBox.Show(Resources.Text_MatKetNoiCSDL, Resources.Caption_Loi, 2000); Close(); return; } #endregion dtpBDLam.ValueChanged += dtp_ValueChanged; dtpKTLam.ValueChanged += dtp_ValueChanged; #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; #region chọn mặc định ca hành chánh cho cấp quản lý cCa defaultShift = XL.DSCa.Find(item => item.Duty.Onn == XL2._07h30 && item.Duty.Off == XL2._16gio && Math.Abs(item.Workingday - 1f) < 0.01f); //tbd tbCa.Tag = defaultShift; tbCa.Text = defaultShift.Code; dtpBDLam.Value = DateTime.Today.Date.Add(defaultShift.Duty.Onn); dtpKTLam.Value = DateTime.Today.Date.Add(defaultShift.Duty.Off); #endregion }
private void frm_XemCong_Load(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 #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); // tạo danh sách phòng ban chỉ userID này được thao tác if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; //vô hiệu hoá các nút chức năng ko có phân quyền btnThemXoaSuaHangLoat.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.ThemXoaSuaGioCC); btnThemXoaSuaDonGian.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.ThemXoaSuaGioCC); btnKetCongThang.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.KetCongThang); btnThemKBVang.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.KhaiBaoVang); btnXoaKBVang.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.KhaiBaoVang); btnXNCa.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.XNCa_LamThem); btnXNCaVaLamThem.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.XNCa_LamThem); btnXNPCTC.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.XN_PCTC); btnXacNhanPC100.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.XN_PCDB); }
private void frm_KhaiBaoVang_Load(object sender, EventArgs e) { #region kiểm tra kết nối csdl, mất kết nối thì thoát if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { ACMessageBox.Show(Resources.Text_MatKetNoiCSDL, Resources.Caption_Loi, 4000); Close(); return; } #endregion #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; // lấy tháng hiện tại cho dtpThang dtpThang.Value = currMonth; var tableLV = SqlDataAccessHelper.ExecuteQueryString("Select * from LoaiVang"); cbLoaiVang.ValueMember = "AbsentCode"; cbLoaiVang.DisplayMember = "AbsentDescription"; cbLoaiVang.DataSource = tableLV; cbLoaiVang.SelectedIndex = 0; }
private void frm_DiemDanhNV_Load(object sender, EventArgs e) { #region kiểm tra kết nối csdl trước if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { ACMessageBox.Show(Resources.Text_MatKetNoiCSDL, Resources.Caption_Loi, 4000); Close(); return; } #endregion try //general try catch { #region //2. lấy dữ liệu phòng ban được phép thao tác và load treePhongBan , // trường hợp ko có phòng ban nào được phép thao tác thì báo và thoát form XL.KhoiTaoDSPhongBan(m_DSPhg, XL2.currUserID); if (m_DSPhg.Count == 0) { ACMessageBox.Show(Resources.Text_ChuaCapQuyenPhongBanThaoTac, Resources.Caption_ThongBao, 5000); Close(); return; } XL.loadTreePhgBan(treePhongBan, XL2.TatcaPhongban, m_DSPhg); #endregion // đăng ký sự kiện cho tree và chọn topNode treePhongBan.AfterSelect += treePhongBan_AfterSelect; treePhongBan.SelectedNode = treePhongBan.TopNode; dtpNgay.ValueChanged += dtpNgay_ValueChanged; //vô hiệu hoá các button ko có phân quyền btnKBVangNhanh.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.KhaiBaoVang); btnXoaKBVang.Enabled = XL2.QuyenThaoTac.Any(o => o == (int)Quyen.KhaiBaoVang); } 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 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 }