diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index efe2fc17..149b5b0f 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -19,6 +19,7 @@ using Microsoft.Extensions.Logging; using System.IO.Compression; using System.Linq; using _0_Framework.Domain.CustomizeCheckoutShared.Base; +using System.ComponentModel.DataAnnotations; namespace _0_Framework.Application; @@ -32,6 +33,15 @@ public static class Tools public static string[] DayNames = { "شنبه", "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه" }; public static string[] DayNamesG = { "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" }; + + public static bool IsMobileValid(this string mobileNo) + { + if (mobileNo.Length < 11) + return false; + return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$"); + } + + /// /// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده /// با کمک شروع بکار و ترک کار @@ -778,8 +788,8 @@ public static class Tools { case "0000000000": case "1111111111": - case "22222222222": - case "33333333333": + case "2222222222": + case "3333333333": case "4444444444": case "5555555555": case "6666666666": diff --git a/0_Framework/Application/UID/UidService.cs b/0_Framework/Application/UID/UidService.cs index 043fa0a5..ab453f83 100644 --- a/0_Framework/Application/UID/UidService.cs +++ b/0_Framework/Application/UID/UidService.cs @@ -32,16 +32,24 @@ public class UidService : IUidService var json = JsonConvert.SerializeObject(request); var contentType = new StringContent(json, Encoding.UTF8, "application/json"); - var requestResult = await _httpClient.PostAsync("person/v2", contentType); - if(!requestResult.IsSuccessStatusCode) - return null; - var responseResult = await requestResult.Content.ReadFromJsonAsync(); - responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName.ToPersian(); - responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName.ToPersian(); - responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName.ToPersian(); + try + { + var requestResult = await _httpClient.PostAsync("person/v2", contentType); + if (!requestResult.IsSuccessStatusCode) + return null; + var responseResult = await requestResult.Content.ReadFromJsonAsync(); + responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName.ToPersian(); + responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName.ToPersian(); + responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName.ToPersian(); - return responseResult; + return responseResult; + } + catch (Exception) + { + + return null; + } } @@ -55,12 +63,19 @@ public class UidService : IUidService }; var json = JsonConvert.SerializeObject(request); var contentType = new StringContent(json, Encoding.UTF8, "application/json"); + try + { + var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType); + if (!requestResult.IsSuccessStatusCode) + return null; - var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType); - if (!requestResult.IsSuccessStatusCode) + var responseResult = await requestResult.Content.ReadFromJsonAsync(); + return responseResult; + } + catch (Exception e) + { return null; + } - var responseResult = await requestResult.Content.ReadFromJsonAsync(); - return responseResult; } } \ No newline at end of file diff --git a/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs b/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs index 167d07b5..223b466a 100644 --- a/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs +++ b/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs @@ -1,4 +1,6 @@ -using _0_Framework.Domain; +using System.Threading.Tasks; +using _0_Framework.Domain; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; namespace Company.Domain.TemporaryClientRegistrationAgg; @@ -10,5 +12,12 @@ public interface IContractingPartyTempRepository :IRepository /// /// - bool CheckExistOrAuthenticated(string nationalCode, string dateOfBirth); + Task CheckExistOrAuthenticated(string nationalCode, string dateOfBirth); + + /// + /// دریافت اطلاعات طرف حساب موقت با کد ملی + /// + /// + /// + ContractingPartyTempViewModel GetByNationalCode(string nationalCode); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs index b5d6dd68..5067c36f 100644 --- a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs +++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs @@ -3,4 +3,9 @@ public class ContractingPartyTempViewModel : CreateContractingPartyTemp { public long Id { get; set; } + /// + /// تاریخ تولد شمسی + /// + public string DateOfBirthFa { get; set; } + } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs index c1c28a45..0bf213d1 100644 --- a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs +++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs @@ -1,8 +1,9 @@ -using _0_Framework.Application; +using System.Threading.Tasks; +using _0_Framework.Application; namespace CompanyManagment.App.Contracts.TemporaryClientRegistration; public interface ITemporaryClientRegistrationApplication { - OperationResult CreateContractingPartyTemp(string nationalCode, string dateOfBirth); + Task> CreateContractingPartyTemp(string nationalCode, string dateOfBirth, string mobile); } \ No newline at end of file diff --git a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs index 2d561ec9..bd4174a3 100644 --- a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs +++ b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs @@ -1,7 +1,10 @@ -using _0_Framework.Application; +using System.Threading.Tasks; +using _0_Framework.Application; +using _0_Framework.Application.UID; using Company.Domain.ContarctingPartyAgg; using Company.Domain.TemporaryClientRegistrationAgg; using CompanyManagment.App.Contracts.TemporaryClientRegistration; +using PersianTools.Core; namespace CompanyManagment.Application; @@ -9,17 +12,38 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati { private readonly IContractingPartyTempRepository _contractingPartyTempRepository; private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository; + private readonly IUidService _uidService; - public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository) + public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService) { _contractingPartyTempRepository = contractingPartyTempRepository; _personalContractingPartyRepository = personalContractingPartyRepository; + _uidService = uidService; } - public OperationResult CreateContractingPartyTemp(string nationalCode , string dateOfBirth) + public async Task> CreateContractingPartyTemp(string nationalCode , string dateOfBirth, string mobile) { - var op = new OperationResult(); - var getExistContractingParty = _contractingPartyTempRepository.CheckExistOrAuthenticated(nationalCode, dateOfBirth); + var op = new OperationResult(); + + #region Validations + + if (string.IsNullOrWhiteSpace(nationalCode) || string.IsNullOrWhiteSpace(dateOfBirth) || + string.IsNullOrWhiteSpace(mobile)) + return op.Failed("هیچ یک از فیلد ها نمیتواند خالی باشد"); + + + if (nationalCode.NationalCodeValid() != "valid") + return op.Failed("کد ملی نا معتبر است"); + + if(!dateOfBirth.IsPersianDateValid()) + return op.Failed("تاریخ تولد نا معتبر است"); + + if(!mobile.IsMobileValid()) + return op.Failed("شماره همراه نا معتبر است"); + #endregion + + + var getExistContractingParty = await _contractingPartyTempRepository.CheckExistOrAuthenticated(nationalCode, dateOfBirth); //اگر طرف حساب قبلا در دیتابیس وجود داشت if (getExistContractingParty) @@ -29,8 +53,59 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati //اگر طرف حساب وجود نداشت else { + //دریافت اطلاعات طرف حساب موقت که قبلا ایجاد شده + var getExistTemp = _contractingPartyTempRepository.GetByNationalCode(nationalCode); + var dateOfBirthGr = dateOfBirth.ToGeorgianDateTime(); + + if (getExistTemp != null) + { + + if(getExistTemp.DateOfBirth != dateOfBirthGr) + return op.Failed("تاریخ تولد مطابقت ندارد"); + if (getExistTemp.Phone != mobile) + return op.Failed("شما قبلا با شماره همراه دیگری ثبت نام نموده اید"); + return op.Succcedded(getExistTemp); + + } + //چک کردن مطابقت شماره همراه و کد ملی + var isMachMobilAndNationalCode = await _uidService.IsMachPhoneWithNationalCode(nationalCode, mobile); + if (isMachMobilAndNationalCode == null) + return op.Failed("خطا در سرویس احراز هویت"); + if(!isMachMobilAndNationalCode.IsMatched) + return op.Failed("شماره همراه وارد شده با کد ملی مطابقت ندارد"); + + //دریافت اطلاعات احراز هویت + var apiRespons = await _uidService.GetPersonalInfo(nationalCode, dateOfBirth); + + if(apiRespons == null) + return op.Failed("خطا در سرویس احراز هویت"); + if (apiRespons.ResponseContext.Status.Code != 0) + return op.Failed($"{apiRespons.ResponseContext.Status.Message}"); + + var idNumber = apiRespons.IdentificationInformation.ShenasnamehNumber == "0" + ? apiRespons.IdentificationInformation.NationalId + : apiRespons.IdentificationInformation.ShenasnamehNumber; + + //ایجاد طرف حساب موقت + var createTemp = new ContractingPartyTemp(apiRespons.BasicInformation.FirstName, + apiRespons.BasicInformation.LastName, nationalCode, idNumber, mobile, + apiRespons.BasicInformation.FatherName, "", "", "", + apiRespons.IdentificationInformation.ShenasnameSeri, + apiRespons.IdentificationInformation.ShenasnameSerial, apiRespons.BasicInformation.GenderEnum, + dateOfBirthGr); + await _contractingPartyTempRepository.CreateAsync(createTemp); + await _contractingPartyTempRepository.SaveChangesAsync(); + + var result = new ContractingPartyTempViewModel(); + result.Id = createTemp.id; + result.FName = createTemp.FName; + result.LName = createTemp.LName; + result.DateOfBirthFa = dateOfBirth; + result.IdNumber = idNumber; + + return op.Succcedded(result); } - throw new System.NotImplementedException(); + } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/CompanyContext.cs b/CompanyManagment.EFCore/CompanyContext.cs index 7389d18a..6f772a5a 100644 --- a/CompanyManagment.EFCore/CompanyContext.cs +++ b/CompanyManagment.EFCore/CompanyContext.cs @@ -93,6 +93,7 @@ using Company.Domain.SubtitleAgg; using Company.Domain.TaxJobCategoryAgg; using Company.Domain.TaxLeftWorkCategoryAgg; using Company.Domain.TaxLeftWorkItemAgg; +using Company.Domain.TemporaryClientRegistrationAgg; using Company.Domain.TextManagerAgg; using Company.Domain.WorkHistory; using Company.Domain.WorkingHoursAgg; @@ -185,10 +186,14 @@ public class CompanyContext : DbContext public DbSet Banks { get; set; } public DbSet EmployeeBankInformationSet { get; set; } - #endregion + #endregion + #region TemporaryClientRegisteration - public DbSet CustomizeCheckouts { get; set; } + public DbSet ContractingPartyTemps { get; set; } + + #endregion + public DbSet CustomizeCheckouts { get; set; } public DbSet CustomizeCheckoutTemps { get; set; } public DbSet TaxLeftWorkItems { get; set; } public DbSet TaxLeftWorkCategories { get; set; } diff --git a/CompanyManagment.EFCore/Repository/ContractingPartyTempRepository.cs b/CompanyManagment.EFCore/Repository/ContractingPartyTempRepository.cs index 30f9cf17..b05d35cd 100644 --- a/CompanyManagment.EFCore/Repository/ContractingPartyTempRepository.cs +++ b/CompanyManagment.EFCore/Repository/ContractingPartyTempRepository.cs @@ -1,10 +1,12 @@ using System.Linq; +using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.Application.UID; using _0_Framework.InfraStructure; using AccountMangement.Infrastructure.EFCore.Migrations; using Company.Domain.TemporaryClientRegistrationAgg; using CompanyManagment.App.Contracts.PersonalContractingParty; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; using Microsoft.EntityFrameworkCore; namespace CompanyManagment.EFCore.Repository; @@ -12,14 +14,14 @@ namespace CompanyManagment.EFCore.Repository; public class ContractingPartyTempRepository : RepositoryBase, IContractingPartyTempRepository { private readonly CompanyContext _context; - private readonly UidService _uidService; - public ContractingPartyTempRepository(CompanyContext context, UidService uidService) : base(context) + private readonly IUidService _uidService; + public ContractingPartyTempRepository(CompanyContext context, IUidService uidService) : base(context) { _context = context; _uidService = uidService; } - public bool CheckExistOrAuthenticated(string nationalCode, string dateOfBirth) + public async Task CheckExistOrAuthenticated(string nationalCode, string dateOfBirth) { var contractingParty = _context.PersonalContractingParties.FirstOrDefault(x=>x.Nationalcode == nationalCode && x.IsLegal == "false"); if (contractingParty == null) @@ -29,7 +31,7 @@ public class ContractingPartyTempRepository : RepositoryBase new ContractingPartyTempViewModel + { + Id = x.id, + DateOfBirth = x.DateOfBirth, + 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.NationalCode == nationalCode); + + } } \ No newline at end of file diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index 356ac2e0..17cd81c4 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -199,8 +199,10 @@ using CompanyManagment.App.Contracts.EmployeeDocuments; using CompanyManagment.App.Contracts.EmployeeDocumentsAdminSelection; using Company.Domain.EmployeeClientTempAgg; using Company.Domain.LeftWorkTempAgg; +using Company.Domain.TemporaryClientRegistrationAgg; using CompanyManagment.App.Contracts.EmployeeClientTemp; using CompanyManagment.App.Contracts.LeftWorkTemp; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; namespace PersonalContractingParty.Config; @@ -441,9 +443,15 @@ public class PersonalBootstrapper services.AddTransient(); services.AddTransient(); - #endregion + #endregion - services.AddTransient(); + #region TemporaryClientRegisteration + + services.AddTransient(); + services.AddTransient(); + + #endregion + services.AddTransient(); //=========End Of Main==================================== //---File Project------------------------------------ diff --git a/ServiceHost/Pages/Index.cshtml.cs b/ServiceHost/Pages/Index.cshtml.cs index 082cebc9..9b8cb910 100644 --- a/ServiceHost/Pages/Index.cshtml.cs +++ b/ServiceHost/Pages/Index.cshtml.cs @@ -15,6 +15,7 @@ using Company.Domain.ReportAgg; using Company.Domain.RollCallAgg; using Company.Domain.RollCallAgg.DomainService; using CompanyManagment.App.Contracts.AndroidApkVersion; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; using Microsoft.EntityFrameworkCore; using IUidService = _0_Framework.Application.UID.IUidService; @@ -46,13 +47,14 @@ namespace ServiceHost.Pages private readonly ICameraAccountApplication _cameraAccountApplication; private readonly IWebHostEnvironment _webHostEnvironment; private readonly IAndroidApkVersionApplication _androidApkVersionApplication; - private readonly IUidService _uidService; - private readonly IReportRepository _reportRepository; + private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication; + + public IndexModel(ILogger logger, IAccountApplication accountApplication, IGoogleRecaptcha googleRecaptcha, ISmsService smsService, IWorker worker, IAuthHelper authHelper, ICameraAccountApplication cameraAccountApplication, IWebHostEnvironment webHostEnvironment, - IAndroidApkVersionApplication androidApkVersionApplication, IUidService uidService, IReportRepository reportRepository) + IAndroidApkVersionApplication androidApkVersionApplication, ITemporaryClientRegistrationApplication clientRegistrationApplication) { _logger = logger; _accountApplication = accountApplication; @@ -63,12 +65,27 @@ namespace ServiceHost.Pages _cameraAccountApplication = cameraAccountApplication; _webHostEnvironment = webHostEnvironment; _androidApkVersionApplication = androidApkVersionApplication; - _uidService = uidService; - _reportRepository = reportRepository; + _clientRegistrationApplication = clientRegistrationApplication; } public IActionResult OnGet() { + bool ex = false; + while (!ex) + { + Console.WriteLine("enter National code ... "); + var nationalCode = Console.ReadLine(); + Console.WriteLine("enter DateOfBirth ... "); + var dateOfBirth = Console.ReadLine(); + Console.WriteLine("enter phoneNumber ... "); + var phone = Console.ReadLine(); + var res =_clientRegistrationApplication.CreateContractingPartyTemp(nationalCode, dateOfBirth, phone).GetAwaiter().GetResult(); + Console.WriteLine("do you want to exit ... "); + var exitCheck = Console.ReadLine(); + if (exitCheck == "yes") + ex = true; + } + // _reportRepository.GetAllActiveWorkshopsNew("1403", "12");