From 39d887c4c3e1f9df344c9cd5b23d44d4c94957e0 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 30 Sep 2025 15:46:28 +0330 Subject: [PATCH] add validation for create contractingParty --- .../IPersonalContractingPartyRepository.cs | 1 + .../ContractingPartyTempViewModel.cs | 4 ++ .../InstitutionContractApplication.cs | 43 +++++++++++++------ .../TemporaryClientRegistrationApplication.cs | 9 ++++ .../PersonalContractingPartyRepository.cs | 5 +++ .../Controllers/ContractingPartyController.cs | 6 --- .../Controllers/InsuranceJobsController.cs | 1 + 7 files changed, 49 insertions(+), 20 deletions(-) diff --git a/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs b/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs index 82236676..ae457171 100644 --- a/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs +++ b/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs @@ -74,4 +74,5 @@ public interface IPersonalContractingPartyRepository :IRepository GetRealDetails(long id); Task GetLegalDetails(long id); + Task GetByNationalCode(string nationalCode); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs index 5067c36f..87e5a00a 100644 --- a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs +++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs @@ -8,4 +8,8 @@ public class ContractingPartyTempViewModel : CreateContractingPartyTemp /// public string DateOfBirthFa { get; set; } + public string Address { get; set; } + public string City { get; set; } + public long RepresentativeId { get; set; } + } \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 47ffa5ac..8f2a5df0 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -930,8 +930,33 @@ public class InstitutionContractApplication : IInstitutionContractApplication var syear = command.ContractStartFa.Substring(0, 4); var smonth = command.ContractStartFa.Substring(5, 2); var sday = command.ContractStartFa.Substring(8, 2); + var transaction = await _contractingPartyRepository.BeginTransactionAsync(); + + if (command.ContractStartFa.TryToGeorgianDateTime(out var contractStartGr) == false) + return opration.Failed("تاریخ شروع قرارداد معتبر نیست"); + contractStartGr.AddMonthsFa((int)command.Duration, out var contractEndGr); + contractEndGr = contractEndGr.ToFarsi().FindeEndOfMonth().ToGeorgianDateTime(); + + if (command.ContractingPartyLegalType == LegalType.Legal) + { + if (_contractingPartyRepository.Exists(x => + x.LName == command.LegalParty.CompanyName && x.RegisterId == command.LegalParty.RegisterId) && + _institutionContractRepository.Exists(x=> x.IsActiveString =="true" && + x.ContractStartGr < contractEndGr && contractStartGr < x.ContractEndGr)) + throw new BadRequestException("امکان ایجاد قرارداد تکراری وجود ندارد"); + + } + else if(command.ContractingPartyLegalType == LegalType.Real) + { + if (_contractingPartyRepository.Exists(x => + x.LName == command.RealParty.LName && x.Nationalcode == command.RealParty.NationalCode)&& + _institutionContractRepository.Exists(x=> x.IsActiveString =="true" && + x.ContractStartGr < contractEndGr && contractStartGr < x.ContractEndGr)) + throw new BadRequestException("امکان ثبت رکورد تکراری وجود ندارد"); + + } OperationResult contractingPartyResult = command.ContractingPartyLegalType switch { LegalType.Legal => await CreateLegalContractingPartyEntity(command.LegalParty, command.RepresentativeId), @@ -949,18 +974,14 @@ public class InstitutionContractApplication : IInstitutionContractApplication var representative = _representativeRepository.Get(command.RepresentativeId); if (representative == null) return opration.Failed("معرف مورد نظر یافت نشد"); - - if (command.ContractStartFa.TryToGeorgianDateTime(out var contractStartGr) == false) - return opration.Failed("تاریخ شروع قرارداد معتبر نیست"); - + if (command.IsInstallment && !command.Workshops.Any(x => x.HasContractPlanInPerson || x.HasInsurancePlanInPerson)) { return opration.Failed("برای قراردادهای اقساطی حداقل یک کارگاه باید دارای طرح حضوری باشد"); } - contractStartGr.AddMonthsFa((int)command.Duration, out var contractEndGr); - contractEndGr = contractEndGr.ToFarsi().FindeEndOfMonth().ToGeorgianDateTime(); + var today = DateTime.Today; @@ -1212,10 +1233,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication CreateInstitutionContractLegalPartyRequest request, long representativeId) { var opration = new OperationResult(); - - if (_contractingPartyRepository.Exists(x => - x.LName == request.CompanyName && x.RegisterId == request.RegisterId)) - return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + if (representativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); @@ -1257,10 +1275,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication CreateInstitutionContractRealPartyRequest request, long representativeId) { var operation = new OperationResult(); - - if (_contractingPartyRepository.Exists(x => - x.LName == request.LName && x.Nationalcode == request.NationalCode)) - return operation.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + if (representativeId < 1) return operation.Failed("لطفا معرف را انتخاب کنید"); diff --git a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs index 35931e8e..631d7f94 100644 --- a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs +++ b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs @@ -94,6 +94,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati var dateOfBirthGr = dateOfBirth.ToGeorgianDateTime(); + var contractingParty =await _personalContractingPartyRepository.GetByNationalCode(nationalCode); //اگر طرف حساب موقت قبلا ایجاد شده دیتای آن را برمیگرداند if (getExistTemp != null) @@ -156,6 +157,14 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati result.IdNumberSerial = createTemp.IdNumberSerial; result.IdNumber = idNumber; + if (contractingParty != null) + { + result.Address = contractingParty.Address; + result.City = contractingParty.City; + result.State = contractingParty.State; + result.RepresentativeId = contractingParty.RepresentativeId; + } + return op.Succcedded(result); } } diff --git a/CompanyManagment.EFCore/Repository/PersonalContractingPartyRepository.cs b/CompanyManagment.EFCore/Repository/PersonalContractingPartyRepository.cs index 547583a4..5a72e8eb 100644 --- a/CompanyManagment.EFCore/Repository/PersonalContractingPartyRepository.cs +++ b/CompanyManagment.EFCore/Repository/PersonalContractingPartyRepository.cs @@ -738,6 +738,11 @@ public class PersonalContractingPartyRepository : RepositoryBase GetByNationalCode(string nationalCode) + { + return await _context.PersonalContractingParties.FirstOrDefaultAsync(x => x.Nationalcode == nationalCode); + } + #endregion } diff --git a/ServiceHost/Areas/Admin/Controllers/ContractingPartyController.cs b/ServiceHost/Areas/Admin/Controllers/ContractingPartyController.cs index 9eef011b..246b764e 100644 --- a/ServiceHost/Areas/Admin/Controllers/ContractingPartyController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ContractingPartyController.cs @@ -29,12 +29,6 @@ public class ContractingPartyController : AdminBaseController Console.WriteLine(watch.Elapsed); return result.ToList(); } - [HttpGet("t/{name}")] - public async Task> TestApi(string name) - { - var res = _contractingPartyApplication.SearchByName(name).Where(x=>x.Contains(name)).ToList(); - return res; - } /// /// جزئیات طرف حساب حقیقی diff --git a/ServiceHost/Areas/Admin/Controllers/InsuranceJobsController.cs b/ServiceHost/Areas/Admin/Controllers/InsuranceJobsController.cs index 3393cd1c..5ba6cbc5 100644 --- a/ServiceHost/Areas/Admin/Controllers/InsuranceJobsController.cs +++ b/ServiceHost/Areas/Admin/Controllers/InsuranceJobsController.cs @@ -13,6 +13,7 @@ public class InsuranceJobsController:AdminBaseController _insuranceJobApplication = insuranceJobApplication; } + [HttpGet("select-list")] public async Task>> GetInsuranceSelectList() { var res =await _insuranceJobApplication.GetSelectList();