diff --git a/Company.Domain/CheckoutAgg/Checkout.cs b/Company.Domain/CheckoutAgg/Checkout.cs index eece536d..5c70437c 100644 --- a/Company.Domain/CheckoutAgg/Checkout.cs +++ b/Company.Domain/CheckoutAgg/Checkout.cs @@ -31,7 +31,7 @@ public class Checkout : EntityBase string overNightWorkValue, string fridayWorkValue, string rotatingShifValue, string absenceValue, string totalDayOfLeaveCompute, string totalDayOfYearsCompute, string totalDayOfBunosesCompute, ICollection loanInstallments, - ICollection salaryAids, CheckoutRollCall checkoutRollCall, TimeSpan employeeMandatoryHours, bool hasInsuranceShareTheSameAsList) + ICollection salaryAids, CheckoutRollCall checkoutRollCall, TimeSpan employeeMandatoryHours, bool hasInsuranceShareTheSameAsList, ICollection rewards,double rewardPay) { EmployeeFullName = employeeFullName; FathersName = fathersName; @@ -71,7 +71,7 @@ public class Checkout : EntityBase TotalClaims = totalClaims; TotalDeductions = totalDeductions; TotalPayment = totalPayment; - RewardPay = 0; + RewardPay = rewardPay; IsActiveString = "true"; Signature = signature; MarriedAllowance = marriedAllowance; @@ -93,6 +93,7 @@ public class Checkout : EntityBase CheckoutRollCall = checkoutRollCall; EmployeeMandatoryHours = employeeMandatoryHours; HasInsuranceShareTheSameAsList = hasInsuranceShareTheSameAsList; + Rewards = rewards; } @@ -130,7 +131,7 @@ public class Checkout : EntityBase public double BonusesPay { get; private set; } public double YearsPay { get; private set; } public double LeavePay { get; private set; } - public double? RewardPay { get; private set; } + public double RewardPay { get; private set; } public double InsuranceDeduction { get; private set; } public double TaxDeducation { get; private set; } public double InstallmentDeduction { get; private set; } @@ -223,6 +224,8 @@ public class Checkout : EntityBase public ICollection LoanInstallments { get; set; } = []; public ICollection SalaryAids { get; set; } = []; + + public ICollection Rewards { get; set; } = []; public CheckoutRollCall CheckoutRollCall { get; private set; } #endregion @@ -239,7 +242,7 @@ public class Checkout : EntityBase double insuranceDeduction, double taxDeducation, double installmentDeduction, double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays , string archiveCode, string personnelCode, - string totalClaims, string totalDeductions, double totalPayment, double? rewardPay) + string totalClaims, string totalDeductions, double totalPayment, double rewardPay) { EmployeeFullName = employeeFullName; FathersName = fathersName; @@ -337,6 +340,11 @@ public class Checkout : EntityBase InstallmentDeduction = installmentsAmount; } + public void SetReward(ICollection rewards, double rewardAmount) + { + RewardPay = rewardAmount; + Rewards = rewards; + } public void SetCheckoutRollCall(CheckoutRollCall checkoutRollCall) { CheckoutRollCall = checkoutRollCall; diff --git a/Company.Domain/CheckoutAgg/ValueObjects/CheckoutReward.cs b/Company.Domain/CheckoutAgg/ValueObjects/CheckoutReward.cs new file mode 100644 index 00000000..34ed8d2a --- /dev/null +++ b/Company.Domain/CheckoutAgg/ValueObjects/CheckoutReward.cs @@ -0,0 +1,56 @@ +using System; + +namespace Company.Domain.CheckoutAgg.ValueObjects; + +public class CheckoutReward +{ + public CheckoutReward(string amount, double amountDouble, string grantDateFa, DateTime grantDateGr, string description, string title) + { + Amount = amount; + AmountDouble = amountDouble; + GrantDateFa = grantDateFa; + GrantDateGr = grantDateGr; + Description = description; + Title = title; + } + + /// + /// مبلغ پاداش + /// string + /// + public string Amount { get; set; } + + /// + /// مبلغ پاداش + /// double + /// + public double AmountDouble { get; set; } + + /// + /// تاریخ اعطاء + /// شمسی + /// + public string GrantDateFa { get; set; } + + /// + /// تاریخ اعطاء + /// میلادی + /// + public DateTime GrantDateGr { get; set; } + + /// + /// توضیحات + /// + public string Description { get; set; } + + /// + /// عنوان + /// + public string Title { get; set; } + + + /// + /// آی دی پاداش + /// + public long EntityId { get; set; } +} \ No newline at end of file diff --git a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs index 9d501157..f7bec585 100644 --- a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs +++ b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs @@ -1,15 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using _0_Framework.Domain; +using _0_Framework.Domain; using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities; using CompanyManagment.App.Contracts.Contract; using CompanyManagment.App.Contracts.CustomizeCheckout; using CompanyManagment.App.Contracts.Leave; using CompanyManagment.App.Contracts.Loan; +using CompanyManagment.App.Contracts.Reward; using CompanyManagment.App.Contracts.RollCall; using CompanyManagment.App.Contracts.SalaryAid; using CompanyManagment.App.Contracts.WorkingHoursTemp; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; namespace Company.Domain.RollCallAgg; @@ -53,6 +54,9 @@ public interface IRollCallMandatoryRepository : IRepository List SalaryAidsForCheckout(long employeeId, long workshopId, DateTime checkoutStart, DateTime checkoutEnd); + List RewardForCheckout(long employeeId, long workshopId, DateTime checkoutEnd, + DateTime checkoutStart); + Task RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command,bool holidayWorking); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs b/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs index 57f9691c..100b7116 100644 --- a/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs +++ b/CompanyManagment.App.Contracts/Checkout/CreateCheckout.cs @@ -193,4 +193,9 @@ public class CreateCheckout /// پایه سنوات قبل از تاثیر ساعت کار /// public double BaseYearUnAffected { get; set; } + + /// + /// آیا برای محاسبه پاداش مجاز است + /// + public bool RewardPayCompute { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs b/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs index 98355cbc..5414c4ce 100644 --- a/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs +++ b/CompanyManagment.App.Contracts/Workshop/CreateWorkshop.cs @@ -151,6 +151,9 @@ public class CreateWorkshop /// تصفیه حساب بصورت استاتیک محاصبه شود /// public bool IsStaticCheckout { get; set; } - + /// + /// آیا پاداش در فیش حقوقی محاسبه شود + /// + public bool RewardComputeOnCheckout { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 8768f70e..195c498f 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -240,6 +240,16 @@ public class CheckoutApplication : ICheckoutApplication command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); + var rewards = new List(); + double rewardPay = 0; + if (command.RewardPayCompute) + { + rewards = _rollCallMandatoryRepository.RewardForCheckout(command.EmployeeId, command.WorkshopId, checkoutStart.ToGeorgianDateTime(), checkoutEnd.ToGeorgianDateTime()) + .Select(x => new CheckoutReward(x.Amount, x.AmountDouble, x.GrantDateFa, x.GrantDateGr, x.Description, x.Title)).ToList(); + + rewardPay = rewards.Sum(x => x.AmountDouble); + } + @@ -361,7 +371,7 @@ public class CheckoutApplication : ICheckoutApplication var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + command.OvertimePay + - command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay; + command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay + rewardPay; var totalClaims = totalClaimsDouble.ToMoney(); var totalDeductionDouble = insuranceDeduction + command.AbsenceDeduction + command.InstallmentDeduction + command.SalaryAidDeduction; var totalDeductions = totalDeductionDouble.ToMoney(); @@ -386,7 +396,7 @@ public class CheckoutApplication : ICheckoutApplication , command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays, command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue , command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute, - loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList); + loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList, rewards, rewardPay); _checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult(); //_checkoutRepository.SaveChanges(); diff --git a/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs b/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs index 2ee4df5d..abed1561 100644 --- a/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs +++ b/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs @@ -34,7 +34,7 @@ class CheckoutMapping : IEntityTypeConfiguration builder.Property(x => x.FamilyAllowance); builder.Property(x => x.HousingAllowance); builder.Property(x => x.ConsumableItems); - builder.Property(x => x.RewardPay).HasColumnType("float").IsRequired(false); + builder.Property(x => x.RewardPay); builder.Property(x => x.LeaveCheckout); builder.Property(x => x.CreditLeaves); @@ -82,6 +82,13 @@ class CheckoutMapping : IEntityTypeConfiguration salaryAid.Property(x => x.CalculationDateTimeFa).HasMaxLength(15); }); + + builder.OwnsMany(x => x.Rewards, reward => + { + reward.Property(x => x.Description).HasColumnType("ntext"); + reward.Property(x => x.Title).HasMaxLength(255); + }); + builder.OwnsOne(x => x.CheckoutRollCall, rollCall => { rollCall.Property(x => x.TotalPresentTimeSpan).HasTimeSpanConversion(); diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index a78ff18e..8562dfc0 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -531,6 +531,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos entity.SetSalaryAid(command.SalaryAids, command.SalaryAidDeduction); entity.SetLoanInstallment(command.LoanInstallments, command.InstallmentDeduction); + entity.SetReward(command.Rewards,command.RewardPay); entity.SetCheckoutRollCall(command.CheckoutRollCall); entity.SetEmployeeMandatoryHours(command.EmployeeMandatoryHours); if(command.HasInsuranceShareTheSameAsList) @@ -934,7 +935,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos TotalClaims = item.TotalClaims, TotalDeductions = item.TotalDeductions, TotalPayment = item.TotalPayment.ToMoney(), - RewardPay = item.RewardPay.ToMoneyNullable(), + RewardPay = item.RewardPay.ToMoney(), ContractStartGr = item.ContractStart, ContractEndGr = item.ContractEnd, IsLeft = false, @@ -1335,7 +1336,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos TotalClaims = x.TotalClaims, TotalDeductions = x.TotalDeductions, TotalPayment = x.TotalPayment.ToMoney(), - RewardPay = x.RewardPay.ToMoneyNullable(), + RewardPay = x.RewardPay.ToMoney(), ContractStartGr = x.ContractStart, ContractEndGr = x.ContractEnd, IsLeft = false, diff --git a/CompanyManagment.EFCore/Repository/ReportClientRepository.cs b/CompanyManagment.EFCore/Repository/ReportClientRepository.cs index 95097841..420e3109 100644 --- a/CompanyManagment.EFCore/Repository/ReportClientRepository.cs +++ b/CompanyManagment.EFCore/Repository/ReportClientRepository.cs @@ -74,7 +74,7 @@ public class ReportClientRepository : IReportClientRepository TotalClaims = x.TotalClaims, TotalDeductions = x.TotalDeductions, TotalPayment = x.TotalPayment.ToMoney(), - RewardPay = x.RewardPay.ToMoneyNullable(), + RewardPay = x.RewardPay.ToMoney(), MarriedAllowance = x.MarriedAllowance.ToMoney(), }).Where(x => x.WorkshopId == workshopId); @@ -448,7 +448,7 @@ public class ReportClientRepository : IReportClientRepository TotalClaims = x.TotalClaims, TotalDeductions = x.TotalDeductions, TotalPayment = x.TotalPayment.ToMoney(), - RewardPay = x.RewardPay.ToMoneyNullable(), + RewardPay = x.RewardPay.ToMoney(), MarriedAllowance = x.MarriedAllowance.ToMoney(), }).Where(x => x.WorkshopId == workshopId); diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 904ce85f..f95ddf34 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -5199,7 +5199,7 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll }; } - private List RewardForCheckout(long employeeId, long workshopId, DateTime checkoutEnd, + public List RewardForCheckout(long employeeId, long workshopId, DateTime checkoutEnd, DateTime checkoutStart) { return _context.Rewards.Where(x => diff --git a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs index 30a06a9f..1ac925f0 100644 --- a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs +++ b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs @@ -160,7 +160,9 @@ public class WorkshopRepository : RepositoryBase x.WorkshopId == id) - .Select(x => x.EmployerId).ToList(); + .Select(x => x.Employer).ToList(); + var contractingPart = emp.Select(x => x.ContractingPartyId).ToList(); + bool rewardCompute = contractingPart.Any(x=>x == 30804); return _context.Workshops.Select(x => new EditWorkshop { Id = x.id, @@ -193,7 +195,7 @@ public class WorkshopRepository : RepositoryBasee.id).ToList(), HasRollCallFreeVip = x.HasRollCallFreeVip, WorkshopHolidayWorking = x.WorkshopHolidayWorking, InsuranceCheckoutOvertime = x.InsuranceCheckoutOvertime, @@ -205,6 +207,7 @@ public class WorkshopRepository : RepositoryBase x.Id == id); } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index 3bfd5afa..677ec096 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -794,7 +794,8 @@ public class IndexModel : PageModel watch.Stop(); #endregion - + var firstContract = _contractApplication.GetDetails(ContractsId[0]); + var workshop = _workshopApplication.GetDetails(firstContract.WorkshopIds); //int i = 0; foreach (var item in ContractsId) @@ -809,7 +810,7 @@ public class IndexModel : PageModel if (separation.checker) { //workshopInfo - var workshop = _workshopApplication.GetDetails(contract.WorkshopIds); + var employeeOptions = _employeeComputeOptionsApplication.GetAllByWorkshopId(contract.WorkshopIds); @@ -1212,7 +1213,7 @@ public class IndexModel : PageModel #endregion - + RewardPayCompute = workshop.RewardComputeOnCheckout, }; _checkoutApplication.Create(command);