feat: refactor institution contract creation classes and endpoints
This commit is contained in:
@@ -165,4 +165,10 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
Task<long> GetIdByInstallmentId(long installmentId);
|
||||
Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId);
|
||||
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
|
||||
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request);
|
||||
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
|
||||
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
}
|
||||
@@ -39,6 +39,8 @@ public class InstitutionContractCreationTemp
|
||||
public string City { get; set; }
|
||||
public string Province { get; set; }
|
||||
public List<EditContactInfo> ContactInfos { get; set; }
|
||||
public long RepresentativeId { get; set; }
|
||||
|
||||
|
||||
public List<InstitutionContractCreationTempWorkshop> Workshops { get; set; }
|
||||
|
||||
@@ -84,10 +86,24 @@ public class InstitutionContractCreationTemp
|
||||
}
|
||||
|
||||
|
||||
public void SetContractingPartyContactInfo(string address, string city, string province, List<EditContactInfo> requestContactInfos,long representativeId)
|
||||
{
|
||||
Address = address;
|
||||
City = city;
|
||||
Province = province;
|
||||
ContactInfos = requestContactInfos;
|
||||
RepresentativeId = representativeId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationTempLegalParty
|
||||
{
|
||||
/// <summary>
|
||||
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام شرکت
|
||||
/// </summary>
|
||||
@@ -165,6 +181,10 @@ public class InstitutionContractCreationTempLegalParty
|
||||
|
||||
public class InstitutionContractCreationTempRealParty
|
||||
{
|
||||
/// <summary>
|
||||
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
/// <summary>
|
||||
/// کد ملی
|
||||
/// </summary>
|
||||
|
||||
@@ -5,8 +5,10 @@ using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Application.Sms;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using CompanyManagment.App.Contracts.WorkshopPlan;
|
||||
@@ -199,6 +201,7 @@ public interface IInstitutionContractApplication
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
|
||||
|
||||
/// <summary>
|
||||
/// دریافت آیتم های کارپوشه ثبت نام
|
||||
/// </summary>
|
||||
@@ -206,8 +209,6 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId);
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
@@ -219,11 +220,28 @@ public interface IInstitutionContractApplication
|
||||
|
||||
#region Creation
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// تب ایجاد قرارداد مؤسسه - احراز هویت
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
|
||||
|
||||
/// <summary>
|
||||
/// تب ایجاد قرارداد مؤسسه -مشخصات طرف قرارداد و انتخاب کارگاه ها
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(
|
||||
InstitutionContractCreationWorkshopsRequest request);
|
||||
/// <summary>
|
||||
/// تب ایجاد قرارداد مؤسسه - مالی
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region Extension
|
||||
|
||||
@@ -240,21 +258,27 @@ public interface IInstitutionContractApplication
|
||||
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,string selected);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Upgrade (Amendment)
|
||||
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
|
||||
InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
|
||||
InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -267,8 +291,9 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
|
||||
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId,InstitutionContractSigningType signingType);
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId, InstitutionContractSigningType signingType);
|
||||
Task<long> GetIdByInstallmentId(long installmentId);
|
||||
|
||||
/// <summary>
|
||||
/// تایید قرارداد مالی به صورت دستی
|
||||
/// </summary>
|
||||
@@ -276,4 +301,37 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> VerifyInstitutionContractManually(long institutionContractId);
|
||||
|
||||
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationWorkshopsResponse
|
||||
{
|
||||
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationWorkshopsRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public string City { get; set; }
|
||||
public string Province { get; set; }
|
||||
public string Address { get; set; }
|
||||
public List<EditContactInfo> ContactInfos { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// اطلاعات شخص حقیقی
|
||||
/// </summary>
|
||||
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// اطلاعات شخص حقوقی
|
||||
/// </summary>
|
||||
public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; }
|
||||
|
||||
public LegalType LegalType { get; set; }
|
||||
|
||||
public long RepresentativeId { get; set; }
|
||||
}
|
||||
@@ -8,3 +8,10 @@ public class InstitutionContractExtensionCompleteRequest
|
||||
public bool IsInstallment { get; set; }
|
||||
public long LawId { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationCompleteRequest
|
||||
{
|
||||
public Guid TemporaryId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
public long LawId { get; set; }
|
||||
}
|
||||
@@ -7,3 +7,8 @@ public class InstitutionContractExtensionPaymentRequest
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
public class InstitutionContractCreationPaymentRequest
|
||||
{
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
@@ -6,3 +6,10 @@ public class InstitutionContractExtensionPaymentResponse
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPaymentResponse
|
||||
{
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
|
||||
}
|
||||
@@ -10,3 +10,10 @@ public class InstitutionContractExtensionPlanRequest
|
||||
public string TotalAmount { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPlanRequest
|
||||
{
|
||||
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
@@ -7,16 +7,8 @@ public class InstitutionContractExtensionPlanResponse
|
||||
public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
|
||||
public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
|
||||
}
|
||||
public class InstitutionContractExtensionPlanDetail
|
||||
public class InstitutionContractExtensionPlanDetail:InstitutionContractCreationPlanDetail
|
||||
{
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public string OneMonthPaymentDiscounted { get; set; }
|
||||
public string OneMonthDiscount { get; set; }
|
||||
public string OneMonthOriginalPayment { get; set; }
|
||||
public string TotalPayment { get; set; }
|
||||
public string DailyCompenseation { get; set; }
|
||||
public string Obligation { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPlanResponse
|
||||
|
||||
@@ -7,3 +7,8 @@ public class InstitutionContractResetDiscountForExtensionRequest
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
public class InstitutionContractResetCreationForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
@@ -9,3 +9,10 @@ public class InstitutionContractSetDiscountForExtensionRequest
|
||||
public double TotalAmount { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
public class InstitutionContractSetDiscountForCreationRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public int DiscountPercentage { get; set; }
|
||||
public double TotalAmount { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
@@ -1449,6 +1449,15 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return _institutionContractRepository.CreationInquiry(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetCreationWorkshops(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetCreationInstitutionPlan(request);
|
||||
}
|
||||
|
||||
|
||||
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
|
||||
@@ -1669,6 +1678,26 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetCreationPaymentMethod(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request)
|
||||
{
|
||||
return _institutionContractRepository.SetDiscountForCreation(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
return _institutionContractRepository.ResetDiscountForCreation(request);
|
||||
}
|
||||
|
||||
public Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
return _institutionContractRepository.CreationComplete(request);
|
||||
}
|
||||
|
||||
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
|
||||
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
|
||||
string state)
|
||||
|
||||
@@ -36,7 +36,9 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application.UID;
|
||||
using AccountManagement.Application.Contracts.Account;
|
||||
using Company.Domain.InstitutionContractCreationTempAgg;
|
||||
using Company.Domain.RepresentativeAgg;
|
||||
using Company.Domain.TemporaryClientRegistrationAgg;
|
||||
using ContractingPartyAccount = Company.Domain.ContractingPartyAccountAgg.ContractingPartyAccount;
|
||||
using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment;
|
||||
@@ -60,7 +62,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||
private readonly IHubContext<SendSmsHub> _hubContext;
|
||||
private readonly ILogger<InstitutionContractRepository> _logger;
|
||||
private readonly IUidService _uidService;
|
||||
private readonly IUidService _uidService;
|
||||
|
||||
|
||||
private readonly InstitutionContratVerificationParty _firstParty = new()
|
||||
@@ -74,6 +76,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
};
|
||||
|
||||
private readonly IContractingPartyTempRepository _contractingPartyTempRepository;
|
||||
private readonly IPersonalContractingPartyRepository _contractingPartyRepository;
|
||||
private readonly IRepresentativeRepository _representativeRepository;
|
||||
private readonly IAccountApplication _accountApplication;
|
||||
|
||||
|
||||
public InstitutionContractRepository(CompanyContext context, IEmployerRepository employerRepository,
|
||||
@@ -81,7 +86,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
IPlanPercentageRepository planPercentageRepository, ISmsService smsService,
|
||||
ISmsResultRepository smsResultRepository, IFinancialTransactionRepository financialTransactionRepository,
|
||||
IFinancialStatmentRepository financialStatmentRepository, IHubContext<SendSmsHub> hubContext,
|
||||
ILogger<InstitutionContractRepository> logger, IUidService uidService, IContractingPartyTempRepository contractingPartyTempRepository) : base(context)
|
||||
ILogger<InstitutionContractRepository> logger, IUidService uidService,
|
||||
IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository contractingPartyRepository, IRepresentativeRepository representativeRepository, IAccountApplication accountApplication) : base(context)
|
||||
{
|
||||
_context = context;
|
||||
_employerRepository = employerRepository;
|
||||
@@ -95,6 +101,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
_logger = logger;
|
||||
_uidService = uidService;
|
||||
_contractingPartyTempRepository = contractingPartyTempRepository;
|
||||
_contractingPartyRepository = contractingPartyRepository;
|
||||
_representativeRepository = representativeRepository;
|
||||
_accountApplication = accountApplication;
|
||||
_institutionExtensionTemp =
|
||||
database.GetCollection<InstitutionContractExtensionTemp>("InstitutionContractExtensionTemp");
|
||||
_institutionAmendmentTemp =
|
||||
@@ -4968,9 +4977,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
var contractingParty =
|
||||
await _context.PersonalContractingParties.FirstOrDefaultAsync(x => x.Nationalcode == nationalCode);
|
||||
|
||||
long contractingPartyId = contractingParty?.id ?? 0;
|
||||
if (contractingParty != null)
|
||||
{
|
||||
|
||||
if (contractingParty.DateOfBirth != null && contractingParty.DateOfBirth != dateOfBirthGr)
|
||||
throw new BadRequestException("تاریخ تولد مطابقت ندارد");
|
||||
|
||||
@@ -5005,13 +5014,27 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
if (!isMachMobilAndNationalCode.IsMatched)
|
||||
throw new BadRequestException("شماره همراه وارد شده با کد ملی مطابقت ندارد");
|
||||
|
||||
contractingParty.Authentication(apiResponseParty.BasicInformation.FirstName,
|
||||
apiResponseParty.BasicInformation.LastName,
|
||||
apiResponseParty.BasicInformation.FatherName, idNumberParty,
|
||||
apiResponseParty.IdentificationInformation.ShenasnameSeri,
|
||||
apiResponseParty.IdentificationInformation.ShenasnameSerial, dateOfBirth,
|
||||
apiResponseParty.BasicInformation.GenderEnum,
|
||||
mobile);
|
||||
if (contractingParty.IsLegal == "حقیقی")
|
||||
{
|
||||
contractingParty.Authentication(apiResponseParty.BasicInformation.FirstName,
|
||||
apiResponseParty.BasicInformation.LastName,
|
||||
apiResponseParty.BasicInformation.FatherName, idNumberParty,
|
||||
apiResponseParty.IdentificationInformation.ShenasnameSeri,
|
||||
apiResponseParty.IdentificationInformation.ShenasnameSerial, dateOfBirth,
|
||||
apiResponseParty.BasicInformation.GenderEnum,
|
||||
mobile);
|
||||
}
|
||||
else
|
||||
{
|
||||
contractingParty.LegalAuthentication(apiResponseParty.BasicInformation.FirstName,
|
||||
apiResponseParty.BasicInformation.LastName,
|
||||
apiResponseParty.BasicInformation.FatherName, idNumberParty,
|
||||
apiResponseParty.IdentificationInformation.ShenasnameSeri,
|
||||
apiResponseParty.IdentificationInformation.ShenasnameSerial, dateOfBirth,
|
||||
apiResponseParty.BasicInformation.GenderEnum,
|
||||
mobile);
|
||||
}
|
||||
|
||||
idNumberSeri = apiResponseParty.IdentificationInformation.ShenasnameSeri;
|
||||
idNumberSerial = apiResponseParty.IdentificationInformation.ShenasnameSerial;
|
||||
|
||||
@@ -5060,9 +5083,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
result.RealParty = null;
|
||||
result.LegalType = LegalType.Legal;
|
||||
}
|
||||
|
||||
idNumberSeri = contractingParty.IdNumberSeri;
|
||||
idNumberSerial = contractingParty.IdNumberSerial;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5125,10 +5148,10 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
BirthDateFa = apiRespons.IdentificationInformation.BirthDate,
|
||||
IsAuth = true,
|
||||
PhoneNumber = request.Mobile,
|
||||
|
||||
};
|
||||
result.RealParty = null;
|
||||
}
|
||||
|
||||
idNumberSeri = apiRespons.IdentificationInformation.ShenasnameSeri;
|
||||
idNumberSerial = apiRespons.IdentificationInformation.ShenasnameSerial;
|
||||
}
|
||||
@@ -5151,11 +5174,11 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
PhoneNumber = realParty.PhoneNumber,
|
||||
IdNumberSerial = idNumberSerial,
|
||||
IdNumberSeri = idNumberSeri,
|
||||
|
||||
Id = contractingPartyId
|
||||
};
|
||||
}
|
||||
|
||||
if (result.LegalParty !=null)
|
||||
if (result.LegalParty != null)
|
||||
{
|
||||
var legalParty = result.LegalParty;
|
||||
tempLegalParty = new()
|
||||
@@ -5175,16 +5198,876 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
PhoneNumber = legalParty.PhoneNumber,
|
||||
Position = legalParty.Position,
|
||||
IsAuth = legalParty.IsAuth,
|
||||
Id = contractingPartyId
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
contractTemp.SetContractingPartyInfo(result.LegalType,tempRealParty, tempLegalParty);
|
||||
contractTemp.SetContractingPartyInfo(result.LegalType, tempRealParty, tempLegalParty);
|
||||
await _institutionContractCreationTemp.InsertOneAsync(contractTemp);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(
|
||||
InstitutionContractCreationWorkshopsRequest request)
|
||||
{
|
||||
var transaction = await _context.Database.BeginTransactionAsync();
|
||||
PersonalContractingParty contractingParty = null;
|
||||
switch (request.LegalType)
|
||||
{
|
||||
case LegalType.Legal:
|
||||
var legalCommand = request.LegalParty;
|
||||
|
||||
var legalPersonalContractingParty = _context.PersonalContractingParties
|
||||
.FirstOrDefault(x => x.NationalId == legalCommand.NationalId);
|
||||
if (!request.LegalParty.IsAuth)
|
||||
{
|
||||
if (legalPersonalContractingParty is { IsAuthenticated: false })
|
||||
{
|
||||
legalPersonalContractingParty.UnAuthenticateLegalEdit(legalCommand.FName, legalCommand.LName,
|
||||
legalCommand.FatherName, legalCommand.IdNumber, legalPersonalContractingParty.IdNumberSeri,
|
||||
legalPersonalContractingParty.IdNumberSerial, legalCommand.BirthDateFa, legalCommand.Gender,
|
||||
legalCommand.PhoneNumber);
|
||||
}
|
||||
}
|
||||
|
||||
legalPersonalContractingParty?.EditLegalPartyFromInstitution(legalCommand.Position,
|
||||
legalCommand.CompanyName,
|
||||
legalCommand.RegisterId, legalCommand.NationalId);
|
||||
|
||||
contractingParty = legalPersonalContractingParty;
|
||||
break;
|
||||
case LegalType.Real:
|
||||
var realCommand = request.RealParty;
|
||||
var personalContractingParty = _context.PersonalContractingParties
|
||||
.FirstOrDefault(x => x.Nationalcode == realCommand.NationalCode);
|
||||
if (!request.RealParty.IsAuth)
|
||||
{
|
||||
if (personalContractingParty is { IsAuthenticated: false })
|
||||
{
|
||||
personalContractingParty.UnAuthenticateRealEdit(realCommand.FName, realCommand.LName,
|
||||
realCommand.FatherName, realCommand.IdNumber, personalContractingParty.IdNumberSeri,
|
||||
personalContractingParty.IdNumberSerial, realCommand.BirthDateFa, realCommand.Gender,
|
||||
realCommand.PhoneNumber);
|
||||
}
|
||||
|
||||
contractingParty = personalContractingParty;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
await SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
|
||||
var creationTemp = await _institutionContractCreationTemp.Find(x => x.Id == request.TempId)
|
||||
.FirstOrDefaultAsync();
|
||||
|
||||
if (creationTemp == null)
|
||||
{
|
||||
throw new BadRequestException("دیتای درخواست شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (contractingParty == null)
|
||||
{
|
||||
throw new BadRequestException("طرف قرارداد یافت نشد");
|
||||
}
|
||||
|
||||
var employerWorkshopIds = _context.Employers
|
||||
.Where(x => x.ContractingPartyId == contractingParty.id)
|
||||
.Include(x => x.WorkshopEmployers)
|
||||
.SelectMany(x => x.WorkshopEmployers).Select(x => x.WorkshopId).Distinct().ToList();
|
||||
|
||||
creationTemp.SetContractingPartyContactInfo(request.Address, request.City, request.Province,
|
||||
request.ContactInfos,request.RepresentativeId);
|
||||
await _institutionContractCreationTemp.ReplaceOneAsync(
|
||||
x => x.Id == creationTemp.Id,
|
||||
creationTemp
|
||||
);
|
||||
|
||||
|
||||
var workshopsNotInInstitution = employerWorkshopIds.ToList();
|
||||
|
||||
var workshops = await _context.Workshops
|
||||
.Where(x => employerWorkshopIds.Contains(x.id))
|
||||
.ToListAsync();
|
||||
|
||||
var notIncludeWorskhopsLeftWork = await _context.LeftWorkList
|
||||
.Where(x => workshopsNotInInstitution.Contains(x.WorkshopId) && x.StartWorkDate <= DateTime.Now &&
|
||||
x.LeftWorkDate >= DateTime.Now)
|
||||
.GroupBy(x => x.WorkshopId).ToListAsync();
|
||||
|
||||
var workshopDetails = workshopsNotInInstitution.Select(x =>
|
||||
{
|
||||
var workshop = workshops.FirstOrDefault(w => w.id == x);
|
||||
var leftWorks = notIncludeWorskhopsLeftWork.FirstOrDefault(l => l.Key == x);
|
||||
return new WorkshopTempViewModel()
|
||||
{
|
||||
WorkshopName = workshop?.WorkshopName ?? "فاقد کارگاه",
|
||||
WorkshopServicesAmount = 0,
|
||||
WorkshopServicesAmountStr = "0",
|
||||
WorkshopId = x,
|
||||
Id = 0,
|
||||
ContractAndCheckout = false,
|
||||
ContractAndCheckoutInPerson = false,
|
||||
CustomizeCheckout = false,
|
||||
CountPerson = leftWorks?.Count() ?? 0,
|
||||
Insurance = false,
|
||||
InsuranceInPerson = false,
|
||||
RollCall = false,
|
||||
RollCallInPerson = false,
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
|
||||
var res = new InstitutionContractCreationWorkshopsResponse()
|
||||
{
|
||||
TotalAmount = workshopDetails.Sum(x => x.WorkshopServicesAmount).ToMoney(),
|
||||
WorkshopTemps = workshopDetails
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(
|
||||
InstitutionContractCreationPlanRequest request)
|
||||
{
|
||||
if (request.WorkshopTemps.Count == 0)
|
||||
throw new BadRequestException("هیچ کارگاهی یافت نشد");
|
||||
|
||||
bool hasInPerson = request.WorkshopTemps.Any(x => x.ContractAndCheckoutInPerson);
|
||||
double amount = request.TotalAmount.MoneyToDouble();
|
||||
|
||||
var institutionTemp =
|
||||
await _institutionContractCreationTemp.Find(x => x.Id == request.TempId).FirstOrDefaultAsync();
|
||||
|
||||
|
||||
var res = new InstitutionContractCreationPlanResponse();
|
||||
|
||||
|
||||
var contractStart = DateTime.Now;
|
||||
|
||||
|
||||
if (hasInPerson)
|
||||
{
|
||||
res.OneMonth = null;
|
||||
|
||||
res.ThreeMonths = null;
|
||||
|
||||
res.SixMonths = null;
|
||||
|
||||
res.TwelveMonths =
|
||||
CalculateInstitutionPlan(InstitutionContractDuration.TwelveMonths, amount, true, contractStart);
|
||||
}
|
||||
else
|
||||
{
|
||||
res.OneMonth =
|
||||
CalculateInstitutionPlan(InstitutionContractDuration.OneMonth, amount, false, contractStart);
|
||||
|
||||
res.ThreeMonths =
|
||||
CalculateInstitutionPlan(InstitutionContractDuration.ThreeMonths, amount, false, contractStart);
|
||||
|
||||
res.SixMonths =
|
||||
CalculateInstitutionPlan(InstitutionContractDuration.SixMonths, amount, false, contractStart);
|
||||
|
||||
res.TwelveMonths = CalculateInstitutionPlan(InstitutionContractDuration.TwelveMonths, amount, false,
|
||||
contractStart);
|
||||
}
|
||||
|
||||
var workshops = request.WorkshopTemps
|
||||
.Select(x => new InstitutionContractCreationTempWorkshop(x.WorkshopName, x.CountPerson,
|
||||
x.ContractAndCheckout, x.ContractAndCheckoutInPerson,
|
||||
x.Insurance, x.InsuranceInPerson, x.RollCall, x.RollCall,
|
||||
x.RollCallInPerson, x.WorkshopServicesAmount, x.WorkshopId)).ToList();
|
||||
|
||||
institutionTemp.SetWorkshopsAndPlanAmounts(workshops, res.OneMonth, res.ThreeMonths, res.SixMonths,
|
||||
res.TwelveMonths, hasInPerson);
|
||||
|
||||
await _institutionContractCreationTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id, institutionTemp);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(
|
||||
InstitutionContractCreationPaymentRequest request)
|
||||
{
|
||||
var institutionTemp = await _institutionContractCreationTemp
|
||||
.Find(x => x.Id == request.TempId).FirstOrDefaultAsync();
|
||||
|
||||
if (institutionTemp == null)
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
|
||||
var duration = request.Duration;
|
||||
|
||||
|
||||
var selectedPlan = duration switch
|
||||
{
|
||||
InstitutionContractDuration.OneMonth => institutionTemp.OneMonth,
|
||||
InstitutionContractDuration.ThreeMonths => institutionTemp.ThreeMonths,
|
||||
InstitutionContractDuration.SixMonths => institutionTemp.SixMonths,
|
||||
InstitutionContractDuration.TwelveMonths => institutionTemp.TwelveMonths,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
var baseAmount = selectedPlan.TotalPayment.MoneyToDouble();
|
||||
var vatOrDiscount = baseAmount * 0.10;
|
||||
|
||||
var calculation = institutionTemp.HasContractInPerson
|
||||
? CalculateInPersonPayment((InstitutionContractExtensionPlanDetail)selectedPlan, baseAmount, vatOrDiscount,
|
||||
request.Duration)
|
||||
: CalculateOnlinePayment(baseAmount, vatOrDiscount);
|
||||
|
||||
institutionTemp.SetAmountAndDuration(duration, calculation.Monthly, calculation.OneTime);
|
||||
|
||||
await _institutionContractCreationTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id, institutionTemp);
|
||||
|
||||
var res = new InstitutionContractCreationPaymentResponse()
|
||||
{
|
||||
Monthly = calculation.Monthly,
|
||||
OneTime = calculation.OneTime
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractDiscountResponse> SetDiscountForCreation(
|
||||
InstitutionContractSetDiscountForCreationRequest request)
|
||||
{
|
||||
if (request.DiscountPercentage <= 0)
|
||||
throw new BadRequestException("مقدار تخفیف نمیتواند برابر یا کمتر از صفر باشد");
|
||||
if (request.DiscountPercentage >= 100)
|
||||
{
|
||||
throw new BadRequestException("مقدار تخفیف نمیتواند برابر یا بیشتر از صد باشد");
|
||||
}
|
||||
|
||||
var institutionTemp = await _institutionContractCreationTemp.Find(x => x.Id == request.TempId)
|
||||
.FirstOrDefaultAsync();
|
||||
if (institutionTemp == null)
|
||||
{
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
if (institutionTemp.MonthlyPayment.DiscountPercetage > 0)
|
||||
throw new BadRequestException("تخفیف قبلا برای این قرارداد اعمال شده است");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (institutionTemp.OneTimePayment.DiscountPercetage > 0)
|
||||
throw new BadRequestException("تخفیف قبلا برای این قرارداد اعمال شده است");
|
||||
}
|
||||
|
||||
var selectedPlan = institutionTemp.Duration switch
|
||||
{
|
||||
InstitutionContractDuration.OneMonth => institutionTemp.OneMonth,
|
||||
InstitutionContractDuration.ThreeMonths => institutionTemp.ThreeMonths,
|
||||
InstitutionContractDuration.SixMonths => institutionTemp.SixMonths,
|
||||
InstitutionContractDuration.TwelveMonths => institutionTemp.TwelveMonths,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
var calculateRequest = new InstitutionContractSetDiscountRequest()
|
||||
{
|
||||
Duration = institutionTemp.Duration.Value,
|
||||
TotalAmount = request.TotalAmount,
|
||||
DiscountPercentage = request.DiscountPercentage,
|
||||
IsInstallment = request.IsInstallment,
|
||||
OneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble()
|
||||
};
|
||||
var res = CalculateDiscount(calculateRequest, selectedPlan.ContractStart);
|
||||
|
||||
//این به این دلیل هست که متد caclulate discount یکی از مقادیر رو پر میکنه و ما نیاز داریم هر دو مقدار رو داشته باشیم
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
var onetime = institutionTemp.OneTimePayment;
|
||||
onetime.TotalAmountWithoutDiscount = onetime.TotalAmount;
|
||||
|
||||
onetime.OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted;
|
||||
institutionTemp.OneTimePayment.TotalAmountWithoutDiscount = onetime.TotalAmount;
|
||||
institutionTemp.OneTimePayment.OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted;
|
||||
|
||||
res.OneTime = new()
|
||||
{
|
||||
PaymentAmount = onetime.PaymentAmount,
|
||||
Tax = onetime.Tax,
|
||||
TotalAmount = onetime.TotalAmount,
|
||||
DiscountedAmount = onetime.DiscountedAmount,
|
||||
DiscountPercetage = onetime.DiscountPercetage,
|
||||
};
|
||||
|
||||
|
||||
institutionTemp.MonthlyPayment = new()
|
||||
{
|
||||
Installments = res.Monthly.Installments,
|
||||
PaymentAmount = res.Monthly.PaymentAmount,
|
||||
Tax = res.Monthly.Tax,
|
||||
TotalAmount = res.Monthly.TotalAmount,
|
||||
DiscountedAmount = res.Monthly.DiscountedAmount,
|
||||
DiscountPercetage = res.Monthly.DiscountPercetage,
|
||||
TotalAmountWithoutDiscount = institutionTemp.MonthlyPayment.TotalAmount,
|
||||
OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted,
|
||||
};
|
||||
|
||||
selectedPlan.TotalPayment = res.Monthly.TotalAmount;
|
||||
selectedPlan.Obligation = res.Monthly.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = res.Monthly.OneMonthAmount;
|
||||
selectedPlan.DailyCompenseation = (res.Monthly.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
}
|
||||
else
|
||||
{
|
||||
var monthly = institutionTemp.MonthlyPayment;
|
||||
|
||||
institutionTemp.MonthlyPayment.TotalAmountWithoutDiscount = monthly.TotalAmount;
|
||||
|
||||
res.Monthly = new()
|
||||
{
|
||||
PaymentAmount = monthly.PaymentAmount,
|
||||
Tax = monthly.Tax,
|
||||
TotalAmount = monthly.TotalAmount,
|
||||
DiscountedAmount = monthly.DiscountedAmount,
|
||||
DiscountPercetage = monthly.DiscountPercetage,
|
||||
Installments = monthly.Installments,
|
||||
};
|
||||
|
||||
|
||||
institutionTemp.OneTimePayment = new()
|
||||
{
|
||||
PaymentAmount = res.OneTime.PaymentAmount,
|
||||
Tax = res.OneTime.Tax,
|
||||
TotalAmount = res.OneTime.TotalAmount,
|
||||
DiscountedAmount = res.OneTime.DiscountedAmount,
|
||||
DiscountPercetage = res.OneTime.DiscountPercetage,
|
||||
TotalAmountWithoutDiscount = institutionTemp.OneTimePayment.TotalAmount,
|
||||
OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted,
|
||||
};
|
||||
selectedPlan.TotalPayment = res.OneTime.TotalAmount;
|
||||
selectedPlan.Obligation = res.OneTime.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = res.OneTime.OneMonthAmount;
|
||||
selectedPlan.DailyCompenseation = (res.OneTime.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
}
|
||||
|
||||
switch (institutionTemp.Duration)
|
||||
{
|
||||
case InstitutionContractDuration.OneMonth:
|
||||
institutionTemp.OneMonth = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.ThreeMonths:
|
||||
institutionTemp.ThreeMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.SixMonths:
|
||||
institutionTemp.SixMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.TwelveMonths:
|
||||
institutionTemp.TwelveMonths = selectedPlan;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
await _institutionContractCreationTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
|
||||
return new()
|
||||
{
|
||||
OneTime = res.OneTime,
|
||||
Monthly = res.Monthly
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(
|
||||
InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
var institutionTemp = await _institutionContractCreationTemp.Find(x => x.Id == request.TempId)
|
||||
.FirstOrDefaultAsync();
|
||||
if (institutionTemp == null)
|
||||
{
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
InstitutionContractDiscountMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractDiscountOneTimeViewModel oneTimePayment = null;
|
||||
var selectedPlan = institutionTemp.Duration switch
|
||||
{
|
||||
InstitutionContractDuration.OneMonth => institutionTemp.OneMonth,
|
||||
InstitutionContractDuration.ThreeMonths => institutionTemp.ThreeMonths,
|
||||
InstitutionContractDuration.SixMonths => institutionTemp.SixMonths,
|
||||
InstitutionContractDuration.TwelveMonths => institutionTemp.TwelveMonths,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
var prevMonthlyPayment = institutionTemp.MonthlyPayment;
|
||||
var resetTotalAmount = prevMonthlyPayment.TotalAmountWithoutDiscount.MoneyToDouble();
|
||||
var resetTax = (resetTotalAmount * 0.10);
|
||||
var paymentAmount = (resetTotalAmount + resetTax);
|
||||
var newOneMonthAmount = prevMonthlyPayment.OneMonthPaymentWithoutDiscount.MoneyToDouble();
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
DiscountPercetage = 0,
|
||||
DiscountedAmount = "0",
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Tax = resetTax.ToMoney(),
|
||||
TotalAmount = resetTotalAmount.ToMoney(),
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)institutionTemp.Duration.Value,
|
||||
paymentAmount, selectedPlan.ContractStart),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney(),
|
||||
Obligation = resetTotalAmount.ToMoney()
|
||||
};
|
||||
institutionTemp.MonthlyPayment = new InstitutionContractPaymentMonthlyViewModel()
|
||||
{
|
||||
Installments = monthlyPayment.Installments,
|
||||
PaymentAmount = monthlyPayment.PaymentAmount,
|
||||
Tax = monthlyPayment.Tax,
|
||||
TotalAmount = monthlyPayment.TotalAmount,
|
||||
DiscountedAmount = monthlyPayment.DiscountedAmount,
|
||||
DiscountPercetage = monthlyPayment.DiscountPercetage,
|
||||
};
|
||||
selectedPlan.TotalPayment = monthlyPayment.TotalAmount;
|
||||
selectedPlan.Obligation = monthlyPayment.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = monthlyPayment.OneMonthAmount;
|
||||
selectedPlan.DailyCompenseation = (monthlyPayment.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
|
||||
switch (institutionTemp.Duration)
|
||||
{
|
||||
case InstitutionContractDuration.OneMonth:
|
||||
institutionTemp.OneMonth = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.ThreeMonths:
|
||||
institutionTemp.ThreeMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.SixMonths:
|
||||
institutionTemp.SixMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.TwelveMonths:
|
||||
institutionTemp.TwelveMonths = selectedPlan;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
await _institutionContractCreationTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
}
|
||||
else
|
||||
{
|
||||
var prevOneTimePayment = institutionTemp.OneTimePayment;
|
||||
var resetTotalAmount = prevOneTimePayment.TotalAmountWithoutDiscount.MoneyToDouble();
|
||||
var resetTax = (resetTotalAmount * 0.10);
|
||||
var newOneMonthAmount = prevOneTimePayment.OneMonthPaymentWithoutDiscount.MoneyToDouble();
|
||||
|
||||
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
||||
{
|
||||
DiscountPercetage = 0,
|
||||
DiscountedAmount = "0",
|
||||
TotalAmount = resetTotalAmount.ToMoney(),
|
||||
Tax = resetTax.ToMoney(),
|
||||
PaymentAmount = (resetTotalAmount + resetTax).ToMoney(),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney(),
|
||||
Obligation = resetTotalAmount.ToMoney()
|
||||
};
|
||||
institutionTemp.OneTimePayment = new InstitutionContractPaymentOneTimeViewModel()
|
||||
{
|
||||
PaymentAmount = oneTimePayment.PaymentAmount,
|
||||
Tax = oneTimePayment.Tax,
|
||||
TotalAmount = oneTimePayment.TotalAmount,
|
||||
DiscountedAmount = oneTimePayment.DiscountedAmount,
|
||||
DiscountPercetage = oneTimePayment.DiscountPercetage,
|
||||
TotalAmountWithoutDiscount = institutionTemp.OneTimePayment.TotalAmount,
|
||||
OneMonthPaymentWithoutDiscount = institutionTemp.OneTimePayment.OneMonthPaymentWithoutDiscount
|
||||
};
|
||||
selectedPlan.TotalPayment = institutionTemp.HasContractInPerson
|
||||
? (oneTimePayment.TotalAmount.MoneyToDouble() / (0.9)).ToMoney()
|
||||
: oneTimePayment.TotalAmount;
|
||||
selectedPlan.Obligation = oneTimePayment.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = oneTimePayment.OneMonthAmount;
|
||||
selectedPlan.DailyCompenseation = (oneTimePayment.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
|
||||
switch (institutionTemp.Duration)
|
||||
{
|
||||
case InstitutionContractDuration.OneMonth:
|
||||
institutionTemp.OneMonth = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.ThreeMonths:
|
||||
institutionTemp.ThreeMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.SixMonths:
|
||||
institutionTemp.SixMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.TwelveMonths:
|
||||
institutionTemp.TwelveMonths = selectedPlan;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
await _institutionContractCreationTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
}
|
||||
|
||||
return new InstitutionContractDiscountResponse()
|
||||
{
|
||||
OneTime = oneTimePayment,
|
||||
Monthly = monthlyPayment
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public async Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
var institutionContractTemp = await _institutionContractCreationTemp.Find(x => x.Id == request.TemporaryId)
|
||||
.FirstOrDefaultAsync();
|
||||
|
||||
if (institutionContractTemp == null)
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
|
||||
var selectedDuration = institutionContractTemp.Duration switch
|
||||
{
|
||||
InstitutionContractDuration.OneMonth => institutionContractTemp.OneMonth,
|
||||
InstitutionContractDuration.ThreeMonths => institutionContractTemp.ThreeMonths,
|
||||
InstitutionContractDuration.SixMonths => institutionContractTemp.SixMonths,
|
||||
InstitutionContractDuration.TwelveMonths => institutionContractTemp.TwelveMonths,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
var contractingPartyId = institutionContractTemp.ContractingPartyLegalType == LegalType.Real
|
||||
? institutionContractTemp.RealParty.Id
|
||||
: institutionContractTemp.LegalParty.Id;
|
||||
PersonalContractingParty contractingParty;
|
||||
if (contractingPartyId > 0)
|
||||
{
|
||||
contractingParty = await _context.PersonalContractingParties
|
||||
.FirstOrDefaultAsync(x => x.id == contractingPartyId);
|
||||
}
|
||||
else
|
||||
{
|
||||
OperationResult<PersonalContractingParty> contractingPartyResult = institutionContractTemp.ContractingPartyLegalType switch
|
||||
{
|
||||
LegalType.Legal => await CreateLegalContractingPartyEntity(institutionContractTemp.LegalParty, institutionContractTemp.RepresentativeId,
|
||||
institutionContractTemp.Address,
|
||||
institutionContractTemp.City, institutionContractTemp.Province),
|
||||
LegalType.Real => await CreateRealContractingPartyEntity(institutionContractTemp.RealParty, institutionContractTemp.RepresentativeId,
|
||||
institutionContractTemp.Address,
|
||||
institutionContractTemp.City, institutionContractTemp.Province),
|
||||
_ => throw new BadRequestException("نوع طرف قرارداد مشخص نشده است")
|
||||
};
|
||||
if (!contractingPartyResult.IsSuccedded)
|
||||
throw new BadRequestException(contractingPartyResult.Message);
|
||||
contractingParty = contractingPartyResult.Data;
|
||||
}
|
||||
|
||||
|
||||
//این به این خواطر هست که قبل از این آیدی برای این بوده که بفهمیم طرف حساب وجود داره یا نه ولی الان که مطمئن هستیم که وجود داره ماهیت این آیدی فرق کرده
|
||||
contractingPartyId = contractingParty.id;
|
||||
|
||||
var payment = request.IsInstallment
|
||||
? institutionContractTemp.MonthlyPayment
|
||||
: institutionContractTemp.OneTimePayment;
|
||||
|
||||
bool dateMessages = false;
|
||||
string dateMaessageResult = String.Empty;
|
||||
var opration = new OperationResult();
|
||||
|
||||
var contractStart = selectedDuration.ContractStart;
|
||||
|
||||
var representative = _representativeRepository.Get(institutionContractTemp.RepresentativeId);
|
||||
if (representative == null)
|
||||
return opration.Failed("معرف مورد نظر یافت نشد");
|
||||
|
||||
if (_context.InstitutionContractSet.Any(x =>
|
||||
x.ContractingPartyId == contractingPartyId && x.IsActiveString == "true"))
|
||||
return opration.Failed("برای این طرف قرارداد قبلا قرارداد اصلی ایجاد شده است، شما میتوانید از تمدید استفاده کنید");
|
||||
|
||||
|
||||
if (string.IsNullOrWhiteSpace(contractStart))
|
||||
{
|
||||
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
|
||||
dateMessages = true;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(contractStart))
|
||||
{
|
||||
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
|
||||
dateMessages = true;
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(selectedDuration.ContractEnd))
|
||||
{
|
||||
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
|
||||
dateMessages = true;
|
||||
}
|
||||
|
||||
if (dateMessages)
|
||||
return opration.Failed(dateMaessageResult);
|
||||
|
||||
|
||||
var syear = contractStart.Substring(0, 4);
|
||||
var smonth = contractStart.Substring(5, 2);
|
||||
var sday = contractStart.Substring(8, 2);
|
||||
//شماره قرارداد
|
||||
var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/0";
|
||||
|
||||
|
||||
var contractStartGr = contractStart.ToGeorgianDateTime();
|
||||
var contractEndGr = selectedDuration.ContractEnd.ToGeorgianDateTime();
|
||||
|
||||
var contractDateGr = contractStart.ToGeorgianDateTime();
|
||||
|
||||
|
||||
if (institutionContractTemp.Address != null && institutionContractTemp.Province == null)
|
||||
{
|
||||
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
|
||||
}
|
||||
|
||||
if ((institutionContractTemp.Address != null && institutionContractTemp.Province != null) &&
|
||||
institutionContractTemp.City == "شهرستان")
|
||||
{
|
||||
return opration.Failed("لطفا شهر را انتخاب کنید");
|
||||
}
|
||||
|
||||
if (institutionContractTemp.Address == null && institutionContractTemp.Province != null)
|
||||
{
|
||||
return opration.Failed("لطفا آدرس را وارد کنید");
|
||||
}
|
||||
|
||||
var hasValueAddedTax = payment.Tax.MoneyToDouble() > 0 ? "true" : "false";
|
||||
|
||||
var workshopsCount = institutionContractTemp.Workshops.Count.ToString();
|
||||
|
||||
var workshopDetails = institutionContractTemp
|
||||
.Workshops.Select(x =>
|
||||
{
|
||||
var res = new InstitutionContractWorkshopInitial(x.WorkshopName, x.RollCall, x.RollCallInPerson,
|
||||
x.CustomizeCheckout,
|
||||
x.ContractAndCheckout,
|
||||
x.ContractAndCheckoutInPerson, x.Insurance, x.InsuranceInPerson, x.CountPerson, x.Price);
|
||||
if (x.WorkshopId != 0)
|
||||
{
|
||||
res.SetWorkshopId(x.WorkshopId);
|
||||
}
|
||||
|
||||
return res;
|
||||
}).ToList();
|
||||
|
||||
var employeeCount = institutionContractTemp.Workshops.Sum(x => x.CountPerson).ToString();
|
||||
|
||||
var oneMonthPayment = selectedDuration.OneMonthPaymentDiscounted.MoneyToDouble();
|
||||
|
||||
|
||||
var contractingPartyFullName = contractingParty.IsLegal=="حقیقی"
|
||||
? contractingParty.FName + " " + contractingParty.LName
|
||||
: contractingParty.LName;
|
||||
|
||||
var totalAmount = payment.PaymentAmount.MoneyToDouble();
|
||||
|
||||
|
||||
var transaction = await _context.Database.BeginTransactionAsync();
|
||||
|
||||
var entity = new InstitutionContract(contractNo, representative.id,
|
||||
representative.FullName,
|
||||
contractingPartyId,
|
||||
contractingPartyFullName, contractDateGr, contractStart,
|
||||
institutionContractTemp.Province, institutionContractTemp.City,
|
||||
institutionContractTemp.Address, contractStartGr,
|
||||
contractStart, contractEndGr, selectedDuration.ContractEnd,
|
||||
oneMonthPayment, selectedDuration.DailyCompenseation.MoneyToDouble(),
|
||||
selectedDuration.Obligation.MoneyToDouble(), totalAmount,
|
||||
0, workshopsCount, employeeCount,null,
|
||||
"NotOfficial", "JobRelation", hasValueAddedTax,
|
||||
payment.Tax.MoneyToDouble(), [],
|
||||
request.LawId, payment.DiscountPercetage, payment.DiscountedAmount.MoneyToDouble());
|
||||
|
||||
await CreateAsync(entity);
|
||||
await SaveChangesAsync();
|
||||
foreach (var workshop in institutionContractTemp.Workshops)
|
||||
{
|
||||
var workshopDetail = new InstitutionContractWorkshopInitial(
|
||||
workshop.WorkshopName, workshop.RollCall, workshop.RollCallInPerson,
|
||||
workshop.CustomizeCheckout, workshop.ContractAndCheckout,
|
||||
workshop.ContractAndCheckoutInPerson, workshop.Insurance,
|
||||
workshop.InsuranceInPerson, workshop.CountPerson, workshop.Price);
|
||||
|
||||
workshopDetail.SetWorkshopGroup(entity.WorkshopGroup);
|
||||
|
||||
if (workshop.WorkshopId != 0)
|
||||
{
|
||||
workshopDetail.SetWorkshopId(workshop.WorkshopId);
|
||||
}
|
||||
// Set parent reference
|
||||
|
||||
// Add to the parent's collection
|
||||
entity.WorkshopGroup.InitialWorkshops.Add(workshopDetail);
|
||||
}
|
||||
|
||||
// Save the changes again
|
||||
await SaveChangesAsync();
|
||||
|
||||
|
||||
FinancialStatment financialStatement;
|
||||
if (_context.FinancialStatments.Any(x => x.ContractingPartyId == contractingParty.id))
|
||||
{
|
||||
financialStatement =
|
||||
await _context.FinancialStatments.FirstOrDefaultAsync(x => x.ContractingPartyId == contractingParty.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
financialStatement = new FinancialStatment(contractingParty.id, contractingPartyFullName);
|
||||
await _context.AddAsync(financialStatement);
|
||||
}
|
||||
|
||||
|
||||
if (request.IsInstallment && payment is InstitutionContractPaymentMonthlyViewModel monthly)
|
||||
{
|
||||
var installments = monthly.Installments.Select(x =>
|
||||
new InstitutionContractInstallment(x.InstalmentDate.ToGeorgianDateTime(),
|
||||
x.InstallmentAmountStr.MoneyToDouble(), "")).ToList();
|
||||
|
||||
// دریافت مبلغ اولین قسط
|
||||
//این کار برای این هست که اولین قسط باید با تاریخ امروز باشد و باید به وضعیت مالی بدهی ایجاد شود که یوزر اولین بدهی را وارد کند
|
||||
var firstInstallmentAmount = installments.First().Amount;
|
||||
|
||||
// حذف اولین قسط
|
||||
installments.RemoveAt(0);
|
||||
|
||||
// ایجاد قسط جدید با تاریخ امروز
|
||||
var todayInstallment = new InstitutionContractInstallment(DateTime.Today, firstInstallmentAmount, "");
|
||||
|
||||
|
||||
// اضافه کردن قسط جدید به ابتدای لیست
|
||||
installments.Insert(0, todayInstallment);
|
||||
|
||||
entity.SetInstallments(installments);
|
||||
await SaveChangesAsync();
|
||||
}
|
||||
|
||||
foreach (var contactInfo in institutionContractTemp.ContactInfos)
|
||||
{
|
||||
if (contactInfo.PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new InstitutionContractContactInfo(contactInfo.PhoneType,
|
||||
contactInfo.Position, contactInfo.PhoneNumber, contactInfo.FnameLname, entity.id,
|
||||
contactInfo.SendSmsString == "true");
|
||||
|
||||
_context.InstitutionContractContactInfos.Add(contactinfo);
|
||||
}
|
||||
}
|
||||
var userPass = contractingParty.IsLegal == "حقیقی"
|
||||
? contractingParty.Nationalcode
|
||||
: contractingParty.NationalId;
|
||||
var createAcc = new RegisterAccount
|
||||
{
|
||||
Fullname = contractingParty.LName,
|
||||
Username = userPass,
|
||||
Password = userPass,
|
||||
Mobile = contractingParty.Phone,
|
||||
NationalCode = userPass
|
||||
};
|
||||
var res = _accountApplication.RegisterClient(createAcc);
|
||||
if (res.IsSuccedded)
|
||||
CreateContractingPartyAccount(contractingParty.id, res.SendId);
|
||||
|
||||
await SaveChangesAsync();
|
||||
|
||||
await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName,
|
||||
entity.PublicId, contractingParty.id, entity.id);
|
||||
|
||||
|
||||
await SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
return opration.Succcedded();
|
||||
}
|
||||
|
||||
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
|
||||
InstitutionContractCreationTempLegalParty request, long representativeId, string address, string city,
|
||||
string state)
|
||||
{
|
||||
var opration = new OperationResult<PersonalContractingParty>();
|
||||
|
||||
|
||||
if (representativeId < 1)
|
||||
return opration.Failed("لطفا معرف را انتخاب کنید");
|
||||
|
||||
if (_contractingPartyRepository.Exists(x =>
|
||||
x.LName == request.CompanyName && x.NationalId == request.NationalId))
|
||||
return opration.Failed("نام شرکت وارد شده تکراری است");
|
||||
|
||||
|
||||
//if (_contractingPartyRepository.Exists(x =>
|
||||
// x.RegisterId == request.RegisterId && x.LName != request.CompanyName))
|
||||
// return opration.Failed("شماره ثبت وارد شده تکراری است");
|
||||
|
||||
|
||||
if (_contractingPartyRepository.Exists(x =>
|
||||
x.NationalId == request.NationalId && x.LName != request.CompanyName))
|
||||
{
|
||||
return opration.Failed("شناسه ملی وارد شده تکراری است");
|
||||
}
|
||||
|
||||
var archiveCode = _contractingPartyRepository.GetLastNewArchiveCode();
|
||||
|
||||
|
||||
var representative = _representativeRepository.GetDetails(representativeId);
|
||||
var legalContractingParty = new PersonalContractingParty("*", request.CompanyName,
|
||||
"*", "*", request.RegisterId, request.NationalId,
|
||||
"حقوقی",
|
||||
request.PhoneNumber, request.PhoneNumber, address, representativeId, representative.FullName,
|
||||
archiveCode, state, city, null, null,
|
||||
request.FName, request.LName, request.Position);
|
||||
|
||||
if (request.IsAuth)
|
||||
{
|
||||
legalContractingParty.LegalAuthentication(request.FName, request.LName, request.FatherName,
|
||||
request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber);
|
||||
}
|
||||
|
||||
await _contractingPartyRepository.CreateAsync(legalContractingParty);
|
||||
await _contractingPartyRepository.SaveChangesAsync();
|
||||
|
||||
return opration.Succcedded(legalContractingParty);
|
||||
}
|
||||
|
||||
private async Task<OperationResult<PersonalContractingParty>> CreateRealContractingPartyEntity(
|
||||
InstitutionContractCreationTempRealParty request, long representativeId, string address,
|
||||
string city, string province)
|
||||
{
|
||||
var operation = new OperationResult<PersonalContractingParty>();
|
||||
|
||||
|
||||
if (representativeId < 1)
|
||||
return operation.Failed("لطفا معرف را انتخاب کنید");
|
||||
|
||||
if (_contractingPartyRepository.Exists(x => x.Nationalcode == request.NationalCode))
|
||||
{
|
||||
return operation.Failed("کد ملی وارد شده تکراری است");
|
||||
}
|
||||
|
||||
var archiveCode = _contractingPartyRepository.GetLastNewArchiveCode();
|
||||
|
||||
if (request.NationalCode.NationalCodeValid() != "valid")
|
||||
{
|
||||
return operation.Failed("کد ملی وارد شده نا معتبر است");
|
||||
}
|
||||
|
||||
var representative = _representativeRepository.GetDetails(representativeId);
|
||||
|
||||
if (representative == null)
|
||||
return operation.Failed("معرف مورد نظر یافت نشد");
|
||||
|
||||
var personalContractingParty = new PersonalContractingParty(request.FName, request.LName,
|
||||
request.NationalCode, request.IdNumber, "*", "*",
|
||||
"حقیقی",
|
||||
request.PhoneNumber, request.PhoneNumber, address, representativeId, representative.FullName, archiveCode,
|
||||
province, city, null, null, null, null);
|
||||
|
||||
if (request.IsAuth)
|
||||
{
|
||||
personalContractingParty.Authentication(request.FName, request.LName, request.FatherName,
|
||||
request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber);
|
||||
}
|
||||
|
||||
await _contractingPartyRepository.CreateAsync(personalContractingParty);
|
||||
await _contractingPartyRepository.SaveChangesAsync();
|
||||
|
||||
return operation.Succcedded(personalContractingParty);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
@@ -536,45 +536,45 @@ public class institutionContractController : AdminBaseController
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("create/workshops")]
|
||||
public async Task<ActionResult<InstitutionContractCraetionWorkshopsResponse>> CreationWorkshops([FromBody] InstitutionContractCreationWorkshopsRequest request)
|
||||
[HttpPost("creation/workshops")]
|
||||
public async Task<ActionResult<InstitutionContractCreationWorkshopsResponse>> CreationWorkshops([FromBody] InstitutionContractCreationWorkshopsRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.GetCreationWorkshops(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extenstion/institution-plan")]
|
||||
public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtensionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request)
|
||||
[HttpPost("creation/institution-plan")]
|
||||
public async Task<ActionResult<InstitutionContractCreationPlanResponse>> CreationInstitutionPlan([FromBody]InstitutionContractCreationPlanRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.GetExtensionInstitutionPlan(request);
|
||||
var res =await _institutionContractApplication.GetCreationInstitutionPlan(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extenstion/payment-method")]
|
||||
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtensionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request)
|
||||
[HttpPost("creation/payment-method")]
|
||||
public async Task<ActionResult<InstitutionContractCreationPaymentResponse>> GetCreationPaymentMethod([FromBody]InstitutionContractCreationPaymentRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.GetExtensionPaymentMethod(request);
|
||||
var res =await _institutionContractApplication.GetCreationPaymentMethod(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extension/set-discount")]
|
||||
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForExtension([FromBody]InstitutionContractSetDiscountForExtensionRequest request)
|
||||
[HttpPost("creation/set-discount")]
|
||||
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForCreation([FromBody]InstitutionContractSetDiscountForCreationRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.SetDiscountForExtension(request);
|
||||
var res =await _institutionContractApplication.SetDiscountForCreation(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extension/reset-discount")]
|
||||
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request)
|
||||
[HttpPost("creation/reset-discount")]
|
||||
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForCreation([FromBody]InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.ResetDiscountForExtension(request);
|
||||
var res =await _institutionContractApplication.ResetDiscountForCreation(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extenstion/complete")]
|
||||
public async Task<ActionResult<OperationResult>> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request)
|
||||
[HttpPost("creation/complete")]
|
||||
public async Task<ActionResult<OperationResult>> CreationComplete([FromBody]InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.ExtensionComplete(request);
|
||||
var res =await _institutionContractApplication.CreationComplete(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user