Handle BuyInstitutionContractInstallment items in invoice processing and add GetIdByInstallmentId method

This commit is contained in:
2025-11-27 21:12:52 +03:30
parent f3fa76c292
commit 95891d5bae
6 changed files with 1208 additions and 1170 deletions

View File

@@ -145,4 +145,6 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
#endregion
Task<long> GetIdByInstallmentId(long installmentId);
}

View File

@@ -253,6 +253,8 @@ public interface IInstitutionContractApplication
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
Task<OperationResult> SetPendingWorkflow(long entityId);
Task<long> GetIdByInstallmentId(long installmentId);
}
public class InstitutionContractPrintViewModel

View File

@@ -1485,12 +1485,12 @@ public class EmployerApplication : IEmployerApplication
return opration.Failed("نام شرکت وارد شده تکراری است");
}
if (_EmployerRepository.Exists(x =>
x.RegisterId == command.RegisterId && !string.IsNullOrWhiteSpace(command.RegisterId) &&
x.RegisterId != null))
{
return opration.Failed(" شماره ثبت وارد شده تکراری است");
}
// if (_EmployerRepository.Exists(x =>
// x.RegisterId == command.RegisterId && !string.IsNullOrWhiteSpace(command.RegisterId) &&
// x.RegisterId != null))
// {
// return opration.Failed(" شماره ثبت وارد شده تکراری است");
// }
if (!string.IsNullOrEmpty(command.NationalId) && command.NationalId.Length != 11)
{

View File

@@ -69,7 +69,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
IContractingPartyTempRepository contractingPartyTempRepository,
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, ISmsService smsService, IUidService uidService,
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory, IPaymentTransactionRepository paymentTransactionRepository)
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
IPaymentTransactionRepository paymentTransactionRepository)
{
_institutionContractRepository = institutionContractRepository;
_contractingPartyRepository = contractingPartyRepository;
@@ -943,7 +944,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public async Task<OperationResult> CreateAsync(CreateInstitutionContractRequest command)
{
var opration = new OperationResult();
var syear = command.ContractStartFa.Substring(0, 4);
var smonth = command.ContractStartFa.Substring(5, 2);
@@ -1062,7 +1062,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var contractingPartyFullName = "";
if (contractingParty.IsLegal == "حقیقی")
{
contractingPartyFullName = contractingParty.FName + " " + contractingParty.LName;
}
else
@@ -1452,7 +1451,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return await _institutionContractRepository.ExtensionComplete(request);
}
public async Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected)
public async Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,
string selected)
{
return await _institutionContractRepository.GetInstitutionContractSelectList(search, selected);
}
@@ -1462,7 +1462,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId);
}
public async Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request)
public async Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
InstitutionContractAmendmentTempWorkshopViewModel request)
{
return await _institutionContractRepository.InsertAmendmentTempWorkshops(request);
}
@@ -1472,7 +1473,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return _institutionContractRepository.RemoveAmendmentWorkshops(workshopTempId);
}
public Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request)
public Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
InsitutionContractAmendmentPaymentRequest request)
{
return _institutionContractRepository.GetAmendmentPaymentDetails(request);
}
@@ -1490,6 +1492,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
throw new BadRequestException("این قرارداد مالی در وضعیت مناسبی برای ارسال مجدد لینک تایید نمی باشد");
}
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
if (contractingParty == null)
throw new NotFoundException("طرف قرارداد یافت نشد");
@@ -1507,7 +1510,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public async Task<OperationResult> SetPendingWorkflow(long entityId)
{
var op = new OperationResult();
var institutionContract = _institutionContractRepository.Get(entityId);
var institutionContract = await _institutionContractRepository.GetIncludeWorkshopDetailsAsync(entityId);
if (institutionContract == null)
{
return op.Failed("قرارداد مالی یافت نشد");
@@ -1517,11 +1520,24 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
return op.Failed("وضعیت قرارداد مالی برای این عملیات مناسب نمی باشد");
}
if (institutionContract.WorkshopGroup.InitialWorkshops.All(x => x.WorkshopCreated && x.WorkshopId is > 0))
{
institutionContract.Verified();
}
else
{
institutionContract.SetPendingWorkflow();
}
await _institutionContractRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<long> GetIdByInstallmentId(long installmentId)
{
return await _institutionContractRepository.GetIdByInstallmentId(installmentId);
}
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,

View File

@@ -1726,6 +1726,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
{
return await _context.InstitutionContractSet
.Include(x => x.WorkshopGroup)
.ThenInclude(x=> x.InitialWorkshops)
.Include(x=>x.WorkshopGroup)
.ThenInclude(x=>x.CurrentWorkshops)
.FirstOrDefaultAsync(x => x.id == institutionContractId);
}
@@ -4201,7 +4204,12 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
}
public async Task<long> GetIdByInstallmentId(long installmentId)
{
return await _context.InstitutionContractSet.Include(x=>x.Installments)
.Where(x=>x.Installments.Any(i=>i.Id==installmentId))
.Select(x=>x.id).FirstOrDefaultAsync();
}
#endregion

View File

@@ -150,7 +150,7 @@ public class GeneralController : GeneralBaseController
payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(),
payResponse.digitalreceipt);
if (financialInvoice.Items?.Any(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract) ?? false)
if (financialInvoice.Items?.Any(x => x.Type is FinancialInvoiceItemType.BuyInstitutionContract or FinancialInvoiceItemType.BuyInstitutionContractInstallment) ?? false)
{
var financialItems = financialInvoice.Items
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
@@ -158,6 +158,16 @@ public class GeneralController : GeneralBaseController
{
await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId);
}
var financialInstallmentItems = financialInvoice.Items
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
foreach (var editFinancialInvoiceItem in financialInstallmentItems)
{
var institutionContractId =
await _institutionContractApplication.GetIdByInstallmentId(
editFinancialInvoiceItem.Id);
await _institutionContractApplication.SetPendingWorkflow(institutionContractId);
}
}
if (!setSuccessResult.IsSuccedded)