diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index 9ea9caa2..ecc07005 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -54,9 +54,9 @@ public interface IInstitutionContractRepository : IRepository GetVerificationDetails(Guid id); Task GetByPublicIdAsync(Guid id); - Task GetExtenstionInquiry(long previousContractId); - Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request); - Task GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request); - Task GetExtenstionPaymentMethod(InstitutionContractExtensionPaymentRequest request); - Task ExtenstionComplete(InstitutionContractExtensionCompleteRequest request); + Task GetExtensionInquiry(long previousContractId); + Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request); + Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); + Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request); + Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs b/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs index e5d4b024..e85b9377 100644 --- a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs +++ b/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs @@ -6,8 +6,8 @@ namespace Company.Domain.InstitutionContractInsertTempAgg; public interface IInstitutionContractExtenstionTempRepository { - Task Create(InstitutionContractExtenstionTemp institutionContract); + Task Create(InstitutionContractExtensionTemp institutionContract); - Task GetPreviousExtenstionData(long contractingPartyId); + Task GetPreviousExtenstionData(long contractingPartyId); Task Remove(Guid id); } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtenstionTemp.cs b/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs similarity index 92% rename from Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtenstionTemp.cs rename to Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs index 31c7ec2d..fb05d84c 100644 --- a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtenstionTemp.cs +++ b/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs @@ -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 ContactInfos { get; set; } - public List Workshops { get; set; } + public List 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 workshops, + public void SetWorkshopsAndPlanAmounts(List 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) { diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs index 13e1fd37..71ddf741 100644 --- a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs +++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs @@ -5,19 +5,19 @@ namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRe public class InstitutionContractExtenstionTempRepository:IInstitutionContractExtenstionTempRepository { - private readonly IMongoCollection _institutionExtenstionTemp; + private readonly IMongoCollection _institutionExtenstionTemp; public InstitutionContractExtenstionTempRepository(IMongoDatabase database) { - _institutionExtenstionTemp = database.GetCollection("InstitutionContractExtenstionTemp"); + _institutionExtenstionTemp = database.GetCollection("InstitutionContractExtenstionTemp"); } - public async Task Create(InstitutionContractExtenstionTemp institutionContract) + public async Task Create(InstitutionContractExtensionTemp institutionContract) { await _institutionExtenstionTemp.InsertOneAsync(institutionContract); } - public async Task GetPreviousExtenstionData(long contractingPartyId) + public async Task GetPreviousExtenstionData(long contractingPartyId) { var entity = await _institutionExtenstionTemp .Find(x => x.PreviousId == contractingPartyId) diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 6f4c8615..22e4d654 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -189,13 +189,7 @@ public interface IInstitutionContractApplication /// /// Task EditAsync(EditInstitutionContractRequest command); - - /// - /// تمدید قرارداد - /// - /// - /// - Task ExtensionAsync(CreateInstitutionContractRequest command); + /// /// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده @@ -218,16 +212,30 @@ public interface IInstitutionContractApplication Task> SendVerifyOtp(Guid id); Task VerifyOtp(Guid publicId, string code); Task GetWorkshopInitialDetails(long workshopDetailsId); - Task GetExtenstionInquiry(long previousContractId); - Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request); - Task GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request); - Task GetExtenstionPaymentMethod( + Task GetExtensionInquiry(long previousContractId); + Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request); + Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); + Task GetExtensionPaymentMethod( InstitutionContractExtensionPaymentRequest request); //TODO:Complete Data. - Task ExtenstionComplete(InstitutionContractExtensionCompleteRequest request); + Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); + Task 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 diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 17f620df..0f78f321 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -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 ExtensionAsync(CreateInstitutionContractRequest command) - { - throw new NotImplementedException(); - } + public Task> RegistrationWorkflowMainList() { @@ -1276,30 +1276,120 @@ public class InstitutionContractApplication : IInstitutionContractApplication return res; } - public async Task GetExtenstionInquiry(long previousContractId) + public async Task GetExtensionInquiry(long previousContractId) { - return await _institutionContractRepository.GetExtenstionInquiry(previousContractId); + return await _institutionContractRepository.GetExtensionInquiry(previousContractId); } - public async Task GetExtenstionWorkshops( + public async Task GetExtensionWorkshops( InstitutionContractExtensionWorkshopsRequest request) { - return await _institutionContractRepository.GetExtenstionWorkshops(request); + return await _institutionContractRepository.GetExtensionWorkshops(request); } - public async Task GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request) + public async Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request) { - return await _institutionContractRepository.GetExtenstionInstitutionPlan(request); + return await _institutionContractRepository.GetExtensionInstitutionPlan(request); } - public async Task GetExtenstionPaymentMethod(InstitutionContractExtensionPaymentRequest request) + public async Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request) { - return await _institutionContractRepository.GetExtenstionPaymentMethod(request); + return await _institutionContractRepository.GetExtensionPaymentMethod(request); } - public async Task ExtenstionComplete(InstitutionContractExtensionCompleteRequest request) + public async Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request) { - return await _institutionContractRepository.ExtenstionComplete(request); + return await _institutionContractRepository.ExtensionComplete(request); + } + + public async Task 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> CreateLegalContractingPartyEntity( @@ -1504,4 +1594,4 @@ public class WorkshopsAndEmployeeViewModel public int ArchiveCode { get; set; } } -#endregion \ No newline at end of file +#endregion diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 86c66574..e07844bd 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -41,7 +41,7 @@ public class InstitutionContractRepository : RepositoryBase _institutionExtensionTemp; + private readonly IMongoCollection _institutionExtensionTemp; private readonly IPlanPercentageRepository _planPercentageRepository; private readonly ISmsService _smsService; @@ -55,7 +55,7 @@ public class InstitutionContractRepository : RepositoryBase("InstitutionContractExtenstionTemp"); + database.GetCollection("InstitutionContractExtensionTemp"); } public EditInstitutionContract GetDetails(long id) @@ -1818,7 +1818,7 @@ public class InstitutionContractRepository : RepositoryBase x.PublicId == id); } - public async Task GetExtenstionInquiry(long previousContractId) + public async Task GetExtensionInquiry(long previousContractId) { var institutionContracts = await _context.InstitutionContractSet .Include(institutionContract => institutionContract.ContactInfoList) @@ -1879,7 +1879,7 @@ public class InstitutionContractRepository : RepositoryBase 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 GetExtenstionWorkshops( + public async Task GetExtensionWorkshops( InstitutionContractExtensionWorkshopsRequest request) { var extenstionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId) @@ -1983,7 +1983,7 @@ public class InstitutionContractRepository : RepositoryBase GetExtenstionInstitutionPlan( + public async Task GetExtensionInstitutionPlan( InstitutionContractExtensionPlanRequest request) { if (request.WorkshopTemps.Count == 0) @@ -2037,7 +2037,7 @@ public class InstitutionContractRepository : RepositoryBase 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 GetExtenstionPaymentMethod( + public async Task GetExtensionPaymentMethod( InstitutionContractExtensionPaymentRequest request) { var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId).FirstOrDefaultAsync(); @@ -2084,7 +2084,7 @@ public class InstitutionContractRepository : RepositoryBase ExtenstionComplete(InstitutionContractExtensionCompleteRequest request) + public async Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request) { var institutionContractTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TemporaryId) .FirstOrDefaultAsync(); diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index c6e08769..ef09b0cb 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -479,42 +479,50 @@ public class institutionContractController : AdminBaseController [HttpGet("extenstion/inquiry/{previousContractId}")] - public async Task> ExtenstionInquiry(long previousContractId) + public async Task> ExtensionInquiry(long previousContractId) { - var res= await _institutionContractApplication.GetExtenstionInquiry(previousContractId); + var res= await _institutionContractApplication.GetExtensionInquiry(previousContractId); return res; } [HttpPost("extenstion/workshops")] - public async Task> ExtenstionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request) + public async Task> 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> ExtenstionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request) + public async Task> 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> GetExtenstionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request) + public async Task> GetExtensionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request) { - var res =await _institutionContractApplication.GetExtenstionPaymentMethod(request); + var res =await _institutionContractApplication.GetExtensionPaymentMethod(request); return res; } [HttpPost("extenstion/complete")] - public async Task> ExtenstionComplete([FromBody]InstitutionContractExtensionCompleteRequest request) + public async Task> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request) { - var res =await _institutionContractApplication.ExtenstionComplete(request); + var res =await _institutionContractApplication.ExtensionComplete(request); + return res; + } + + [HttpPost("extenstion/inquiry")] + public async Task> ExtensionInquiry([FromBody] InstitutionContractExtensionInquiryRequest command) + { + var res = await _institutionContractApplication.ExtensionInquiry(command); return res; } } + public class VerifyOtpRequest { public Guid PublicId { get; set; }