diff --git a/Company.Domain/CheckoutAgg/Checkout.cs b/Company.Domain/CheckoutAgg/Checkout.cs index c0f81d4e..eece536d 100644 --- a/Company.Domain/CheckoutAgg/Checkout.cs +++ b/Company.Domain/CheckoutAgg/Checkout.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Security.AccessControl; using _0_Framework.Application; using _0_Framework.Domain; using _0_Framework.Domain.CustomizeCheckoutShared.Enums; @@ -18,19 +19,19 @@ public class Checkout : EntityBase public Checkout(string employeeFullName, string fathersName, string nationalCode, string dateOfBirth, long employeeId, string workshopName, long workshopId, string contractNo, DateTime contractStart, - DateTime contractEnd, string month, string year, long contractId, long workingHoursId, + DateTime contractEnd, string month, string year, long contractId, long workingHoursId, double monthlySalary, double baseYearsPay, double consumableItems, double housingAllowance, double overtimePay, double nightworkPay, double fridayPay, double missionPay, double shiftPay, double familyAllowance, double bonusesPay, double yearsPay, double leavePay, double insuranceDeduction, double taxDeducation, double installmentDeduction, double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays - , string archiveCode, string personnelCode, + , string archiveCode, string personnelCode, string totalClaims, string totalDeductions, double totalPayment, string signature, double marriedAllowance, bool leaveCheckout, double creditLeaves, double absencePeriod, double averageHoursPerDay, bool hasRollCall, string overTimeWorkvalue, 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) { EmployeeFullName = employeeFullName; FathersName = fathersName; @@ -100,7 +101,7 @@ public class Checkout : EntityBase public string Signature { get; private set; } public string FathersName { get; private set; } public string NationalCode { get; private set; } - public string DateOfBirth { get; private set; } + public string DateOfBirth { get; private set; } public long EmployeeId { get; private set; } public string WorkshopName { get; private set; } @@ -136,7 +137,7 @@ public class Checkout : EntityBase public double SalaryAidDeduction { get; private set; } public double AbsenceDeduction { get; private set; } - + public string SumOfWorkingDays { get; private set; } public string ArchiveCode { get; private set; } public string PersonnelCode { get; private set; } @@ -158,63 +159,70 @@ public class Checkout : EntityBase //میانگین ساعت کار در یک روز public double AverageHoursPerDay { get; private set; } public bool HasRollCall { get; private set; } - /// - /// مقدار اضافه کار - /// + /// + /// مقدار اضافه کار + /// public string OverTimeWorkValue { get; private set; } - - /// - /// مقدار شبکاری - /// + + /// + /// مقدار شبکاری + /// public string OverNightWorkValue { get; private set; } - - /// - /// مقدار جمعه کاری - /// - public string FridayWorkValue { get; private set; } - - /// - /// درصد نوبت کاری - /// - public string RotatingShiftValue { get; private set; } - - /// + + /// + /// مقدار جمعه کاری + /// + public string FridayWorkValue { get; private set; } + + /// + /// درصد نوبت کاری + /// + public string RotatingShiftValue { get; private set; } + + /// /// مقدار غیبت /// - public string AbsenceValue { get; private set; } + public string AbsenceValue { get; private set; } - /// - /// تعداد روزهای محاسبه شده برای مزد مرخصی - /// - public string TotalDayOfLeaveCompute { get; private set; } - /// - /// تعداد روزهای محاسبه شده برای سنوات - /// - public string TotalDayOfYearsCompute { get; private set; } - /// - /// تعداد روزهای محاسبه شده برای عیدی و پاداش - /// - public string TotalDayOfBunosesCompute { get; private set; } + /// + /// تعداد روزهای محاسبه شده برای مزد مرخصی + /// + public string TotalDayOfLeaveCompute { get; private set; } + /// + /// تعداد روزهای محاسبه شده برای سنوات + /// + public string TotalDayOfYearsCompute { get; private set; } + /// + /// تعداد روزهای محاسبه شده برای عیدی و پاداش + /// + public string TotalDayOfBunosesCompute { get; private set; } - /// - /// دارای تداخل مبلغ است. این در زمانی اتفاق می افتد که فیش مبلغ آن تغییر کرده ولی به دلیل مسائل قانونی امکان صدور دوباره آن وجود ندارد - /// - public bool HasAmountConflict { get; private set; } + /// + /// دارای تداخل مبلغ است. این در زمانی اتفاق می افتد که فیش مبلغ آن تغییر کرده ولی به دلیل مسائل قانونی امکان صدور دوباره آن وجود ندارد + /// + public bool HasAmountConflict { get; private set; } - /// - /// ساعت موظفی پرسنل در ماه - /// + /// + /// ساعت موظفی پرسنل در ماه + /// public TimeSpan EmployeeMandatoryHours { get; set; } - /// - /// آیا حق بیمه مشابه لیست بیمه حساب شده؟ - /// + /// + /// آیا حق بیمه مشابه لیست بیمه حساب شده؟ + /// public bool HasInsuranceShareTheSameAsList { get; private set; } - - #region valueObjects - public ICollection LoanInstallments { get; set; } = []; - public ICollection SalaryAids { get; set; } = []; + /// + /// آیا فیش نیاز به بروزرسانی دارد + /// + public bool IsUpdateNeeded { get; private set; } + + public List CheckoutWarningMessageList { get; set; } + + #region valueObjects + + public ICollection LoanInstallments { get; set; } = []; + public ICollection SalaryAids { get; set; } = []; public CheckoutRollCall CheckoutRollCall { get; private set; } #endregion @@ -283,7 +291,7 @@ public class Checkout : EntityBase var year = contarctStart.ToFarsiYear(); var sumYear = year.Substring(Math.Max(0, year.Length - 2)); - + ContractNo = archiveCode + "/" + personnelCode + "/" + sumYear + "/" + month; } public void Active() @@ -318,7 +326,7 @@ public class Checkout : EntityBase } - public void SetSalaryAid(ICollection salaryAids,double salaryAidAmount) + public void SetSalaryAid(ICollection salaryAids, double salaryAidAmount) { SalaryAids = salaryAids; SalaryAidDeduction = salaryAidAmount; @@ -336,7 +344,7 @@ public class Checkout : EntityBase public void SetAmountConflict(bool hasAmountConflict) { - HasAmountConflict = hasAmountConflict; + HasAmountConflict = hasAmountConflict; } public void SetEmployeeMandatoryHours(TimeSpan employeeMandatoryHours) @@ -348,23 +356,33 @@ public class Checkout : EntityBase { HasInsuranceShareTheSameAsList = true; } + + /// + /// نیاز به آپدیت + /// + public void SetUpdateNeeded() + { + IsUpdateNeeded = true; + } + + } public class CheckoutRollCall { - private CheckoutRollCall(){} - public CheckoutRollCall(TimeSpan totalMandatoryTimeSpan, TimeSpan totalPresentTimeSpan, TimeSpan totalBreakTimeSpan, - TimeSpan totalWorkingTimeSpan, TimeSpan totalPaidLeaveTmeSpan, TimeSpan totalSickLeaveTimeSpan, - ICollection rollCallDaysCollection) - { - TotalMandatoryTimeSpan = totalMandatoryTimeSpan; - TotalPresentTimeSpan = totalPresentTimeSpan; - TotalBreakTimeSpan = totalBreakTimeSpan; - TotalWorkingTimeSpan = totalWorkingTimeSpan; - TotalPaidLeaveTmeSpan = totalPaidLeaveTmeSpan; - TotalSickLeaveTimeSpan = totalSickLeaveTimeSpan; - RollCallDaysCollection = rollCallDaysCollection; - } + private CheckoutRollCall() { } + public CheckoutRollCall(TimeSpan totalMandatoryTimeSpan, TimeSpan totalPresentTimeSpan, TimeSpan totalBreakTimeSpan, + TimeSpan totalWorkingTimeSpan, TimeSpan totalPaidLeaveTmeSpan, TimeSpan totalSickLeaveTimeSpan, + ICollection rollCallDaysCollection) + { + TotalMandatoryTimeSpan = totalMandatoryTimeSpan; + TotalPresentTimeSpan = totalPresentTimeSpan; + TotalBreakTimeSpan = totalBreakTimeSpan; + TotalWorkingTimeSpan = totalWorkingTimeSpan; + TotalPaidLeaveTmeSpan = totalPaidLeaveTmeSpan; + TotalSickLeaveTimeSpan = totalSickLeaveTimeSpan; + RollCallDaysCollection = rollCallDaysCollection; + } /// @@ -405,27 +423,27 @@ public class CheckoutRollCall public class CheckoutRollCallDay { - private CheckoutRollCallDay(){} - public CheckoutRollCallDay(DateTime date, string firstStartDate, string firstEndDate, - string secondStartDate, string secondEndDate, TimeSpan breakTimeSpan, - bool isSliced, TimeSpan workingTimeSpan, bool isAbsent, bool isFriday, - bool isHoliday, string leaveType) - { - Date = date; - FirstStartDate = firstStartDate; - FirstEndDate = firstEndDate; - SecondStartDate = secondStartDate; - SecondEndDate = secondEndDate; - BreakTimeSpan = breakTimeSpan; - IsSliced = isSliced; - WorkingTimeSpan = workingTimeSpan; - IsAbsent = isAbsent; - IsFriday = isFriday; - IsHoliday = isHoliday; - LeaveType = leaveType; - } + private CheckoutRollCallDay() { } + public CheckoutRollCallDay(DateTime date, string firstStartDate, string firstEndDate, + string secondStartDate, string secondEndDate, TimeSpan breakTimeSpan, + bool isSliced, TimeSpan workingTimeSpan, bool isAbsent, bool isFriday, + bool isHoliday, string leaveType) + { + Date = date; + FirstStartDate = firstStartDate; + FirstEndDate = firstEndDate; + SecondStartDate = secondStartDate; + SecondEndDate = secondEndDate; + BreakTimeSpan = breakTimeSpan; + IsSliced = isSliced; + WorkingTimeSpan = workingTimeSpan; + IsAbsent = isAbsent; + IsFriday = isFriday; + IsHoliday = isHoliday; + LeaveType = leaveType; + } - public long Id { get; set; } + public long Id { get; set; } /// /// تاریخ @@ -469,12 +487,12 @@ public class CheckoutRollCallDay /// /// آیا غیبت است /// - public bool IsAbsent { get; private set; } + public bool IsAbsent { get; private set; } /// /// آیا جمعه است /// - public bool IsFriday { get; private set; } + public bool IsFriday { get; private set; } /// /// آیا تعطیل رسمی است @@ -486,6 +504,6 @@ public class CheckoutRollCallDay /// public string LeaveType { get; private set; } - public long CheckoutId { get; set; } + public long CheckoutId { get; set; } } \ No newline at end of file diff --git a/Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs b/Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs new file mode 100644 index 00000000..4d7d4b3d --- /dev/null +++ b/Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs @@ -0,0 +1,26 @@ +using _0_Framework.Domain; + +namespace Company.Domain.CheckoutAgg; + +public class CheckoutWarningMessage : EntityBaseWithoutCreationDate +{ + public CheckoutWarningMessage(string warningMessage, long checkoutId) + { + WarningMessage = warningMessage; + CheckoutId = checkoutId; + } + + /// + /// پیام هشدار + /// + public string WarningMessage { get; private set; } + + + /// + /// آی دی فیش حقوقی + /// + public long CheckoutId { get; private set; } + + + public Checkout Checkout { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.EFCore/CompanyContext.cs b/CompanyManagment.EFCore/CompanyContext.cs index bc09d18f..30a5d8d8 100644 --- a/CompanyManagment.EFCore/CompanyContext.cs +++ b/CompanyManagment.EFCore/CompanyContext.cs @@ -230,6 +230,8 @@ public class CompanyContext : DbContext #endregion + public DbSet CheckoutWarningMessages { get; set; } + public DbSet CustomizeCheckouts { get; set; } public DbSet CustomizeCheckoutTemps { get; set; } public DbSet TaxLeftWorkItems { get; set; } diff --git a/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs b/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs index e367406f..2ee4df5d 100644 --- a/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs +++ b/CompanyManagment.EFCore/Mapping/CheckoutMapping.cs @@ -50,12 +50,18 @@ class CheckoutMapping : IEntityTypeConfiguration builder.Property(x => x.TotalDayOfLeaveCompute).HasMaxLength(10); builder.Property(x => x.TotalDayOfYearsCompute).HasMaxLength(10); builder.Property(x => x.TotalDayOfBunosesCompute).HasMaxLength(10); + builder.Property(x => x.EmployeeMandatoryHours).HasTimeSpanConversion(); builder.HasOne(x => x.Workshop) .WithMany(x => x.Checkouts) .HasForeignKey(x => x.WorkshopId); + builder.HasMany(x => x.CheckoutWarningMessageList) + .WithOne(x => x.Checkout) + .HasForeignKey(x => x.CheckoutId); + + builder.OwnsMany(x => x.LoanInstallments, installments => { installments.Property(x => x.AmountForMonth).HasMaxLength(25); diff --git a/CompanyManagment.EFCore/Mapping/CheckoutWarningMessageMapping.cs b/CompanyManagment.EFCore/Mapping/CheckoutWarningMessageMapping.cs new file mode 100644 index 00000000..2af85838 --- /dev/null +++ b/CompanyManagment.EFCore/Mapping/CheckoutWarningMessageMapping.cs @@ -0,0 +1,20 @@ +using Company.Domain.CheckoutAgg; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace CompanyManagment.EFCore.Mapping; + +public class CheckoutWarningMessageMapping : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable("CheckoutWarningMessage"); + builder.HasKey(x => x.id); + + builder.Property(x => x.WarningMessage).HasMaxLength(150); + + builder.HasOne(x => x.Checkout) + .WithMany(x => x.CheckoutWarningMessageList) + .HasForeignKey(x => x.CheckoutId); + } +} \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/InsuranceListRepository.cs b/CompanyManagment.EFCore/Repository/InsuranceListRepository.cs index c898e60e..704ce314 100644 --- a/CompanyManagment.EFCore/Repository/InsuranceListRepository.cs +++ b/CompanyManagment.EFCore/Repository/InsuranceListRepository.cs @@ -9,9 +9,11 @@ using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.InfraStructure; using AccountMangement.Infrastructure.EFCore; +using Company.Domain.CheckoutAgg; using Company.Domain.EmployeeAgg; using Company.Domain.EmployeeChildrenAgg; using Company.Domain.EmployeeInsurancListDataAgg; +using Company.Domain.empolyerAgg; using Company.Domain.InsuranceListAgg; using Company.Domain.InsuranceWorkshopAgg; using Company.Domain.InsuranceYearlySalaryAgg; @@ -698,6 +700,11 @@ public class InsuranceListRepository : RepositoryBase, IIns var id = insuranceListObj.id; if (command.EmployeeInsurancListDataList != null && command.EmployeeInsurancListDataList.Count > 0) { + var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month); + + var checkouts = _context.CheckoutSet.Where(x => + x.WorkshopId == command.WorkshopId && x.Year == command.Year && x.Month == farisMonthName && + x.IsActiveString == "true"); foreach (var item in command.EmployeeInsurancListDataList) { var employeeInsurancListData = new EmployeeInsurancListData(id, @@ -711,6 +718,24 @@ public class InsuranceListRepository : RepositoryBase, IIns item.LeftWorkDate, item.JobId, item.IncludeStatus, item.BaseYears, item.MarriedAllowance, item.OverTimePay, item.FamilyAllowance); _employeeInsurancListDataRepository.Create(employeeInsurancListData); + if (checkouts.Any()) + { + var checkout = checkouts.FirstOrDefault(x => x.EmployeeId == item.EmployeeId); + if (checkout != null) + { + if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney()) + { + checkout.SetUpdateNeeded(); + var createWarrning = + new CheckoutWarningMessage( + "مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id); + _context.CheckoutWarningMessages.Add(createWarrning); + _context.SaveChanges(); + } + } + + } + } _employeeInsurancListDataRepository.SaveChanges(); diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index bf46f1d7..7e3431e0 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -356,6 +356,7 @@ else app.UseExceptionHandler(options => { }); // این خط CustomExceptionHandler رو فعال می‌کنه app.UseRouting(); +app.UseWebSockets(); app.UseAuthentication(); app.UseAuthorization();