From 91fc560355e01a51d408da8de84f074f707c7a14 Mon Sep 17 00:00:00 2001 From: mahan Date: Wed, 15 Oct 2025 11:32:23 +0330 Subject: [PATCH 1/5] feat: enhance registration workflow by adding account creation for contracting parties --- .../InstitutionContractApplication.cs | 45 ++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 58c16095..5fd6f87e 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -318,7 +318,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication command.DailyCompenseation, command.Obligation, command.TotalAmount, command.ExtensionNo, command.WorkshopManualCount, command.EmployeeManualCount, command.Description, command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax, - command.ValueAddedTax, [],command.LawId); + command.ValueAddedTax, [], command.LawId); _institutionContractRepository.Create(createContract); _institutionContractRepository.SaveChanges(); @@ -1046,7 +1046,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication command.Workshops.Count.ToString(), command.Workshops.Sum(x => x.PersonnelCount).ToString(), command.Description, "NotOfficial", "JobRelation", hasValueAddedTax, - command.TaxAmount, workshopDetails,command.LawId); + command.TaxAmount, workshopDetails, command.LawId); FinancialStatment financialStatement; @@ -1153,7 +1153,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication { throw new NotImplementedException(); } - + public Task> RegistrationWorkflowMainList() { @@ -1249,8 +1249,31 @@ public class InstitutionContractApplication : IInstitutionContractApplication if (institutionContract.VerifyCode != code) return op.Failed("کد وارد شده صحیح نمی باشد"); + + var transaction = await _institutionContractRepository.BeginTransactionAsync(); institutionContract.SetPendingWorkflow(); + var phone = institutionContract.ContactInfoList.FirstOrDefault(x => + x.SendSms && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); + if (phone !=null) + { + var userPass = contractingParty.IsLegal == "حقیقی" + ? contractingParty.Nationalcode + : contractingParty.NationalId; + var createAcc = new RegisterAccount + { + Fullname = contractingParty.LName, + Username = userPass, + Password = userPass, + Mobile = phone.PhoneNumber, + NationalCode = userPass + }; + var res = _accountApplication.RegisterClient(createAcc); + if (res.IsSuccedded) + CreateContractingPartyAccount(contractingParty.id, res.SendId); + } + + await transaction.CommitAsync(); await _institutionContractRepository.SaveChangesAsync(); return op.Succcedded(); } @@ -1274,7 +1297,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication RollCallInPerson = services.RollCallInPerson }, WorkshopName = details.WorkshopName, - ArchiveCode =newArchiveCode + ArchiveCode = newArchiveCode }; return res; } @@ -1290,12 +1313,14 @@ public class InstitutionContractApplication : IInstitutionContractApplication return await _institutionContractRepository.GetExtensionWorkshops(request); } - public async Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request) + public async Task GetExtensionInstitutionPlan( + InstitutionContractExtensionPlanRequest request) { return await _institutionContractRepository.GetExtensionInstitutionPlan(request); } - public async Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request) + public async Task GetExtensionPaymentMethod( + InstitutionContractExtensionPaymentRequest request) { return await _institutionContractRepository.GetExtensionPaymentMethod(request); } @@ -1350,8 +1375,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication if (request.IsAuth) { - legalContractingParty.LegalAuthentication(request.FName,request.LName,request.FatherName, - request.IdNumber,null,null,request.BirthDateFa,request.Gender,request.PhoneNumber); + legalContractingParty.LegalAuthentication(request.FName, request.LName, request.FatherName, + request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber); } await _contractingPartyRepository.CreateAsync(legalContractingParty); @@ -1396,7 +1421,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication if (request.IsAuth) { personalContractingParty.Authentication(request.FName, request.LName, request.FatherName, - request.IdNumber, null,null, request.BirthDateFa, request.Gender,request.PhoneNumber); + request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber); } await _contractingPartyRepository.CreateAsync(personalContractingParty); @@ -1513,4 +1538,4 @@ public class WorkshopsAndEmployeeViewModel public int ArchiveCode { get; set; } } -#endregion +#endregion \ No newline at end of file From 13a2cd78cd48fee3802e831a8c79cf8f85c244f9 Mon Sep 17 00:00:00 2001 From: mahan Date: Wed, 15 Oct 2025 12:28:30 +0330 Subject: [PATCH 2/5] feat: improve institution contract retrieval and ensure account creation consistency --- CompanyManagment.Application/InstitutionContractApplication.cs | 2 +- .../Repository/InstitutionContractRepository.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 5fd6f87e..90042878 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1139,11 +1139,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication if (res.IsSuccedded) CreateContractingPartyAccount(contractingParty.id, res.SendId); - await _institutionContractRepository.SaveChangesAsync(); await _smsService.SendInstitutionVerificationLink(contractingParty.Phone, contractingPartyFullName, entity.PublicId); + await _institutionContractRepository.SaveChangesAsync(); await transaction.CommitAsync(); return opration.Succcedded(); diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 23120db2..03b709f0 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -1820,7 +1820,7 @@ public class InstitutionContractRepository : RepositoryBase GetByPublicIdAsync(Guid id) { - return await _context.InstitutionContractSet.FirstOrDefaultAsync(x => x.PublicId == id); + return await _context.InstitutionContractSet.Include(x=>x.ContactInfoList).FirstOrDefaultAsync(x => x.PublicId == id); } public async Task GetExtensionInquiry(long previousContractId) From d44a9224be3dc3f0ca2ec0733dca6c535695da4d Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 16 Oct 2025 12:16:31 +0330 Subject: [PATCH 3/5] feat: prevent duplicate employer registration in workshop --- CompanyManagment.Application/EmployerApplication.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CompanyManagment.Application/EmployerApplication.cs b/CompanyManagment.Application/EmployerApplication.cs index 4c6e9b13..e2ea5859 100644 --- a/CompanyManagment.Application/EmployerApplication.cs +++ b/CompanyManagment.Application/EmployerApplication.cs @@ -1340,6 +1340,10 @@ public class EmployerApplication : IEmployerApplication var workshopDetails = await _institutionContractRepository.GetInstitutionWorkshopInitialDetails(command .InstitutionWorkshopInitialId); + if (workshopDetails.Employers.Any(x => x.EmployerId == employer.id)) + { + throw new BadRequestException("این کارفرما قبلا در این کارگاه ثبت شده است"); + } workshopDetails.AddEmployer(employer.id); await _institutionContractRepository.SaveChangesAsync(); From 1f7785581c73f81477e4f95a6fde763bb8740242 Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 16 Oct 2025 15:26:53 +0330 Subject: [PATCH 4/5] feat: streamline employer removal process from workshop details --- CompanyManagment.Application/EmployerApplication.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CompanyManagment.Application/EmployerApplication.cs b/CompanyManagment.Application/EmployerApplication.cs index e2ea5859..8e7d6663 100644 --- a/CompanyManagment.Application/EmployerApplication.cs +++ b/CompanyManagment.Application/EmployerApplication.cs @@ -1391,12 +1391,14 @@ public class EmployerApplication : IEmployerApplication // Get workshop details var workshopDetails = - await _institutionContractRepository.GetInstitutionWorkshopInitialDetails(institutionWorkshopDetailsId); + await _institutionContractRepository + .GetInstitutionWorkshopInitialDetails(institutionWorkshopDetailsId); if (workshopDetails == null) return operation.Failed("جزئیات کارگاه موسسه یافت نشد"); // Find and remove the employer from workshop details - var employerDetail = workshopDetails.Employers.FirstOrDefault(e => e.EmployerId == employerId); + var employerDetail = workshopDetails + .Employers.FirstOrDefault(e => e.EmployerId == employerId); if (employerDetail == null) return operation.Failed("کارفرما در لیست کارگاه یافت نشد"); @@ -1404,10 +1406,7 @@ public class EmployerApplication : IEmployerApplication workshopDetails.Employers.Remove(employerDetail); await _institutionContractRepository.SaveChangesAsync(); - - // Delete the employer - _EmployerRepository.Remove(employerId); - await _EmployerRepository.SaveChangesAsync(); + return operation.Succcedded(); } From f5d95b21b0dc25d966191fb263a12239e3e3189c Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 16 Oct 2025 15:41:49 +0330 Subject: [PATCH 5/5] feat: enhance employer gender handling in registration workflow --- .../Repository/EmployerRepository.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CompanyManagment.EFCore/Repository/EmployerRepository.cs b/CompanyManagment.EFCore/Repository/EmployerRepository.cs index ff59a374..626cdfa4 100644 --- a/CompanyManagment.EFCore/Repository/EmployerRepository.cs +++ b/CompanyManagment.EFCore/Repository/EmployerRepository.cs @@ -592,7 +592,7 @@ public class EmployerRepository : RepositoryBase, IEmployerRepos var legalTypeValue = legalType == LegalType.Real ? "حقیقی" : "حقوقی"; query = query.Where(x => x.IsLegal == legalTypeValue); } - + var viewModelQuery = query.Select(x => new EmployerSelectListViewModel() { Id = x.id, @@ -1078,7 +1078,12 @@ public class EmployerRepository : RepositoryBase, IEmployerRepos PlaceOfIssue = employer.PlaceOfIssue, DateOfIssue = employer.DateOfIssue.ToFarsi(), FatherName = employer.FatherName, - Gender = employer.Gender == "مرد" ? Gender.Male : Gender.Female, + Gender = employer.Gender switch + { + null => Gender.None, + "مرد" => Gender.Male, + _ => Gender.Female + }, GovernmentSystemInfo = governmentSystemInfo, IsAuth = employer.IsAuth, PhoneNumber = employer.Phone, @@ -1110,7 +1115,6 @@ public class EmployerRepository : RepositoryBase, IEmployerRepos CeoIdNumber = employer.IdNumber, IdNumberSeri = employer.IdNumberSeri, TelephoneNumber = employer.IdNumber - }; } @@ -1123,7 +1127,6 @@ public class EmployerRepository : RepositoryBase, IEmployerRepos InstitutionWorkshopInitialId = contractWorkshopInitial.id, RealEmployer = realEmployer, LegalEmployer = legalEmployer, - }; return res; }