public decimal?GetLuongDongBaoHiem(decimal prkeyhoso)
    {
        var ngayhieuluc = (from t in dataContext.HOSO_LUONGs
                           where t.NgayHieuLuc <= DateTime.Now && t.PrKeyHoSo == prkeyhoso
                           select t).ToList();

        if (ngayhieuluc.Count < 1)
        {
            return(0);
        }
        DateTime NgayHieuLucMax = ngayhieuluc.Max(p => p.NgayHieuLuc);

        //if(ngayhieuluc.Count<1) return 0;
        //DateTime NgayHieuLucMax=new DateTime(1992,1,1);
        //foreach(var item in ngayhieuluc)
        //{
        //    if(item.NgayHieuLuc>NgayHieuLucMax) NgayHieuLucMax=item.NgayHieuLuc;
        //}
        DAL.HOSO_LUONG dong = (from t in ngayhieuluc
                               where t.NgayHieuLuc == NgayHieuLucMax
                               orderby t.NgayQuyetDinh descending
                               select t).FirstOrDefault();
        if (dong == null)
        {
            return(0);
        }
        if (dong.LuongDongBHXH == null)
        {
            return(0);
        }
        return((decimal)dong.LuongDongBHXH);
    }
    //phục vụ cho việc lấy thay đổi từ quyết định lương
    //đầu vào: idnhanvienBaoHiem
    //đầu ra: quyết định, lương bảo hiểm, các loại phụ cấp các kiểu còn hiệu lực
    public void TTQuyetDinhLuongMoiNhat(int IDNhanVienBaoHiem, out string soquyetdinh, out string tenquyetdinh, out DateTime?ngayky, out DateTime?ngayhieuluc, out DateTime?hethieuluc,
                                        out decimal?luongbaohiem, out decimal?phucapcv, out decimal?phucaptnn, out decimal?phucaptnvk, out decimal?phucapkhac)
    {
        var pcpl = dataContext.DanhMucPhuCapPhucLois.ToList();

        int[] pccv   = pcpl.Where(p => p.NhomLoaiPhuCapPhucLoi == "(BH)PhuCapChucVu" && p.TinhVaoBH == true).Select(p => p.ID).ToArray();
        int[] pctnvk = pcpl.Where(p => p.NhomLoaiPhuCapPhucLoi == "(BH)PhuCapThamNienVuotKhung" && p.TinhVaoBH == true).Select(p => p.ID).ToArray();
        int[] pctnn  = pcpl.Where(p => p.NhomLoaiPhuCapPhucLoi == "(BH)PhuCapThamNienNghe" && p.TinhVaoBH == true).Select(p => p.ID).ToArray();
        int[] pck    = pcpl.Where(p => p.NhomLoaiPhuCapPhucLoi == "(BH)PhuCapKhac" && p.TinhVaoBH == true).Select(p => p.ID).ToArray();

        soquyetdinh = ""; tenquyetdinh = ""; ngayhieuluc = null; hethieuluc = null; luongbaohiem = 0; phucapcv = 0; phucaptnn = 0; phucaptnvk = 0; phucapkhac = 0; ngayky = null;
        //lấy tất cả những quyết định lương của ông có id= idnhanvienbaohiem
        List <DAL.HOSO_LUONG> tmp = dataContext.HOSO_LUONGs.Where(p => p.NgayHieuLuc <= DateTime.Now && p.TrangThai == "DaDuyet" && p.PrKeyHoSo == (decimal)IDNhanVienBaoHiem).ToList();

        //lấy quyết định lương gần đây nhất. bỏ qua việc xác nhận lỗi có 2 bản ghi cùng ngày hiệu lực
        DAL.HOSO_LUONG quyetdinhluong = tmp.OrderByDescending(t => t.NgayHieuLuc).FirstOrDefault(); //tmp.Where(p => p.NgayHieuLuc == tmp.Max(v => v.NgayHieuLuc)).SingleOrDefault();
        if (quyetdinhluong != null)
        {
            soquyetdinh  = quyetdinhluong.SoQuyetDinh;
            tenquyetdinh = quyetdinhluong.TenQuyetDinh;
            ngayhieuluc  = quyetdinhluong.NgayHieuLuc;
            hethieuluc   = quyetdinhluong.NgayKetThucHieuLuc;
            ngayky       = quyetdinhluong.NgayQuyetDinh;
            if (quyetdinhluong.LuongDongBHXH != null)
            {
                luongbaohiem = (decimal)quyetdinhluong.LuongDongBHXH;
            }


            //bảng phụ cấp chứa tất cả các phụ cấp (có thể các phụ cấp đã trùng)
            //
            var temptinhphucap1 = (from t in dataContext.HOSO_PHUCAPs
                                   where (t.TrangThai == "DaDuyet") && (t.FrKeyHOSO_LUONG == quyetdinhluong.ID)
                                   select t).ToList();
            //chỉ lấy những phụ cấp có ngày hiệu lực gần nhất
            var temptinhphucap = (from t in temptinhphucap1
                                  where t.NgayHieuLuc == (from x in temptinhphucap1
                                                          where x.MaPhuCap == t.MaPhuCap
                                                          select t.NgayHieuLuc).Max()
                                  select t).ToList();
            #region bỏ
            //var temptinhphucap = (from t in temptinhphucap1
            //                      group t by new
            //                      {
            //                          t.IDNhanVienBaoHiem,
            //                          t.MaPhuCap
            //                      } into g
            //                      let MaxNgayHieuLuc = g.Max(x => x.NgayHieuLuc)

            //                      from p in g
            //                      where p.NgayHieuLuc == MaxNgayHieuLuc
            //                      select new
            //                      {
            //                          g.Key.IDNhanVienBaoHiem,
            //                          g.Key.MaPhuCap,
            //                          SoTien = g.Sum(t => t.SoTien)
            //                      }).ToList();
            #endregion
            //phụ cấp chức vụ
            var cv = (from t in temptinhphucap
                      where pccv.Contains(t.MaPhuCap)
                      select new
            {
                t.SoTien
            }).ToArray();

            if (cv != null)
            {
                phucapcv = (decimal)cv.Sum(p => p.SoTien);
            }
            //thâm niên vượt khung
            var tnvk = (from t in temptinhphucap
                        where pctnvk.Contains(t.MaPhuCap)
                        select new
            {
                t.SoTien
            }).ToArray();

            if (tnvk != null)
            {
                phucaptnvk = (decimal)tnvk.Sum(p => p.SoTien);
            }
            //thâm niên nghề
            var tnn = (from t in temptinhphucap
                       where pctnn.Contains(t.MaPhuCap)
                       select new
            {
                t.SoTien
            }).ToArray();

            if (tnn != null)
            {
                phucaptnn = (decimal)tnn.Sum(p => p.SoTien);
            }
            //phụ cấp khác
            var k = (from t in temptinhphucap
                     where pck.Contains(t.MaPhuCap)
                     select new
            {
                t.SoTien
            }).ToArray();

            if (k != null)
            {
                phucapkhac = (decimal)k.Sum(p => p.SoTien);
            }
        }
    }