refactor: standardize extension naming and add extension inquiry handling

This commit is contained in:
2025-10-11 10:26:02 +03:30
parent 6a0abf2545
commit 4707c389ae
8 changed files with 171 additions and 65 deletions

View File

@@ -54,9 +54,9 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
void UpdateStatusIfNeeded(long institutionContractId);
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
Task<InstitutionContractExtensionPaymentResponse> GetExtenstionPaymentMethod(InstitutionContractExtensionPaymentRequest request);
Task<OperationResult> ExtenstionComplete(InstitutionContractExtensionCompleteRequest request);
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
Task<InstitutionContractExtensionPlanResponse> GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request);
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
}

View File

@@ -6,8 +6,8 @@ namespace Company.Domain.InstitutionContractInsertTempAgg;
public interface IInstitutionContractExtenstionTempRepository
{
Task Create(InstitutionContractExtenstionTemp institutionContract);
Task Create(InstitutionContractExtensionTemp institutionContract);
Task<InstitutionContractExtenstionTemp> GetPreviousExtenstionData(long contractingPartyId);
Task<InstitutionContractExtensionTemp> GetPreviousExtenstionData(long contractingPartyId);
Task Remove(Guid id);
}

View File

@@ -7,9 +7,9 @@ using MongoDB.Bson.Serialization.Attributes;
namespace Company.Domain.InstitutionContractInsertTempAgg;
public class InstitutionContractExtenstionTemp
public class InstitutionContractExtensionTemp
{
public InstitutionContractExtenstionTemp(long previousContractingPartyId)
public InstitutionContractExtensionTemp(long previousContractingPartyId)
{
Id = Guid.NewGuid();
PreviousId = previousContractingPartyId;
@@ -24,7 +24,7 @@ public class InstitutionContractExtenstionTemp
public string Province { get; set; }
public List<EditContactInfo> ContactInfos { get; set; }
public List<InstitutionContractExtenstionTempWorkshop> Workshops { get; set; }
public List<InstitutionContractExtensionTempWorkshop> Workshops { get; set; }
public InstitutionContractExtensionPlanDetail OneMonth { get; set; }
public InstitutionContractExtensionPlanDetail ThreeMonths { get; set; }
@@ -45,7 +45,7 @@ public class InstitutionContractExtenstionTemp
ContactInfos = contactInfos;
}
public void SetWorkshopsAndPlanAmounts(List<InstitutionContractExtenstionTempWorkshop> workshops,
public void SetWorkshopsAndPlanAmounts(List<InstitutionContractExtensionTempWorkshop> workshops,
InstitutionContractExtensionPlanDetail oneMonth,
InstitutionContractExtensionPlanDetail threeMonth, InstitutionContractExtensionPlanDetail sixMonth,
InstitutionContractExtensionPlanDetail twelveMonth, bool hasContractInPerson)
@@ -94,9 +94,9 @@ public class InstitutionContractExtenstionTempPlan
public string Obligation { get; set; }
}
public class InstitutionContractExtenstionTempWorkshop
public class InstitutionContractExtensionTempWorkshop
{
public InstitutionContractExtenstionTempWorkshop(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
public InstitutionContractExtensionTempWorkshop(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
bool insurance, bool insuranceInPerson,
bool rollCall,bool rollCallInPerson, bool customizeCheckout,double price)
{

View File

@@ -5,19 +5,19 @@ namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRe
public class InstitutionContractExtenstionTempRepository:IInstitutionContractExtenstionTempRepository
{
private readonly IMongoCollection<InstitutionContractExtenstionTemp> _institutionExtenstionTemp;
private readonly IMongoCollection<InstitutionContractExtensionTemp> _institutionExtenstionTemp;
public InstitutionContractExtenstionTempRepository(IMongoDatabase database)
{
_institutionExtenstionTemp = database.GetCollection<InstitutionContractExtenstionTemp>("InstitutionContractExtenstionTemp");
_institutionExtenstionTemp = database.GetCollection<InstitutionContractExtensionTemp>("InstitutionContractExtenstionTemp");
}
public async Task Create(InstitutionContractExtenstionTemp institutionContract)
public async Task Create(InstitutionContractExtensionTemp institutionContract)
{
await _institutionExtenstionTemp.InsertOneAsync(institutionContract);
}
public async Task<InstitutionContractExtenstionTemp> GetPreviousExtenstionData(long contractingPartyId)
public async Task<InstitutionContractExtensionTemp> GetPreviousExtenstionData(long contractingPartyId)
{
var entity = await _institutionExtenstionTemp
.Find(x => x.PreviousId == contractingPartyId)

View File

@@ -189,13 +189,7 @@ public interface IInstitutionContractApplication
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
/// <summary>
/// تمدید قرارداد
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> ExtensionAsync(CreateInstitutionContractRequest command);
/// <summary>
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
@@ -218,16 +212,30 @@ public interface IInstitutionContractApplication
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
Task<OperationResult> VerifyOtp(Guid publicId, string code);
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
Task<InstitutionContractExtensionPaymentResponse> GetExtenstionPaymentMethod(
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
Task<InstitutionContractExtensionPlanResponse> GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
InstitutionContractExtensionPaymentRequest request);
//TODO:Complete Data.
Task<OperationResult> ExtenstionComplete(InstitutionContractExtensionCompleteRequest request);
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
Task<OperationResult> ExtensionInquiry(InstitutionContractExtensionInquiryRequest command);
}
public class InstitutionContractExtensionInquiryRequest
{
public long ContractingPartyId { get; set; }
public string NationalCode { get; set; }
public string BirthDate { get; set; }
public string Mobile { get; set; }
}
public class InstitutionContractExtensionInquiryResponse
{
}
public class InstitutionContractExtensionCompleteRequest

View File

@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Application.Sms;
using _0_Framework.Application.UID;
using _0_Framework.Exceptions;
using AccountManagement.Application.Contracts.Account;
using Company.Domain.ContarctingPartyAgg;
@@ -25,6 +26,7 @@ using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.Workshop;
using CompanyManagment.EFCore.Migrations;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.Packaging.Ionic.Zip;
using PersianTools.Core;
using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel;
@@ -47,6 +49,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
private readonly IContactInfoApplication _contactInfoApplication;
private readonly IAccountApplication _accountApplication;
private readonly ISmsService _smsService;
private readonly IUidService _uidService;
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
@@ -56,7 +59,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication,
IContractingPartyTempRepository contractingPartyTempRepository,
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, ISmsService smsService)
IAccountApplication accountApplication, ISmsService smsService, IUidService uidService)
{
_institutionContractRepository = institutionContractRepository;
_contractingPartyRepository = contractingPartyRepository;
@@ -71,6 +74,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
_contactInfoApplication = contactInfoApplication;
_accountApplication = accountApplication;
_smsService = smsService;
_uidService = uidService;
}
public OperationResult Create(CreateInstitutionContract command)
@@ -1149,11 +1153,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
throw new NotImplementedException();
}
public async Task<OperationResult> ExtensionAsync(CreateInstitutionContractRequest command)
{
throw new NotImplementedException();
}
public Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList()
{
@@ -1276,30 +1276,120 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return res;
}
public async Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId)
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
{
return await _institutionContractRepository.GetExtenstionInquiry(previousContractId);
return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
}
public async Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(
public async Task<InstitutionContractExtensionWorkshopsResponse> GetExtensionWorkshops(
InstitutionContractExtensionWorkshopsRequest request)
{
return await _institutionContractRepository.GetExtenstionWorkshops(request);
return await _institutionContractRepository.GetExtensionWorkshops(request);
}
public async Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request)
public async Task<InstitutionContractExtensionPlanResponse> GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request)
{
return await _institutionContractRepository.GetExtenstionInstitutionPlan(request);
return await _institutionContractRepository.GetExtensionInstitutionPlan(request);
}
public async Task<InstitutionContractExtensionPaymentResponse> GetExtenstionPaymentMethod(InstitutionContractExtensionPaymentRequest request)
public async Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request)
{
return await _institutionContractRepository.GetExtenstionPaymentMethod(request);
return await _institutionContractRepository.GetExtensionPaymentMethod(request);
}
public async Task<OperationResult> ExtenstionComplete(InstitutionContractExtensionCompleteRequest request)
public async Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request)
{
return await _institutionContractRepository.ExtenstionComplete(request);
return await _institutionContractRepository.ExtensionComplete(request);
}
public async Task<OperationResult> ExtensionInquiry(InstitutionContractExtensionInquiryRequest command)
{
var op = new OperationResult();
#region Validations
if (string.IsNullOrWhiteSpace(command.NationalCode) || string.IsNullOrWhiteSpace(command.BirthDate) ||
string.IsNullOrWhiteSpace(command.Mobile))
return op.Failed("هیچ یک از فیلد ها نمیتواند خالی باشد");
if (command.NationalCode.NationalCodeValid() != "valid")
return op.Failed("کد ملی نا معتبر است");
if (!command.BirthDate.TryToGeorgianDateTime(out var dateOfBirthGr))
return op.Failed("تاریخ تولد نا معتبر است");
if (!command.Mobile.IsMobileValid())
return op.Failed("شماره همراه نا معتبر است");
#endregion
var contractingParty = _contractingPartyRepository.Get(command.ContractingPartyId);
if (contractingParty == null)
return op.Failed("طرف حسابی یافت نشد");
// بررسی اینکه آیا طرف حساب قبلا احراز هویت شده یا نه
if (contractingParty.IsAuthenticated)
return op.Failed("طرف حساب قبلا احراز هویت شده است");
// // بررسی تطابق تاریخ تولد
// if (contractingParty.DateOfBirth != null && contractingParty.DateOfBirth != dateOfBirthGr)
// return op.Failed("تاریخ تولد مطابقت ندارد");
// // بررسی تطابق شماره تماس
// if (contractingParty.Phone != command.Mobile)
// return op.Failed("شما قبلا با شماره همراه دیگری ثبت نام نموده اید");
// چک کردن مطابقت شماره همراه و کد ملی
var isMachMobilAndNationalCode = await _uidService.IsMachPhoneWithNationalCode(command.NationalCode, command.Mobile);
if (isMachMobilAndNationalCode == null)
return op.Failed("خطا در سرویس احراز هویت");
if (!isMachMobilAndNationalCode.IsMatched)
return op.Failed("شماره همراه وارد شده با کد ملی مطابقت ندارد");
// دریافت اطلاعات احراز هویت
var apiResponse = await _uidService.GetPersonalInfo(command.NationalCode, command.BirthDate);
if (apiResponse == null)
throw new InternalServerException("خطا در سرویس احراز هویت");
if (apiResponse.ResponseContext.Status.Code == 14)
throw new InternalServerException("سیستم احراز هویت در دسترس نمی باشد");
if (apiResponse.ResponseContext.Status.Code != 0)
return op.Failed($"{apiResponse.ResponseContext.Status.Message}");
var idNumber = apiResponse.IdentificationInformation.ShenasnamehNumber == "0"
? apiResponse.IdentificationInformation.NationalId
: apiResponse.IdentificationInformation.ShenasnamehNumber;
if (contractingParty.IsLegal =="حقیقی")
{
// انجام احراز هویت طرف حساب
contractingParty.Authentication(apiResponse.BasicInformation.FirstName,
apiResponse.BasicInformation.LastName,
apiResponse.BasicInformation.FatherName,
idNumber,
apiResponse.IdentificationInformation.ShenasnameSeri,
apiResponse.IdentificationInformation.ShenasnameSerial,
command.BirthDate,
apiResponse.BasicInformation.GenderEnum);
}
else
{
contractingParty.LegalAuthentication(apiResponse.BasicInformation.FirstName,
apiResponse.BasicInformation.LastName,
apiResponse.BasicInformation.FatherName,
idNumber,
apiResponse.IdentificationInformation.ShenasnameSeri,
apiResponse.IdentificationInformation.ShenasnameSerial,
command.BirthDate,
apiResponse.BasicInformation.GenderEnum);
}
// ذخیره تغییرات
await _contractingPartyRepository.SaveChangesAsync();
return op.Succcedded();
}
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
@@ -1504,4 +1594,4 @@ public class WorkshopsAndEmployeeViewModel
public int ArchiveCode { get; set; }
}
#endregion
#endregion

View File

@@ -41,7 +41,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
private readonly CompanyContext _context;
private readonly IEmployerRepository _employerRepository;
private readonly IWorkshopRepository _workshopRepository;
private readonly IMongoCollection<InstitutionContractExtenstionTemp> _institutionExtensionTemp;
private readonly IMongoCollection<InstitutionContractExtensionTemp> _institutionExtensionTemp;
private readonly IPlanPercentageRepository _planPercentageRepository;
private readonly ISmsService _smsService;
@@ -55,7 +55,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
_planPercentageRepository = planPercentageRepository;
_smsService = smsService;
_institutionExtensionTemp =
database.GetCollection<InstitutionContractExtenstionTemp>("InstitutionContractExtenstionTemp");
database.GetCollection<InstitutionContractExtensionTemp>("InstitutionContractExtensionTemp");
}
public EditInstitutionContract GetDetails(long id)
@@ -1818,7 +1818,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
return await _context.InstitutionContractSet.FirstOrDefaultAsync(x => x.PublicId == id);
}
public async Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId)
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
{
var institutionContracts = await _context.InstitutionContractSet
.Include(institutionContract => institutionContract.ContactInfoList)
@@ -1879,7 +1879,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
await _institutionExtensionTemp.DeleteOneAsync(x => x.Id == previousContractTemp.Id);
}
var institutionContractTemp = new InstitutionContractExtenstionTemp(previousContractId);
var institutionContractTemp = new InstitutionContractExtensionTemp(previousContractId);
await _institutionExtensionTemp.InsertOneAsync(institutionContractTemp);
@@ -1908,7 +1908,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
return res;
}
public async Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(
public async Task<InstitutionContractExtensionWorkshopsResponse> GetExtensionWorkshops(
InstitutionContractExtensionWorkshopsRequest request)
{
var extenstionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId)
@@ -1983,7 +1983,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
return res;
}
public async Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(
public async Task<InstitutionContractExtensionPlanResponse> GetExtensionInstitutionPlan(
InstitutionContractExtensionPlanRequest request)
{
if (request.WorkshopTemps.Count == 0)
@@ -2037,7 +2037,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
}
var workshops = request.WorkshopTemps
.Select(x => new InstitutionContractExtenstionTempWorkshop(x.WorkshopName, x.CountPerson,
.Select(x => new InstitutionContractExtensionTempWorkshop(x.WorkshopName, x.CountPerson,
x.ContractAndCheckout, x.ContractAndCheckoutInPerson,
x.Insurance, x.InsuranceInPerson, x.RollCall, x.RollCall,
x.RollCallInPerson, x.WorkshopServicesAmount)).ToList();
@@ -2050,7 +2050,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
return res;
}
public async Task<InstitutionContractExtensionPaymentResponse> GetExtenstionPaymentMethod(
public async Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
InstitutionContractExtensionPaymentRequest request)
{
var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId).FirstOrDefaultAsync();
@@ -2084,7 +2084,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
return res;
}
public async Task<OperationResult> ExtenstionComplete(InstitutionContractExtensionCompleteRequest request)
public async Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request)
{
var institutionContractTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TemporaryId)
.FirstOrDefaultAsync();

View File

@@ -479,42 +479,50 @@ public class institutionContractController : AdminBaseController
[HttpGet("extenstion/inquiry/{previousContractId}")]
public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtenstionInquiry(long previousContractId)
public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtensionInquiry(long previousContractId)
{
var res= await _institutionContractApplication.GetExtenstionInquiry(previousContractId);
var res= await _institutionContractApplication.GetExtensionInquiry(previousContractId);
return res;
}
[HttpPost("extenstion/workshops")]
public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> ExtenstionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request)
public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> ExtensionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request)
{
var res =await _institutionContractApplication.GetExtenstionWorkshops(request);
var res =await _institutionContractApplication.GetExtensionWorkshops(request);
return res;
}
[HttpPost("extenstion/institution-plan")]
public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtenstionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request)
public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtensionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request)
{
var res =await _institutionContractApplication.GetExtenstionInstitutionPlan(request);
var res =await _institutionContractApplication.GetExtensionInstitutionPlan(request);
return res;
}
[HttpPost("extenstion/payment-method")]
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtenstionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request)
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtensionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request)
{
var res =await _institutionContractApplication.GetExtenstionPaymentMethod(request);
var res =await _institutionContractApplication.GetExtensionPaymentMethod(request);
return res;
}
[HttpPost("extenstion/complete")]
public async Task<ActionResult<OperationResult>> ExtenstionComplete([FromBody]InstitutionContractExtensionCompleteRequest request)
public async Task<ActionResult<OperationResult>> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request)
{
var res =await _institutionContractApplication.ExtenstionComplete(request);
var res =await _institutionContractApplication.ExtensionComplete(request);
return res;
}
[HttpPost("extenstion/inquiry")]
public async Task<ActionResult<OperationResult>> ExtensionInquiry([FromBody] InstitutionContractExtensionInquiryRequest command)
{
var res = await _institutionContractApplication.ExtensionInquiry(command);
return res;
}
}
public class VerifyOtpRequest
{
public Guid PublicId { get; set; }