Files
Backend-Api/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs

144 lines
6.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.Generic;
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;
}
/// <summary>
/// احراز هویت
/// </summary>
/// <param name="nationalCode"></param>
/// <param name="dateOfBirth"></param>
/// <param name="mobile"></param>
/// <returns></returns>
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);
}
}
public async Task<OperationResult> UpdateAddress(long id, string state, string city, string address)
{
var op = new OperationResult();
var contractingPartyTemp = _contractingPartyTempRepository.Get(id);
if (string.IsNullOrWhiteSpace(state) || string.IsNullOrWhiteSpace(city) || string.IsNullOrWhiteSpace(address))
return op.Failed("اطلاعات ادرس را تکمیل کنید");
contractingPartyTemp.UpdateAddress(state,city,address);
await _contractingPartyTempRepository.SaveChangesAsync();
return op.Succcedded();
}
public Task<List<WorkshopTempViewModel>> GetWorkshopTemp(long contractingPartyTemp)
{
throw new System.NotImplementedException();
}
}