111 lines
5.1 KiB
C#
111 lines
5.1 KiB
C#
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;
|
||
|
||
public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrationApplication
|
||
{
|
||
private readonly IContractingPartyTempRepository _contractingPartyTempRepository;
|
||
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
|
||
private readonly IUidService _uidService;
|
||
|
||
public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService)
|
||
{
|
||
_contractingPartyTempRepository = contractingPartyTempRepository;
|
||
_personalContractingPartyRepository = personalContractingPartyRepository;
|
||
_uidService = uidService;
|
||
}
|
||
|
||
public async Task<OperationResult<ContractingPartyTempViewModel>> CreateContractingPartyTemp(string nationalCode , string dateOfBirth, string mobile)
|
||
{
|
||
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)
|
||
{
|
||
return op.Failed("طرف حساب با این مشخصات در سیستم وجود دارد");
|
||
}
|
||
//اگر طرف حساب وجود نداشت
|
||
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);
|
||
}
|
||
|
||
}
|
||
} |