From 756e06cc2f09e2b7a9478bf70e18599452c6644e Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 14 Oct 2025 09:51:29 +0330 Subject: [PATCH] feat: implement amendment features in InstitutionContract, including payment and workshop retrieval --- .../IInstitutionContractRepository.cs | 13 +++ ...itutionContractExtenstionTempRepository.cs | 3 +- .../InstitutionContractExtensionTemp.cs | 10 +- ...itutionContractExtenstionTempRepository.cs | 2 +- ...etInstitutionContractListItemsViewModel.cs | 4 +- .../IInstitutionContractApplication.cs | 105 ++++++++++-------- ...itutionContractExtensionCompleteRequest.cs | 10 ++ ...itutionContractExtensionPaymentResponse.cs | 8 ++ ...titutionContractPaymentOneTimeViewModel.cs | 24 ++++ .../InstitutionContractApplication.cs | 10 ++ .../InstitutionContractRepository.cs | 65 ++++++++++- .../PersonalBootstrapper.cs | 2 +- 12 files changed, 192 insertions(+), 64 deletions(-) rename Company.Domain/{InstitutionContractInsertTempAgg => InstitutionContractExtensionTempAgg}/IInstitutionContractExtenstionTempRepository.cs (76%) rename Company.Domain/{InstitutionContractInsertTempAgg => InstitutionContractExtensionTempAgg}/InstitutionContractExtensionTemp.cs (94%) create mode 100644 CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs create mode 100644 CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs create mode 100644 CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index ecc07005..69f1a430 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -54,9 +54,22 @@ public interface IInstitutionContractRepository : IRepository GetVerificationDetails(Guid id); Task GetByPublicIdAsync(Guid id); + + #region Extension + Task GetExtensionInquiry(long previousContractId); Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request); Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request); Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); + + #endregion + + #region Upgrade(Amendment) + + Task GetAmendmentWorkshops(long institutionContractId); + Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); + + #endregion + } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs b/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs similarity index 76% rename from Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs rename to Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs index e85b9377..020200f5 100644 --- a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs +++ b/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs @@ -1,8 +1,7 @@ using System; using System.Threading.Tasks; -using _0_Framework.Application; -namespace Company.Domain.InstitutionContractInsertTempAgg; +namespace Company.Domain.InstitutionContractExtensionTempAgg; public interface IInstitutionContractExtenstionTempRepository { diff --git a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs b/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs similarity index 94% rename from Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs rename to Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs index 219c6dbe..568ae4a5 100644 --- a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs +++ b/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs @@ -5,7 +5,7 @@ using CompanyManagment.App.Contracts.InstitutionContractContactinfo; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; -namespace Company.Domain.InstitutionContractInsertTempAgg; +namespace Company.Domain.InstitutionContractExtensionTempAgg; public class InstitutionContractExtensionTemp { @@ -30,8 +30,8 @@ public class InstitutionContractExtensionTemp public InstitutionContractExtensionPlanDetail ThreeMonths { get; set; } public InstitutionContractExtensionPlanDetail SixMonths { get; set; } public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; } - public InstitutionContractExtensionPaymentMonthly MonthlyPayment { get; set; } - public InstitutionContractExtensionPaymentOneTime OneTimePayment { get; set; } + public InstitutionContractPaymentMonthlyViewModel MonthlyPayment { get; set; } + public InstitutionContractPaymentOneTimeViewModel OneTimePayment { get; set; } public bool HasContractInPerson { get; set; } @@ -58,8 +58,8 @@ public class InstitutionContractExtensionTemp HasContractInPerson = hasContractInPerson; } - public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractExtensionPaymentMonthly monthly, - InstitutionContractExtensionPaymentOneTime oneTime) + public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractPaymentMonthlyViewModel monthly, + InstitutionContractPaymentOneTimeViewModel oneTime) { Duration = duration; MonthlyPayment = monthly; diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs index 71ddf741..2b959872 100644 --- a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs +++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs @@ -1,4 +1,4 @@ -using Company.Domain.InstitutionContractInsertTempAgg; +using Company.Domain.InstitutionContractExtensionTempAgg; using MongoDB.Driver; namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs index c32f345d..65392104 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs @@ -102,13 +102,13 @@ public class WorkshopServicesViewModel public string InsuranceLabel => "ارسال لیست بیمه"; public bool InsuranceInPerson { get; set; } - public string InsuranceInPersonLabel => "خدمات حضوری"; + public string InsuranceInPersonLabel => "خدمات مستقیم"; public bool Contract { get; set; } public string ContractLabel => "قرارداد و تصفیه حساب"; public bool ContractInPerson { get; set; } - public string ContractInPersonLabel => "خدمات حضوری"; + public string ContractInPersonLabel => "خدمات مستقیم"; public bool RollCall { get; set; } public string RollCallLabel => "ساعت حضور و غیاب"; diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index a226ac7e..9a290f56 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -26,21 +26,21 @@ public interface IInstitutionContractApplication /// اطلاعات قرارداد جدید /// نتیجه عملیات OperationResult Create(CreateInstitutionContract command); - + /// /// تمدید قرارداد موجود /// /// اطلاعات قرارداد برای تمدید /// نتیجه عملیات OperationResult Extension(CreateInstitutionContract command); - + /// /// ویرایش قرارداد موجود /// /// اطلاعات جدید قرارداد /// نتیجه عملیات OperationResult Edit(EditInstitutionContract command); - + /// /// دریافت جزئیات قرارداد برای ویرایش /// @@ -54,7 +54,7 @@ public interface IInstitutionContractApplication /// مدل جستجو /// لیست قراردادها List Search(InstitutionContractSearchModel searchModel); - + /// /// جستجوی جدید در قراردادها /// @@ -76,7 +76,7 @@ public interface IInstitutionContractApplication /// لیست شناسه قراردادها /// لیست قراردادها برای چاپ List PrintAll(List id); - + /// /// چاپ یک قرارداد /// @@ -144,7 +144,7 @@ public interface IInstitutionContractApplication /// شناسه قرارداد /// نتیجه عملیات OperationResult UnSign(long id); - + /// /// ایجاد حساب کاربری برای طرف قرارداد /// @@ -189,36 +189,78 @@ public interface IInstitutionContractApplication /// /// Task EditAsync(EditInstitutionContractRequest command); - - + + /// /// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده /// جهت نمایش در کارپوشه /// /// Task> RegistrationWorkflowMainList(); + /// /// دریافت آیتم های کارپوشه ثبت نام /// /// /// Task> RegistrationWorkflowItems(long institutionContractId); - - #endregion - + Task GetVerificationDetails(Guid id); Task> SendVerifyOtp(Guid id); Task VerifyOtp(Guid publicId, string code); Task GetWorkshopInitialDetails(long workshopDetailsId); + + #region Extension + Task GetExtensionInquiry(long previousContractId); - Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request); - Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); + + Task GetExtensionWorkshops( + InstitutionContractExtensionWorkshopsRequest request); + + Task GetExtensionInstitutionPlan( + InstitutionContractExtensionPlanRequest request); + Task GetExtensionPaymentMethod( InstitutionContractExtensionPaymentRequest request); - + Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); + + #endregion + + #region Upgrade (Amendment) + + Task GetAmendmentWorkshops(long institutionContractId); + Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); + + + #endregion +} + +public class InsitutionContractAmendmentPaymentRequest +{ + List Workshops { get; set; } + public long InstitutionContractId { get; set; } +} + +public class InsitutionContractAmendmentPaymentResponse +{ + public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; } + public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; } + public string ContractStart { get; set; } + public string ContractEnd { get; set; } + public string OneMonthAmount { get; set; } + public string TotalAmount { get; set; } +} + +public class InstitutionContractAmendmentWorkshopsResponse +{ + /// + /// + /// + public List Workshops { get; set; } + } public class InstitutionContractExtensionInquiryResponse @@ -236,39 +278,4 @@ public class InstitutionContractExtensionInquiryResponse public string State { get; set; } public long RepresentativeId { get; set; } public string NationalCode { get; set; } -} - -public class InstitutionContractExtensionCompleteRequest -{ - public Guid TemporaryId { get; set; } - public bool IsInstallment { get; set; } - public long LawId { get; set; } -} - -public class InstitutionContractExtensionPaymentResponse -{ - public InstitutionContractExtensionPaymentOneTime OneTime { get; set; } - public InstitutionContractExtensionPaymentMonthly Monthly { get; set; } - -} - -public class InstitutionContractExtensionPaymentMonthly:InstitutionContractExtensionPaymentOneTime -{ - public List Installments { get; set; } -} - -public class InstitutionContractExtensionPaymentOneTime -{ - /// - /// مجموع مبالغ - /// - public string TotalAmount { get; set; } - /// - /// ارزش افزوده - /// - public string Tax { get; set; } - /// - /// مبلغ قابل پرداخت - /// - public string PaymentAmount { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs new file mode 100644 index 00000000..f232760c --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractExtensionCompleteRequest +{ + public Guid TemporaryId { get; set; } + public bool IsInstallment { get; set; } + public long LawId { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs new file mode 100644 index 00000000..84906caf --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs @@ -0,0 +1,8 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractExtensionPaymentResponse +{ + public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; } + public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; } + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs new file mode 100644 index 00000000..fcc28d47 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractPaymentOneTimeViewModel +{ + /// + /// مجموع مبالغ + /// + public string TotalAmount { get; set; } + /// + /// ارزش افزوده + /// + public string Tax { get; set; } + /// + /// مبلغ قابل پرداخت + /// + public string PaymentAmount { get; set; } +} +public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel +{ + public List Installments { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index bbe7f441..c67d29f1 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1302,6 +1302,16 @@ public class InstitutionContractApplication : IInstitutionContractApplication return await _institutionContractRepository.ExtensionComplete(request); } + public async Task GetAmendmentWorkshops(long institutionContractId) + { + return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId); + } + + public Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request) + { + return _institutionContractRepository.GetAmendmentPaymentDetails(request); + } + private async Task> CreateLegalContractingPartyEntity( CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 04bfb463..c553896f 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -17,7 +17,7 @@ using Company.Domain.FinancialStatmentAgg; using Company.Domain.FinancialTransactionAgg; using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractContactInfoAgg; -using Company.Domain.InstitutionContractInsertTempAgg; +using Company.Domain.InstitutionContractExtensionTempAgg; using Company.Domain.InstitutionPlanAgg; using Company.Domain.WorkshopAgg; using CompanyManagment.App.Contracts.Employer; @@ -1471,6 +1471,11 @@ public class InstitutionContractRepository : RepositoryBase x.contract.ContractEndGr < now); break; + + case InstitutionContractListStatus.PendingForVerify: + joinedQuery = joinedQuery.Where(x => + x.contract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify); + break; } } else @@ -1818,6 +1823,8 @@ public class InstitutionContractRepository : RepositoryBase x.PublicId == id); } + #region Extension + public async Task GetExtensionInquiry(long previousContractId) { var institutionContracts = await _context.InstitutionContractSet @@ -2030,7 +2037,7 @@ public class InstitutionContractRepository : RepositoryBase new InstitutionContractExtensionTempWorkshop(x.WorkshopName, x.CountPerson, x.ContractAndCheckout, x.ContractAndCheckoutInPerson, x.Insurance, x.InsuranceInPerson, x.RollCall, x.RollCall, - x.RollCallInPerson, x.WorkshopServicesAmount,x.WorkshopId)).ToList(); + x.RollCallInPerson, x.WorkshopServicesAmount, x.WorkshopId)).ToList(); institutionTemp.SetWorkshopsAndPlanAmounts(workshops, res.OneMonth, res.ThreeMonths, res.SixMonths, res.TwelveMonths, hasInPerson); @@ -2201,6 +2208,7 @@ public class InstitutionContractRepository : RepositoryBase new InstitutionContractInstallment(x.InstalmentDate.ToGeorgianDateTime(), @@ -2326,6 +2334,55 @@ public class InstitutionContractRepository : RepositoryBase GetAmendmentWorkshops(long institutionContractId) + { + var institutionContract = await _context.InstitutionContractSet + .Include(x => x.WorkshopGroup) + .ThenInclude(x => x.CurrentWorkshops) + .FirstOrDefaultAsync(x => x.id == institutionContractId); + + var workshops = institutionContract.WorkshopGroup.CurrentWorkshops.Select(x => new WorkshopTempViewModel() + { + Id = x.id, + ContractAndCheckout = x.Services.Contract, + ContractAndCheckoutInPerson = x.Services.ContractInPerson, + CustomizeCheckout = x.Services.CustomizeCheckout, + CountPerson = x.PersonnelCount, + Insurance = x.Services.Insurance, + InsuranceInPerson = x.Services.InsuranceInPerson, + RollCall = x.Services.RollCall, + WorkshopName = x.WorkshopName, + WorkshopServicesAmountStr = x.Price.ToMoney(), + WorkshopServicesAmount = x.Price, + WorkshopId = x.WorkshopId ?? 0, + RollCallInPerson = x.Services.RollCallInPerson, + + }).ToList(); + var res = new InstitutionContractAmendmentWorkshopsResponse() + { + Workshops = workshops + }; + return res; + } + + public async Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request) + { + var institutionContract =await _context.InstitutionContractSet + .Include(x => x.WorkshopGroup) + .ThenInclude(x => x.CurrentWorkshops) + .FirstOrDefaultAsync(x => x.id == request.InstitutionContractId); + if (institutionContract == null) + throw new NotFoundException("قرارداد مالی یافت نشد"); + + var amendmentStart = DateTime.Now; + var amendmentEnd = institutionContract.ContractEndGr; +//TODO : محاسبه مبلغ بر اساس کارگاه های انتخاب شده + var res = new InsitutionContractAmendmentPaymentResponse(); + return res; + + } private InstitutionContractExtensionPaymentResponse CalculateInPersonPayment( InstitutionContractExtensionPlanDetail selectedPlan, double baseAmount, double tenPercent, diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index fac195ef..319ca091 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -218,7 +218,7 @@ using CompanyManagment.App.Contracts.PaymentInstrument; using CompanyManagment.App.Contracts.PaymentTransaction; using CompanyManagment.App.Contracts.AuthorizedPerson; using Company.Domain.AuthorizedPersonAgg; -using Company.Domain.InstitutionContractInsertTempAgg; +using Company.Domain.InstitutionContractExtensionTempAgg; using Company.Domain.LawAgg; using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; using CompanyManagment.App.Contracts.Law;