merge task schedule with file for orginal publish

This commit is contained in:
MahanCh
2025-04-16 17:02:14 +03:30
17 changed files with 1725 additions and 26 deletions

View File

@@ -9,6 +9,13 @@ public interface ISmsService
void Send(string number, string message);
bool VerifySend(string number, string message);
bool LoginSend(string number, string message);
/// <summary>
/// ارسال کد به کلاینت برای تکمیل فرایند ثبت نام
/// </summary>
/// <param name="number"></param>
/// <param name="code"></param>
/// <returns></returns>
Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code);
bool SendAccountsInfo(string number,string fullName, string userName);
Task<ApiResultViewModel> GetByMessageId(int messId);
Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate);

View File

@@ -0,0 +1,32 @@
namespace _0_Framework.Application;
public class SentSmsViewModel
{
public SentSmsViewModel()
{
IsSuccedded = false;
}
public bool IsSuccedded { get; set; }
public string Message { get; set; }
public byte StatusCode { get; set; }
public int MessageId { get; set; }
public SentSmsViewModel Succedded(byte statusCode, string message, int messageId)
{
IsSuccedded = true;
Message = message;
StatusCode = statusCode;
MessageId = messageId;
return this;
}
public SentSmsViewModel Failed(byte statusCode, string message, int messageId)
{
IsSuccedded = false;
Message = message;
StatusCode = statusCode;
MessageId = messageId;
return this;
}
}

View File

@@ -9,6 +9,7 @@ using IPE.SmsIrClient;
using IPE.SmsIrClient.Models.Requests;
using IPE.SmsIrClient.Models.Results;
using Microsoft.Extensions.Configuration;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace _0_Framework.Application.Sms;
@@ -110,6 +111,31 @@ public class SmsService : ISmsService
}
}
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
{
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var result = new SentSmsViewModel();
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
var sendResult = await smsIr.VerifySendAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
Thread.Sleep(2000);
if (sendResult.Message == "موفق")
{
var status = sendResult.Status;
var message = sendResult.Message;
var messaeId = sendResult.Data.MessageId;
return result.Succedded(status, message, messaeId);
}
else
{
var status = sendResult.Status;
var message = sendResult.Message;
var messaeId = sendResult.Data.MessageId;
return result.Failed(status, message, messaeId);
}
}
public bool SendAccountsInfo(string number, string fullName, string userName)
{

View File

@@ -16,14 +16,14 @@ public class TaskSchedule:EntityBase
UnitType = unitType;
UnitNumber = unitNumber;
LastEndTaskDate = lastEndTaskDate;
IsCanceled = IsActive.True;
IsActive = IsActive.False;
}
public string Count { get; private set; }
public TaskScheduleType Type { get; private set; }
public TaskScheduleUnitType UnitType { get; private set; }
public string UnitNumber { get; private set; }
public DateTime LastEndTaskDate { get; private set; }
public IsActive IsCanceled { get; private set; }
public IsActive IsActive { get; private set; }
public List<Tasks> TasksList { get; set; }
public void SetLastEndTaskDate(DateTime lastEndTaskDate)
@@ -33,6 +33,6 @@ public class TaskSchedule:EntityBase
public void DeActive()
{
IsCanceled = IsActive.False;
IsActive = IsActive.False;
}
}

View File

@@ -15,7 +15,7 @@ public class TaskScheduleMapping : IEntityTypeConfiguration<TaskSchedule>
builder.Property(x => x.Type).HasConversion<string>().HasMaxLength(12);
builder.Property(x => x.UnitNumber).HasMaxLength(10);
builder.Property(x => x.UnitType).HasConversion<string>().HasMaxLength(10);
builder.Property(x => x.IsCanceled).HasConversion<string>().HasMaxLength(5);
builder.Property(x => x.IsActive).HasConversion<string>().HasMaxLength(5);
builder.HasMany(x => x.TasksList).WithOne(x => x.TaskSchedule)
.HasForeignKey(x => x.TaskScheduleId);

View File

@@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace AccountMangement.Infrastructure.EFCore.Migrations
{
/// <inheritdoc />
public partial class taskSchedulerenameisActive : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "IsCanceled",
table: "TaskSchedules",
newName: "IsActive");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "IsActive",
table: "TaskSchedules",
newName: "IsCanceled");
}
}
}

View File

@@ -759,7 +759,7 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("IsCanceled")
b.Property<string>("IsActive")
.IsRequired()
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");

View File

@@ -20,4 +20,11 @@ public interface IContractingPartyTempRepository :IRepository<long, ContractingP
/// <param name="nationalCode"></param>
/// <returns></returns>
ContractingPartyTempViewModel GetByNationalCode(string nationalCode);
/// <summary>
/// دریافت اطلاعات طرف حساب موقت با کد ملی
/// </summary>
/// <param name="nationalCode"></param>
/// <returns></returns>
ContractingPartyTempViewModel GetByContractingPartyTempId(long contractingPartyTempId);
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using _0_Framework.Application.UID;
using _0_Framework.Domain;
namespace Company.Domain.TemporaryClientRegistrationAgg;
@@ -119,4 +120,15 @@ public class InstitutionContractTemp : EntityBase
VerifyCodeEndTime = verifyCodeEndTime;
}
public void Update(string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
VerifyCode = verifyCode;
RegistrationStatus = registrationStatus;
MessageId = messageId;
SendVerifyCodeTime = sendVerifyCodeTime;
VerifyCodeEndTime = verifyCodeEndTime;
}
}

View File

@@ -63,6 +63,8 @@ public class CreateInstitutionContractTemp
/// -
/// VerifyCodeSent کد ارسال شده
/// -
/// ReceivedCodeFromClient
/// -
/// Completed ثبت نام تکمیل شده
/// </summary>
public string RegistrationStatus { get; set; }

View File

@@ -62,5 +62,34 @@ public interface ITemporaryClientRegistrationApplication
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel);
Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax);
/// <summary>
/// دریافت کد برای کلاینت
/// از طرف سرور
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
Task<OperationResult> ReceivedCodeFromServer(long contractingPartyTempId);
/// <summary>
/// ورود کد از طرف کلاینت
/// برا چک کردن
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <param name="verifyCode"></param>
/// <returns></returns>
Task<OperationResult> CheckVerifyCodeIsTrue(long contractingPartyTempId, string verifyCode);
/// <summary>
/// تکمیل پرداخت
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <param name="verifyCode"></param>
/// <returns></returns>
Task<OperationResult> PayOffCompleted(long contractingPartyTempId);
}

View File

@@ -25,7 +25,7 @@ public class SmsResultApplication : ISmsResultApplication
return op.Succcedded();
}
public List<SmsResultViewModel> Search(SmsResultSearchModel searchModel)
public List<App.Contracts.SmsResult.SmsResultViewModel> Search(SmsResultSearchModel searchModel)
{
var result = _smsResultRepository.Search(searchModel);

View File

@@ -1,13 +1,16 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.Sms;
using _0_Framework.Application.UID;
using Company.Domain.ContarctingPartyAgg;
using Company.Domain.InstitutionPlanAgg;
using Company.Domain.TemporaryClientRegistrationAgg;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
using IPE.SmsIrClient.Models.Results;
using Microsoft.EntityFrameworkCore;
using PersianTools.Core;
@@ -22,8 +25,9 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
private readonly IPlanPercentageRepository _planPercentageRepository;
private readonly IWorkshopServicesTempRepository _workshopServicesTempRepository;
private readonly IInstitutionContractTempRepository _institutionContractTempRepository;
private readonly ISmsService _smsService;
public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService, IWorkshopTempRepository workshopTempRepository, IPlanPercentageRepository planPercentageRepository, IWorkshopServicesTempRepository workshopServicesTempRepository, IInstitutionContractTempRepository institutionContractTempRepository)
public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService, IWorkshopTempRepository workshopTempRepository, IPlanPercentageRepository planPercentageRepository, IWorkshopServicesTempRepository workshopServicesTempRepository, IInstitutionContractTempRepository institutionContractTempRepository, ISmsService smsService)
{
_contractingPartyTempRepository = contractingPartyTempRepository;
_personalContractingPartyRepository = personalContractingPartyRepository;
@@ -32,6 +36,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
_planPercentageRepository = planPercentageRepository;
_workshopServicesTempRepository = workshopServicesTempRepository;
_institutionContractTempRepository = institutionContractTempRepository;
_smsService = smsService;
}
/// <summary>
@@ -60,6 +65,9 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
if (!mobile.IsMobileValid())
return op.Failed("شماره همراه نا معتبر است");
#endregion
@@ -82,6 +90,15 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
//اگر طرف حساب موقت قبلا ایجاد شده دیتای آن را برمیگرداند
if (getExistTemp != null)
{
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, getExistTemp.Id);
if (institutionContractTemp != null)
{
if (institutionContractTemp.RegistrationStatus == "Completed")
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
}
if (getExistTemp.DateOfBirth != dateOfBirthGr)
return op.Failed("تاریخ تولد مطابقت ندارد");
@@ -396,19 +413,192 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
public async Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel)
public async Task<OperationResult> CreateOrUpdateInstitutionContractTemp(long contractingPartyTempId, string periodModel, string paymentModel, double totalPayment, double valueAddedTax)
{
var op = new OperationResult();
var contractingPartyTemp = await
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (contractingPartyTemp == null)
if (institutionContractTemp == null)
{
var periodModelInt = Convert.ToInt32(periodModel);
var contractstart = DateTime.Now;
var contractEnd = DateTime.Now.AddMonths(periodModelInt);
var create = new InstitutionContractTemp(contractingPartyTempId,paymentModel,periodModel,totalPayment,contractstart,contractEnd,"official", valueAddedTax,"", "BeforeSendVerifyCode", 0,null,null);
_institutionContractTempRepository.Create(create);
_institutionContractTempRepository.SaveChanges();
return op.Succcedded();
}
else
{
if (institutionContractTemp.VerifyCodeEndTime != null)
{
var spaning = (institutionContractTemp.VerifyCodeEndTime.Value - DateTime.Now);
if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent" && spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0))
return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید");
}
if (institutionContractTemp.RegistrationStatus == "Completed")
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
return op.Failed("");
throw new System.NotImplementedException();
var periodModelInt = Convert.ToInt32(periodModel);
var contractstart = DateTime.Now;
var contractEnd = DateTime.Now.AddMonths(periodModelInt);
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
update.Edit(contractingPartyTempId, paymentModel, periodModel, totalPayment, contractstart, contractEnd, "official", valueAddedTax, "", "BeforeSendVerifyCode", 0, null, null);
_institutionContractTempRepository.SaveChanges();
return op.Succcedded();
}
}
/// <summary>
/// دریافت کد برای کلاینت
/// از طرف سرور
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <returns></returns>
public async Task<OperationResult> ReceivedCodeFromServer(long contractingPartyTempId)
{
var op = new OperationResult();
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (institutionContractTemp == null)
return op.Failed("خظا");
var update = _institutionContractTempRepository.Get(institutionContractTemp.Id);
if (institutionContractTemp.RegistrationStatus == "BeforeSendVerifyCode")
{
//ساخت کد شش رقمی
Random generator = new Random();
String code = generator.Next(1, 1000000).ToString("D6");
//ارسال اس ام اس
var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId);
var sendResult = await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code);
if (!sendResult.IsSuccedded)
return op.Failed($"{sendResult.Message}");
//ذخیره کد در دیتا بیس
//ذخیره تاریخ ارسال و مهلت پایان
//ذخیره آیدی پیامک
//تغییر وضعیت به ارسال شده
if (update != null)
{
update.Update(code, "VerifyCodeSent", sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2));
_institutionContractTempRepository.SaveChanges();
return op.Succcedded(1, "کد برای شما پیامک شد");
}
}
if (institutionContractTemp.RegistrationStatus == "VerifyCodeSent")
{
var spaning = (institutionContractTemp.VerifyCodeEndTime.Value - DateTime.Now);
if ((spaning > new TimeSpan(0, 0, 0) && spaning < new TimeSpan(0, 1, 0)))
return op.Failed("شما به تازگی پیامک دریافت نموده اید دو دقیقه صبر کنید و دوباره تلاش کنید");
if ((spaning > new TimeSpan(0, 0, 0) && spaning > new TimeSpan(0, 1, 0)))
{
//ساخت کد شش رقمی
Random generator = new Random();
String code = generator.Next(1, 1000000).ToString("D6");
//ارسال اس ام اس
var getContractingPaty = _contractingPartyTempRepository.GetByContractingPartyTempId(contractingPartyTempId);
var sendResult =await _smsService.SendVerifyCodeToClient(getContractingPaty.Phone, code);
if(!sendResult.IsSuccedded)
return op.Failed($"{sendResult.Message}");
//ذخیره کد در دیتا بیس
//ذخیره تاریخ ارسال و مهلت پایان
//ذخیره آیدی پیامک
//تغییر وضعیت به ارسال شده
if (update != null)
{
update.Update(code, "VerifyCodeSent",sendResult.MessageId, DateTime.Now, DateTime.Now.AddMinutes(2));
_institutionContractTempRepository.SaveChanges();
return op.Succcedded(1, "کد برای شما پیامک شد");
}
}
}
//if (institutionContractTemp.RegistrationStatus == "ReceivedCodeFromClient")
// return op.Succcedded(2, "انتقال به بخش پرداخت");
if (institutionContractTemp.RegistrationStatus == "Completed")
return op.Failed("شما قبلا ثبت نام خود را تکمیل نموده اید");
return op.Failed("خظا");
}
/// <summary>
/// ورود کد از طرف کلاینت
/// برا چک کردن
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <param name="verifyCode"></param>
/// <returns></returns>
public async Task<OperationResult> CheckVerifyCodeIsTrue(long contractingPartyTempId, string verifyCode)
{
var op = new OperationResult();
var institutionContractTemp = await
_institutionContractTempRepository.GetInstitutionContractTemp(0, contractingPartyTempId);
if (institutionContractTemp == null)
return op.Failed("خظا");
if(institutionContractTemp.RegistrationStatus != "VerifyCodeSent")
return op.Failed("خطا");
if(institutionContractTemp.VerifyCodeEndTime < DateTime.Now)
return op.Failed("کد شما منقضی شده است");
if(institutionContractTemp.SendVerifyCodeTime < DateTime.Now && institutionContractTemp.VerifyCodeEndTime >= DateTime.Now)
{
if (institutionContractTemp.VerifyCode == verifyCode)
{
return op.Succcedded();
}
else
{
return op.Failed("کد وارد شده صحیح نیست");
}
}
return op.Failed("کد وارد شده صحیح نیست");
}
/// <summary>
/// تکمیل پرداخت
/// </summary>
/// <param name="contractingPartyTempId"></param>
/// <param name="verifyCode"></param>
/// <returns></returns>
public async Task<OperationResult> PayOffCompleted(long contractingPartyTempId)
{
var op = new OperationResult();
return op.Succcedded();
}
}

View File

@@ -70,4 +70,30 @@ public class ContractingPartyTempRepository : RepositoryBase<long, ContractingPa
}).FirstOrDefault(x => x.NationalCode == nationalCode);
}
public ContractingPartyTempViewModel GetByContractingPartyTempId(long contractingPartyTempId)
{
return _context.ContractingPartyTemps.Select(x => new ContractingPartyTempViewModel
{
Id = x.id,
DateOfBirth = x.DateOfBirth,
DateOfBirthFa = x.DateOfBirth.ToFarsi(),
IdNumberSeri = x.IdNumberSeri,
IdNumberSerial = x.IdNumberSerial,
Address = x.Address,
City = x.City,
FatherName = x.FatherName,
FName = x.FName,
LName = x.LName,
Gender = x.Gender,
NationalCode = x.NationalCode,
IdNumber = x.IdNumber,
Phone = x.Phone,
State = x.State,
}).FirstOrDefault(x => x.Id == contractingPartyTempId);
}
}

View File

@@ -15,10 +15,10 @@ public class SmsResultRepository : RepositoryBase<long, SmsResult> , ISmsResultR
_context = context;
}
public List<SmsResultViewModel> Search(SmsResultSearchModel searchModel)
public List<App.Contracts.SmsResult.SmsResultViewModel> Search(SmsResultSearchModel searchModel)
{
var query = _context.SmsResults.Select(x => new SmsResultViewModel()
var query = _context.SmsResults.Select(x => new App.Contracts.SmsResult.SmsResultViewModel()
{
Id = x.id,
MessageId = x.MessageId,

View File

@@ -93,20 +93,52 @@ namespace ServiceHost.Pages
// var dateOfBirth = Console.ReadLine();
// Console.WriteLine("enter phoneNumber ... ");
// var phone = Console.ReadLine();
// var res = _clientRegistrationApplication.CreateContractingPartyTemp(nationalCode, dateOfBirth, phone).GetAwaiter().GetResult();
// var res = await _clientRegistrationApplication.CreateContractingPartyTemp(nationalCode, dateOfBirth,
// phone);
// if (res.IsSuccedded)
// {
// var updateAddress =
// _clientRegistrationApplication.UpdateAddress(res.Data.Id, "gilan", "rasht", "hajiabad").GetAwaiter().GetResult();
// {
// var updateAddress =await
// _clientRegistrationApplication.UpdateAddress(res.Data.Id, "gilan", "rasht", "hajiabad");
// if (updateAddress.IsSuccedded)
// {
// var workshopSelected = _clientRegistrationApplication.GetWorkshopTemp(res.Data.Id).GetAwaiter().GetResult();
// if (workshopSelected.Count > 0)
// {
// var result = _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(res.Data.Id,"12","OneTime").GetAwaiter().GetResult();
// {
// var result = await
// _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(res.Data.Id, "12",
// "OneTime");
// Console.WriteLine("sumOfWorkshopPayment : " + result.SumOfWorkshopsPaymentDouble);
// Console.WriteLine("TotalPaymentDouble : " + result.TotalPaymentDouble);
// }
// var createInstitutionContract = await
// _clientRegistrationApplication.CreateOrUpdateInstitutionContractTemp(res.Data.Id, null,
// null, result.TotalPaymentDouble, 0);
// if (createInstitutionContract.IsSuccedded)
// {
// var sendVerfyCode =await _clientRegistrationApplication.ReceivedCodeFromServer(res.Data.Id);
// if (sendVerfyCode.IsSuccedded)
// {
// Console.WriteLine("enter the code ... ");
// var codeReceived = Console.ReadLine();
// var completeSms = await
// _clientRegistrationApplication.CheckVerifyCodeIsTrue(res.Data.Id, codeReceived);
// if (completeSms.IsSuccedded)
// {
// var payOffCompleted =
// await _clientRegistrationApplication.PayOffCompleted(res.Data.Id);
// if (payOffCompleted.IsSuccedded)
// {
// Console.WriteLine("finaly completed");
// }
// else
// {
// Console.WriteLine(payOffCompleted.Message);
// }
// }
// }
// }
// }
// else
// {
// var workshops = new List<WorkshopTempViewModel>();
@@ -140,17 +172,51 @@ namespace ServiceHost.Pages
// var result = _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(res.Data.Id).GetAwaiter().GetResult();
// Console.WriteLine("sumOfWorkshopPayment : " + result.SumOfWorkshopsPaymentDouble);
// Console.WriteLine("TotalPaymentDouble : " + result.TotalPaymentDouble);
// }
// var createInstitutionContract = await
// _clientRegistrationApplication.CreateOrUpdateInstitutionContractTemp(res.Data.Id, null,
// null, result.TotalPaymentDouble, 0);
// if (createInstitutionContract.IsSuccedded)
// {
// var sendVerfyCode = await _clientRegistrationApplication.ReceivedCodeFromServer(res.Data.Id);
// if (sendVerfyCode.IsSuccedded)
// {
// Console.WriteLine("enter the code ... ");
// var codeReceived = Console.ReadLine();
// var completeSms = await
// _clientRegistrationApplication.CheckVerifyCodeIsTrue(res.Data.Id, codeReceived);
// if (completeSms.IsSuccedded)
// {
// var payOffCompleted =
// await _clientRegistrationApplication.PayOffCompleted(res.Data.Id);
// if (payOffCompleted.IsSuccedded)
// {
// Console.WriteLine("finaly completed");
// }
// else
// {
// Console.WriteLine(payOffCompleted.Message);
// }
// }
// }
// }
// }
// }
// }
// }
// Console.WriteLine("do you want to exit ... ");
// var exitCheck = Console.ReadLine();
// if (exitCheck == "yes")
// if (exitCheck == "y")
// ex = true;
//}
// while (!ex)
// {
// var onGet = _institutionPlanApplication.GetByFirst();