From 86682a28e2880ff0dce1207f3dee4f0ef3e495dd Mon Sep 17 00:00:00 2001 From: MahanCh Date: Tue, 26 Aug 2025 11:28:18 +0330 Subject: [PATCH] feat: add method to update institution contract status based on workshop completion --- .../IInstitutionContractRepository.cs | 1 + .../WorkshopAppliction.cs | 15 ++++++++++----- .../Repository/InstitutionContractRepository.cs | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index a829eb04..7a6fddd3 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -51,4 +51,5 @@ public interface IInstitutionContractRepository : IRepository> RegistrationWorkflowItems(long institutionContractId); Task GetInstitutionWorkshopDetails(long institutionWorkshopDetailsId); Task GetIncludeWorkshopDetailsAsync(long institutionContractId); + void UpdateStatusIfNeeded(long institutionContractId); } \ No newline at end of file diff --git a/CompanyManagment.Application/WorkshopAppliction.cs b/CompanyManagment.Application/WorkshopAppliction.cs index 261fc1ca..770c34f6 100644 --- a/CompanyManagment.Application/WorkshopAppliction.cs +++ b/CompanyManagment.Application/WorkshopAppliction.cs @@ -1047,16 +1047,18 @@ public class WorkshopAppliction : IWorkshopApplication // return operation.Failed("لطفا نوع ارسال لیست بیمه را مشخص کنید"); var account = new AccountViewModel(); - var institutionContract =await _institutionContractRepository.GetIncludeWorkshopDetailsAsync(contractWorkshopDetail.InstitutionContractId); + var institutionContract = + await _institutionContractRepository.GetIncludeWorkshopDetailsAsync(contractWorkshopDetail + .InstitutionContractId); if (institutionContract == null) { return operation.Failed("قرارداد مالی موسسه یافت نشد"); } + if (command.HasRollCallFreeVip == "true") { - - // if (institutionContract == null) - // return operation.Failed("بدلیل نداشتن قرار داد مالی نمیتوانید سرویس حضور غیاب را فعال کنید"); + // if (institutionContract == null) + // return operation.Failed("بدلیل نداشتن قرار داد مالی نمیتوانید سرویس حضور غیاب را فعال کنید"); account = _personalContractingPartyRepository.GetAccountByPersonalContractingParty(institutionContract .ContractingPartyId); @@ -1095,8 +1097,9 @@ public class WorkshopAppliction : IWorkshopApplication }; _rollCallServiceApplication.Create(commandSave); } - contractWorkshopDetail.SetWorkshopId(workshop.id); + contractWorkshopDetail.SetWorkshopId(workshop.id); + await _workshopRepository.SaveChangesAsync(); foreach (var e in employerIds) { @@ -1111,6 +1114,8 @@ public class WorkshopAppliction : IWorkshopApplication var op = _workshopRepository.CreateAccountLeftWorkAndWorkshopAccounts(accountIds.Distinct().ToList(), workshop.id); + + _institutionContractRepository.UpdateStatusIfNeeded(institutionContract.id); if (!op.IsSuccedded) return op; diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index c901cb24..547ee84b 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -1556,6 +1556,23 @@ public class InstitutionContractRepository : RepositoryBase x.id == institutionContractId); } + public void UpdateStatusIfNeeded(long institutionContractId) + { + var institutionContract = _context.InstitutionContractSet + .Include(x => x.WorkshopDetails) + .FirstOrDefault(x => x.id == institutionContractId); + if (institutionContract == null) + throw new NotFoundException("قرارداد مؤسسه یافت نشد"); + + if (institutionContract.Status == InstitutionContractStatus.Completed) + return; + if (institutionContract.WorkshopDetails.All(x => x.WorkshopCreated)) + institutionContract.Complete(); + + _context.SaveChanges(); + + } + #endregion