From 1a70569a36e26b2ec64ba5aa743793e4b423203a Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 23 Oct 2025 11:44:12 +0330 Subject: [PATCH] feat: implement amendment completion functionality with payment details --- .../IInstitutionContractRepository.cs | 1 + .../InstitutionContract.cs | 9 +++- .../InstitutionContractAmendmentTemp.cs | 15 ++++++ .../IInstitutionContractApplication.cs | 5 +- .../InstitutionContractApplication.cs | 4 +- .../InstitutionContractRepository.cs | 47 ++++++++++++++++++- .../institutionContractController.cs | 8 ++-- 7 files changed, 80 insertions(+), 9 deletions(-) diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index d1ebe6dd..cec1b650 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -75,4 +75,5 @@ public interface IInstitutionContractRepository : IRepository> GetInstitutionContractSelectList(string search, string selected); + Task AmendmentComplete(InstitutionContractAmendmentCompleteRequest request); } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs index 84535d30..43ddc15e 100644 --- a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs +++ b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs @@ -248,6 +248,11 @@ public class InstitutionContract : EntityBase { WorkshopGroup = null; } + + public void AddAmendment(InstitutionContractAmendment amendment) + { + Amendments.Add(amendment); + } } public class InstitutionContractAmendment : EntityBase @@ -255,13 +260,13 @@ public class InstitutionContractAmendment : EntityBase private InstitutionContractAmendment(){} public InstitutionContractAmendment(long institutionContractId, List installments, double amount, bool hasInstallment, - InstitutionContractAmendmentChange amendmentChange, long lawId) + List amendmentChanges, long lawId) { InstitutionContractId = institutionContractId; Installments = installments is { Count: > 0} ? installments : []; Amount = amount; HasInstallment = hasInstallment; - AmendmentChanges = [amendmentChange]; + AmendmentChanges = amendmentChanges; LawId = lawId; } diff --git a/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs b/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs index bac4cd56..e3d8a4c9 100644 --- a/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs +++ b/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using CompanyManagment.App.Contracts.InstitutionContract; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; @@ -25,7 +26,21 @@ public class InstitutionContractAmendmentTemp public Guid Id { get; private set; } public List PrevWorkshops { get; private set; } public List NewWorkshops { get; private set; } + + public InstitutionContractPaymentMonthlyViewModel MonthlyPayment { get; set; } + + public InstitutionContractPaymentOneTimeViewModel OneTimePayment { get; set; } + public long InstitutionContractId { get; private set; } + + public int MonthDifference { get; set; } + public void AddPaymentDetails(InstitutionContractPaymentMonthlyViewModel resMonthly, InstitutionContractPaymentOneTimeViewModel resOneTime, int monthDiff) + { + MonthlyPayment = resMonthly; + OneTimePayment = resOneTime; + MonthDifference = monthDiff; + } + } public class InstitutionContractAmendmentTempNewWorkshop : InstitutionContractAmendmentTempPrevWorkshop diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 58d0508e..75e0fa60 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -241,11 +241,14 @@ public interface IInstitutionContractApplication #endregion Task ResendVerifyLink(long institutionContractId); - Task AmendmentComplete(InstitutionContractAmendmentCompleteRequest request); + Task AmendmentComplete(InstitutionContractAmendmentCompleteRequest request); } public class InstitutionContractAmendmentCompleteRequest { + public Guid TempId { get; set; } + public bool IsInstallment { get; set; } + public long LawId { get; set; } } public class InsertAmendmentTempWorkshopResponse diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index df910f4e..80ddf3e6 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1377,9 +1377,9 @@ public class InstitutionContractApplication : IInstitutionContractApplication return new OperationResult().Succcedded(); } - public Task AmendmentComplete(InstitutionContractAmendmentCompleteRequest request) + public async Task AmendmentComplete(InstitutionContractAmendmentCompleteRequest request) { - throw new NotImplementedException(); + await _institutionContractRepository.AmendmentComplete(request); } diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 4452dd3d..49315494 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -2451,7 +2451,8 @@ public class InstitutionContractRepository : RepositoryBase startDay) monthDiff++; - var sumOneMonth = institutionContractAmendmentTemp.NewWorkshops.Sum(x => x.PriceDifference); + var sumOneMonth = institutionContractAmendmentTemp + .NewWorkshops.Sum(x => x.PriceDifference); var baseAmount = monthDiff * sumOneMonth; var tax = baseAmount*0.10; @@ -2510,6 +2511,13 @@ public class InstitutionContractRepository : RepositoryBase x.Id == institutionContractAmendmentTemp.Id, institutionContractAmendmentTemp); + + + return res; } @@ -2654,6 +2662,43 @@ public class InstitutionContractRepository : RepositoryBasex.Id == request.TempId).FirstOrDefaultAsync(); + + if (amendmentTemp == null) + throw new BadRequestException("دیتای وارد شده نامعتبر است"); + + var institutionContract = await _context.InstitutionContractSet + .Include(x=>x.Amendments) + .Include(x=>x.WorkshopGroup) + .ThenInclude(x=>x.CurrentWorkshops) + .FirstOrDefaultAsync(x => x.id == amendmentTemp.InstitutionContractId); + + + List installments = []; + double amount = 0; + if (request.IsInstallment) + { + installments = amendmentTemp.MonthlyPayment.Installments.Select(x=> + new InstitutionContractInstallment(x.InstalmentDate.ToGeorgianDateTime(), + x.InstallmentAmountStr.MoneyToDouble(), "")).ToList(); + amount = amendmentTemp.MonthlyPayment.PaymentAmount.MoneyToDouble(); + } + else + { + amount = amendmentTemp.OneTimePayment.PaymentAmount.MoneyToDouble(); + } + var newWorkshops = amendmentTemp.NewWorkshops.Where(x=>x.CurrentWorkshopId ==0).ToList(); + + + var amendment = new InstitutionContractAmendment(institutionContract.id,installments,amount, + request.IsInstallment,,request.LawId); + institutionContract.AddAmendment(amendment); + + } + private InstitutionContractExtensionPaymentResponse CalculateInPersonPayment( InstitutionContractExtensionPlanDetail selectedPlan, double baseAmount, double tenPercent, diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index c520824e..7f01d917 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -556,12 +556,14 @@ public class institutionContractController : AdminBaseController return res; } - public async Task> CompleteAmendment( + [HttpPost("amendment/complete/")] + public async Task AmendmentComplete( InstitutionContractAmendmentCompleteRequest request) { - var res = await _institutionContractApplication.AmendmentComplete(request); - return res; + await _institutionContractApplication.AmendmentComplete(request); + return Ok(); + }