using System.Collections.Concurrent; using System.Transactions; using _0_Framework.Application; using _0_Framework.Application.Enums; using _0_Framework.Application.PaymentGateway; using _0_Framework.Application.Sms; using _0_Framework.Exceptions; using AccountManagement.Application.Contracts.Account; using Company.Domain.TemporaryClientRegistrationAgg; using CompanyManagement.Infrastructure.Excel.InstitutionContract; using CompanyManagment.App.Contracts.Employer; using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContractContactinfo; using CompanyManagment.App.Contracts.InstitutionPlan; using CompanyManagment.App.Contracts.PersonalContractingParty; using CompanyManagment.App.Contracts.Representative; using CompanyManagment.App.Contracts.TemporaryClientRegistration; using CompanyManagment.App.Contracts.Workshop; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore.Metadata.Conventions; using ServiceHost.Areas.Client.Pages.Company.PaymentToEmployee; using ServiceHost.BaseControllers; namespace ServiceHost.Areas.Admin.Controllers; /// /// کنترلر قرارداد های مالی موسسه /// public class institutionContractController : AdminBaseController { private readonly IInstitutionContractApplication _institutionContractApplication; private readonly IPersonalContractingPartyApp _contractingPartyApplication; private readonly IContactInfoApplication _contactInfoApplication; private readonly IAccountApplication _accountApplication; private readonly IEmployerApplication _employerApplication; private readonly IWorkshopApplication _workshopApplication; private readonly ITemporaryClientRegistrationApplication _temporaryClientRegistration; private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication; private readonly IPaymentGateway _paymentGateway; private static readonly ConcurrentDictionary _locks = new ConcurrentDictionary(); public institutionContractController(IInstitutionContractApplication institutionContractApplication, IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication, IEmployerApplication employerApplication, IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration, ITemporaryClientRegistrationApplication clientRegistrationApplication,IHttpClientFactory httpClientFactory) { _institutionContractApplication = institutionContractApplication; _contractingPartyApplication = contractingPartyApplication; _contactInfoApplication = contactInfoApplication; _accountApplication = accountApplication; _employerApplication = employerApplication; _workshopApplication = workshopApplication; _temporaryClientRegistration = temporaryClientRegistration; _clientRegistrationApplication = clientRegistrationApplication; _paymentGateway = new SepehrPaymentGateway(httpClientFactory); } /// /// لیست قرارداد های مالی /// /// [HttpGet] public async Task>> GetList( InstitutionContractListSearchModel searchModel) { return await _institutionContractApplication.GetList(searchModel); } [HttpGet("select-list")] public async Task>> GetContractingPartySelectList(string search,string selected) { var result = await _institutionContractApplication .GetInstitutionContractSelectList(search,selected); return result; } /// /// وضعیت تب ها /// /// /// [HttpGet("stats")] public async Task> GetListStats( InstitutionContractListSearchModel searchModel) { return await _institutionContractApplication.GetListStats(searchModel); } /// /// ویرایش /// /// [HttpPut] public async Task> Edit([FromBody] EditInstitutionContractRequest command) { var op = new OperationResult(); var phoneNumber = command.ContactInfos.FirstOrDefault(x => x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId); if (conractingParty.IsLegal == "حقیقی" && string.IsNullOrWhiteSpace(conractingParty.Nationalcode)) return new JsonResult(op.Failed("کد ملی طرف حساب وجود ندارد")); if (conractingParty.IsLegal == "حقوقی" && string.IsNullOrWhiteSpace(conractingParty.NationalId)) return new JsonResult(op.Failed("شناسه ملی طرف حساب وجود ندارد")); if (phoneNumber == null) return new JsonResult(op.Failed("تعیین شماره همراه با سمت طرف قرارداد اجباریست")); //if (string.IsNullOrWhiteSpace(command.HasValueAddedTax)) // command.HasValueAddedTax = "false"; var result = await _institutionContractApplication.EditAsync(command); var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId); var counter = command.ContactInfos.Count; var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel() { ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }) .Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList(); if (result.IsSuccedded && counter > 0) { if (getOldContarct.Count > 0) { foreach (var item in getOldContarct) { _contactInfoApplication.RemoveContactInfo(item.Id); foreach (var phone in command.ContactInfos) { if (phone.PhoneNumber != null) { var contactinfo = new CreateContactInfo { InstitutionContractId = item.Id, PhoneType = phone.PhoneType, Position = phone.Position, PhoneNumber = phone.PhoneNumber, FnameLname = phone.FnameLname, SendSms = phone.SendSmsString == "true" ? true : false }; _contactInfoApplication.Create(contactinfo); } Thread.Sleep(500); } } } _contactInfoApplication.RemoveContactInfo(command.Id); foreach (var item in command.ContactInfos) { if (item.PhoneNumber != null) { var contactinfo = new CreateContactInfo { InstitutionContractId = result.SendId, PhoneType = item.PhoneType, Position = item.Position, PhoneNumber = item.PhoneNumber, FnameLname = item.FnameLname, SendSms = item.SendSmsString == "true" ? true : false }; _contactInfoApplication.Create(contactinfo); } Thread.Sleep(500); } //ساخت اکانت کلاینت var userPass = conractingParty.IsLegal == "حقیقی" ? conractingParty.Nationalcode : conractingParty.NationalId; var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass); if (!checkExistAccount) { var createAcc = new RegisterAccount { Fullname = conractingParty.LName, Username = userPass, Password = userPass, Mobile = phoneNumber.PhoneNumber, NationalCode = userPass }; var res = _accountApplication.RegisterClient(createAcc); if (res.IsSuccedded) _institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId); } } //Thread.Sleep(500); //for (int i = 0; i <= counter - 1; i++) //{ // if (command.ContactInformationList[i].PhoneNumber != null) // { // var contactinfo = new CreateContactInfo() // { // InstitutionContractId = result.SendId, // PhoneType = command.ContactInformationList[i].PhoneType, // Position = command.ContactInformationList[i].Position, // PhoneNumber = command.ContactInformationList[i].PhoneNumber, // FnameLname = command.ContactInformationList[i].FnameLname, // SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false // }; // _contactInfoApplication.Create(contactinfo); // } // Thread.Sleep(500); //} return new JsonResult(result); } /// /// حذف قرارداد مالی /// /// /// [HttpDelete("{id}")] public async Task> Remove(long id) { _institutionContractApplication.RemoveContract(id); return new OperationResult().Succcedded(); } [HttpPost("deActive/{id}")] public ActionResult DeActive(long id, string balance) { var result = new OperationResult(); if (balance == "0") { result = _institutionContractApplication.DeActive(id); if (result.IsSuccedded) result = _institutionContractApplication.DeActiveAllConnections(id); } else { result = _institutionContractApplication.DeActiveBlue(id); if (result.IsSuccedded) result = _institutionContractApplication.DeActiveAllConnections(id); } return result; } /// /// غیر فعال /// /// /// [HttpPost("active/{id}")] public ActionResult IsActive(long id) { var result = _institutionContractApplication.Active(id); if (result.IsSuccedded) { result = _institutionContractApplication.ReActiveAllConnections(id); } return result; } [HttpPost("sign/{id}")] public ActionResult Sign(long Id) { var result = _institutionContractApplication.Sign(Id); if (result.IsSuccedded) return new JsonResult(new { isSuccedded = true }); return new JsonResult(new { isSuccedded = false }); } [HttpPost("unsign/{id}")] public ActionResult UnSign(long Id) { var id = Convert.ToInt64(Id); var result = _institutionContractApplication.UnSign(Id); if (result.IsSuccedded) return new JsonResult(new { isSuccedded = true }); return new JsonResult(new { isSuccedded = false }); } /// /// بلاک طرف حساب /// /// /// [HttpPost("block-contracting-party/{id}")] public IActionResult OnPostBlockContractingParty(long id) { var result = _contractingPartyApplication.Block(id); var afterActtion = _contractingPartyApplication.GetDetails(id); return new JsonResult(new { isSuccedded = result.IsSuccedded, isBlock = afterActtion.IsBlock, blockTimes = afterActtion.BlockTimes }); } /// /// آنبلاک طرف حساب /// /// /// [HttpPost("unblock-contracting-party/{id}")] public IActionResult OnPostUnBlockContractingParty(long id) { var result = _contractingPartyApplication.DisableBlock(id); var afterActtion = _contractingPartyApplication.GetDetails(id); return new JsonResult(new { isSuccedded = result.IsSuccedded, isBlock = afterActtion.IsBlock, blockTimes = afterActtion.BlockTimes }); } [HttpPost("create/inquiry")] public async Task>> CreateInquiry( [FromBody] CreateInquiryRequest request) { var res = await _temporaryClientRegistration.CreateContractingPartyTemp(request.NationalCode, request.DateOfBirth, request.Mobile); return res; } [HttpPost("workshop-service-calculator")] public ActionResult WorkshopServiceCalculator([FromBody]CreateWorkshopTemp command) { var workshopTemp = new WorkshopTempViewModel { WorkshopName = command.WorkshopName, CountPerson = command.CountPerson, ContractAndCheckout = command.ContractAndCheckout, Insurance = command.Insurance, RollCall = command.RollCall, CustomizeCheckout = command.CustomizeCheckout, ContractAndCheckoutInPerson = command.ContractAndCheckoutInPerson, InsuranceInPerson = command.InsuranceInPerson }; var response = _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp); var result = new WorkshopServiceCalculatorResponse { TotalAmount = response.OnlineAndInPersonSumAmountStr }; return result; } [HttpPost("create/institution-plan-calculator")] public async Task> InstitutionPlanCalculator( [FromBody] InstitutionPlanCalculatorRequest request) { var res = await _temporaryClientRegistration.GetTotalPaymentAndWorkshopList(request.TotalAmountMonth,duration: request.Duration,request.HasInPersonContract); var result = new InstitutionPlanCalculatorResponse() { TotalAmountWithTax = res.OneTimeTotalPaymentStr, OneTimeTotalAmountWithoutTax = res.OneTimeWithoutTaxPaymentStr, OneTimeValueAddedTaxStr = res.OneTimeValueAddedTaxStr, Installments = res.MonthlyInstallments, OneTimeTotalAmount = res.OneTimeTotalPaymentStr, MonthlyTotalAmount = res.MonthlyTotalPaymentStr, MonthlyTotalAmountWithoutTax = res.MonthlyWithoutTaxPaymentStr, ContractStart = res.ContractStartFa, ContractEnd = res.ContractEndFa, Discount = res.Discount, MonthlyValueAddedTaxStr = res.MonthlyValueAddedTaxStr, DailyCompensation = res.DailyCompensation, Obligation = res.OneTimeTotalPaymentStr, PaymentForOneMonth = res.SumOfWorkshopsPayment, DiscountedAmountForOneMonth = res.DiscountedAmountForOneMonth }; return result; } /// /// ایجاد /// /// /// [HttpPost] public async Task> Create([FromBody]CreateInstitutionContractRequest command) { var res =await _institutionContractApplication.CreateAsync(command); if(!res.IsSuccedded) throw new BadRequestException(res.Message); return res; } /// /// ارسال لینک تایید قوانین و مقررات به طرف حساب /// /// /// [HttpPost("create/send-link/{contractingPartyTempId}")] public async Task> SendAgreementLink(long contractingPartyTempId) { return await _temporaryClientRegistration.SendAgreementLink(contractingPartyTempId); } [HttpPost("create/verify-code")] public async Task> CheckVerifyCode(VerifyCodeRequest request) { using var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled); var operationResult = await _clientRegistrationApplication.CheckVerifyCodeIsTrue(request.ContractingPartyId, request.verifyCode); if (!operationResult.IsSuccedded) return operationResult; operationResult = await _temporaryClientRegistration.PayOffCompleted(request.ContractingPartyId); if (operationResult.IsSuccedded) transaction.Complete(); return operationResult; } [HttpPost("create/set-discount")] public ActionResult SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request) { var res = _institutionContractApplication.CalculateDiscount(request); return res; } [HttpPost("create/reset-discount")] public ActionResult ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request) { var res = _institutionContractApplication.ResetDiscountCreate(request); return res; } /// /// /// /// /// [HttpGet("/api/institutionContract/Verification/{id:guid}")] [AllowAnonymous] public async Task> GetVerificationDetails(Guid id) { return await _institutionContractApplication.GetVerificationDetails(id); } [HttpPost("/api/institutionContract/Verify")] [AllowAnonymous] public async Task>> Verify([FromBody] InstitutionVerificationRequest command) { // URL برای redirect به درگاه پرداخت var paymentRedirectUrl = Url.Action("ProcessPayment", "institutionContract", null, Request.Scheme); var callback = Url.Action("Verify", "General", null, Request.Scheme); var res = await _institutionContractApplication.VerifyOtpAndMakeGateway(command.Id, command.Code, callback); if (!res.IsSuccedded) return new OperationResult().Failed(res.Message); var payUrl = _paymentGateway.GetStartPayUrl(res.Data); // URL کامل برای redirect شامل paymentUrl به عنوان query parameter var redirectUrl = $"{paymentRedirectUrl}?paymentUrl={Uri.EscapeDataString(payUrl)}"; return new OperationResult().Succcedded(redirectUrl); } [HttpGet("/api/institutionContract/ProcessPayment")] [AllowAnonymous] public IActionResult ProcessPayment([FromQuery] string paymentUrl) { if (string.IsNullOrEmpty(paymentUrl)) { return BadRequest("Payment URL is required"); } // redirect به درگاه پرداخت return Redirect(paymentUrl); } [HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")] [AllowAnonymous] public async Task>> SendVerifyOtp(Guid id) { var sem = _locks.GetOrAdd(id, _ => new SemaphoreSlim(1, 1)); await sem.WaitAsync(); try { var res = await _institutionContractApplication.SendVerifyOtp(id); return res; } finally { sem.Release(); } } [HttpGet("extenstion/inquiry/{previousContractId}")] public async Task> ExtensionInquiry(long previousContractId) { var res= await _institutionContractApplication.GetExtensionInquiry(previousContractId); return res; } [HttpPost("extenstion/workshops")] public async Task> ExtensionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request) { var res =await _institutionContractApplication.GetExtensionWorkshops(request); return res; } [HttpPost("extenstion/institution-plan")] public async Task> ExtensionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request) { var res =await _institutionContractApplication.GetExtensionInstitutionPlan(request); return res; } [HttpPost("extenstion/payment-method")] public async Task> GetExtensionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request) { var res =await _institutionContractApplication.GetExtensionPaymentMethod(request); return res; } [HttpPost("extension/set-discount")] public async Task> SetDiscountForExtension([FromBody]InstitutionContractSetDiscountForExtensionRequest request) { var res =await _institutionContractApplication.SetDiscountForExtension(request); return res; } [HttpPost("extension/reset-discount")] public async Task> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request) { var res =await _institutionContractApplication.ResetDiscountForExtension(request); return res; } [HttpPost("extenstion/complete")] public async Task> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request) { var res =await _institutionContractApplication.ExtensionComplete(request); return res; } [HttpGet("amendment/workshops/{institutionContractId}")] public async Task> GetAmendmentWorkshops(long institutionContractId) { var res =await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId); return res; } [HttpPost("resend-verify-link/{institutionContractId}")] public async Task ResendVerifyLink(long institutionContractId) { var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId); return res; } [HttpPost("amendment/insert-temp-workshops")] public async Task> InsertAmendmentTempWorkshops([FromBody]InstitutionContractAmendmentTempWorkshopViewModel request) { var res =await _institutionContractApplication.InsertAmendmentTempWorkshops(request); return res; } [HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")] public async Task RemoveAmendmentWorkshops(Guid workshopTempId) { await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId); return Ok(); } [HttpPost("amendment/payment-details")] public async Task> GetAmendmentPaymentDetails([FromBody]InsitutionContractAmendmentPaymentRequest request) { var res =await _institutionContractApplication.GetAmendmentPaymentDetails(request); return res; } [HttpGet("edit-old/{id}")] public ActionResult GetEditOldDetails(long id) { var representativList = new List(); var contractingPartyList = new List(); var res = _institutionContractApplication.GetDetails(id); var representative = new RepresentativeViewModel { Id = res.RepresentativeId, FullName = res.RepresentativeName }; representativList.Add(representative); var contractingParty = new PersonalContractingPartyViewModel { id = res.ContractingPartyId, FullName = _contractingPartyApplication.GetFullName(res.ContractingPartyId) }; contractingPartyList.Add(contractingParty); res.RepresentativeSelectList = new SelectList(representativList, "Id", "FullName"); res.ContractingPartiesSelectList = new SelectList(contractingPartyList, "id", "FullName"); var employer = _employerApplication.GetEmployerByContracrtingPartyID(res.ContractingPartyId); var emplId = employer.Select(x => x.Id).ToList(); var w = _workshopApplication.GetWorkshopsByEmployerId(emplId); var workshopIds = w.Select(x => x.Id).ToList(); var workshopCount = Convert.ToString(w.Count); var pCount = 0; if (workshopIds.Count > 0) { foreach (var workshopId in workshopIds) { var p = _workshopApplication.PersonnelCount(workshopId); pCount += p; } res.EmployeeCount = Convert.ToString(pCount); } else { res.EmployeeCount = "0"; } res.WorkshopCount = workshopCount; var contactInfo = _contactInfoApplication.GetContactInfolist(id); if (contactInfo.Count > 0) { res.ContactInfoCounter = contactInfo.Count; res.ContactInformationList = contactInfo; } else { res.ContactInfoCounter = 0; } if (res.HasValueAddedTax == "true") { res.ContractAmount -= res.ValueAddedTax; res.ContractAmountOAlone = res.ContractAmount.ToMoney(); res.ValueAddedTaxStr = res.ValueAddedTax.ToMoney(); } else { res.ContractAmountOAlone = res.ContractAmountString; res.ValueAddedTaxStr = "0"; } return res; } [HttpPost("edit-old")] public ActionResult EditOld([FromBody] EditInstitutionContract command) { var op = new OperationResult(); var phoneNumber = command.ContactInformationList.FirstOrDefault(x => x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId); if (conractingParty.IsLegal == "حقیقی" && string.IsNullOrWhiteSpace(conractingParty.Nationalcode)) return new JsonResult(op.Failed("کد ملی طرف حساب وجود ندارد")); if (conractingParty.IsLegal == "حقوقی" && string.IsNullOrWhiteSpace(conractingParty.NationalId)) return new JsonResult(op.Failed("شناسه ملی طرف حساب وجود ندارد")); if (phoneNumber == null) return new JsonResult(op.Failed("تعیین شماره همراه با سمت طرف قرارداد اجباریست")); //if (string.IsNullOrWhiteSpace(command.HasValueAddedTax)) // command.HasValueAddedTax = "false"; var result = _institutionContractApplication.Edit(command); var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId); var counter = command.ContactInformationList.Count; var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel() { ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x=>x.IsActiveString == "false" || x.IsActiveString == "blue").ToList(); if (result.IsSuccedded && counter > 0) { if (getOldContarct.Count > 0) { foreach (var item in getOldContarct) { _contactInfoApplication.RemoveContactInfo(item.Id); foreach (var phone in command.ContactInformationList) { if (phone.PhoneNumber != null) { var contactinfo = new CreateContactInfo { InstitutionContractId = item.Id, PhoneType = phone.PhoneType, Position = phone.Position, PhoneNumber = phone.PhoneNumber, FnameLname = phone.FnameLname, SendSms = phone.SendSmsString == "true" ? true : false }; _contactInfoApplication.Create(contactinfo); } Thread.Sleep(500); } } } _contactInfoApplication.RemoveContactInfo(command.Id); foreach (var item in command.ContactInformationList) { if (item.PhoneNumber != null) { var contactinfo = new CreateContactInfo { InstitutionContractId = result.SendId, PhoneType = item.PhoneType, Position = item.Position, PhoneNumber = item.PhoneNumber, FnameLname = item.FnameLname, SendSms = item.SendSmsString == "true" ? true : false }; _contactInfoApplication.Create(contactinfo); } Thread.Sleep(500); } //ساخت اکانت کلاینت var userPass = conractingParty.IsLegal == "حقیقی" ? conractingParty.Nationalcode : conractingParty.NationalId; var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass); if (!checkExistAccount) { var createAcc = new RegisterAccount { Fullname = conractingParty.LName, Username = userPass, Password = userPass, Mobile = phoneNumber.PhoneNumber, NationalCode = userPass }; var res = _accountApplication.RegisterClient(createAcc); if (res.IsSuccedded) _institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId); } } //Thread.Sleep(500); //for (int i = 0; i <= counter - 1; i++) //{ // if (command.ContactInformationList[i].PhoneNumber != null) // { // var contactinfo = new CreateContactInfo() // { // InstitutionContractId = result.SendId, // PhoneType = command.ContactInformationList[i].PhoneType, // Position = command.ContactInformationList[i].Position, // PhoneNumber = command.ContactInformationList[i].PhoneNumber, // FnameLname = command.ContactInformationList[i].FnameLname, // SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false // }; // _contactInfoApplication.Create(contactinfo); // } // Thread.Sleep(500); //} return result; } [HttpGet("print/{id}")] public async Task> PrintOne(long id) { var res =await _institutionContractApplication.PrintOneAsync(id); return res; } [HttpPost("mannual-verify/{id}")] public async Task> VerifyInstitutionContractManually(long id) { var res= await _institutionContractApplication.VerifyInstitutionContractManually(id); return res; } [HttpGet("excel-download")] public async Task ExcelDownload() { var searchModel = new InstitutionContractListSearchModel(); var dataVm=new List(); foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames()) { var @enum = Enum.Parse(name); searchModel.Status = @enum; searchModel.PageSize = 99999; var data =( await(_institutionContractApplication.GetList(searchModel))).List; dataVm.Add(new InstitutionContractExcelViewModel(){Tab = @enum, GetInstitutionContractListItemsViewModels = data}); } searchModel.Status = null; var nullData = ( await(_institutionContractApplication.GetList(searchModel))).List; dataVm.Add(new InstitutionContractExcelViewModel(){Tab = null, GetInstitutionContractListItemsViewModels = nullData}); var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm); return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"قرارداد های مالی.xlsx"); } } public class VerifyOtpRequest { public Guid PublicId { get; set; } public string Code { get; set; } } public class InstitutionVerificationRequest { public Guid Id { get; set; } public string Code { get; set; } } public class InstitutionPlanCalculatorResponse { public string TotalAmountWithTax { get; set; } public string OneTimeTotalAmountWithoutTax { get; set; } public string OneTimeTotalAmount { get; set; } public string OneTimeValueAddedTaxStr { get; set; } public string MonthlyTotalAmount { get; set; } public string MonthlyTotalAmountWithoutTax { get; set; } public string ContractStart { get; set; } public string ContractEnd { get; set; } public string MonthlyValueAddedTaxStr { get; set; } public string DailyCompensation { get; set; } public string Obligation { get; set; } public string PaymentForOneMonth { get; set; } public string DiscountedAmountForOneMonth { get; set; } public string Discount { get; set; } public List Installments { get; set; } } public class WorkshopServiceCalculatorResponse { public string TotalAmount { get; set; } } public record InstitutionPlanCalculatorRequest(double TotalAmountMonth,bool HasInPersonContract, InstitutionContractDuration Duration = InstitutionContractDuration.TwelveMonths); 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; } }