add loan and salaryAid to checkout

This commit is contained in:
MahanCh
2025-04-23 17:06:12 +03:30
parent dc39f30c21
commit 7f900755be
10 changed files with 9766 additions and 73 deletions

View File

@@ -296,4 +296,16 @@ public class Checkout : EntityBase
this.TotalDeductions = totalDeductions;
this.TotalPayment = totalPayment;
}
public void SetSalaryAid(ICollection<CheckoutSalaryAid> salaryAids,double salaryAidAmount)
{
SalaryAids = salaryAids;
SalaryAidDeduction = salaryAidAmount;
}
public void SetLoanInstallment(ICollection<CheckoutLoanInstallment> lonaInstallments, double installmentsAmount)
{
LoanInstallments = lonaInstallments;
InstallmentDeduction = installmentsAmount;
}
}

View File

@@ -5,7 +5,9 @@ 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.RollCall;
using CompanyManagment.App.Contracts.SalaryAid;
using CompanyManagment.App.Contracts.WorkingHoursTemp;
namespace Company.Domain.RollCallAgg;
@@ -22,4 +24,10 @@ public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
List<LateToWorkEarlyExistSpannig> LateToWorkEarlyExit(List<GroupedRollCalls> groupedRollCall,
ICollection<CustomizeWorkshopEmployeeSettingsShift> shiftSettings, List<LeaveViewModel> leavList);
List<LoanInstallmentViewModel> GetCheckoutLoanInstallments(long employeeId, long workshopId, DateTime contractStart,
DateTime contractEnd);
List<SalaryAidViewModel> GetCheckoutSalaryAids(long employeeId, long workshopId, DateTime checkoutStart,
DateTime checkoutEnd);
}

View File

@@ -40,20 +40,5 @@ public class ComputingViewModel
public List<RotatingShiftViewModel> RotatingResultList { get; set; }
/// <summary>
/// مساعده
/// </summary>
public double SalaryAidDeduction { get; set; }
/// <summary>
/// قسط وام
/// </summary>
public double InstallmentDeduction { get; set; }
public List<LoanInstallmentViewModel> InstallmentViewModels { get; set; }
public List<SalaryAidViewModel> SalaryAidViewModels { get; set; }
//public List<string> holidays;
}

View File

@@ -5,9 +5,11 @@ using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using Company.Domain.CheckoutAgg;
using Company.Domain.CheckoutAgg.ValueObjects;
using Company.Domain.LeftWorkAgg;
using Company.Domain.YearlySalaryAgg;
using Company.Domain.empolyerAgg;
using Company.Domain.RollCallAgg;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.Leave;
@@ -24,11 +26,12 @@ public class CheckoutApplication : ICheckoutApplication
private readonly IPersonalContractingPartyApp _contractingPartyApp;
private readonly ILeaveApplication _leaveApplication;
private readonly IMandatoryHoursApplication _mandatoryHoursApplication;
private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository;
public CheckoutApplication(ICheckoutRepository checkoutRepository, IYearlySalaryRepository yearlySalaryRepository,
ILeftWorkRepository leftWorkRepository,
IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication)
IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository)
{
_checkoutRepository = checkoutRepository;
_yearlySalaryRepository = yearlySalaryRepository;
@@ -37,6 +40,7 @@ public class CheckoutApplication : ICheckoutApplication
_contractingPartyApp = contractingPartyApp;
_leaveApplication = leaveApplication;
_mandatoryHoursApplication = mandatoryHoursApplication;
_rollCallMandatoryRepository = rollCallMandatoryRepository;
}
[SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")]
@@ -177,13 +181,29 @@ public class CheckoutApplication : ICheckoutApplication
{
command.Signature = "0";
}
var checkoutStart = $"{command.Year}/{command.Month}/01";
var checkoutEnd = checkoutStart.FindeEndOfMonth();
var salaryAids =
_rollCallMandatoryRepository.GetCheckoutSalaryAids(command.EmployeeId, command.WorkshopId,checkoutStart.ToGeorgianDateTime(),checkoutEnd.ToGeorgianDateTime())
.Select(x=> new CheckoutSalaryAid(x.Amount,x.SalaryAidDateTimeGe,x.SalaryAidDateTimeFa,x.CalculationDateTimeGe,x.CalculationDateTimeFa)).ToList();
command.SalaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble());
var loanInstallments = _rollCallMandatoryRepository.GetCheckoutLoanInstallments(command.EmployeeId,
command.WorkshopId, command.ContractStartGr, command.ContractEndGr)
.Select(x=>new CheckoutLoanInstallment(x.Amount,x.Month,x.Year,x.IsActive,x.RemainingAmount,x.LoanAmount)).ToList();
command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble());
var checkout = new Checkout(command.EmployeeFullName, command.FathersName ,command.NationalCode
, command.DateOfBirth, command.EmployeeId, command.WorkshopName, command.WorkshopId, command.ContractNo, command.ContractStartGr, command.ContractEndGr, month, year,
command.ContractId, command.WorkingHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance
, command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, 0, 0, command.AbsenceDeduction, sumOfWorkingDays,
, 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);
,command.FridayWorkValue, command.RotatingShiftValue,command.AbsenceValue,command.TotalDayOfLeaveCompute,command.TotalDayOfYearsCompute,command.TotalDayOfBunosesCompute,loanInstallments, salaryAids);
_checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult();
//_checkoutRepository.SaveChanges();

View File

@@ -1,4 +1,6 @@
using Company.Domain.CheckoutAgg;
using System;
using _0_Framework.Application;
using Company.Domain.CheckoutAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
@@ -52,5 +54,24 @@ class CheckoutMapping : IEntityTypeConfiguration<Checkout>
.WithMany(x => x.Checkouts)
.HasForeignKey(x => x.WorkshopId);
builder.OwnsMany(x => x.LoanInstallments, installments =>
{
installments.Property(x => x.AmountForMonth).HasMaxLength(25);
installments.Property(x => x.IsActive).HasConversion(
v => v.ToString(),
v => (IsActive)Enum.Parse(typeof(IsActive), v)).HasMaxLength(5);
installments.Property(x => x.Year).HasMaxLength(4);
installments.Property(x => x.Month).HasMaxLength(2);
installments.Property(x => x.LoanRemaining).HasMaxLength(25);
installments.Property(x => x.LoanAmount).HasMaxLength(30);
});
builder.OwnsMany(x => x.SalaryAids, salaryAid =>
{
salaryAid.Property(x => x.SalaryAidDateTimeFa).HasMaxLength(15);
salaryAid.Property(x => x.Amount).HasMaxLength(25);
salaryAid.Property(x => x.CalculationDateTimeFa).HasMaxLength(15);
});
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,74 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class addsalaryAidandloantocheckout : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "CheckoutLoanInstallment",
columns: table => new
{
Checkoutid = table.Column<long>(type: "bigint", nullable: false),
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
AmountForMonth = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
Month = table.Column<string>(type: "nvarchar(2)", maxLength: 2, nullable: true),
Year = table.Column<string>(type: "nvarchar(4)", maxLength: 4, nullable: true),
LoanRemaining = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
IsActive = table.Column<string>(type: "nvarchar(5)", maxLength: 5, nullable: false),
LoanAmount = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CheckoutLoanInstallment", x => new { x.Checkoutid, x.Id });
table.ForeignKey(
name: "FK_CheckoutLoanInstallment_Checkouts_Checkoutid",
column: x => x.Checkoutid,
principalTable: "Checkouts",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "CheckoutSalaryAid",
columns: table => new
{
Checkoutid = table.Column<long>(type: "bigint", nullable: false),
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Amount = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
SalaryAidDateTime = table.Column<DateTime>(type: "datetime2", nullable: false),
SalaryAidDateTimeFa = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
CalculationDateTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CalculationDateTimeFa = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_CheckoutSalaryAid", x => new { x.Checkoutid, x.Id });
table.ForeignKey(
name: "FK_CheckoutSalaryAid_Checkouts_Checkoutid",
column: x => x.Checkoutid,
principalTable: "Checkouts",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "CheckoutLoanInstallment");
migrationBuilder.DropTable(
name: "CheckoutSalaryAid");
}
}
}

View File

@@ -5987,6 +5987,91 @@ namespace CompanyManagment.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.OwnsMany("Company.Domain.CheckoutAgg.ValueObjects.CheckoutLoanInstallment", "LoanInstallments", b1 =>
{
b1.Property<long>("Checkoutid")
.HasColumnType("bigint");
b1.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<int>("Id"));
b1.Property<string>("AmountForMonth")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b1.Property<string>("IsActive")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b1.Property<string>("LoanAmount")
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
b1.Property<string>("LoanRemaining")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b1.Property<string>("Month")
.HasMaxLength(2)
.HasColumnType("nvarchar(2)");
b1.Property<string>("Year")
.HasMaxLength(4)
.HasColumnType("nvarchar(4)");
b1.HasKey("Checkoutid", "Id");
b1.ToTable("CheckoutLoanInstallment");
b1.WithOwner()
.HasForeignKey("Checkoutid");
});
b.OwnsMany("Company.Domain.CheckoutAgg.ValueObjects.CheckoutSalaryAid", "SalaryAids", b1 =>
{
b1.Property<long>("Checkoutid")
.HasColumnType("bigint");
b1.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<int>("Id"));
b1.Property<string>("Amount")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b1.Property<DateTime>("CalculationDateTime")
.HasColumnType("datetime2");
b1.Property<string>("CalculationDateTimeFa")
.HasMaxLength(15)
.HasColumnType("nvarchar(15)");
b1.Property<DateTime>("SalaryAidDateTime")
.HasColumnType("datetime2");
b1.Property<string>("SalaryAidDateTimeFa")
.HasMaxLength(15)
.HasColumnType("nvarchar(15)");
b1.HasKey("Checkoutid", "Id");
b1.ToTable("CheckoutSalaryAid");
b1.WithOwner()
.HasForeignKey("Checkoutid");
});
b.Navigation("LoanInstallments");
b.Navigation("SalaryAids");
b.Navigation("Workshop");
});

View File

@@ -104,8 +104,13 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
.SqlQuery<long>(
$"EXEC InsertQuery_CreateChekoute {command.EmployeeFullName},{"true"},{command.Signature},{command.FathersName},{command.NationalCode},{command.DateOfBirth},{command.EmployeeId},{command.WorkshopName},{command.WorkshopId},{command.ContractNo},{command.ContractStart},{command.ContractEnd},{command.Month},{command.Year},{command.ContractId},{command.WorkingHoursId},{command.MonthlySalary},{command.BaseYearsPay},{command.ConsumableItems},{command.HousingAllowance},{command.OvertimePay},{command.NightworkPay},{command.FridayPay},{command.MissionPay},{command.ShiftPay},{command.FamilyAllowance},{command.BonusesPay},{command.YearsPay},{command.LeavePay},{command.InsuranceDeduction},{command.TaxDeducation},{command.InstallmentDeduction},{command.SalaryAidDeduction},{command.AbsenceDeduction},{creationDates},{command.ArchiveCode},{command.PersonnelCode},{command.SumOfWorkingDays},{command.TotalClaims},{command.TotalDeductions},{command.TotalPayment},{0},{command.MarriedAllowance},{command.AbsencePeriod},{command.AverageHoursPerDay},{command.CreditLeaves},{command.LeaveCheckout},{command.HasRollCall},{command.OverTimeWorkValue},{command.OverNightWorkValue},{command.FridayWorkValue},{command.RotatingShiftValue},{command.AbsenceValue}, {command.TotalDayOfLeaveCompute},{command.TotalDayOfYearsCompute},{command.TotalDayOfBunosesCompute}")
.AsEnumerable())// این قسمت مهمه!
.FirstOrDefault();
Console.WriteLine(result);
.FirstOrDefault();
var entity = await _context.CheckoutSet.FirstOrDefaultAsync(x => x.id == result);
entity.SetSalaryAid(command.SalaryAids,command.SalaryAidDeduction);
entity.SetLoanInstallment(command.LoanInstallments,command.InstallmentDeduction);
await _context.SaveChangesAsync();
}

View File

@@ -557,34 +557,6 @@ CreateWorkingHoursTemp command, bool holidayWorking)
#endregion
#region SalaryAidDeduction
var salaryAidViewModel = GetCheckoutSalaryAids(employeeId, workshopId, contractStart, contractEnd);
double salaryAidDeduction = salaryAidViewModel.Sum(x => x.AmountDouble);
#endregion
#region Loan
var loanInstallments = _context.Loans
.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId)
.SelectMany(x => x.LoanInstallments)
.Where(i => i.InstallmentDate > contractStart && i.InstallmentDate < contractEnd && i.IsActive == IsActive.True)
.Select(x => new LoanInstallmentViewModel()
{
Month = x.Month,
IsActive = x.IsActive,
Amount = x.AmountForMonth.ToMoney(),
Year = x.Year,
AmountDouble = x.AmountForMonth,
RemainingAmount = _context.Loans.SelectMany(l => l.LoanInstallments).Where(i => i.LoanId == x.LoanId && i.IsActive == IsActive.True && i.InstallmentDate > x.InstallmentDate)
.Sum(i => i.AmountForMonth).ToMoney()
}).ToList();
double loanDeduction = loanInstallments.Sum(x => x.AmountDouble);
#endregion
#region Result
@@ -617,10 +589,6 @@ CreateWorkingHoursTemp command, bool holidayWorking)
DayliFeeComplete = dayliFeeComplete,
MarriedAllowance = MarriedAllowanceStr,
RotatingShiftValue = shiftPayValue,
InstallmentDeduction = loanDeduction,
InstallmentViewModels = loanInstallments,
SalaryAidDeduction = salaryAidDeduction,
SalaryAidViewModels = salaryAidViewModel
};
#endregion
@@ -2111,23 +2079,7 @@ CreateWorkingHoursTemp command, bool holidayWorking)
#region Loan
var loanInstallments = _context.Loans
.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId)
.SelectMany(x => x.LoanInstallments)
.Where(i => i.InstallmentDate >= contractStart && i.InstallmentDate <= contractEnd &&
i.IsActive == IsActive.True)
.Select(x => new LoanInstallmentViewModel()
{
Month = x.Month,
IsActive = x.IsActive,
Amount = x.AmountForMonth.ToMoney(),
Year = x.Year,
AmountDouble = x.AmountForMonth,
RemainingAmount = _context.Loans.SelectMany(l => l.LoanInstallments).Where(i =>
i.LoanId == x.LoanId && i.IsActive == IsActive.True && i.InstallmentDate > x.InstallmentDate)
.Sum(i => i.AmountForMonth).ToMoney(),
LoanAmount = _context.Loans.FirstOrDefault(l => l.id == x.LoanId).Amount.ToMoney()
}).ToList();
var loanInstallments = GetCheckoutLoanInstallments(employeeId, workshopId, contractStart, contractEnd);
double loanDeduction = loanInstallments.Sum(x => x.AmountDouble);
@@ -2629,6 +2581,7 @@ CreateWorkingHoursTemp command, bool holidayWorking)
};
}
private CustomizeCheckoutMandatoryViewModel CheckoutWithoutCalculationForKebabMahdi(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd)
{
var firstDayOfMonth = $"{(contractStart.ToFarsi())[..8]}/01".ToGeorgianDateTime();
@@ -2732,10 +2685,32 @@ CreateWorkingHoursTemp command, bool holidayWorking)
};
}
private List<SalaryAidViewModel> GetCheckoutSalaryAids(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
public List<LoanInstallmentViewModel> GetCheckoutLoanInstallments(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
{
var loanInstallments = _context.Loans
.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId)
.SelectMany(x => x.LoanInstallments)
.Where(i => i.InstallmentDate >= contractStart && i.InstallmentDate <= contractEnd &&
i.IsActive == IsActive.True)
.Select(x => new LoanInstallmentViewModel()
{
Month = x.Month,
IsActive = x.IsActive,
Amount = x.AmountForMonth.ToMoney(),
Year = x.Year,
AmountDouble = x.AmountForMonth,
RemainingAmount = _context.Loans.SelectMany(l => l.LoanInstallments).Where(i =>
i.LoanId == x.LoanId && i.IsActive == IsActive.True && i.InstallmentDate > x.InstallmentDate)
.Sum(i => i.AmountForMonth).ToMoney(),
LoanAmount = _context.Loans.FirstOrDefault(l => l.id == x.LoanId).Amount.ToMoney()
}).ToList();
return loanInstallments;
}
public List<SalaryAidViewModel> GetCheckoutSalaryAids(long employeeId, long workshopId, DateTime checkoutStart, DateTime checkoutEnd)
{
var salaryAidViewModel = _context.SalaryAids
.Where(x => x.SalaryAidDateTime >= contractStart && x.SalaryAidDateTime <= contractEnd && x.EmployeeId == employeeId && x.WorkshopId == workshopId).Select(x => new SalaryAidViewModel()
.Where(x => x.SalaryAidDateTime >= checkoutStart && x.SalaryAidDateTime <= checkoutEnd && x.EmployeeId == employeeId && x.WorkshopId == workshopId).Select(x => new SalaryAidViewModel()
{
Amount = x.Amount.ToMoney(),
AmountDouble = x.Amount,