From acdd7de4f68644994e121d680f59e945b600bc16 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 21 Oct 2025 11:02:10 +0330 Subject: [PATCH] feat: update InsertAmendmentTempWorkshops method to return detailed response and refactor related classes --- .../IInstitutionContractRepository.cs | 2 +- .../InstitutionContract.cs | 4 +- .../InstitutionContractAmendmentTemp.cs | 83 +++++++++---- .../IInstitutionContractApplication.cs | 8 +- ...situtionContractAmendmentPaymentRequest.cs | 4 +- .../InstitutionContractApplication.cs | 2 +- .../InstitutionContractRepository.cs | 117 ++++++++++++------ 7 files changed, 152 insertions(+), 68 deletions(-) diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index d0b3d8c6..e4970d7b 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -70,7 +70,7 @@ public interface IInstitutionContractRepository : IRepository GetAmendmentWorkshops(long institutionContractId); Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); - Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request); + Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request); #endregion Task RemoveAmendmentWorkshops(Guid workshopTempId); diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs index 1193023d..f0770dab 100644 --- a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs +++ b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs @@ -252,6 +252,7 @@ public class InstitutionContract : EntityBase public class InstitutionContractAmendment : EntityBase { + private InstitutionContractAmendment(){} public InstitutionContractAmendment(long institutionContractId, InstitutionContract institutionContract, List installments, double amount, bool hasInstallment, InstitutionContractAmendmentChange amendmentChange, long lawId) @@ -285,7 +286,8 @@ public class InstitutionContractAmendment : EntityBase public class InstitutionContractAmendmentChange : EntityBase { - private InstitutionContractAmendmentChange(long institutionContractAmendmentId, + private InstitutionContractAmendmentChange(){} + public InstitutionContractAmendmentChange(long institutionContractAmendmentId, InstitutionContractAmendment institutionContractAmendment, InstitutionContractAmendmentChangeType changeType, DateTime changeDateGr, bool? hasRollCallPlan, bool? hasCustomizeCheckoutPlan, bool? hasContractPlan, bool? hasContractPlanInPerson, bool? hasInsurancePlan, bool? hasInsurancePlanInPerson, int? personnelCount, diff --git a/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs b/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs index d60379e0..02925e68 100644 --- a/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs +++ b/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs @@ -1,32 +1,65 @@ using System; using System.Collections.Generic; +using System.Linq; using MongoDB.Bson.Serialization.Attributes; namespace Company.Domain.InstitutionContractAmendmentTempAgg; public class InstitutionContractAmendmentTemp { - public InstitutionContractAmendmentTemp(List prevWorkshops, + public InstitutionContractAmendmentTemp(List prevWorkshops, long institutionContractId) { Id = Guid.NewGuid(); PrevWorkshops = prevWorkshops; - NewWorkshops = prevWorkshops; + NewWorkshops = prevWorkshops.Select(x=> new InstitutionContractAmendmentTempNewWorkshop( + x.WorkshopName, x.CountPerson, x.ContractAndCheckout, x.ContractAndCheckoutInPerson, x.Insurance, + x.InsuranceInPerson, x.RollCall, x.RollCallInPerson, x.CustomizeCheckout, x.Price, x.WorkshopId, + x.CurrentWorkshopId, 0)).ToList(); InstitutionContractId = institutionContractId; } - [BsonId] - public Guid Id { get; private set; } - public List PrevWorkshops { get; private set; } - public List NewWorkshops { get; private set; } + + [BsonId] public Guid Id { get; private set; } + public List PrevWorkshops { get; private set; } + public List NewWorkshops { get; private set; } public long InstitutionContractId { get; private set; } - - } -public class InstitutionContractAmendmentTempWorkshop + +public class InstitutionContractAmendmentTempNewWorkshop : InstitutionContractAmendmentTempPrevWorkshop { - public InstitutionContractAmendmentTempWorkshop(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson, + public InstitutionContractAmendmentTempNewWorkshop(string workshopName, int countPerson, bool contractAndCheckout, + bool contractAndCheckoutInPerson, bool insurance, bool insuranceInPerson, bool rollCall, bool rollCallInPerson, + bool customizeCheckout, double price, long workshopId, long currentWorkshopId,double priceDifference) : base( + workshopName, countPerson, contractAndCheckout, contractAndCheckoutInPerson, insurance, insuranceInPerson, + rollCall, rollCallInPerson, customizeCheckout, price, workshopId, currentWorkshopId) + { + PriceDifference = priceDifference; + } + + /// + /// مبلغ اختلاف کارگاه جدید با کارگاه قبلی(مبلغ اصلی ارتقاء) + /// + public double PriceDifference { get; private set; } + + + public void Edit(string workshopName, int countPerson, bool contractAndCheckout, + bool contractAndCheckoutInPerson, + bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout, + double price,double priceDifference) + { + base.Edit(workshopName, countPerson, contractAndCheckout, contractAndCheckoutInPerson, insurance, + insuranceInPerson, rollCall, customizeCheckout, price); + PriceDifference = priceDifference; + } +} + +public class InstitutionContractAmendmentTempPrevWorkshop +{ + public InstitutionContractAmendmentTempPrevWorkshop(string workshopName, int countPerson, bool contractAndCheckout, + bool contractAndCheckoutInPerson, bool insurance, bool insuranceInPerson, - bool rollCall,bool rollCallInPerson, bool customizeCheckout,double price,long workshopId,long currentWorkshopId, string priceStr) + bool rollCall, bool rollCallInPerson, bool customizeCheckout, double price, long workshopId, + long currentWorkshopId) { Id = Guid.NewGuid(); WorkshopName = workshopName; @@ -41,8 +74,8 @@ public class InstitutionContractAmendmentTempWorkshop Price = price; WorkshopId = workshopId; CurrentWorkshopId = currentWorkshopId; - PriceStr = priceStr; } + public Guid Id { get; set; } public long CurrentWorkshopId { get; private set; } @@ -56,50 +89,50 @@ public class InstitutionContractAmendmentTempWorkshop /// /// تعداد پرسنل /// - public int CountPerson { get; private set; } - - + public int CountPerson { get; private set; } + + #region ServiceSelection /// /// قرارداد و تصفیه /// - public bool ContractAndCheckout { get; private set; } + public bool ContractAndCheckout { get; private set; } /// /// بیمه /// - public bool Insurance { get; private set; } + public bool Insurance { get; private set; } /// /// حضورغباب /// - public bool RollCall { get; private set; } + public bool RollCall { get; private set; } public bool RollCallInPerson { get; set; } /// /// فیش غیر رسمی /// - public bool CustomizeCheckout { get;private set; } + public bool CustomizeCheckout { get; private set; } /// /// خدمات حضوری قرداد و تصفیه /// - public bool ContractAndCheckoutInPerson { get; private set; } + public bool ContractAndCheckoutInPerson { get; private set; } /// /// خدمات حضوری بیمه /// - public bool InsuranceInPerson { get; private set; } + public bool InsuranceInPerson { get; private set; } - public double Price{ get; set; } - public string PriceStr { get; set; } + public double Price { get; private set; } #endregion public void Edit(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson, - bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout) + bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout, + double price) { WorkshopName = workshopName; CountPerson = countPerson; @@ -109,6 +142,6 @@ public class InstitutionContractAmendmentTempWorkshop CustomizeCheckout = customizeCheckout; ContractAndCheckoutInPerson = contractAndCheckoutInPerson; InsuranceInPerson = insuranceInPerson; - + Price = price; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 5a7edc00..6435c525 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -232,13 +232,19 @@ public interface IInstitutionContractApplication #region Upgrade (Amendment) Task GetAmendmentWorkshops(long institutionContractId); - Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request); + Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request); Task RemoveAmendmentWorkshops(Guid workshopTempId); Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); #endregion } +public class InsertAmendmentTempWorkshopResponse +{ + public Guid WorkshopTempId { get; set; } + public string Amount { get; set; } +} + public class InstitutionContractAmendmentWorkshopsResponse { /// diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InsitutionContractAmendmentPaymentRequest.cs b/CompanyManagment.App.Contracts/InstitutionContract/InsitutionContractAmendmentPaymentRequest.cs index 0b9bc8aa..c1444835 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/InsitutionContractAmendmentPaymentRequest.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/InsitutionContractAmendmentPaymentRequest.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using CompanyManagment.App.Contracts.TemporaryClientRegistration; @@ -5,6 +6,5 @@ namespace CompanyManagment.App.Contracts.InstitutionContract; public class InsitutionContractAmendmentPaymentRequest { - public List Workshops { get; set; } - public long InstitutionContractId { get; set; } + public Guid TempId { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 40df4fa9..f303ffa4 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1307,7 +1307,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId); } - public async Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request) + public async Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request) { return await _institutionContractRepository.InsertAmendmentTempWorkshops(request); } diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 3a48708d..d96e1aa9 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -2354,11 +2354,11 @@ public class InstitutionContractRepository : RepositoryBase new InstitutionContractAmendmentTempWorkshop(x.WorkshopName,x.PersonnelCount, + .Select(x => new InstitutionContractAmendmentTempPrevWorkshop(x.WorkshopName,x.PersonnelCount, x.Services.Contract,x.Services.ContractInPerson,x.Services.Insurance, x.Services.InsuranceInPerson,x.Services.RollCall,x.Services.RollCallInPerson, x.Services.CustomizeCheckout,x.Price, - x.WorkshopId??0,x.id,x.Price.ToMoney())).ToList(); + x.WorkshopId??0,x.id)).ToList(); @@ -2378,7 +2378,7 @@ public class InstitutionContractRepository : RepositoryBase 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 institutionContractAmendmentTemp = await _institutionAmendmentTemp + .Find(x=>x.Id == request.TempId) + .FirstOrDefaultAsync(); + if (institutionContractAmendmentTemp == null) + throw new NotFoundException("دیتای وارد شده نامعتبر است"); var amendmentStart = DateTime.Now; + + var institutionContract = await _context.InstitutionContractSet + .Include(x=>x.WorkshopGroup) + .ThenInclude(x=>x.CurrentWorkshops) + .FirstOrDefaultAsync(x => x.id == institutionContractAmendmentTemp.InstitutionContractId); + + if (institutionContract == null) + throw new NotFoundException("قرارداد مؤسسه یافت نشد"); + var amendmentEnd = institutionContract.ContractEndGr; - var haContractInPerson = request.Workshops.Any(x => x.ContractAndCheckoutInPerson); + var haContractInPerson = institutionContract.WorkshopGroup.CurrentWorkshops + .Any(x => x.Services.ContractInPerson); if (!haContractInPerson) { - if (request.Workshops.Any(x => x.ContractAndCheckoutInPerson)) + if (institutionContractAmendmentTemp.NewWorkshops.Any(x => x.ContractAndCheckoutInPerson)) { throw new BadRequestException("برای قرارداد آنلاین نمیتوان سرویس حضوری انتخاب کرد"); } @@ -2434,8 +2443,7 @@ public class InstitutionContractRepository : RepositoryBase startDay) monthDiff++; - var sumOneMonth = request.Workshops.Sum(x => x.WorkshopServicesAmount); - //TODO:مقدار جمع مبالغ باید از دیتابیس موقت گرفته شود. + var sumOneMonth = institutionContractAmendmentTemp.NewWorkshops.Sum(x => x.PriceDifference); var baseAmount = monthDiff * sumOneMonth; var tax = baseAmount*0.10; @@ -2460,22 +2468,30 @@ public class InstitutionContractRepository : RepositoryBase InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request) + public async Task InsertAmendmentTempWorkshops( + InstitutionContractAmendmentTempWorkshopViewModel request) { var amendmentTemp =await _institutionAmendmentTemp .Find(x=> x.Id == request.TempId).FirstOrDefaultAsync(); @@ -2500,35 +2517,61 @@ public class InstitutionContractRepository : RepositoryBase x.Id == request.WorkshopTempId); + var planForWorkshop = new WorkshopTempViewModel() + { + WorkshopName = request.WorkshopName, + CountPerson = request.CountPerson, + ContractAndCheckout = request.ContractAndCheckout, + ContractAndCheckoutInPerson = request.ContractAndCheckoutInPerson, + Insurance = request.Insurance, + InsuranceInPerson = request.InsuranceInPerson, + RollCall = request.RollCall, + RollCallInPerson = request.RollCallInPerson, + CustomizeCheckout = request.CustomizeCheckout + }; + var price = _planPercentageRepository.GetInstitutionPlanForWorkshop(planForWorkshop) + .OnlineAndInPersonSumAmountDouble; + if (workshopTemp == null) { - var newWorkshopTemp = new InstitutionContractAmendmentTempWorkshop(request.WorkshopName, + var newWorkshopTemp = new InstitutionContractAmendmentTempNewWorkshop(request.WorkshopName, request.CountPerson, request.ContractAndCheckout, request.ContractAndCheckoutInPerson, request.Insurance, request.InsuranceInPerson, request.RollCall, request.RollCallInPerson, - request.CustomizeCheckout, request.Price, - request.WorkshopId,0,request.PriceStr); + request.CustomizeCheckout, price, + request.WorkshopId,0,price); + + workshopTemp = newWorkshopTemp; + amendmentTemp.NewWorkshops.Add(newWorkshopTemp); - await _institutionAmendmentTemp.ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp); - - return newWorkshopTemp.Id; + await _institutionAmendmentTemp + .ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp); } - - amendmentTemp.NewWorkshops.Remove(workshopTemp); + else + { + amendmentTemp.NewWorkshops.Remove(workshopTemp); - workshopTemp.Edit(request.WorkshopName, request.CountPerson, - request.ContractAndCheckout, request.ContractAndCheckoutInPerson, - request.Insurance, request.InsuranceInPerson, - request.RollCall, - request.CustomizeCheckout); + var differencePrice = price - workshopTemp.Price; + workshopTemp.Edit(request.WorkshopName, request.CountPerson, + request.ContractAndCheckout, request.ContractAndCheckoutInPerson, + request.Insurance, request.InsuranceInPerson, + request.RollCall, + request.CustomizeCheckout, price,differencePrice); - amendmentTemp.NewWorkshops.Add(workshopTemp); + amendmentTemp.NewWorkshops.Add(workshopTemp); - await _institutionAmendmentTemp.ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp); - return workshopTemp.Id; + await _institutionAmendmentTemp + .ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp); + } + + return new InsertAmendmentTempWorkshopResponse() + { + WorkshopTempId = workshopTemp.Id, + Amount = workshopTemp.PriceDifference.ToMoney() + }; } public async Task RemoveAmendmentWorkshops(Guid workshopTempId)