add PublicId and RegistrationStatus enum to InstitutionContractTemp and related classes

This commit is contained in:
MahanCh
2025-08-16 16:50:29 +03:30
parent e1ac481dc3
commit 204355acd6
11 changed files with 10532 additions and 42 deletions

View File

@@ -21,6 +21,7 @@ public class ContractingPartyTemp : EntityBase
IdNumberSerial = idNumberSerial;
Gender = gender;
DateOfBirth = dateOfBirth;
PublicId = Guid.NewGuid();
}
/// <summary>
@@ -91,6 +92,8 @@ public class ContractingPartyTemp : EntityBase
/// </summary>
public string Address { get; private set; }
public Guid PublicId { get; set; }
public void UpdateAddress(string state, string city, string address)
{
this.State = state;

View File

@@ -3,12 +3,13 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application.UID;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
namespace Company.Domain.TemporaryClientRegistrationAgg;
public class InstitutionContractTemp : EntityBase
{
public InstitutionContractTemp(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
public InstitutionContractTemp(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, InstitutionContractTempStatus registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
ContractingPartyTempId = contractingPartyTempId;
PaymentModel = paymentModel;
@@ -23,6 +24,7 @@ public class InstitutionContractTemp : EntityBase
MessageId = messageId;
SendVerifyCodeTime = sendVerifyCodeTime;
VerifyCodeEndTime = verifyCodeEndTime;
PublicId = Guid.NewGuid();
}
/// <summary>
@@ -88,7 +90,7 @@ public class InstitutionContractTemp : EntityBase
/// -
/// Completed ثبت نام تکمیل شده
/// </summary>
public string RegistrationStatus { get; private set; }
public InstitutionContractTempStatus RegistrationStatus { get; private set; }
/// <summary>
/// آی دی پیامک ارسال شده
@@ -105,10 +107,16 @@ public class InstitutionContractTemp : EntityBase
/// </summary>
public DateTime? VerifyCodeEndTime{ get; private set; }
/// <summary>
/// آیدی عمومی
/// برای نمایش در آدرس
/// </summary>
public Guid PublicId { get; set; }
public List<InstitutionContractContactInfoTemp> ContactInfoList { get; set; }
public void Edit(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
public void Edit(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, InstitutionContractTempStatus registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
ContractingPartyTempId = contractingPartyTempId;
PaymentModel = paymentModel;
@@ -125,7 +133,7 @@ public class InstitutionContractTemp : EntityBase
VerifyCodeEndTime = verifyCodeEndTime;
}
public void Update(string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
public void Update(string verifyCode, InstitutionContractTempStatus registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
VerifyCode = verifyCode;
RegistrationStatus = registrationStatus;
@@ -134,9 +142,10 @@ public class InstitutionContractTemp : EntityBase
VerifyCodeEndTime = verifyCodeEndTime;
}
public void ChangeRegistrationStatus(string registrationStatus)
public void ChangeRegistrationStatus(InstitutionContractTempStatus registrationStatus)
{
RegistrationStatus = registrationStatus;
}
}
}

View File

@@ -67,7 +67,9 @@ public class CreateInstitutionContractTemp
/// -
/// Completed ثبت نام تکمیل شده
/// </summary>
public string RegistrationStatus { get; set; }
public InstitutionContractTempStatus RegistrationStatus { get; set; }
/// <summary>
/// آی دی پیامک ارسال شده

View File

@@ -125,6 +125,13 @@ public interface ITemporaryClientRegistrationApplication
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateInstitutionContractTemp(CreateInstitutionContractTempRequest command);
/// <summary>
/// ارسال لینک تایید قوانین و مقررات به طرف حساب
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
Task<OperationResult> SendAgreementLink(long contractingPartyTempId);
}
public class CreateInstitutionContractTempRequest

View File

@@ -3,4 +3,14 @@
public class InstitutionContractTempViewModel : CreateInstitutionContractTemp
{
public long Id { get; set; }
}
public enum InstitutionContractTempStatus
{
BeforeSendVerifyCode,
VerifyCodeSent,
PendingToCompletion,
ReceivedCodeFromClient,
Completed
}

View File

@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.Sms;
using _0_Framework.Application.UID;
using _0_Framework.Exceptions;
using Company.Domain.ContarctingPartyAgg;
using Company.Domain.InstitutionPlanAgg;
using Company.Domain.TemporaryClientRegistrationAgg;
@@ -12,6 +13,7 @@ using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
using IPE.SmsIrClient.Models.Results;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PersianTools.Core;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
@@ -101,7 +103,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (institutionContractTemp != null)
{
if (institutionContractTemp.RegistrationStatus == "Completed")
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.Completed)
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
}
@@ -691,7 +693,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
var periodModelInt = Convert.ToInt32(periodModel);
var create = new InstitutionContractTemp(contractingPartyTempId, paymentModel, periodModel, totalPayment,
contractStartDate, contractEndDate, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null,
contractStartDate, contractEndDate, "official", valueAddedTax, "",
InstitutionContractTempStatus.BeforeSendVerifyCode, 0, null,
null);
_institutionContractTempRepository.Create(create);
_institutionContractTempRepository.SaveChanges();
@@ -707,12 +710,13 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (institutionContractTemp.VerifyCodeEndTime != null)
{
var spaning = (DateTime.Now - institutionContractTemp.VerifyCodeEndTime.Value);
if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent" && spaning > new TimeSpan(0, 0, 0) &&
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.VerifyCodeSent &&
spaning > new TimeSpan(0, 0, 0) &&
spaning < new TimeSpan(0, 1, 0))
return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید");
}
if (institutionContractTemp.RegistrationStatus == "Completed")
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.Completed)
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
@@ -721,7 +725,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
var contractEnd = DateTime.Now.AddMonths(periodModelInt);
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
update.Edit(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractStartDate,
contractEndDate, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null);
contractEndDate, "official", valueAddedTax, "", InstitutionContractTempStatus.BeforeSendVerifyCode, 0,
null, null);
_institutionContractTempRepository.SaveChanges();
//temporary
@@ -752,7 +757,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
if (institutionContractTemp.RegistrationStatus == "BeforeSendVerifyCode")
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.BeforeSendVerifyCode)
{
//ساخت کد شش رقمی
Random generator = new Random();
@@ -771,13 +776,14 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
//تغییر وضعیت به ارسال شده
if (update != null)
{
update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2));
update.Update(code, InstitutionContractTempStatus.VerifyCodeSent, sendResult.MessageId, DateTime.Now,
DateTime.Now.AddMinutes(2));
_institutionContractTempRepository.SaveChanges();
return op.Succcedded(1, "کد برای شما پیامک شد");
}
}
if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent")
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.VerifyCodeSent)
{
if (DateTime.Now < institutionContractTemp.VerifyCodeEndTime.Value)
@@ -807,7 +813,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (update != null)
{
update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now,
update.Update(code, InstitutionContractTempStatus.VerifyCodeSent, sendResult.MessageId,
DateTime.Now,
DateTime.Now.AddMinutes(2));
_institutionContractTempRepository.SaveChanges();
return op.Succcedded(1, "کد برای شما پیامک شد");
@@ -818,7 +825,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
//if (institutionContractTemp.RegistrationStatus == "ReceivedCodeFromClient")
// return op.Succcedded(2, "انتقال به بخش پرداخت");
if (institutionContractTemp.RegistrationStatus == "Completed")
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.Completed)
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
return op.Failed("خظا");
}
@@ -837,7 +844,8 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (institutionContractTemp == null)
return op.Failed("خظا");
if (institutionContractTemp.RegistrationStatus != "VerifyCodeSent")
if (institutionContractTemp.RegistrationStatus != InstitutionContractTempStatus.VerifyCodeSent)
return op.Failed("خطا");
if (institutionContractTemp.VerifyCodeEndTime < DateTime.Now)
@@ -891,7 +899,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
update.ChangeRegistrationStatus("Completed");
update.ChangeRegistrationStatus(InstitutionContractTempStatus.PendingToCompletion);
_institutionContractTempRepository.SaveChanges();
@@ -907,25 +915,43 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
public async Task<OperationResult> CreateInstitutionContractTemp(CreateInstitutionContractTempRequest command)
{
var contractingPartyId = command.ContractingPartyTempId;
await using var transaction = await _contractingPartyTempRepository.BeginTransactionAsync();
var updateAddressRes = await UpdateAddress(contractingPartyId, command.State, command.City, command.Address);
if (!updateAddressRes.IsSuccedded)
return updateAddressRes;
var createWorkshopRes = await CreateOrUpdateWorkshopTemp(command.Workshops, contractingPartyId);
if (!createWorkshopRes.IsSuccedded)
return createWorkshopRes;
var createInstitution = await CreateOrUpdateInstitutionContractTemp(contractingPartyId, command.PeriodModel,
command.PaymentModel,
command.TotalPayment, command.ValueAddedTax, command.ContractStartFa.ToGeorgianDateTime());
if (!createInstitution.IsSuccedded)
return createInstitution;
var payOffRes =await PayOffCompleted(contractingPartyId);
var payOffRes = await PayOffCompleted(contractingPartyId);
if (!payOffRes.IsSuccedded)
return payOffRes;
await transaction.CommitAsync();
return new OperationResult().Succcedded();
}
public async Task<OperationResult> SendAgreementLink(long contractingPartyTempId)
{
var op = new OperationResult();
var institutionContractTemp = _institutionContractTempRepository.Get(contractingPartyTempId);
if (institutionContractTemp == null)
throw new NotFoundException("طرف حساب یافت نشد");
if (institutionContractTemp.RegistrationStatus == InstitutionContractTempStatus.Completed)
throw new BadRequestException("شما قبلا ثبت نام خود را تکمیل نموده اید");
//ارسال لینک به طرف حساب
//Todo: implement the logic to send the agreement link to the contracting party
return op.Succcedded();
}
}

View File

@@ -0,0 +1,63 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddPublicIdtoinstitutioncontractandcontractingparty : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<int>(
name: "RegistrationStatus",
table: "InstitutionContractTemps",
type: "int",
maxLength: 30,
nullable: false,
defaultValue: 0,
oldClrType: typeof(string),
oldType: "nvarchar(30)",
oldMaxLength: 30,
oldNullable: true);
migrationBuilder.AddColumn<Guid>(
name: "PublicId",
table: "InstitutionContractTemps",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
migrationBuilder.AddColumn<Guid>(
name: "PublicId",
table: "ContractingPartyTemp",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "PublicId",
table: "InstitutionContractTemps");
migrationBuilder.DropColumn(
name: "PublicId",
table: "ContractingPartyTemp");
migrationBuilder.AlterColumn<string>(
name: "RegistrationStatus",
table: "InstitutionContractTemps",
type: "nvarchar(30)",
maxLength: 30,
nullable: true,
oldClrType: typeof(int),
oldType: "int",
oldMaxLength: 30);
}
}
}

View File

@@ -5401,6 +5401,9 @@ namespace CompanyManagment.EFCore.Migrations
.HasMaxLength(12)
.HasColumnType("nvarchar(12)");
b.Property<Guid>("PublicId")
.HasColumnType("uniqueidentifier");
b.Property<string>("State")
.HasMaxLength(35)
.HasColumnType("nvarchar(35)");
@@ -5485,9 +5488,12 @@ namespace CompanyManagment.EFCore.Migrations
.HasMaxLength(3)
.HasColumnType("nvarchar(3)");
b.Property<string>("RegistrationStatus")
b.Property<Guid>("PublicId")
.HasColumnType("uniqueidentifier");
b.Property<int>("RegistrationStatus")
.HasMaxLength(30)
.HasColumnType("nvarchar(30)");
.HasColumnType("int");
b.Property<DateTime?>("SendVerifyCodeTime")
.HasColumnType("datetime2");

View File

@@ -50,7 +50,7 @@ public class InstitutionContractTempRepository : RepositoryBase<long, Institutio
public async Task<List<RegistrationWorkflowMainList>> GetAllCompletedRegistration()
{
return await _context.InstitutionContractTemps.Where(x => x.RegistrationStatus == "Completed")
return await _context.InstitutionContractTemps.Where(x => x.RegistrationStatus == InstitutionContractTempStatus.Completed)
.Join(_context.ContractingPartyTemps,
institutionContract => institutionContract.ContractingPartyTempId,
contractingParty => contractingParty.id,

View File

@@ -1,3 +1,4 @@
using System.Transactions;
using _0_Framework.Application;
using _0_Framework.Application.Enums;
using AccountManagement.Application.Contracts.Account;
@@ -12,6 +13,7 @@ using CompanyManagment.App.Contracts.TemporaryClientRegistration;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using ServiceHost.Areas.Client.Pages.Company.PaymentToEmployee;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Admin.Controllers;
@@ -68,7 +70,6 @@ public class institutionContractController : AdminBaseController
}
/// <summary>
/// ویرایش
/// </summary>
@@ -596,7 +597,7 @@ public class institutionContractController : AdminBaseController
InsuranceInPerson = command.InsuranceInPerson
};
return _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp);
return _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp);
}
[HttpPost("create/institution-plan-calculator")]
@@ -607,7 +608,7 @@ public class institutionContractController : AdminBaseController
request.workshopList, request.PeriodModel, request.PaymentModel, request.ContractStartType);
return res;
}
/// <summary>
/// ایجاد
/// </summary>
@@ -618,18 +619,52 @@ public class institutionContractController : AdminBaseController
{
return await _temporaryClientRegistration.CreateInstitutionContractTemp(command);
}
public record InstitutionPlanCalculatorRequest(
long ContractingPartyTempId,
List<WorkshopTempViewModel> workshopList,
string PeriodModel = "12",
string PaymentModel = "OneTime",
string ContractStartType = "currentMonth");
public class CreateInquiryRequest
/// <summary>
/// ارسال لینک تایید قوانین و مقررات به طرف حساب
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
[HttpPost("create/send-link/{contractingPartyTempId}")]
public async Task<ActionResult<OperationResult>> SendAgreementLink(long contractingPartyTempId)
{
public string NationalCode { get; set; }
public string DateOfBirth { get; set; }
public string Mobile { get; set; }
return await _temporaryClientRegistration.SendAgreementLink(contractingPartyTempId);
}
[HttpPost("create/verify-code")]
public async Task<ActionResult<OperationResult>> CheckVerifyCode(VerifyCodeRequest request)
{
using var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
var operationResult =
await _temporaryClientRegistration.CheckVerifyCodeIsTrue(request.ContractingPartyId, request.verifyCode);
if (!operationResult.IsSuccedded)
return operationResult;
operationResult = await _temporaryClientRegistration.PayOffCompleted(request.ContractingPartyId);
if (operationResult.IsSuccedded)
transaction.Complete();
return operationResult;
}
}
public record InstitutionPlanCalculatorRequest(
long ContractingPartyTempId,
List<WorkshopTempViewModel> workshopList,
string PeriodModel = "12",
string PaymentModel = "OneTime",
string ContractStartType = "currentMonth");
public class CreateInquiryRequest
{
public string NationalCode { get; set; }
public string DateOfBirth { get; set; }
public string Mobile { get; set; }
}
public class VerifyCodeRequest
{
public long ContractingPartyId { get; set; }
public string verifyCode { get; set; }
}