/// <summary> Lưu D02 </summary> public void ComputeD02(List<Ins_InsuranceReportD02Entity> lstD02, Ins_ReportD02Entity d02, DateTime dtMonthYear, DateTime dtStart, DateTime dtEnd, string periodD02) { using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoReportD02 = new Ins_ReportD02Repository(unitOfWork); var repoReportD02Item = new Ins_ReportD02ItemRepository(unitOfWork); var reportD02 = new Ins_ReportD02(); var reportD02ID = Guid.Empty; var count = 0; count = repoReportD02.FindBy(p => p.IsDelete == null && p.DateMonth == dtMonthYear).Count(); count++; //test count = 1;//test xoa sau //tự sinh ra kỳ var cutOfDuration = "Kỳ " + periodD02 + " - " + dtMonthYear.ToString(ConstantFormat.HRM_Format_MonthYear); var reportD02Existed = repoReportD02.FindBy(p => p.IsDelete == null && p.DateMonth.HasValue && p.DateMonth.Value.Month == dtMonthYear.Month && p.DateMonth.Value.Year == dtMonthYear.Year && p.ReportD02Name == cutOfDuration).FirstOrDefault(); var d02ItemsExist = new List<Ins_ReportD02Item>(); var d02ItemsModify = new List<Ins_ReportD02Item>(); var d02ItemsAdding = new List<Ins_ReportD02Item>(); #region Chỉnh Sửa if (reportD02Existed != null) { var d02ID = reportD02Existed.ID; reportD02ID = reportD02Existed.ID; reportD02Existed.SociaInsCountPro = d02.SociaInsCountPro; reportD02Existed.SociaInsTotalSalary = d02.SociaInsTotalSalary; reportD02Existed.HealthInsCountPro = d02.HealthInsCountPro; reportD02Existed.HealthInsTotalSalary = d02.HealthInsTotalSalary; reportD02Existed.UnEmpInsCountPro = d02.UnEmpInsCountPro; reportD02Existed.UnEmpInsTotalSalary = d02.UnEmpInsTotalSalary; reportD02Existed.MaxSalary = d02.MaxSalary; reportD02Existed.MinSalary = d02.MinSalary; reportD02Existed.Type = d02.Type; repoReportD02.Edit(reportD02Existed); repoReportD02.SaveChanges(); var profileIds = lstD02.Select(m => m.ProfileID).ToList(); d02ItemsExist = unitOfWork.CreateQueryable<Ins_ReportD02Item>(Guid.Empty, p => profileIds.Contains(p.ProfileID) && p.ReportD02ID == d02ID && (p.IsPayBack == null || (p.IsPayBack != null && p.IsPayBack == false))).ToList(); if (d02ItemsExist.Any()) { unitOfWork.RemoveObject(typeof(Ins_ReportD02Item), d02ItemsExist.ToArray()); unitOfWork.SaveChanges(); } d02ItemsExist = repoReportD02Item.FindBy(p => p.IsDelete == null && p.ReportD02ID == d02ID && (p.IsPayBack == null || (p.IsPayBack != null && p.IsPayBack == false))).ToList(); } #endregion #region Tạo mới if (lstD02.Count > 0 && reportD02Existed == null) { //insert D02Report reportD02 = new Ins_ReportD02 { DateReport = DateTime.Now, DateStart = dtStart, DateEnd = dtEnd, DateMonth = dtMonthYear, ReportD02Name = cutOfDuration, MaxSalary = d02.MaxSalary, MinSalary = d02.MinSalary, SociaInsCountPro = d02.SociaInsCountPro, SociaInsTotalSalary = d02.SociaInsTotalSalary, HealthInsCountPro = d02.HealthInsCountPro, HealthInsTotalSalary = d02.HealthInsTotalSalary, UnEmpInsCountPro = d02.UnEmpInsCountPro, Type = d02.Type, UnEmpInsTotalSalary = d02.UnEmpInsTotalSalary }; repoReportD02.Add(reportD02); repoReportD02.SaveChanges(); reportD02ID = reportD02.ID; } #endregion //get d02Item var d02ItemPayBack = unitOfWork.CreateQueryable<Ins_ReportD02Item>(Guid.Empty, m => m.ReportD02ID == reportD02ID && m.PayBackID != null).ToList(); foreach (var insInsuranceReportD02Entity in lstD02) { if (!insInsuranceReportD02Entity.ProfileID.HasValue || (insInsuranceReportD02Entity.ProfileID.HasValue && insInsuranceReportD02Entity.ProfileID.Value == Guid.Empty)) { continue; } if (d02ItemPayBack.Where(m => m.ProfileID == insInsuranceReportD02Entity.ProfileID && m.PayBackID != null).FirstOrDefault() != null) { continue; } var notCardHeath = false; bool.TryParse(insInsuranceReportD02Entity.NotCardHealth, out notCardHeath); #region lay so thu tu var itemOrder = 0; var strItemOrder = string.Empty; if (!string.IsNullOrEmpty(insInsuranceReportD02Entity.STT)) { strItemOrder = insInsuranceReportD02Entity.STT.ToString(); } int.TryParse(strItemOrder, out itemOrder); #endregion var reportD02Item = new Ins_ReportD02Item() { Comment = insInsuranceReportD02Entity.Comment, ReportD02ID = reportD02ID, ProfileID = insInsuranceReportD02Entity.ProfileID, Type = insInsuranceReportD02Entity.Status1, Status = insInsuranceReportD02Entity.Status, RateHealthIns = insInsuranceReportD02Entity.RateBHYT, RateSocialIns = insInsuranceReportD02Entity.RateBHXH, RateUnEmpIns = insInsuranceReportD02Entity.RateBHTN, NewBasicSalary = insInsuranceReportD02Entity.NewBasicSalary, JobName = insInsuranceReportD02Entity.JobName, Allowance1 = insInsuranceReportD02Entity.Allowance1, Allowance2 = insInsuranceReportD02Entity.Allowance2, Allowance3 = insInsuranceReportD02Entity.Allowance3, AllowanceAdditional = insInsuranceReportD02Entity.AllowanceAdditional, SocialInsPlaceID = insInsuranceReportD02Entity.SocialInsPlaceID, NotCardHealth = notCardHeath, ItemOrder = itemOrder, MonthFrom = dtStart, MonthTo = dtEnd }; var d02ItemExisted = d02ItemsExist.Where(p => p.ProfileID == insInsuranceReportD02Entity.ProfileID && p.Status == insInsuranceReportD02Entity.Status).FirstOrDefault(); if (d02ItemExisted != null) { if (d02ItemExisted.Type != insInsuranceReportD02Entity.Status1 || d02ItemExisted.RateHealthIns != insInsuranceReportD02Entity.RateBHYT || d02ItemExisted.RateSocialIns != insInsuranceReportD02Entity.RateBHXH || d02ItemExisted.RateUnEmpIns != insInsuranceReportD02Entity.RateBHTN || d02ItemExisted.NewBasicSalary != insInsuranceReportD02Entity.NewBasicSalary || d02ItemExisted.NotCardHealth != notCardHeath || d02ItemExisted.Comment != insInsuranceReportD02Entity.Comment || d02ItemExisted.JobName != insInsuranceReportD02Entity.JobName || d02ItemExisted.SocialInsPlaceID != insInsuranceReportD02Entity.SocialInsPlaceID) { d02ItemExisted.Type = insInsuranceReportD02Entity.Status1; d02ItemExisted.RateHealthIns = insInsuranceReportD02Entity.RateBHYT; d02ItemExisted.RateSocialIns = insInsuranceReportD02Entity.RateBHXH; d02ItemExisted.RateUnEmpIns = insInsuranceReportD02Entity.RateBHTN; d02ItemExisted.NewBasicSalary = insInsuranceReportD02Entity.NewBasicSalary; d02ItemExisted.NotCardHealth = notCardHeath; d02ItemExisted.Status = insInsuranceReportD02Entity.Status; d02ItemExisted.Type = insInsuranceReportD02Entity.Status1; d02ItemExisted.ItemOrder = itemOrder; d02ItemExisted.MonthFrom = dtStart; d02ItemExisted.MonthTo = dtEnd; d02ItemExisted.JobName = insInsuranceReportD02Entity.JobName; d02ItemExisted.Allowance1 = insInsuranceReportD02Entity.Allowance1; d02ItemExisted.Allowance2 = insInsuranceReportD02Entity.Allowance2; d02ItemExisted.Allowance3 = insInsuranceReportD02Entity.Allowance3; d02ItemExisted.AllowanceAdditional = insInsuranceReportD02Entity.AllowanceAdditional; d02ItemExisted.SocialInsPlaceID = insInsuranceReportD02Entity.SocialInsPlaceID; d02ItemExisted.Comment = insInsuranceReportD02Entity.Comment; d02ItemsModify.Add(d02ItemExisted); } } else { d02ItemsAdding.Add(reportD02Item); } } if (d02ItemsModify.Any()) { repoReportD02Item.Edit(d02ItemsModify); } if (d02ItemsAdding.Any()) { repoReportD02Item.Add(d02ItemsAdding); } if (d02ItemsModify.Any() || d02ItemsAdding.Any()) { //save change repoReportD02Item.SaveChanges(); } } }
public void CalculateInsurancePayBack(List<Guid> payBackIds, DateTime monthYear,string userLogin) { /* * Goal(tính toán Truy Lĩnh Bảo Hiểm - Lưu bảng Ins_ProfileInsuranceMonthly) * Steps : * Step1 : lấy ds InsuranceSalaryPayback * Step2 : Duyệt InsuranceSalaryPayback * Step3 : Duyệt fromMonthEffect đến ToMonthEffect (để insert vào Ins_ProfileMonthly tương ứng với những tháng đó) * Step3 : Lưu vào DB */ using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoInsMonthly = new Ins_ProfileInsuranceMonthlyRepository(unitOfWork); var repoInsReportD02 = new Ins_ReportD02Repository(unitOfWork); var repoInsReportD02Item = new Ins_ReportD02ItemRepository(unitOfWork); var repoInsuranceSalaryPayback = new Ins_InsuranceSalaryPaybackRepository(unitOfWork); string status = string.Empty; DateTime endDayOfMonthYear = new DateTime(monthYear.Year, monthYear.Month, DateTime.DaysInMonth(monthYear.Year, monthYear.Month)); var reportD02 = new Ins_ReportD02(); List<Ins_ProfileInsuranceMonthly> lstProfileMonthly = new List<Ins_ProfileInsuranceMonthly>(); List<Ins_ProfileInsuranceMonthly> lstProfileMonthlyEditing = new List<Ins_ProfileInsuranceMonthly>(); List<Ins_ReportD02Item> lstD02Item = new List<Ins_ReportD02Item>(); List<Ins_ReportD02Item> lstD02ItemEditing = new List<Ins_ReportD02Item>(); var insPayBacks = unitOfWork.CreateQueryable<Ins_InsuranceSalaryPayback>(Guid.Empty, m => payBackIds.Contains(m.ID)).ToList(); var insTypeD02Ids = insPayBacks.Select(m => m.TypeID).ToList(); var insTypeD02s = unitOfWork.CreateQueryable<Ins_TypeD02>(Guid.Empty, m => insTypeD02Ids.Contains(m.ID)).ToList(); //lấy tỉ lệ bảo hiểm với ngày áp dụng trước ngày kiểm tra var lstInsRate = unitOfWork.CreateQueryable<Cat_RateInsurance>(Guid.Empty, m => m.ApplyFrom <= endDayOfMonthYear).ToList(); Cat_RateInsurance rateInsurance = GetInsuranceRate(endDayOfMonthYear, lstInsRate); var insMonthYearFrom = monthYear.AddMonths(-1); insMonthYearFrom = new DateTime(insMonthYearFrom.Year, insMonthYearFrom.Month,PeriodInsuranceDayPreMonthDefault); var insMonthYearTo = new DateTime(monthYear.Year, monthYear.Month,PeriodInsuranceDayCurrentMonthDefault ); var beginMonthYear = insPayBacks.Min(m => m.FromMonthEffect); var endMonthYear = insPayBacks.Max(m => m.ToMonthEffect); #region ds NV đóng Bảo Hiểm theo thang var listInsMonthlyObj = new List<object> { null, beginMonthYear, endMonthYear, null, null, null, null, null, 1, int.MaxValue - 1 }; if (Common.UseDataBaseName == DATABASETYPE.SQLSERVER.ToString()) { listInsMonthlyObj.Add("id"); } var lstProfileInsuranceMonthlyInDb = GetData<Ins_ProfileInsuranceMonthlyEntity>(listInsMonthlyObj, ConstantSql.hrm_ins_sp_get_ProfileInsMonthlyFromTo,userLogin, ref status).Translate<Ins_ProfileInsuranceMonthly>(); ; var profileIds = insPayBacks.Select(m => m.ProfileID).ToList(); var hreProfiles = unitOfWork.CreateQueryable<Hre_Profile>(Guid.Empty, m => m.SocialInsPlaceID.HasValue && profileIds.Contains(m.ID)).Select(m => new { ID = m.ID, SocialInsPlaceID = m.SocialInsPlaceID.Value }).ToList(); if (profileIds.Any()) { lstProfileInsuranceMonthlyInDb = lstProfileInsuranceMonthlyInDb.Where(m => profileIds.Contains(m.ProfileID)).ToList(); } #endregion foreach (var payBack in insPayBacks) { if (payBack.FromMonthEffect.HasValue && payBack.ToMonthEffect.HasValue) { payBack.IsCallPayBack = true; //duyet tung nv var profileID = payBack.ProfileID; #region xoa truoc khi tinh toan truy lĩnh var profMonthlyDelete = unitOfWork.CreateQueryable<Ins_ProfileInsuranceMonthly>(Guid.Empty, m => m.ProfileID == profileID && m.MonthYear == payBack.MonthYear && (m.IsPayback == null || (m.IsPayback.HasValue && m.IsPayback.Value ==false)) ).FirstOrDefault(); if (profMonthlyDelete != null) { unitOfWork.RemoveObject(profMonthlyDelete); unitOfWork.SaveChanges(); } #endregion #region lấy nơi đóng bảo hiểm của NV var prof = hreProfiles.Where(m => m.ID == profileID).FirstOrDefault(); Guid? socialInsPlaceID = null; if (prof != null) { socialInsPlaceID = prof.SocialInsPlaceID; } #endregion for (var i = payBack.FromMonthEffect.Value; i <= payBack.ToMonthEffect.Value; i = i.AddMonths(1)) { #region Ins_ProfileInsuranceMonthly #region edit var monthlyExist = lstProfileInsuranceMonthlyInDb.Where(m => m.ProfileID == profileID && m.MonthYearEffect == i && m.IsPayback == true).FirstOrDefault(); if (monthlyExist != null) { monthlyExist.IsSocialInsurance = payBack.IsSocialIns; monthlyExist.IsHealthInsurance = payBack.IsMedicalIns; monthlyExist.IsUnEmpInsurance = payBack.IsUnemploymentIns; monthlyExist.MonthYear = payBack.MonthYear; monthlyExist.MonthYearEffect = i; monthlyExist.Allowance1 = 0; monthlyExist.Allowance2 = 0; monthlyExist.Allowance3 = 0; monthlyExist.Allowance4 = 0; monthlyExist.AllowanceAdditional = 0; monthlyExist.JobName = payBack.JobtitleName; monthlyExist.AmountHDTIns = payBack.AmoutHDTInsPayBack - payBack.AmoutHDTIns; monthlyExist.PaybackID = payBack.ID; monthlyExist.SalaryInsurance = payBack.InsSalaryAdjust; monthlyExist.SalaryHealthInsurance = payBack.InsSalaryAdjust; monthlyExist.SalaryUnEmpInsurance = payBack.InsSalaryAdjust; monthlyExist.SocialInsPlaceID = socialInsPlaceID; if (rateInsurance != null) { monthlyExist.SocialInsComRate = rateInsurance.SocialInsCompRate; monthlyExist.SocialInsEmpRate = rateInsurance.SocialInsEmpRate; monthlyExist.HealthInsComRate = rateInsurance.HealthInsCompRate; monthlyExist.HealthInsEmpRate = rateInsurance.HealthInsEmpRate; monthlyExist.UnemployComRate = rateInsurance.UnemployInsCompRate; monthlyExist.UnemployEmpRate = rateInsurance.UnemployInsEmpRate; var moneyInsuranceTotal = payBack.InsSalaryAdjust ?? 0 + payBack.AmoutHDTIns ?? 0; #region Set tỉ lệ và tiền đóng BHXH,BHYT,BHTN if (monthlyExist.IsSocialInsurance == true) { //tong ti le BHXH do NSDLĐ và NLĐ đóng double rate = (rateInsurance.SocialInsCompRate + rateInsurance.SocialInsEmpRate); monthlyExist.MoneySocialInsurance = (float)(moneyInsuranceTotal * rate); #region [Tung.Ly ]: ti le BHXH cty dong va ti le BHXH nv dong //Số tiền BHXH do cty đóng monthlyExist.SocialInsComAmount = (double)(moneyInsuranceTotal * monthlyExist.SocialInsComRate); //số tiền BHXH do NV đóng monthlyExist.SocialInsEmpAmount = (double)(moneyInsuranceTotal * monthlyExist.SocialInsEmpRate); #endregion } if (monthlyExist.IsHealthInsurance == true) { //tong ti le BHYT do NSDLĐ và NLĐ đóng double rate = (rateInsurance.HealthInsCompRate + rateInsurance.HealthInsEmpRate); monthlyExist.MoneyHealthInsurance = (float)(moneyInsuranceTotal * rate); #region [Tung.Ly ]: ti le BHXH cty dong va ti le BHXH nv dong //Số tiền BHYT do cty đóng monthlyExist.HealthInsComAmount = (double)(moneyInsuranceTotal * monthlyExist.HealthInsComRate); //số tiền BHYT do NV đóng monthlyExist.HealthInsEmpAmount = (double)(moneyInsuranceTotal * monthlyExist.HealthInsEmpRate); #endregion } if (monthlyExist.IsUnEmpInsurance == true) { //tong ti le BHTN do NSDLĐ và NLĐ đóng double rate = (rateInsurance.UnemployInsCompRate + rateInsurance.UnemployInsEmpRate); monthlyExist.MoneyUnEmpInsurance = (float)(moneyInsuranceTotal * rate); #region [Tung.Ly ]: ti le BHTN cty dong va ti le BHXH nv dong //Số tiền BHTN do cty đóng monthlyExist.UnemployComAmount = (double)(moneyInsuranceTotal * monthlyExist.UnemployComRate); //số tiền BHTN do NV đóng monthlyExist.UnemployEmpAmount = (double)(moneyInsuranceTotal * monthlyExist.UnemployEmpRate); #endregion } monthlyExist.AmountChargeIns = monthlyExist.Allowance1 + monthlyExist.Allowance2 + monthlyExist.Allowance3 + monthlyExist.Allowance4 + moneyInsuranceTotal; #endregion } lstProfileMonthlyEditing.Add(monthlyExist); } #endregion #region them moi else { Ins_ProfileInsuranceMonthly proMonthly = new Ins_ProfileInsuranceMonthly(); proMonthly.MonthYear = payBack.MonthYear; proMonthly.ProfileID = payBack.ProfileID; proMonthly.MonthYearEffect = i; proMonthly.IsPayback = true; proMonthly.IsSocialInsurance = payBack.IsSocialIns; proMonthly.IsHealthInsurance = payBack.IsMedicalIns; proMonthly.IsUnEmpInsurance = payBack.IsUnemploymentIns; proMonthly.SalaryInsurance = payBack.InsSalaryAdjust; proMonthly.SalaryHealthInsurance = payBack.InsSalaryAdjust; proMonthly.SalaryUnEmpInsurance = payBack.InsSalaryAdjust; proMonthly.JobName = payBack.JobtitleName; proMonthly.AmountHDTIns = payBack.AmoutHDTInsPayBack - payBack.AmoutHDTIns; proMonthly.PaybackID = payBack.ID; proMonthly.SocialInsPlaceID = socialInsPlaceID; if (rateInsurance != null) { proMonthly.SocialInsComRate = rateInsurance.SocialInsCompRate; proMonthly.SocialInsEmpRate = rateInsurance.SocialInsEmpRate; proMonthly.HealthInsComRate = rateInsurance.HealthInsCompRate; proMonthly.HealthInsEmpRate = rateInsurance.HealthInsEmpRate; proMonthly.UnemployComRate = rateInsurance.UnemployInsCompRate; proMonthly.UnemployEmpRate = rateInsurance.UnemployInsEmpRate; var moneyInsuranceTotal = (payBack.InsSalaryAdjust ?? 0) + (payBack.AmoutHDTIns ?? 0); #region Set tỉ lệ và tiền đóng BHXH,BHYT,BHTN if (proMonthly.IsSocialInsurance == true) { //tong ti le BHXH do NSDLĐ và NLĐ đóng double rate = (rateInsurance.SocialInsCompRate + rateInsurance.SocialInsEmpRate); proMonthly.MoneySocialInsurance = (float)(moneyInsuranceTotal * rate); #region [Tung.Ly ]: ti le BHXH cty dong va ti le BHXH nv dong //Số tiền BHXH do cty đóng proMonthly.SocialInsComAmount = (double)(moneyInsuranceTotal * proMonthly.SocialInsComRate); //số tiền BHXH do NV đóng proMonthly.SocialInsEmpAmount = (double)(moneyInsuranceTotal * proMonthly.SocialInsEmpRate); #endregion } if (proMonthly.IsHealthInsurance == true) { //tong ti le BHYT do NSDLĐ và NLĐ đóng double rate = (rateInsurance.HealthInsCompRate + rateInsurance.HealthInsEmpRate); proMonthly.MoneyHealthInsurance = (float)(moneyInsuranceTotal * rate); #region [Tung.Ly ]: ti le BHXH cty dong va ti le BHXH nv dong //Số tiền BHYT do cty đóng proMonthly.HealthInsComAmount = (double)(moneyInsuranceTotal * proMonthly.HealthInsComRate); //số tiền BHYT do NV đóng proMonthly.HealthInsEmpAmount = (double)(moneyInsuranceTotal * proMonthly.HealthInsEmpRate); #endregion } if (proMonthly.IsUnEmpInsurance == true) { //tong ti le BHTN do NSDLĐ và NLĐ đóng double rate = (rateInsurance.UnemployInsCompRate + rateInsurance.UnemployInsEmpRate); proMonthly.MoneyUnEmpInsurance = (float)(moneyInsuranceTotal * rate); #region [Tung.Ly ]: ti le BHTN cty dong va ti le BHXH nv dong //Số tiền BHTN do cty đóng proMonthly.UnemployComAmount = (double)(moneyInsuranceTotal * proMonthly.UnemployComRate); //số tiền BHTN do NV đóng proMonthly.UnemployEmpAmount = (double)(moneyInsuranceTotal * proMonthly.UnemployEmpRate); #endregion } proMonthly.AmountChargeIns = proMonthly.Allowance1 + proMonthly.Allowance2 + proMonthly.Allowance3 + proMonthly.Allowance4 + moneyInsuranceTotal; #endregion } proMonthly.ID = Guid.NewGuid(); lstProfileMonthly.Add(proMonthly); } #endregion #endregion } #region Ins_ReportD02 #region d02 var periodD02 = EnumDropDown.GetEnumDescription<PeriodInsurance>(PeriodInsurance.GETTEMP); var cutOfDuration = "Kỳ " + periodD02 + " - " + payBack.MonthYear.Value.ToString(ConstantFormat.HRM_Format_MonthYear); var reportD02Existed = unitOfWork.CreateQueryable<Ins_ReportD02>(p => p.DateMonth.HasValue && p.DateMonth.Value.Month == payBack.MonthYear.Value.Month && p.DateMonth.Value.Year == payBack.MonthYear.Value.Year && p.ReportD02Name == cutOfDuration).FirstOrDefault(); var reportD02ID = Guid.Empty; #endregion if (reportD02Existed == null) { //insert D02Report reportD02 = new Ins_ReportD02 { DateReport = DateTime.Now, DateStart = insMonthYearFrom, DateEnd = insMonthYearTo, DateMonth = payBack.MonthYear, ReportD02Name = cutOfDuration, MaxSalary = 0, MinSalary = 0, SociaInsCountPro = 0, SociaInsTotalSalary = 0, HealthInsCountPro = 0, HealthInsTotalSalary = 0, UnEmpInsCountPro = 0, Type = PeriodInsurance.GETTEMP.ToString(), UnEmpInsTotalSalary = 0 }; repoInsReportD02.Add(reportD02); var statusCode = repoInsReportD02.SaveChanges(); reportD02ID = reportD02.ID; reportD02Existed = unitOfWork.CreateQueryable<Ins_ReportD02>(Guid.Empty, m => m.ID == reportD02ID).FirstOrDefault(); } if (reportD02Existed != null) { var insTypeD02 = insTypeD02s.Where(m => m.ID == payBack.TypeID).FirstOrDefault(); var reportD02ItemExisted = unitOfWork.CreateQueryable<Ins_ReportD02Item>(m => m.ReportD02ID == reportD02Existed.ID && m.PayBackID == payBack.ID).FirstOrDefault(); var monthFrom = payBack.MonthYear.Value.AddMonths(-1); monthFrom = new DateTime(monthFrom.Year, monthFrom.Month,PeriodInsuranceDayPreMonthDefault ); var monthTo = new DateTime(payBack.MonthYear.Value.Year, payBack.MonthYear.Value.Month, PeriodInsuranceDayCurrentMonthDefault); #region delete d02 truoc khi tinh truy lĩnh #region xoa D02Item truoc khi tinh toan truy lĩnh if (reportD02Existed != null && reportD02Existed.ID != Guid.Empty) { var reportD02ItemDelete = unitOfWork.CreateQueryable<Ins_ReportD02Item>(Guid.Empty, m => m.ReportD02ID == reportD02Existed.ID && m.ProfileID == profileID && m.IsPayBack == null).ToList(); if (reportD02ItemDelete != null) { unitOfWork.RemoveObject(typeof(Ins_ReportD02Item), reportD02ItemDelete.ToArray()); unitOfWork.SaveChanges(); } } #endregion if (reportD02ItemExisted != null) { #region Edit reportD02ItemExisted.ProfileID = profileID; reportD02ItemExisted.ReportD02ID = reportD02Existed.ID; reportD02ItemExisted.OldBasicSalary = payBack.InsSalary; reportD02ItemExisted.NewBasicSalary = payBack.InsSalaryAdjust; reportD02ItemExisted.SocialInsPlaceID = socialInsPlaceID; reportD02ItemExisted.IsPayBack = true; reportD02ItemExisted.PayBackID = payBack.ID; reportD02ItemExisted.MonthFrom = payBack.FromMonthEffect; reportD02ItemExisted.MonthTo = payBack.FromMonthEffect; reportD02ItemExisted.RateHealthIns = payBack.HealthInsComRate + payBack.HealthInsEmpRate; reportD02ItemExisted.RateSocialIns = payBack.SocialInsComRate + payBack.SocialInsEmpRate; reportD02ItemExisted.RateUnEmpIns = payBack.UnemployComRate + payBack.UnemployEmpRate; reportD02ItemExisted.JobName = payBack.JobtitleName; if (insTypeD02 != null) { reportD02ItemExisted.Status = insTypeD02.CommentCode; reportD02ItemExisted.Type = insTypeD02.TypeCode; reportD02ItemExisted.Comment = payBack.Comment; } if (!lstD02ItemEditing.Any(m => m.ID == reportD02ItemExisted.ID)) { lstD02ItemEditing.Add(reportD02ItemExisted); } #endregion } else { #region Add new var d02Item = new Ins_ReportD02Item(); d02Item.ProfileID = profileID; d02Item.ReportD02ID = reportD02Existed.ID; d02Item.OldBasicSalary = payBack.InsSalary; d02Item.NewBasicSalary = payBack.InsSalaryAdjust; d02Item.MonthFrom = payBack.FromMonthEffect; d02Item.MonthTo = payBack.FromMonthEffect; d02Item.IsPayBack = true; d02Item.PayBackID = payBack.ID; d02Item.JobName = payBack.JobtitleName; d02Item.SocialInsPlaceID = socialInsPlaceID; d02Item.RateHealthIns = payBack.HealthInsComRate + payBack.HealthInsEmpRate; d02Item.RateSocialIns = payBack.SocialInsComRate + payBack.SocialInsEmpRate; d02Item.RateUnEmpIns = payBack.UnemployComRate + payBack.UnemployEmpRate; if (insTypeD02 != null) { d02Item.Status = insTypeD02.CommentCode; d02Item.Type = insTypeD02.TypeCode; d02Item.Comment = payBack.Comment; } lstD02Item.Add(d02Item); #endregion } } #endregion #endregion } #region Save Change if (lstProfileMonthly.Any()) { repoInsMonthly.Add(lstProfileMonthly); } if (lstProfileMonthlyEditing.Any()) { repoInsMonthly.Edit(lstProfileMonthlyEditing); } if (lstD02Item.Any()) { repoInsReportD02Item.Add(lstD02Item); } if (lstD02ItemEditing.Any()) { repoInsReportD02Item.Edit(lstD02ItemEditing); } repoInsMonthly.SaveChanges(); #endregion } } }
/// <summary> Tìm kiếm bc D02TS (Hien tai chua dùng toi method này) </summary> /// <param name="all"></param> /// <param name="increase"></param> /// <param name="descrease"></param> /// <param name="dtMonthYear"></param> /// <param name="orgIds"></param> /// <returns></returns> public List<Ins_InsuranceReportD02Entity> SearchD02TS(bool? all, bool? increase, bool? descrease, DateTime? dtMonthYear, string orgIds, string searchNoteType, string searchStatus, string codeEmp, List<Guid> socialInsPlaceIDs, string userLogin) { var periodIns = EnumDropDown.GetEnumDescription<PeriodInsurance>(PeriodInsurance.GETTEMP); List<Ins_InsuranceReportD02Entity> lstInsuranceReportD02 = new List<Ins_InsuranceReportD02Entity>(); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoReportD02 = new Ins_ReportD02Repository(unitOfWork); var repoReportD02Item = new Ins_ReportD02ItemRepository(unitOfWork); var repoProfileInsMonthly = new Ins_ProfileInsuranceMonthlyRepository(unitOfWork); string status = string.Empty; var monthYear = dtMonthYear ?? DateTime.Now; DateTime dateFrom = monthYear.AddMonths(-1); dateFrom = new DateTime(dateFrom.Year, dateFrom.Month, InsuranceServices.PeriodInsuranceDayPreMonthDefault); DateTime dateTo = new DateTime(monthYear.Year, monthYear.Month, InsuranceServices.PeriodInsuranceDayCurrentMonthDefault); #region Lấy DS Ins_ProfileInsuranceMonthly (lấy tất cả) var listInsMonthlyObj = new List<object> { orgIds, monthYear, null, 1, int.MaxValue - 1 }; if (Common.UseDataBaseName == DATABASETYPE.SQLSERVER.ToString()) { listInsMonthlyObj.Add("id"); } var lstProfileInsuranceMonthlyInDb = GetData<Ins_ProfileInsuranceMonthlyEntity>(listInsMonthlyObj, ConstantSql.hrm_ins_sp_get_ProfileInsMonthly, userLogin, ref status); #endregion var lstProfileInsMonthly = lstProfileInsuranceMonthlyInDb.Where(s => s.MonthYear.HasValue && (s.MonthYear.Value.Year == dateFrom.Year || s.MonthYear.Value.Year == dateTo.Year) && (s.MonthYear.Value.Month == dateFrom.Month || s.MonthYear.Value.Month == dateTo.Month)).ToList(); //tự sinh ra kỳ var cutOfDuration = "Kỳ " + periodIns + " - " + monthYear.ToString(ConstantFormat.HRM_Format_MonthYear); #region Get D02 List<object> listD02Obj = new List<object>(); listD02Obj.Add(null); listD02Obj.Add(dtMonthYear); listD02Obj.Add(cutOfDuration); var d02 = GetData<Ins_ReportD02>(listD02Obj, ConstantSql.hrm_ins_sp_get_D02, userLogin, ref status).FirstOrDefault(); #endregion if (d02 != null) { List<object> listD02ItemObj = new List<object>(); listD02ItemObj.Add(d02.ID); listD02ItemObj.Add(codeEmp); var d02Item = GetData<Ins_ReportD02ItemEntity>(listD02ItemObj, ConstantSql.hrm_ins_sp_get_D02ItemByD02ID, userLogin, ref status); if (socialInsPlaceIDs != null && socialInsPlaceIDs.Any()) { socialInsPlaceIDs = socialInsPlaceIDs.Where(p => p != null && p != Guid.Empty).ToList(); if (socialInsPlaceIDs.Any()) { d02Item = d02Item.Where(p => socialInsPlaceIDs.Contains(p.SocialInsPlaceID ?? Guid.Empty)).ToList(); } } var monthYear1 = new DateTime(monthYear.Year, monthYear.Month, 1); var isHonda = true; foreach (var insReportD02Item in d02Item) { var profileMonthlys = lstProfileInsMonthly.Where(p => p.ProfileID == insReportD02Item.ProfileID && p.MonthYear == monthYear1).FirstOrDefault(); var d02Status = insReportD02Item.Status; if (profileMonthlys != null) { #region Honda if (isHonda) { if (insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_TS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_LEAVE_14WORKINGDAYS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_BENH.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_BHYT.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_LEAVE_14WORKINGDAYS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_LD_CHANGE_INSPLACE.ToString()) { d02Status = TypeInsuranceD02TS.E_TANG_LD.ToString(); } if (insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_TS_QUIT.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_TS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_BENH.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_LD_BHYT.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_LD_NOT_BHYT.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_LEAVE_PREMONTH_14WORKINGDAYS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_LEAVE_14WORKINGDAYS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_QUIT_SUSPENSE.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_PREGNANT_14WORKINGDAYS.ToString() || insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_LD_CHANGE_INSPLACE.ToString()) { d02Status = TypeInsuranceD02TS.E_GIAM_LD.ToString(); } if (insReportD02Item.Status == TypeInsuranceD02TS.E_GIAM_LUONG_CHANGEJOBNAME.ToString()) { d02Status = TypeInsuranceD02TS.E_GIAM_LUONG.ToString(); } if (insReportD02Item.Status == TypeInsuranceD02TS.E_TANG_LUONG_CHANGEJOBNAME.ToString()) { d02Status = TypeInsuranceD02TS.E_TANG_LUONG.ToString(); } } #endregion var insuranceReportD02 = new Ins_InsuranceReportD02Entity { Comment = insReportD02Item.Comment, ProfileID = insReportD02Item.ProfileID, Status = d02Status, Status1 = insReportD02Item.Type, STT = insReportD02Item.ItemOrder.HasValue ? insReportD02Item.ItemOrder.Value.ToString() : null, ItemOrder = insReportD02Item.ItemOrder ?? 0, RateBHXH = insReportD02Item.RateSocialIns, RateBHYT = insReportD02Item.RateHealthIns, RateBHTN = insReportD02Item.RateUnEmpIns, NewBasicSalary = insReportD02Item.NewBasicSalary, NotCardHealth = insReportD02Item.NotCardHealth.HasValue ? insReportD02Item.NotCardHealth.Value.ToString() : "false", ProfileName = insReportD02Item.ProfileName, CodeEmp = insReportD02Item.CodeEmp, SocialInsNo = insReportD02Item.SocialInsNo, JobName = insReportD02Item.JobName, Allowance1 = profileMonthlys.Allowance1, Allowance2 = profileMonthlys.Allowance2, Allowance3 = profileMonthlys.Allowance3, Allowance4 = profileMonthlys.Allowance4, AllowanceAdditional = profileMonthlys.AllowanceAdditional, FromMonth = insReportD02Item.MonthTo, ToMonth = insReportD02Item.MonthTo, PayBackID = insReportD02Item.PayBackID, IsPayBack = insReportD02Item.IsPayBack }; lstInsuranceReportD02.Add(insuranceReportD02); } } } } lstInsuranceReportD02 = lstInsuranceReportD02.OrderBy(p => p.Status).ToList(); var tang = TypeInsuranceD02TS.E_TANG.ToString(); var giam = TypeInsuranceD02TS.E_GIAM.ToString(); List<Ins_InsuranceReportD02Entity> lst = new List<Ins_InsuranceReportD02Entity>(); var statuses = new List<string> { TypeInsuranceD02TS.E_TANG.ToString(), TypeInsuranceD02TS.E_TANG_LD.ToString(), TypeInsuranceD02TS.E_TANG_BHTN.ToString(), TypeInsuranceD02TS.E_GIAM.ToString(), TypeInsuranceD02TS.E_GIAM_LD.ToString(), TypeInsuranceD02TS.E_TANG_LUONG.ToString(), TypeInsuranceD02TS.E_GIAM_LUONG.ToString(), TypeInsuranceD02TS.E_Dieu_Chinh.ToString(), TypeInsuranceD02TS.E_DieuChinhTang.ToString(), TypeInsuranceD02TS.E_DieuChinhGiam.ToString(), }; foreach (var item in statuses) { var lstInsuranceByStatus = lstInsuranceReportD02.Where(p => p.Status == item).OrderBy(p => p.ItemOrder).ToList(); if (lstInsuranceByStatus.Any()) { Ins_InsuranceReportD02Entity ins_InsuranceReportD02 = new Ins_InsuranceReportD02Entity { ProfileName = GetDescription(item), CodeEmp = GetOrderStatus(item) }; lstInsuranceByStatus = lstInsuranceByStatus.OrderBy(p => p.Comment).ToList(); int stt = 1; foreach (var insuranceStatus in lstInsuranceByStatus) { insuranceStatus.STT = stt.ToString(); stt++; } lstInsuranceByStatus.Insert(0, ins_InsuranceReportD02); lst.AddRange(lstInsuranceByStatus); } else { Ins_InsuranceReportD02Entity ins_InsuranceReportItemD02 = new Ins_InsuranceReportD02Entity { ProfileName = GetDescription(item), CodeEmp = GetOrderStatus(item) }; lst.Add(ins_InsuranceReportItemD02); } } #region filter searchNoteType if (searchNoteType != "All") { var statusSearch = searchNoteType; searchNoteType = GetDescription(searchNoteType); if (statusSearch == TypeInsuranceD02TS.E_DieuChinhTang.ToString() || statusSearch == TypeInsuranceD02TS.E_DieuChinhGiam.ToString() || statusSearch == TypeInsuranceD02TS.E_Dieu_Chinh.ToString() ) { lst = lst.Where(p => (p.Comment == null || p.Comment == "") || p.Status == statusSearch).ToList(); } else { lst = lst.Where(p => (p.Comment == null || p.Comment == "") || p.Comment == searchNoteType).ToList(); } } else { var lstSearch = new List<string>(); if (searchStatus == TypeInsuranceD02TS.E_TANG.ToString()) { lstSearch = new List<string> { GetDescription(TypeInsuranceD02TS.E_TANG_LD.ToString()), GetDescription(TypeInsuranceD02TS.E_TANG_TS.ToString()), //GetDescription(TypeInsuranceD02TS.E_TANG_BENH.ToString()), //GetDescription(TypeInsuranceD02TS.E_TANG_BHYT.ToString()), GetDescription(TypeInsuranceD02TS.E_TANG_BHTN.ToString()), GetDescription(TypeInsuranceD02TS.E_TANG_LEAVE_14WORKINGDAYS.ToString() ) }; } if (searchStatus == TypeInsuranceD02TS.E_GIAM.ToString()) { lstSearch = new List<string> { GetDescription(TypeInsuranceD02TS.E_GIAM_LD_BHYT.ToString()), GetDescription(TypeInsuranceD02TS.E_GIAM_QUIT_SUSPENSE.ToString()), GetDescription(TypeInsuranceD02TS.E_GIAM_TS.ToString()), GetDescription(TypeInsuranceD02TS.E_GIAM_LEAVE_14WORKINGDAYS.ToString()), GetDescription(TypeInsuranceD02TS.E_GIAM_LEAVE_PREMONTH_14WORKINGDAYS.ToString()), //GetDescription(TypeInsuranceD02TS.E_GIAM_BENH.ToString()) }; } if (searchStatus == TypeInsuranceD02TS.E_GIAM_LUONG.ToString()) { lstSearch = new List<string> { GetDescription( TypeInsuranceD02TS.E_GIAM_LUONG.ToString()), GetDescription(TypeInsuranceD02TS.E_GIAM_LUONG_CHANGEJOBNAME.ToString()) }; } if (searchStatus == TypeInsuranceD02TS.E_TANG_LUONG.ToString()) { lstSearch = new List<string> { GetDescription(TypeInsuranceD02TS.E_TANG_LUONG.ToString()), GetDescription(TypeInsuranceD02TS.E_TANG_LUONG_CHANGEJOBNAME.ToString()) }; } if (searchStatus == TypeInsuranceD02TS.E_CHANGEJOBNAME.ToString()) { lstSearch = new List<string> { GetDescription(TypeInsuranceD02TS.E_CHANGEJOBNAME.ToString()), }; } if (searchStatus == TypeInsuranceD02TS.E_Dieu_Chinh.ToString()) { lstSearch = new List<string> { TypeInsuranceD02TS.E_Dieu_Chinh.ToString(), GetDescription(TypeInsuranceD02TS.E_DieuChinhGiam.ToString()), GetDescription(TypeInsuranceD02TS.E_DieuChinhTang.ToString()), }; } if (lstSearch.Any()) { lst = lst.Where(p => (p.Comment == null || p.Comment == "") || lstSearch.Contains(p.Comment)).ToList(); } } #endregion return lst; }