This commit is contained in:
SamSys
2025-03-24 19:01:13 +03:30
parent 14f54149ea
commit 21b209b83a
10 changed files with 208 additions and 37 deletions

View File

@@ -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})$");
}
/// <summary>
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
/// با کمک شروع بکار و ترک کار
@@ -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":

View File

@@ -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<PersonalInfoResponse>();
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<PersonalInfoResponse>();
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<MatchMobileWithNationalCodeResponse>();
return responseResult;
}
catch (Exception e)
{
return null;
}
var responseResult = await requestResult.Content.ReadFromJsonAsync<MatchMobileWithNationalCodeResponse>();
return responseResult;
}
}

View File

@@ -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<long, ContractingP
/// </summary>
/// <param name="nationalCode"></param>
/// <returns></returns>
bool CheckExistOrAuthenticated(string nationalCode, string dateOfBirth);
Task<bool> CheckExistOrAuthenticated(string nationalCode, string dateOfBirth);
/// <summary>
/// دریافت اطلاعات طرف حساب موقت با کد ملی
/// </summary>
/// <param name="nationalCode"></param>
/// <returns></returns>
ContractingPartyTempViewModel GetByNationalCode(string nationalCode);
}

View File

@@ -3,4 +3,9 @@
public class ContractingPartyTempViewModel : CreateContractingPartyTemp
{
public long Id { get; set; }
/// <summary>
/// تاریخ تولد شمسی
/// </summary>
public string DateOfBirthFa { get; set; }
}

View File

@@ -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<OperationResult<ContractingPartyTempViewModel>> CreateContractingPartyTemp(string nationalCode, string dateOfBirth, string mobile);
}

View File

@@ -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<OperationResult<ContractingPartyTempViewModel>> CreateContractingPartyTemp(string nationalCode , string dateOfBirth, string mobile)
{
var op = new OperationResult();
var getExistContractingParty = _contractingPartyTempRepository.CheckExistOrAuthenticated(nationalCode, dateOfBirth);
var op = new OperationResult<ContractingPartyTempViewModel>();
#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();
}
}

View File

@@ -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<Bank> Banks { get; set; }
public DbSet<EmployeeBankInformation> EmployeeBankInformationSet { get; set; }
#endregion
#endregion
#region TemporaryClientRegisteration
public DbSet<CustomizeCheckout> CustomizeCheckouts { get; set; }
public DbSet<ContractingPartyTemp> ContractingPartyTemps { get; set; }
#endregion
public DbSet<CustomizeCheckout> CustomizeCheckouts { get; set; }
public DbSet<CustomizeCheckoutTemp> CustomizeCheckoutTemps { get; set; }
public DbSet<TaxLeftWorkItem> TaxLeftWorkItems { get; set; }
public DbSet<TaxLeftWorkCategory> TaxLeftWorkCategories { get; set; }

View File

@@ -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<long, ContractingPartyTemp>, 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<bool> 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<long, ContractingPa
{
var dateOfbirth = contractingParty.DateOfBirth.ToFarsi();
var apiRespons = _uidService.GetPersonalInfo(contractingParty.Nationalcode, dateOfbirth).Result;
var apiRespons = await _uidService.GetPersonalInfo(contractingParty.Nationalcode, dateOfbirth);
if (apiRespons != null && apiRespons.ResponseContext.Status.Code == 0)
{
var idNumber = apiRespons.IdentificationInformation.ShenasnamehNumber == "0"
@@ -43,4 +45,28 @@ public class ContractingPartyTempRepository : RepositoryBase<long, ContractingPa
return true;
}
public ContractingPartyTempViewModel GetByNationalCode(string nationalCode)
{
return _context.ContractingPartyTemps.Select(x => 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);
}
}

View File

@@ -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<IEmployeeBankInformationRepository, EmployeeBankInformationRepository>();
services.AddTransient<IEmployeeBankInformationApplication, EmployeeBankInformationApplication>();
#endregion
#endregion
services.AddTransient<IRollCallDomainService, RollCallDomainService>();
#region TemporaryClientRegisteration
services.AddTransient<ITemporaryClientRegistrationApplication, TemporaryClientRegistrationApplication>();
services.AddTransient<IContractingPartyTempRepository, ContractingPartyTempRepository>();
#endregion
services.AddTransient<IRollCallDomainService, RollCallDomainService>();
//=========End Of Main====================================
//---File Project------------------------------------

View File

@@ -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<IndexModel> 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");