From 8ec717916cf90c1090d75a47d2cf8895baf0164f Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 25 Nov 2025 11:40:44 +0330 Subject: [PATCH] add unauthenticated edit support for contracting party phone and info in institution contracts --- .../PersonalContractingParty.cs | 29 +++++++++++++ ...tutionContractExtensionWorkshopsRequest.cs | 12 ++++++ .../InstitutionContractApplication.cs | 14 +++++++ .../InstitutionContractRepository.cs | 42 ++++++++++++++++++- 4 files changed, 96 insertions(+), 1 deletion(-) diff --git a/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs b/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs index abe676c0..d5735e60 100644 --- a/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs +++ b/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs @@ -251,6 +251,35 @@ public class PersonalContractingParty : EntityBase this.IsAuthenticated = true; Phone = phone; } + + public void UnAuthenticateRealEdit(string fName, string lName, string fatherName,string idNumber, + string idNumberSeri, string idNumberSerial, string dateOfBirth, Gender gender,string phone) + { + this.FName = fName; + this.LName = lName; + this.FatherName = fatherName; + this.IdNumberSeri = idNumberSeri; + this.IdNumberSerial = idNumberSerial; + this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : null; + this.IdNumber = idNumber; + this.Gender = gender; + Phone = phone; + } + + public void UnAuthenticateLegalEdit(string fName, string lName, string fatherName, string idNumber, + string idNumberSeri, + string idNumberSerial, string dateOfBirth, Gender gender, string phone) + { + CeoFName = fName; + CeoLName = lName; + this.FatherName = fatherName; + this.IdNumberSeri = idNumberSeri; + this.IdNumberSerial = idNumberSerial; + this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : null; + this.IdNumber = idNumber; + this.Gender = gender; + Phone = phone; + } public void RegisterComplete(string fatherName, string idNumberSeri, string idNumberSerial, DateTime dateOfBirth, Gender gender) { diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionWorkshopsRequest.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionWorkshopsRequest.cs index c741cdf8..b06ac584 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionWorkshopsRequest.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionWorkshopsRequest.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using _0_Framework.Application.Enums; using CompanyManagment.App.Contracts.InstitutionContractContactinfo; namespace CompanyManagment.App.Contracts.InstitutionContract; @@ -11,4 +12,15 @@ public class InstitutionContractExtensionWorkshopsRequest public string Province { get; set; } public string Address { get; set; } public List ContactInfos { get; set; } + /// + /// اطلاعات شخص حقیقی + /// + public CreateInstitutionContractRealPartyRequest RealParty { get; set; } + + /// + /// اطلاعات شخص حقوقی + /// + public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; } + + public LegalType LegalType { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 6f2a931a..6e9fc2e6 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -974,6 +974,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication throw new BadRequestException("امکان ایجاد قرارداد تکراری وجود ندارد"); } } + + if (!command.LegalParty.IsAuth) + { + var legalCommand = command.LegalParty; + existingContractingParty.UnAuthenticateLegalEdit(legalCommand.FName,legalCommand.LName,legalCommand.FatherName,legalCommand.IdNumber,existingContractingParty.IdNumberSeri,existingContractingParty.IdNumberSerial, + legalCommand.BirthDateFa,legalCommand.Gender,legalCommand.PhoneNumber); + } } else if (command.ContractingPartyLegalType == LegalType.Real) { @@ -990,8 +997,15 @@ public class InstitutionContractApplication : IInstitutionContractApplication throw new BadRequestException("امکان ایجاد قرارداد تکراری وجود ندارد"); } } + if (!command.RealParty.IsAuth) + { + var realCommand = command.RealParty; + existingContractingParty.UnAuthenticateRealEdit(realCommand.FName,realCommand.LName,realCommand.FatherName,realCommand.IdNumber,existingContractingParty.IdNumberSeri,existingContractingParty.IdNumberSerial, + realCommand.BirthDateFa,realCommand.Gender,realCommand.PhoneNumber); + } } + await _institutionContractRepository.SaveChangesAsync(); PersonalContractingParty contractingParty; if (existingContractingParty != null) { diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 804252fd..fe15e8fc 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -42,6 +42,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using MongoDB.Driver; using OfficeOpenXml.Packaging.Ionic.Zip; @@ -1961,13 +1962,51 @@ public class InstitutionContractRepository : RepositoryBase GetExtensionWorkshops( InstitutionContractExtensionWorkshopsRequest request) { + var transaction = await _context.Database.BeginTransactionAsync(); + switch (request.LegalType) + { + case LegalType.Legal: + if (!request.LegalParty.IsAuth) + { + var legalCommand = request.LegalParty; + var personalContractingParty = _context.PersonalContractingParties + .FirstOrDefault(x=>x.NationalId == legalCommand.NationalId); + if (personalContractingParty is {IsAuthenticated:false}) + { + personalContractingParty.UnAuthenticateLegalEdit(legalCommand.FName, legalCommand.LName, + legalCommand.FatherName, legalCommand.IdNumber, personalContractingParty.IdNumberSeri, + personalContractingParty.IdNumberSerial, legalCommand.BirthDateFa, legalCommand.Gender, + legalCommand.PhoneNumber); + } + } + break; + case LegalType.Real: + if (!request.RealParty.IsAuth) + { + var realCommand = request.RealParty; + var personalContractingParty = _context.PersonalContractingParties + .FirstOrDefault(x => x.Nationalcode == realCommand.NationalCode); + if (personalContractingParty is {IsAuthenticated:false}) + { + personalContractingParty.UnAuthenticateRealEdit(realCommand.FName, realCommand.LName, + realCommand.FatherName, realCommand.IdNumber, personalContractingParty.IdNumberSeri, + personalContractingParty.IdNumberSerial, realCommand.BirthDateFa, realCommand.Gender, + realCommand.PhoneNumber); + } + } + break; + } + + await SaveChangesAsync(); + await transaction.CommitAsync(); + var extenstionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId) .FirstOrDefaultAsync(); if (extenstionTemp == null) { throw new BadRequestException("دیتای درخواست شده نامعتبر است"); } - + var prevInstitutionContracts = await _context.InstitutionContractSet .Include(x => x.WorkshopGroup) .ThenInclude(institutionContractWorkshopGroup => institutionContractWorkshopGroup.CurrentWorkshops) @@ -2139,6 +2178,7 @@ public class InstitutionContractRepository : RepositoryBase x.Id == request.TemporaryId) .FirstOrDefaultAsync(); + if (institutionContractTemp == null) throw new BadRequestException("اطلاعات وارد شده نامعتبر است"); var selectedDuration = institutionContractTemp.Duration switch