public static void Them()
        {
            Console.WriteLine(" _____________________________________________________");
            Console.WriteLine("|                   Nhập nhân viên                    |");
            Console.WriteLine(" _____________________________________________________");
            Console.Write("|                   Nhập mã tính lương: ");
            string matl = Console.ReadLine();

            Console.Write("|                   Nhập mã nhân viên: ");
            string manv = Console.ReadLine();

            Console.Write("|                   Nhập số ngày làm việc: ");
            double songaylv = double.Parse(Console.ReadLine());

            Console.Write("|                   Nhập số tiền thưởng: ");
            double thuong = double.Parse(Console.ReadLine());

            Console.Write("|                   Nhập lương cơ bản: ");
            double luongcb = double.Parse(Console.ReadLine());

            Console.WriteLine(" _____________________________________________________");
            TinhLuong tl = new TinhLuong(matl, manv, songaylv, thuong, luongcb);

            tinhluongs.Add(tl);
        }
Exemplo n.º 2
0
        private static void Bai_Test_TuLam()
        {
            TinhLuong tinhLuongSep = new TinhLuong(TinhLuong_Sep);
            TinhLuong tinhLuongNV  = new TinhLuong(TinhLuong_NhanVien);

            double luongSep = tinhLuongSep(50);

            Console.WriteLine($"Luong sep la {luongSep}");

            Console.WriteLine($"Luong NV la {tinhLuongNV(30)}");
        }
Exemplo n.º 3
0
        public void xoatinhluong(string manv)
        {
            TinhLuong tl = new TinhLuong();

            tl = data.TinhLuongs.Where(t => t.MaNhanVien == manv).FirstOrDefault();
            if (tl != null)
            {
                data.TinhLuongs.DeleteOnSubmit(tl);
                data.SubmitChanges();
            }
        }
Exemplo n.º 4
0
 public static void Sua(ArrayList arrayList)
 {
     TinhLuong ob = Find(arrayList);
     Console.WriteLine("Nhập tên nhân viên");
     ob.Matl= arrayList.Count + 1000;
     Console.WriteLine("Nhập mã nhân viên");
    ob.Manv = Nhap.NhapInt();
     Console.WriteLine("Nhập số ngày làm việc ");
     ob.Songaylv = Nhap.NhapFloat();
     Console.WriteLine("Nhập thưởng");
     ob.Thuong = Nhap.NhapDouble();
     Console.WriteLine("Nhập lương cơ bản");
    ob.Luongcoban = Nhap.NhapDouble();
 }
Exemplo n.º 5
0
 public static TinhLuong Find(ArrayList arrayList)
 {
     TinhLuong kq = null;
     Console.WriteLine("Nhập mã tính lương: ");
     string tk = Nhap.NhapString();
     foreach (TinhLuong ob in arrayList)
     {
         if (tk == ob.Matl.ToString())
         {
             kq = ob;
         }
     }
     return kq;
 }
 public bool Them1DongBangLuong(string manv, int hesoluong, int ngaycong, int trocap, int thuclinh)
 {
     try
     {
         TinhLuong tl = new TinhLuong();
         tl.MaNhanVien = manv;
         tl.HeSoLuong  = hesoluong;
         tl.SoNgayCong = ngaycong;
         tl.TroCap     = trocap;
         tl.ThucLinh   = thuclinh;
         db.TinhLuongs.InsertOnSubmit(tl);
         db.SubmitChanges();
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
Exemplo n.º 7
0
        public int Luu(TinhLuong pLuong)
        {
            try
            {
                string         caulenh     = "select *from QL_Luong";
                SqlDataAdapter sqlda_Luong = new SqlDataAdapter(caulenh, cnn);
                DataRow        dr          = ds_QLLuong1.Tables["QL_Luong"].NewRow();
                dr["MaNhanVien"] = pLuong.MaNV;
                dr["MaPhieu"]    = pLuong.MaPhieu;
                dr["TongLuong"]  = pLuong.TongLuong;
                ds_QLLuong1.Tables["QL_Luong"].Rows.Add(dr);



                SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sqlda_Luong);
                sqlda_Luong.Update(ds_QLLuong1, "QL_Luong");
                return(1);
            }
            catch
            {
                return(0);
            }
        }
Exemplo n.º 8
0
        public int Luu(TinhLuong pLuong)
        {
            try
            {
                SqlDataAdapter sqlda_Luong = new SqlDataAdapter("select * from QL_Luong", cnn);

                DataRow newrow = ds_QLLuong.Tables["QL_NguoiDung"].NewRow();
                newrow["MaNhanVien"] = pLuong.MaNV;
                newrow["MaPhieu"]    = pLuong.MaPhieu;
                newrow["TongLuong"]  = pLuong.TongLuong;

                ds_QLLuong.Tables["QL_Luong"].Rows.Add(newrow);

                SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(sqlda_Luong);

                sqlda_Luong.Update(ds_QLLuong, "QL_Luong");
                return(1);
            }
            catch
            {
                return(0);
            }
        }
Exemplo n.º 9
0
        public void doAnalyza(DateTime tuNgay, DateTime denNgay, string empID, string depID, int group1ID, bool chkLamTron)
        {
            TinhLuong   logic = new TinhLuong();
            dsTinhLuong ds    = new dsTinhLuong();

            try
            {
                //reg progress...
                lp.SetTitle("Đang lấy dữ liệu..");
                lp.OutMessage("Lấy dữ liệu ----------------------------------------------------------------------------------");

                #region get data
                ds = new dsTinhLuong();
                DateTime cMonth = new DateTime(tuNgay.Year, tuNgay.Month, 1);

                Provider.LoadData(ds, ds.tbCaLam_TinhTangCa.TableName);
                lp.OutMessage("Ca làm việc (tính tăng ca): " + ds.tbCaLam_TinhTangCa.Rows.Count);
                Provider.LoadData(ds, ds.tblRef_Allowance.TableName);
                lp.OutMessage("Phụ cấp Allowance: " + ds.tblRef_Allowance.Rows.Count);
                Provider.LoadData(ds, ds.tblEmpAllowanceFix.TableName);
                lp.OutMessage("Phụ cấp hàng tháng: " + ds.tblEmpAllowanceFix.Rows.Count);

                Provider.LoadDataByProc(ds, ds.tblEmpSalary.TableName, "p_tinhLuong_GetLuongCoBan", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                lp.OutMessage("Lương cơ bản: " + ds.tblEmpSalary.Rows.Count);
                //tuNgay.AddDays(-1) Sinh ngày 17 là k đc nhận thưởng con thơ nữa.
                Provider.LoadDataByProc(ds, ds.tblEmpChild.TableName, "p_tinhLuong_GetChilds", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                lp.OutMessage("Con thơ: " + ds.tblEmpChild.Rows.Count);
                Provider.LoadDataByProc(ds, ds.tbDangKyVangMat.TableName, "p_duLieuQuetThe_GetAllDangKyVangMat_CoThe", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                lp.OutMessage("Đăng ký vắng mặt: " + ds.tbDangKyVangMat.Rows.Count);
                Provider.LoadData(ds, ds.tbBangLuongCalc.TableName);
                lp.OutMessage("Công thức tính lương: " + ds.tbBangLuongCalc.Rows.Count);
                if (!string.IsNullOrWhiteSpace(empID))
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithEmp", new SqlParameter("thang", cMonth), new SqlParameter("empID", empID));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithEmp", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("empID", empID));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithEmp", new SqlParameter("empID", empID));

                    lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (" + empID + ") " + logic.ResetBangLuong_1dong_withEmp(cMonth, empID));
                }
                else if (!string.IsNullOrWhiteSpace(depID))
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithDept", new SqlParameter("thang", cMonth), new SqlParameter("maTapThe", depID));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithDept", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("maTapThe", depID));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithDept", new SqlParameter("maTapThe", depID));

                    lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (" + depID + ") " + logic.ResetBangLuong_1dong_withDep(cMonth, depID));
                }
                else if (group1ID > 0)
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithGroup1", new SqlParameter("thang", cMonth), new SqlParameter("group1ID", group1ID));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithGroup1", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("group1ID", group1ID));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithGroup1", new SqlParameter("group1ID", group1ID));

                    lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (Group1: " + group1ID + ") " + logic.ResetBangLuong_1dong_withGroup1(cMonth, group1ID));
                }
                else
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong", new SqlParameter("thang", cMonth));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD");

                    lp.OutMessage(Lng.Luong_AnalyzeData.resetBL + logic.ResetBangLuong_1dong(cMonth));
                }

                lp.OutMessage("Tham số tính lương: " + ds.tbThamSoTinhLuong.Rows.Count);
                lp.OutMessage(Lng.Luong_AnalyzeData.ketquaCC + ds.p_tinhLuong_GetAllKetQuaQuetThe.Rows.Count);
                lp.OutMessage("Phụ cấp cố định: " + ds.tblEmpAllowanceFix.Rows.Count);
                #endregion

                var lstEmp = ds.p_tinhLuong_GetAllKetQuaQuetThe.Select(i => i.EmployeeID).Distinct();
                lp.MaxValue     = lstEmp.Count();
                lp.CurrentValue = 0;
                foreach (string eID in lstEmp)
                {
                    try
                    {
                        var kqs = ds.p_tinhLuong_GetAllKetQuaQuetThe.Where(i => i.EmployeeID == eID).ToList();

                        var r  = ds.tbBangLuongThang_1dong.NewtbBangLuongThang_1dongRow(); r.id = Guid.NewGuid();
                        var e1 = kqs[0];
                        #region tính lương

                        TinhLuongHelper_1dong hp = new TinhLuongHelper_1dong(ds, tuNgay, denNgay, e1.EmployeeID);

                        r.thang     = cMonth;
                        r.empoyeeID = eID;

                        if (hp.luongMoi == null && hp.luongCu == null)
                        {
                            hp.luongMoi = ds.tblEmpSalary.Where(i => i.EmployeeID == e1.EmployeeID).OrderByDescending(i => i.DateChange).FirstOrDefault();
                        }
                        r.luongCB_Moi = hp.luongMoi == null ? (e1["BasicSalary"] == DBNull.Value ? 0 : e1.BasicSalary) : hp.luongMoi.BasicSalary;
                        r.luongPC_Moi = hp.luongMoi == null ? (e1["RegularAllowance"] == DBNull.Value ? 0 : e1.RegularAllowance) : hp.luongMoi.BasicSalary_Ins;

                        r.luongCB_Cu = (hp.luongCu == null) ? 0 : hp.luongCu.BasicSalary;
                        r.luongPC_Cu = (hp.luongCu == null) ? 0 : hp.luongCu.BasicSalary_Ins;
                        // Gán 0 cho ngày công:
                        r.ngayCong_bt_Cu        = r.ngayCong_Dem_Cu = r.ngayCong_ChoViec_Cu = r.ngayCong_phep_Cu = r.ngayCong_phepNam_Cu = r.ngayCong_lt_Cu = r.ngayCong_cn_Cu = r.tongNgayCong_Cu = 0;
                        r.ngayCong_bt_Moi       = r.ngayCong_Dem_Moi = r.ngayCong_ChoViec_Moi = r.ngayCong_phep_Moi = r.ngayCong_phepNam_Moi = r.ngayCong_lt_Moi = r.ngayCong_cn_Moi = r.tongNgayCong_Moi = 0;
                        r.tongNgayCong_bt_Total = r.tongNgayCong_Dem_Total = r.tongNgayCong_ChoViec_Total = r.tongNgayCong_phep_Total = r.tongNgayCong_phepNam_Total = r.tongNgayCong_lt_Total = r.tongNgayCong_cn_Total = r.tongNgayCong_Total = 0;
                        r.tienNC_bt_Cu          = r.tienNC_Dem_Cu = r.tienNC_ChoViec_Cu = r.tienNC_phep_Cu = r.tienNC_phepNam_Cu = r.tienNC_lt_Cu = r.tienNC_cn_Cu = r.tongTienNgayCong_Cu = 0;
                        r.tienNC_bt_Moi         = r.tienNC_Dem_Moi = r.tienNC_ChoViec_Moi = r.tienNC_phep_Moi = r.tienNC_phepNam_Moi = r.tienNC_lt_Moi = r.tienNC_cn_Moi = r.tongTienNgayCong_Moi = 0;
                        r.tongTienNC_bt_Total   = r.tongTienNC_Dem_Total = r.tongTienNC_ChoViec_Total = r.tongTienNC_phep_Total = r.tongTienNC_phepNam_Total = r.tongTienNC_lt_Total = r.tongTienNC_cn_Total = r.tongTienNgayCong_Total = 0;
                        // Gán 0 cho giờ tăng ca:
                        r.tgTangCa_bt_Cu        = r.tgTangCa_Dem_Cu = r.tgTangCa_cn_Cu = r.tgTangCa_lt_Cu = r.tongTgTangCa_Cu = 0;
                        r.tgTangCa_bt_Moi       = r.tgTangCa_Dem_Moi = r.tgTangCa_cn_Moi = r.tgTangCa_lt_Moi = r.tongTgTangCa_Moi = 0;
                        r.tongTgTangCa_bt_Total = r.tongTgTangCa_Dem_Total = r.tongTgTangCa_cn_Total = r.tongTgTangCa_lt_Total = r.tongTgTangCa_Total = 0;
                        r.tienTangCa_bt_Cu      = r.tienTangCa_Dem_Cu = r.tienTangCa_cn_Cu = r.tienTangCa_lt_Cu = r.tongTienTangCa_Cu = r.tienTangCa_bt_Moi = r.tienTangCa_Dem_Moi = r.tienTangCa_cn_Moi = r.tienTangCa_lt_Moi = 0;
                        r.tongTienTangCa_Moi    = r.tongTienTangCa_bt_Total = r.tongTienTangCa_Dem_Total = r.tongTienTangCa_cn_Total = r.tongTienTangCa_lt_Total = r.tongTienTangCa_Total = 0;
                        // Gán 0 cho các khoản khác
                        r.tongPhuCapKhac  = r.tongLuong = r.tienBHXH = r.tienBHTN = r.tienBHYT = r.khoanTruKhac = r.tamUngLuong = r.tongKhauTru = r.actualBankTransfer = r.luongSP = r.luongTangCaSP = r.luongSP_tong = r.luongThoiGian = r.tongTgTangCa_cn_gio = r.phiCongDoan = r.tienThuongSL = r.tongLuongTG = r.ConTho = r.PhuCapTrachNhiem = r.LuongThucNhanTinhThue = r.ThueTNCN = 0;
                        r.thuongBuaToi    = r.thuongLamCa = 0;
                        r.SoNguoiPhuThuoc = 0;
                        for (int i = 1; i < 21; i++)
                        {
                            r["Calc" + i] = 0;
                            r["PC" + i]   = 0;
                        }

                        double f;
                        foreach (var kq in kqs)
                        {
                            hp.Set_KQQT(kq);
                            #region tinh ngay cong theo luong moi
                            r.ngayCong_bt_Moi += hp.TinhNgayCong(1);
                            r.tienNC_bt_Moi   += hp.TinhTienNgayCong(1);

                            r.ngayCong_Dem_Moi += hp.TinhNgayCong(1, tinhCaDem: true);

                            var a = hp.TinhTienNgayCong(1, tinhCaDem: true);
                            r.tienNC_Dem_Moi += hp.TinhTienNgayCong(1, tinhCaDem: true);
                            //Phép năm
                            r.ngayCong_phep_Moi += hp.TinhNgayCong(5);
                            r.tienNC_phep_Moi   += hp.TinhTienNgayCong(5);
                            r.tienNC_phep_Moi   += hp.TinhTienNgayCong(5, tinhCaDem: true);
                            // các loại nghỉ khác có hưởng lương.
                            f = hp.TinhNgayCong(2);
                            r.ngayCong_phepNam_Moi += f;
                            r.tienNC_phepNam_Moi   += hp.TinhTienNgayCong(2);
                            r.tienNC_phepNam_Moi   += hp.TinhTienNgayCong(2, tinhCaDem: true);

                            r.ngayCong_lt_Moi += hp.TinhNgayCong(3);
                            r.tienNC_lt_Moi   += hp.TinhTienNgayCong(3);
                            r.tienNC_lt_Moi   += hp.TinhTienNgayCong(3, tinhCaDem: true);
                            // Tính chủ nhật sẽ đc tính vào tăng ca.
                            r.ngayCong_cn_Moi     += hp.TinhNgayCong(4);
                            r.tongTgTangCa_cn_gio += f * kq.soTiengTinhCa;
                            r.tienNC_cn_Moi       += hp.TinhTienNgayCong(4);
                            r.tienNC_cn_Moi       += hp.TinhTienNgayCong(4, tinhCaDem: true);
                            #endregion

                            #region tinh tang ca theo luong moi
                            var f1 = hp.TinhTienTangCa(1);
                            r.tgTangCa_bt_Moi   += hp.TinhGioTangCa(1);
                            r.tienTangCa_bt_Moi += hp.TinhTienTangCa(1);

                            r.tgTangCa_Dem_Moi   += hp.TinhGioTangCa(1, tinhCaDem: true);
                            r.tienTangCa_Dem_Moi += hp.TinhTienTangCa(1, tinhCaDem: true);

                            // Tính chủ nhật sẽ đc tính vào tăng ca.
                            r.tgTangCa_cn_Moi   += hp.TinhNgayCong(4) * kq.soTiengTinhCa;
                            r.tienTangCa_cn_Moi += hp.TinhTienNgayCong(4);
                            r.tienTangCa_cn_Moi += hp.TinhTienNgayCong(4, tinhCaDem: true);

                            r.tgTangCa_lt_Moi   += hp.TinhGioTangCa(3);
                            r.tienTangCa_lt_Moi += hp.TinhTienTangCa(3);
                            r.tienTangCa_lt_Moi += hp.TinhTienTangCa(3, tinhCaDem: true);
                            #endregion

                            if (hp.luongCu != null)
                            {
                                #region tinh ngay cong theo luong cu
                                r.ngayCong_bt_Cu += hp.TinhNgayCong(1, true);
                                r.tienNC_bt_Cu   += hp.TinhTienNgayCong(1, true);

                                r.ngayCong_Dem_Cu += hp.TinhNgayCong(1, true, tinhCaDem: true);
                                r.tienNC_Dem_Cu   += hp.TinhTienNgayCong(1, true, tinhCaDem: true);

                                r.ngayCong_phep_Cu += hp.TinhNgayCong(5, true);
                                r.tienNC_phep_Cu   += hp.TinhTienNgayCong(5, true);
                                r.tienNC_phep_Cu   += hp.TinhTienNgayCong(5, true, tinhCaDem: true);

                                r.ngayCong_phepNam_Cu += hp.TinhNgayCong(2, true);
                                r.tienNC_phepNam_Cu   += hp.TinhTienNgayCong(2, true);
                                r.tienNC_phepNam_Cu   += hp.TinhTienNgayCong(2, true, tinhCaDem: true);

                                r.ngayCong_lt_Cu += hp.TinhNgayCong(3, true);
                                r.tienNC_lt_Cu   += hp.TinhTienNgayCong(3, true);
                                r.tienNC_lt_Cu   += hp.TinhTienNgayCong(3, true, tinhCaDem: true);

                                // Tính chủ nhật sẽ đc tính vào tăng ca.
                                f = hp.TinhNgayCong(4, true);
                                r.ngayCong_cn_Cu      += f;
                                r.tienNC_cn_Cu        += hp.TinhTienNgayCong(4, true);
                                r.tienNC_cn_Cu        += hp.TinhTienNgayCong(4, true, tinhCaDem: true);
                                r.tongTgTangCa_cn_gio += f * kq.soTiengTinhCa;
                                #endregion

                                #region tinh tang ca theo luong cu
                                r.tgTangCa_bt_Cu   += hp.TinhGioTangCa(1, true);
                                r.tienTangCa_bt_Cu += hp.TinhTienTangCa(1, true);

                                r.tgTangCa_Dem_Cu   += hp.TinhGioTangCa(1, true, tinhCaDem: true);
                                r.tienTangCa_Dem_Cu += hp.TinhTienTangCa(1, true, tinhCaDem: true);

                                // Tính chủ nhật sẽ đc tính vào tăng ca.
                                r.tgTangCa_cn_Cu   += hp.TinhNgayCong(4, true) * kq.soTiengTinhCa;
                                r.tienTangCa_cn_Cu += hp.TinhTienNgayCong(4, true);
                                r.tienTangCa_cn_Cu += hp.TinhTienNgayCong(4, true, tinhCaDem: true);

                                r.tgTangCa_lt_Cu   += hp.TinhGioTangCa(3, true);
                                r.tienTangCa_lt_Cu += hp.TinhTienTangCa(3, true, tinhCaDem: true);
                                #endregion
                            }
                        }
                        #endregion

                        #region rounded money
                        r.tienNC_bt_Moi      = Math.Round(r.tienNC_bt_Moi, 0);
                        r.tienNC_phep_Moi    = Math.Round(r.tienNC_phep_Moi, 0);
                        r.tienNC_phepNam_Moi = Math.Round(r.tienNC_phepNam_Moi, 0);
                        r.tienNC_lt_Moi      = Math.Round(r.tienNC_lt_Moi, 0);
                        r.tienNC_cn_Moi      = Math.Round(r.tienNC_cn_Moi, 0);

                        r.tienTangCa_bt_Moi = Math.Round(r.tienTangCa_bt_Moi, 0);
                        r.tienTangCa_cn_Moi = Math.Round(r.tienTangCa_cn_Moi, 0);
                        r.tienTangCa_lt_Moi = Math.Round(r.tienTangCa_lt_Moi, 0);


                        r.tienNC_bt_Cu      = Math.Round(r.tienNC_bt_Cu, 0);
                        r.tienNC_phep_Cu    = Math.Round(r.tienNC_phep_Cu, 0);
                        r.tienNC_phepNam_Cu = Math.Round(r.tienNC_phepNam_Cu, 0);
                        r.tienNC_lt_Cu      = Math.Round(r.tienNC_lt_Cu, 0);
                        r.tienNC_cn_Cu      = Math.Round(r.tienNC_cn_Cu, 0);

                        r.tienTangCa_bt_Cu = Math.Round(r.tienTangCa_bt_Cu, 0);
                        r.tienTangCa_cn_Cu = Math.Round(r.tienTangCa_cn_Cu, 0);
                        r.tienTangCa_lt_Cu = Math.Round(r.tienTangCa_lt_Cu, 0);
                        #endregion

                        #region tinh tong
                        // Ngày công:
                        // ---------- Công----------
                        r.tongNgayCong_Moi = r.ngayCong_bt_Moi + r.ngayCong_ChoViec_Moi + r.ngayCong_phep_Moi + r.ngayCong_phepNam_Moi + r.ngayCong_lt_Moi + r.ngayCong_Dem_Moi;
                        r.tongNgayCong_Cu  = r.ngayCong_bt_Cu + r.ngayCong_ChoViec_Cu + r.ngayCong_phep_Cu + r.ngayCong_phepNam_Cu + r.ngayCong_lt_Cu + r.ngayCong_Dem_Cu;

                        r.tongNgayCong_bt_Total      = r.ngayCong_bt_Moi + r.ngayCong_bt_Cu;
                        r.tongNgayCong_Dem_Total     = r.ngayCong_Dem_Moi + r.ngayCong_Dem_Cu;
                        r.tongNgayCong_phep_Total    = r.ngayCong_phep_Moi + r.ngayCong_phep_Cu;
                        r.tongNgayCong_phepNam_Total = r.ngayCong_phepNam_Moi + r.ngayCong_phepNam_Cu;
                        r.tongNgayCong_ChoViec_Total = r.ngayCong_ChoViec_Moi + r.ngayCong_ChoViec_Cu;
                        r.tongNgayCong_lt_Total      = r.ngayCong_lt_Moi + r.ngayCong_lt_Cu;

                        r.tongNgayCong_Total = r.tongNgayCong_Moi + r.tongNgayCong_Cu;
                        // ------------Lương ngày công-------
                        r.tongTienNgayCong_Moi = r.tienNC_bt_Moi + r.tienNC_ChoViec_Moi + r.tienNC_phep_Moi + r.tienNC_phepNam_Moi + r.tienNC_lt_Moi + r.tienNC_Dem_Moi;
                        r.tongTienNgayCong_Cu  = r.tienNC_bt_Cu + r.tienNC_ChoViec_Cu + r.tienNC_phep_Cu + r.tienNC_phepNam_Cu + r.tienNC_lt_Cu + r.tienNC_Dem_Cu;

                        r.tongTienNC_bt_Total      = r.tienNC_bt_Moi + r.tienNC_bt_Cu;
                        r.tongTienNC_Dem_Total     = r.tienNC_Dem_Moi + r.tienNC_Dem_Cu;
                        r.tongTienNC_phep_Total    = r.tienNC_phep_Moi + r.tienNC_phep_Cu;
                        r.tongTienNC_phepNam_Total = r.tienNC_phepNam_Moi + r.tienNC_phepNam_Cu;
                        r.tongTienNC_ChoViec_Total = r.tienNC_ChoViec_Moi + r.tienNC_ChoViec_Cu;
                        r.tongTienNC_lt_Total      = r.tienNC_lt_Moi + r.tienNC_lt_Cu;

                        r.tongTienNgayCong_Total = r.tongTienNgayCong_Moi + r.tongTienNgayCong_Cu;
                        // Tăng ca:
                        //-------------Thời gian tăng ca--------------
                        r.tongTgTangCa_Moi = r.tgTangCa_bt_Moi + r.tgTangCa_Dem_Moi + r.tgTangCa_cn_Moi + r.tgTangCa_lt_Moi;
                        r.tongTgTangCa_Cu  = r.tgTangCa_bt_Cu + r.tgTangCa_Dem_Cu + r.tgTangCa_cn_Cu + r.tgTangCa_lt_Cu;

                        r.tongTgTangCa_bt_Total  = r.tgTangCa_bt_Moi + r.tgTangCa_bt_Cu;
                        r.tongTgTangCa_Dem_Total = r.tgTangCa_Dem_Moi + r.tgTangCa_Dem_Cu;
                        r.tongTgTangCa_cn_Total  = r.tgTangCa_cn_Moi + r.tgTangCa_cn_Cu;
                        r.tongTgTangCa_lt_Total  = r.tgTangCa_lt_Moi + r.tgTangCa_lt_Cu;

                        r.tongTgTangCa_Total = r.tongTgTangCa_Moi + r.tongTgTangCa_Cu;
                        //-------------Lương tăng ca--------------
                        r.tongTienTangCa_Moi = r.tienTangCa_bt_Moi + r.tienTangCa_Dem_Moi + r.tienTangCa_cn_Moi + r.tienTangCa_lt_Moi;
                        r.tongTienTangCa_Cu  = r.tienTangCa_bt_Cu + r.tienTangCa_Dem_Cu + r.tienTangCa_cn_Cu + r.tienTangCa_lt_Cu;

                        r.tongTienTangCa_bt_Total  = r.tienTangCa_bt_Moi + r.tienTangCa_bt_Cu;
                        r.tongTienTangCa_Dem_Total = r.tienTangCa_Dem_Moi + r.tienTangCa_Dem_Cu;
                        r.tongTienTangCa_cn_Total  = r.tienTangCa_cn_Moi + r.tienTangCa_cn_Cu;
                        r.tongTienTangCa_lt_Total  = r.tienTangCa_lt_Moi + r.tienTangCa_lt_Cu;

                        r.tongTienTangCa_Total = r.tongTienTangCa_Moi + r.tongTienTangCa_Cu;
                        #endregion

                        #region tinh thưởng, phụ cấp

                        r.tongPhuCapKhac = 0;
                        r.khoanTruKhac   = 0;
                        r.tongThuongCalc = 0;
                        var pcK = ds.tbThamSoTinhLuong.Where(i => i.employeeID == r.empoyeeID &&
                                                             (i["thang"] == DBNull.Value || i.thang == new DateTime(tuNgay.Year, tuNgay.Month, 1))
                                                             ).FirstOrDefault();

                        for (int i = 1; i < 21; i++)
                        {
                            r["PC" + i] = DbHelper.DrGetDouble(pcK, "PC" + i);
                            if ((double)r["PC" + i] > 0 || i == 3)
                            {
                                if (i == 3) //PC3: Khoản thưởng khác. + Thêm phụ cấp hàng tháng.
                                {
                                    var a = ds.tblEmpAllowanceFix.Where(p => p.EmployeeID == eID).Sum(p => p.Amount);
                                    r["PC3"] = Convert.ToDouble(r["PC3"]) + a;
                                }
                                r.tongPhuCapKhac += (double)r["PC" + i];
                            }
                            else
                            {
                                r.khoanTruKhac += (-1.0) * (double)r["PC" + i];
                            }
                        }

                        double ngaycong_rounded = (chkLamTron ? i_Round(r.ngayCong_bt_Moi + r.ngayCong_bt_Cu + r.ngayCong_Dem_Moi + r.ngayCong_Dem_Cu) : (r.ngayCong_bt_Moi + r.ngayCong_bt_Cu + r.ngayCong_Dem_Moi + r.ngayCong_Dem_Cu)) + (r.ngayCong_lt_Moi + r.ngayCong_lt_Cu);
                        // Cũ
                        var    abc = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && i.lydo == (int)Enums.eLyDoNghi.NghiPhepNam);
                        double soNgayNghiPhepNam = abc
                                                   .Sum(p => (p.nghiCaNgay == 3 ? 1 : 0.5));
                        //fix ngày nghỉ ko ảnh hưởng tới chuyên cần
                        ngaycong_rounded += ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && !i.coTinhChuyenCan && i.lydo != (int)Enums.eLyDoNghi.NghiPhepNam).Sum(p => (p.nghiCaNgay == 3 ? 1 : 0.5));

                        double soNgayNghiCheDo = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && (i.lydo == (int)Enums.eLyDoNghi.KetHon || i.lydo == (int)Enums.eLyDoNghi.MaChay) && i.coTinhChuyenCan)
                                                 .Sum(p => (p.nghiCaNgay == 3 ? 1 : 0.5));
                        foreach (var dr in ds.tbBangLuongCalc)
                        {
                            if (!string.IsNullOrWhiteSpace(dr.expression))
                            {
                                NCalc.Expression exp = new NCalc.Expression(dr.expression);
                                exp.Parameters.Add("thang", r.thang);
                                exp.Parameters.Add("empoyeeID", r.empoyeeID);
                                exp.Parameters.Add("luongCB", r.luongCB_Moi);
                                exp.Parameters.Add("luongPC", r.luongPC_Moi);
                                exp.Parameters.Add("luongCB_cu", r.luongCB_Cu);
                                exp.Parameters.Add("luongPC_cu", r.luongPC_Cu);
                                exp.Parameters.Add("soNgayCongTrongThang", hp._soNgayCongTrongThang);
                                exp.Parameters.Add("soNgayNghiPhepNam", soNgayNghiPhepNam);
                                exp.Parameters.Add("ngaycong_rounded", ngaycong_rounded);
                                exp.Parameters.Add("soNgayNghiCheDo", soNgayNghiCheDo);
                                //for (int i = 1; i < 21; i++)
                                //    exp.Parameters.Add("PC" + i, r["PC" + i]);
                                for (int i = 1; i < 11; i++)
                                {
                                    exp.Parameters.Add("DataCalc" + i, DbHelper.DrGetDouble(pcK, "DataCalc" + i));
                                }

                                if (!exp.HasErrors())
                                {
                                    if (r.Table.Columns.Contains(dr.fieldName))
                                    {
                                        r[dr.fieldName] = exp.Evaluate();
                                    }
                                    else
                                    {
                                        lp.OutMessage("EmpID " + eID + " ERR: Công thức tính lương: định nghĩa sai tên trường " + dr.fieldName);
                                    }
                                }
                                r.tongThuongCalc += Convert.ToDouble(r[dr.fieldName]);
                            }
                        }
                        // Tiền con thơ.
                        r.ConTho = ds.tblEmpChild.Where(p => p.EmployeeID == eID).Count() * 50000;

                        //Khoản thưởng giới thiệu.
                        double soTienGioiThieu = ds.tbGioiThieuCongNhan.Where(p => p.EmployeeID == eID && p.Date != null && p.Date >= tuNgay && p.Date <= denNgay).Sum(p => p.Sotien);
                        r["PC4"] = (double)r["PC4"] + soTienGioiThieu;
                        #endregion

                        //PCS + AL + Paid leave + Public holiday
                        #region tinh luong SP
                        if (pcK != null && pcK.LuongSP > 0)
                        {
                            r.luongSP = pcK.LuongSP;
                        }
                        #endregion
                        r.luongThoiGian   = r.tongTienNgayCong_Total + r.tongTienTangCa_Total;
                        r.tongLuongTG     = r.luongThoiGian;
                        r.tongLuongSP     = r.luongSP;
                        r.tongPhuCapKhac += r.tongThuongCalc + r.ConTho;
                        // Calc1: chuyên cần
                        if (r.luongSP <= 0)
                        {
                            r.isLuongSP  = false;
                            r.tongLuong  = r.luongThoiGian + r.luongPC_Moi;
                            r.tongLuong += r.tongLuong > 0 ? r.tongPhuCapKhac : 0; //có lương mới đc + phụ cấp
                        }
                        else
                        {
                            r.isLuongSP  = true;
                            r.tongLuong  = r.tongTienNC_lt_Total + r.tongTienNC_phepNam_Total + r.tongTienNC_phep_Total;
                            r.tongLuong += r.luongSP + r.luongPC_Moi + r.ConTho + Convert.ToDouble(r["Calc1"]) + Convert.ToDouble(r["Calc2"]) + Convert.ToDouble(r["PC3"]) + Convert.ToDouble(r["PC4"]);
                        }
                        r.tongLuong += r.tongLuong > 0 ? r.tongPhuCapKhac : 0; //có lương mới đc + phụ cấp
                        #region khau tru
                        r.ThueTNCN    = r.tienBHXH = r.tienBHYT = r.tienBHTN = 0;
                        r.phiCongDoan = 0;
                        r.tienBH105   = 0;
                        if (e1["coBH"] != DBNull.Value && e1.coBH)
                        {
                            if (e1["coBH_ngay"] != DBNull.Value && e1.coBH_ngay < denNgay)
                            {
                                r.tienBHXH    = (r.luongCB_Moi + r.luongPC_Moi) * 8 / 100;
                                r.tienBHYT    = (r.luongCB_Moi + r.luongPC_Moi) * 1.5 / 100;
                                r.tienBHTN    = (r.luongCB_Moi + r.luongPC_Moi) * 1 / 100;
                                r.tienBH105   = r.tienBHXH + r.tienBHYT + r.tienBHTN;
                                r.phiCongDoan = 0;
                            }
                        }
                        r.tongKhauTru = r.tienBHXH + r.tienBHYT + r.tienBHTN + r.khoanTruKhac + r.phiCongDoan;
                        #endregion
                        int soNguoiPhuThuoc = (int)Provider.ExecSqlScalar(string.Format("select isnull(SoNguoiPhuThuoc,0) from tblEmployee where employeeID ='{0}'", eID));
                        r.SoNguoiPhuThuoc       = soNguoiPhuThuoc;
                        r.LuongThucNhanTinhThue = r.tongLuong - (r.tongLuong > 0 ? r.tongKhauTru : 0); //có lương mới trừ
                                                                                                       // Nếu thực nhận tính thuế < 9tr. Không phải tính.
                        if (r.LuongThucNhanTinhThue > 9000000)
                        {
                            r.ThueTNCN = TinhThueTNCN(r.LuongThucNhanTinhThue, r.SoNguoiPhuThuoc);
                        }

                        r.tongKhauTru       += r.ThueTNCN;
                        r.actualBankTransfer = r.tongLuong - (r.tongLuong > 0 ? r.tongKhauTru : 0);//có lương mới trừ

                        r.analyzeDate     = DateTime.Now;
                        r.analyzeBy       = UserDoing.id;
                        r.statePushServer = "edit";
                        ds.tbBangLuongThang_1dong.Rows.Add(r);
                    }
                    catch (Exception ex)
                    {
                        lp.OutMessage("EmpID " + eID + " ERR: " + ex.Message);
                    }
                    lp.CurrentValue += 1;
                }

                if (ds.tbBangLuongThang_1dong.GetChanges() == null)
                {
                    lp.OutMessage("\n>> " + Lng.Luong_AnalyzeData.emptmsg);
                }
                else
                {
                    var rowChanged = ds.tbBangLuongThang_1dong.GetChanges().Rows.Count;
                    lp.OutMessage("\n>> Commit data to database...");
                    SqlParameter pa = new SqlParameter("dtBangLuongThang_1dong", SqlDbType.Structured);
                    pa.TypeName = "dtBangLuongThang_1dong";
                    pa.Value    = ds.tbBangLuongThang_1dong;
                    Provider.ExecuteNonQuery("p_tinhLuong_updateBangLuongThang_1dong", pa);
                    //Provider.UpdateData(ds, ds.tbBangLuongThang.TableName);
                    lp.OutMessage("\n>> " + Lng.Luong_AnalyzeData.msg_1 + "(" + rowChanged + ") bản ghi");
                }
                lp.OutMessage(Lng.Luong_AnalyzeData.msg_2);
            }
            catch (Exception ex)
            {
                lp.OutMessage(ex.Message);
            }
        }
Exemplo n.º 10
0
 public static void HienThi(TinhLuong ob)
 {
     Console.WriteLine("|{0,-20}|{1,-20}|{2,-20}|{3,-20}|{4,-20}|{5,-20}|", ob.Matl, ob.Manv, ob.Songaylv, ob.Thuong, ob.Luongcoban, ob.Thanhtien());
 }
Exemplo n.º 11
0
 public int Luu(TinhLuong pLuong)
 {
     return(_dal.Luu(pLuong));
 }
Exemplo n.º 12
0
        public void doAnalyza(DateTime tuNgay, DateTime denNgay, string empID, string depID, int group1ID, bool chkLamTron)
        {
            TinhLuong   logic = new TinhLuong();
            dsTinhLuong ds    = new dsTinhLuong();
            int         soNgayCongThucTeTrongThang = Ham.DemNgayCong(tuNgay, denNgay);

            try
            {
                //reg progress...
                lp.SetTitle("Đang lấy dữ liệu..");
                lp.OutMessage("Lấy dữ liệu ----------------------------------------------------------------------------------");

                #region get data
                ds = new dsTinhLuong();
                DateTime cMonth = new DateTime(tuNgay.Year, tuNgay.Month, 1);

                Provider.LoadData(ds, ds.tbCaLam_TinhTangCa.TableName);
                lp.OutMessage("Ca làm việc (tính tăng ca): " + ds.tbCaLam_TinhTangCa.Rows.Count);
                Provider.LoadData(ds, ds.tblRef_Allowance.TableName);
                lp.OutMessage("Phụ cấp Allowance: " + ds.tblRef_Allowance.Rows.Count);

                Provider.LoadDataByProc(ds, ds.tblEmpSalary.TableName, "p_tinhLuong_GetLuongCoBan", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                lp.OutMessage("Lương cơ bản: " + ds.tblEmpSalary.Rows.Count);
                //tuNgay.AddDays(-1) Sinh ngày 17 là k đc nhận thưởng con thơ nữa.
                Provider.LoadDataByProc(ds, ds.tblEmpChild.TableName, "p_tinhLuong_GetChilds", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                lp.OutMessage("Con thơ: " + ds.tblEmpChild.Rows.Count);
                Provider.LoadDataByProc(ds, ds.tbDangKyVangMat.TableName, "p_duLieuQuetThe_GetAllDangKyVangMat_CoThe", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                lp.OutMessage("Đăng ký vắng mặt: " + ds.tbDangKyVangMat.Rows.Count);
                Provider.LoadData(ds, ds.tbBangLuongCalc.TableName);
                lp.OutMessage("Công thức tính lương: " + ds.tbBangLuongCalc.Rows.Count);

                if (!string.IsNullOrWhiteSpace(empID))
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithEmp", new SqlParameter("thang", cMonth), new SqlParameter("empID", empID));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithEmp", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("empID", empID));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithEmp", new SqlParameter("empID", empID));

                    lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (" + empID + ") " + logic.ResetBangLuong_withEmp(cMonth, empID));
                }
                else if (!string.IsNullOrWhiteSpace(depID))
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithDept", new SqlParameter("thang", cMonth), new SqlParameter("maTapThe", depID));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithDept", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("maTapThe", depID));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithDept", new SqlParameter("maTapThe", depID));

                    lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (" + depID + ") " + logic.ResetBangLuong_withDep(cMonth, depID));
                }
                else if (group1ID > 0)
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithGroup1", new SqlParameter("thang", cMonth), new SqlParameter("group1ID", group1ID));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithGroup1", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("group1ID", group1ID));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithGroup1", new SqlParameter("group1ID", group1ID));

                    lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (Group1: " + group1ID + ") " + logic.ResetBangLuong_withGroup1(cMonth, group1ID));
                }
                else
                {
                    Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong", new SqlParameter("thang", cMonth));
                    Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay));
                    Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD");

                    lp.OutMessage(Lng.Luong_AnalyzeData.resetBL + logic.ResetBangLuong(cMonth));
                }

                lp.OutMessage("Tham số tính lương: " + ds.tbThamSoTinhLuong.Rows.Count);
                lp.OutMessage(Lng.Luong_AnalyzeData.ketquaCC + ds.p_tinhLuong_GetAllKetQuaQuetThe.Rows.Count);
                lp.OutMessage("Phụ cấp cố định: " + ds.tblEmpAllowanceFix.Rows.Count);
                #endregion

                var lstEmp = ds.p_tinhLuong_GetAllKetQuaQuetThe.Select(i => i.EmployeeID).Distinct();
                lp.MaxValue     = lstEmp.Count();
                lp.CurrentValue = 0;
                foreach (string eID in lstEmp)
                {
                    try
                    {
                        var kqs = ds.p_tinhLuong_GetAllKetQuaQuetThe.Where(i => i.EmployeeID == eID).ToList();

                        var r  = ds.tbBangLuongThang.NewtbBangLuongThangRow(); r.laBangLuongCu = false; r.id = Guid.NewGuid();
                        var r2 = ds.tbBangLuongThang.NewtbBangLuongThangRow(); r2.laBangLuongCu = true; r2.id = Guid.NewGuid();
                        var e1 = kqs[0];
                        #region tính lương

                        TinhLuongHelper hp = new TinhLuongHelper(ds, tuNgay, denNgay, e1.EmployeeID);
                        r.thang     = r2.thang = cMonth;
                        r.empoyeeID = r2.empoyeeID = eID;

                        if (hp.luongMoi == null && hp.luongCu == null)
                        {
                            hp.luongMoi = ds.tblEmpSalary.Where(i => i.EmployeeID == e1.EmployeeID).OrderByDescending(i => i.DateChange).FirstOrDefault();
                        }
                        r.luongCB = hp.luongMoi == null ? (e1["BasicSalary"] == DBNull.Value ? 0 : e1.BasicSalary) : hp.luongMoi.BasicSalary;
                        r.luongPC = hp.luongMoi == null ? (e1["RegularAllowance"] == DBNull.Value ? 0 : e1.RegularAllowance) : hp.luongMoi.BasicSalary_Ins;

                        r2.luongCB = (hp.luongCu == null) ? 0 : hp.luongCu.BasicSalary;
                        r2.luongPC = (hp.luongCu == null) ? 0 : hp.luongCu.BasicSalary_Ins;


                        r.ngaycong_bt = r.tienNC_bt = r.ngaycong_phep = r.tienNC_phep = r.ngaycong_phepNam = r.tienNC_phepNam = r.ngaycong_lt = r.tienNC_lt = r.ngaycong_cn = r.tienNC_cn = r.tongNgayCong = r.tienNgayCong = r.thuongLamCa = r.thuongBuaToi = r.ngayCong_Dem = 0;
                        r.tgTangCa_bt = r.tienTangCa_bt = r.tgTangCa_cn = r.tienTangCa_cn = r.tgTangCa_lt = r.tienTangCa_lt = r.tongThoiGianTangCa = r.tienTangCa = r.tgTangCa_Dem = 0;

                        r2.ngaycong_bt = r2.tienNC_bt = r2.ngaycong_phep = r2.tienNC_phep = r2.ngaycong_phepNam = r2.tienNC_phepNam = r2.ngaycong_lt = r2.tienNC_lt = r2.ngaycong_cn = r2.tienNC_cn = r2.tongNgayCong = r2.tienNgayCong = r2.thuongLamCa = r2.thuongBuaToi = r2.ngayCong_Dem = 0;
                        r2.tgTangCa_bt = r2.tienTangCa_bt = r2.tgTangCa_cn = r2.tienTangCa_cn = r2.tgTangCa_lt = r2.tienTangCa_lt = r2.tongThoiGianTangCa = r2.tienTangCa = r2.tgTangCa_Dem = 0;

                        r.tongLuongTG         = r2.tongLuongTG = r.PhuCapTrachNhiem = r2.PhuCapTrachNhiem = 0;
                        r.tongTgTangCa_cn_gio = r2.tongTgTangCa_cn_gio = 0;
                        r.luongSP             = r.luongTangCaSP = r.luongSP_tong = 0;


                        for (int i = 1; i < 21; i++)
                        {
                            r["Calc" + i]  = 0;
                            r2["Calc" + i] = 0;
                            r["PC" + i]    = 0;
                            r2["PC" + i]   = 0;
                        }

                        double f;

                        foreach (var kq in kqs)
                        {
                            hp.Set_KQQT(kq);

                            #region tinh ngay cong theo luong moi
                            r.ngaycong_bt += hp.TinhNgayCong(1);
                            r.tienNC_bt   += hp.TinhTienNgayCong(1);

                            r.ngaycong_phep += hp.TinhNgayCong(2);
                            r.tienNC_phep   += hp.TinhTienNgayCong(2);

                            f = hp.TinhNgayCong(5);
                            r.ngaycong_phepNam += f;
                            r.tienNC_phepNam   += hp.TinhTienNgayCong(5);

                            r.ngaycong_lt += hp.TinhNgayCong(3);
                            r.tienNC_lt   += hp.TinhTienNgayCong(3);

                            f                      = hp.TinhNgayCong(4);
                            r.ngaycong_cn         += f;
                            r.tongTgTangCa_cn_gio += f * kq.soTiengTinhCa;
                            r.tienNC_cn           += hp.TinhTienNgayCong(4);
                            #endregion

                            #region tinh tang ca theo luong moi
                            var f1 = hp.TinhTienTangCa(1);
                            r.tgTangCa_bt   += hp.TinhGioTangCa(1);
                            r.tienTangCa_bt += hp.TinhTienTangCa(1);

                            f                      = hp.TinhGioTangCa(2);
                            r.tgTangCa_cn         += f;
                            r.tongTgTangCa_cn_gio += f;
                            r.tienTangCa_cn       += hp.TinhTienTangCa(2);

                            r.tgTangCa_lt   += hp.TinhGioTangCa(3);
                            r.tienTangCa_lt += hp.TinhTienTangCa(3);
                            #endregion


                            if (hp.luongCu != null)
                            {
                                #region tinh ngay cong theo luong cu
                                r2.ngaycong_bt += hp.TinhNgayCong(1, true);
                                r2.tienNC_bt   += hp.TinhTienNgayCong(1, true);

                                r2.ngaycong_phep += hp.TinhNgayCong(2, true);
                                r2.tienNC_phep   += hp.TinhTienNgayCong(2, true);

                                r2.ngaycong_phepNam += hp.TinhNgayCong(5, true);
                                r2.tienNC_phepNam   += hp.TinhTienNgayCong(5, true);

                                r2.ngaycong_lt += hp.TinhNgayCong(3, true);
                                r2.tienNC_lt   += hp.TinhTienNgayCong(3, true);


                                f = hp.TinhNgayCong(4, true);
                                r2.ngaycong_cn         += f;
                                r2.tienNC_cn           += hp.TinhTienNgayCong(4, true);
                                r2.tongTgTangCa_cn_gio += f * kq.soTiengTinhCa;

                                #endregion

                                #region tinh tang ca theo luong cu
                                r2.tgTangCa_bt   += hp.TinhGioTangCa(1, true);
                                r2.tienTangCa_bt += hp.TinhTienTangCa(1, true);

                                f = hp.TinhGioTangCa(2, true);
                                r2.tgTangCa_cn         += f;
                                r2.tongTgTangCa_cn_gio += f;
                                r2.tienTangCa_cn       += hp.TinhTienTangCa(2, true);

                                r2.tgTangCa_lt   += hp.TinhGioTangCa(3, true);
                                r2.tienTangCa_lt += hp.TinhTienTangCa(3, true);

                                #endregion
                            }
                        }
                        #endregion

                        #region rounded money
                        r.tienNC_bt      = Math.Round(r.tienNC_bt, 0);
                        r.tienNC_phep    = Math.Round(r.tienNC_phep, 0);
                        r.tienNC_phepNam = Math.Round(r.tienNC_phepNam, 0);
                        r.tienNC_lt      = Math.Round(r.tienNC_lt, 0);
                        r.tienNC_cn      = Math.Round(r.tienNC_cn, 0);
                        r.tienNgayCong   = Math.Round(r.tienNgayCong, 0);

                        r.tienTangCa_bt = Math.Round(r.tienTangCa_bt, 0);
                        r.tienTangCa_cn = Math.Round(r.tienTangCa_cn, 0);
                        r.tienTangCa_lt = Math.Round(r.tienTangCa_lt, 0);
                        r.tienTangCa    = Math.Round(r.tienTangCa, 0);



                        r2.tienNC_bt      = Math.Round(r2.tienNC_bt, 0);
                        r2.tienNC_phep    = Math.Round(r2.tienNC_phep, 0);
                        r2.tienNC_phepNam = Math.Round(r2.tienNC_phepNam, 0);
                        r2.tienNC_lt      = Math.Round(r2.tienNC_lt, 0);
                        r2.tienNC_cn      = Math.Round(r2.tienNC_cn, 0);
                        r2.tienNgayCong   = Math.Round(r2.tienNgayCong, 0);

                        r2.tienTangCa_bt = Math.Round(r2.tienTangCa_bt, 0);
                        r2.tienTangCa_cn = Math.Round(r2.tienTangCa_cn, 0);
                        r2.tienTangCa_lt = Math.Round(r2.tienTangCa_lt, 0);
                        r2.tienTangCa    = Math.Round(r2.tienTangCa);
                        #endregion

                        #region tinh tong

                        r.tongNgayCong       = r.ngaycong_bt + r.ngaycong_phep + r.ngaycong_phepNam + r.ngaycong_lt;
                        r.tienNgayCong       = r.tienNC_bt + r.tienNC_phep + r.tienNC_phepNam + r.tienNC_lt;
                        r.tongThoiGianTangCa = r.tgTangCa_bt + r.tgTangCa_lt + r.tongTgTangCa_cn_gio;
                        r.tienTangCa         = r.tienTangCa_bt + r.tienTangCa_lt + r.tienTangCa_cn + r.tienNC_cn;

                        r2.tongNgayCong       = r2.ngaycong_bt + r2.ngaycong_phep + r2.ngaycong_phepNam + r2.ngaycong_lt;
                        r2.tienNgayCong       = r2.tienNC_bt + r2.tienNC_phep + r2.tienNC_phepNam + r2.tienNC_lt;
                        r2.tongThoiGianTangCa = r2.tgTangCa_bt + r2.tgTangCa_lt + r2.tongTgTangCa_cn_gio;
                        r2.tienTangCa         = r2.tienTangCa_bt + r2.tienTangCa_lt + r2.tienTangCa_cn + r2.tienNC_cn;

                        #endregion

                        #region tinh thưởng, phụ cấp

                        r.tongPhuCapKhac = r2.tongPhuCapKhac = 0;
                        r.khoanTruKhac   = r2.khoanTruKhac = 0;
                        r.tongThuongCalc = r2.tongThuongCalc = 0;
                        var pcK = ds.tbThamSoTinhLuong.Where(i => i.employeeID == r.empoyeeID &&
                                                             (i["thang"] == DBNull.Value || i.thang == new DateTime(tuNgay.Year, tuNgay.Month, 1))
                                                             ).FirstOrDefault();

                        for (int i = 1; i < 21; i++)
                        {
                            r["PC" + i] = DbHelper.DrGetDouble(pcK, "PC" + i);
                            if (r["PC" + i] != null && (double)r["PC" + i] > 0)
                            {
                                r.tongPhuCapKhac += (double)r["PC" + i];
                            }
                            else
                            {
                                r.khoanTruKhac += (-1.0) * (double)r["PC" + i];
                            }
                        }

                        double ngaycong_rounded = (chkLamTron ? i_Round(r.ngaycong_bt + r2.ngaycong_bt) : r.ngaycong_bt + r2.ngaycong_bt) + (r.ngaycong_lt + r2.ngaycong_lt);
                        // Cũ
                        //double soNgayNghiPhepNam = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && i.lydo == (int)Enums.eLyDoNghi.NghiPhepNam && i.coTinhChuyenCan)
                        //    .Sum(i => TinhNgayCongPhep(i));
                        double soNgayNghiPhepNam = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && i.lydo == (int)Enums.eLyDoNghi.NghiPhepNam)
                                                   .Sum(i => TinhNgayCongPhep(i));
                        double ngaycongthucte = ngaycong_rounded;
                        //fix ngày nghỉ ko ảnh hưởng tới chuyên cần
                        ngaycong_rounded += ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && !i.coTinhChuyenCan && i.lydo != (int)Enums.eLyDoNghi.NghiPhepNam).Sum(i => TinhNgayCongPhep(i));

                        double soNgayNghiCheDo = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && (i.lydo == (int)Enums.eLyDoNghi.KetHon || i.lydo == (int)Enums.eLyDoNghi.MaChay) && i.coTinhChuyenCan)
                                                 .Sum(i => TinhNgayCongPhep(i));

                        hp._soNgayCongTrongThang = soNgayCongThucTeTrongThang;


                        foreach (var dr in ds.tbBangLuongCalc)
                        {
                            if (!string.IsNullOrWhiteSpace(dr.expression))
                            {
                                NCalc.Expression exp = new NCalc.Expression(dr.expression);
                                exp.Parameters.Add("thang", r.thang);
                                exp.Parameters.Add("empoyeeID", r.empoyeeID);
                                exp.Parameters.Add("luongCB", r.luongCB);
                                exp.Parameters.Add("luongPC", r.luongPC);
                                exp.Parameters.Add("luongCB_cu", r2.luongCB);
                                exp.Parameters.Add("luongPC_cu", r2.luongPC);
                                exp.Parameters.Add("soNgayCongTrongThang", hp._soNgayCongTrongThang);
                                exp.Parameters.Add("soNgayNghiPhepNam", soNgayNghiPhepNam);
                                exp.Parameters.Add("ngaycong_rounded", ngaycong_rounded);
                                exp.Parameters.Add("soNgayNghiCheDo", soNgayNghiCheDo);
                                exp.Parameters.Add("ngaycongthucte", ngaycongthucte);
                                //for (int i = 1; i < 21; i++)
                                //    exp.Parameters.Add("PC" + i, r["PC" + i]);
                                for (int i = 1; i < 11; i++)
                                {
                                    exp.Parameters.Add("DataCalc" + i, DbHelper.DrGetDouble(pcK, "DataCalc" + i));
                                }

                                if (!exp.HasErrors())
                                {
                                    if (r.Table.Columns.Contains(dr.fieldName))
                                    {
                                        r[dr.fieldName] = exp.Evaluate();
                                    }
                                    else
                                    {
                                        lp.OutMessage("EmpID " + eID + " ERR: Công thức tính lương: định nghĩa sai tên trường " + dr.fieldName);
                                    }
                                }
                                r.tongThuongCalc += Convert.ToDouble(r[dr.fieldName]);
                            }
                        }
                        hp._soNgayCongTrongThang = soNgayCongThucTeTrongThang > 26 ? 26 : soNgayCongThucTeTrongThang;
                        // Tính khoản phụ cấp cho nhân viên.
                        double Phucap = 0;
                        if (r.ngaycong_bt + r.ngaycong_lt + r.ngayCong_Dem > 13)
                        {
                            Phucap = r.luongPC;
                        }
                        else
                        {
                            var phucapMoi = r.luongPC / hp._soNgayCongTrongThang * (r.ngaycong_bt + r.ngaycong_lt + r.ngayCong_Dem + r.ngaycong_phepNam);
                            var phucapCu  = r2.luongPC / hp._soNgayCongTrongThang * (r2.ngaycong_bt + r2.ngaycong_lt + r2.ngayCong_Dem + r2.ngaycong_phepNam);
                            Phucap = phucapCu + phucapMoi;
                        }
                        r.PhuCapTrachNhiem = Phucap;
                        #endregion

                        #region tinh luong SP
                        r2.luongSP = r2.luongTangCaSP = r2.luongSP_tong = 0;
                        if (pcK == null || pcK.LuongSP == 0)
                        {
                            r.luongSP = r.luongTangCaSP = r.luongSP_tong = 0;
                        }
                        else
                        {
                            r.luongSP = pcK.LuongSP;
                        }
                        #endregion
                        r.luongThoiGian = r.tienNgayCong + r.tienTangCa + (r2.tienNgayCong + r2.tienTangCa);
                        // PC2: Tiền con thơ
                        r.ConTho = (ds.tblEmpChild.Where(p => p.EmployeeID == eID).Count() >= 1 ? 1 : 0) * 50000;
                        // Tính tổng lương
                        r.tongPhuCapKhac += r.tongThuongCalc + r.ConTho;
                        r.tongLuongTG     = r.luongThoiGian + r.ConTho + r.tongThuongCalc;
                        r.tongLuong       = r.luongThoiGian;
                        r.tongLuong      += r.tongLuong > 0 ? (r.tongPhuCapKhac + r.PhuCapTrachNhiem) : 0;

                        r2.tongLuongTG   = 0;
                        r2.luongThoiGian = 0;
                        r2.tongLuong     = 0;

                        #region khau tru
                        r.ThueTNCN    = 0;
                        r.BH105       = 0;
                        r.phiCongDoan = 0;
                        r2.BH105      = 0;
                        if (e1["coBH"] != DBNull.Value && e1.coBH)
                        {
                            if (e1["coBH_ngay"] != DBNull.Value && e1.coBH_ngay < denNgay)
                            {
                                r.BH105 = (r.luongCB + r.luongPC) * 10.5 / 100;
                            }
                        }
                        r.tongKhauTru  = r.BH105 + r.khoanTruKhac + r.phiCongDoan;
                        r2.tongKhauTru = 0;
                        #endregion
                        int soNguoiPhuThuoc = (int)Provider.ExecSqlScalar(string.Format("select isnull(SoNguoiPhuThuoc,0) from tblEmployee where employeeID ='{0}'", eID));
                        r.SoNguoiPhuThuoc       = soNguoiPhuThuoc;
                        r.LuongThucNhanTinhThue = r.tongLuong - (r.tongLuong > 0 ? r.tongKhauTru : 0); //có lương mới trừ
                        // Nếu thực nhận tính thuế < 9tr. Không phải tính.
                        if (r.LuongThucNhanTinhThue > 9000000)
                        {
                            r.ThueTNCN = TinhThueTNCN(r.LuongThucNhanTinhThue, r.SoNguoiPhuThuoc);
                        }

                        r.tongKhauTru        += r.ThueTNCN;
                        r.actualBankTransfer  = r.tongLuong - (r.tongLuong > 0 ? r.tongKhauTru : 0);//có lương mới trừ
                        r2.actualBankTransfer = 0;

                        r.analyzeDate      = r2.analyzeDate = DateTime.Now;
                        r.analyzeBy        = r2.analyzeBy = UserDoing.id;
                        r.statePushServer  = "edit";
                        r2.statePushServer = "edit";

                        ds.tbBangLuongThang.Rows.Add(r);
                        if (hp.luongCu != null)
                        {
                            ds.tbBangLuongThang.Rows.Add(r2);
                        }
                    }
                    catch (Exception ex)
                    {
                        lp.OutMessage("EmpID " + eID + " ERR: " + ex.Message);
                    }
                    lp.CurrentValue += 1;
                }

                if (ds.tbBangLuongThang.GetChanges() == null)
                {
                    lp.OutMessage("\n>> " + Lng.Luong_AnalyzeData.emptmsg);
                }
                else
                {
                    var rowChanged = ds.tbBangLuongThang.GetChanges().Rows.Count;
                    lp.OutMessage("\n>> Commit data to database...");
                    SqlParameter pa = new SqlParameter("dtBangLuongThang", SqlDbType.Structured);
                    pa.TypeName = "dtBangLuongThang";
                    pa.Value    = ds.tbBangLuongThang;
                    Provider.ExecuteNonQuery("p_tinhLuong_updateBangLuongThang", pa);
                    //Provider.UpdateData(ds, ds.tbBangLuongThang.TableName);
                    lp.OutMessage("\n>> " + Lng.Luong_AnalyzeData.msg_1 + "(" + rowChanged + ") bản ghi");
                }
                lp.OutMessage(Lng.Luong_AnalyzeData.msg_2);
            }
            catch (Exception ex)
            {
                lp.OutMessage(ex.Message);
            }
        }