import deepmerge from 'deepmerge'; import ACTION_TYPE from '../../enum/actionType'; import PARTY from '../../enum/party'; import USER_ROLE, { hasApproverRole } from '../../enum/userRole'; import envConfig from '../../env/env-config'; import { getNodeProfile } from '../../env/nodeProfile'; import { checkerApproverProceedDraft } from '../checkerApproverProceedDraft'; import * as dateUtil from '../dateUtil'; import { generateDocumentSourceJson } from '../generateDocumentSourceJson'; import { generateOtherDocumentsJson } from '../generateOtherDocumentsJson'; import { HTTP_METHOD } from '../httpMethod'; import { makeAuthenticatedRequest } from '../loginUtil'; import scenarioContext from '../scenarioContext'; import { executeDraftAndMapNewId } from '../updateDcId'; import { uploadAttachment } from '../uploadAttachment'; import default_dc_payload from './default_dc_payload'; export async function generateApplicantProceededDcForBeneficiary( dcScenario, proceededUserRoles = USER_ROLE.ADMIN1, attachmentNum = 0, documentSourceDataTable = null ) { const roles = proceededUserRoles.split('.'); const randomDate = dateUtil.getRandomDate(); scenarioContext().dc.randomDate = randomDate; const attachments = []; const documentSource = generateDocumentSourceJson(documentSourceDataTable); const otherDocumentsRequired = generateOtherDocumentsJson(documentSourceDataTable); for (let i = 0; i < attachmentNum; i++) { const bash = await uploadAttachment( envConfig.scenario[dcScenario].applicant, USER_ROLE.MAKER, './resources/pdfFiles/pdfDC' + (i + 1) + '.pdf' ); attachments.push({ name: 'pdfDc' + (i + 1) + '.pdf', id: bash }); } scenarioContext().dc.attachments = attachments; let json = { args: { props: { applicationDate: dateUtil.getTodayDate(), expiryDate: randomDate, incoterms: 'EXW', documentsRequired: documentSource, documentsSource: 'VOLTRON', otherDocumentsRequired: otherDocumentsRequired, confirmation: envConfig.scenario[dcScenario].confirmation, attachments: attachments, typeCredit: null, typeCredits: [ { typeCredit: 'SIGHT', availableCreditsProps: {} }, { typeCredit: 'DEFERRED_PAYMENT', availableCreditsProps: { deferredPaymentDetails: 'Deferred payment\nNegotiation / Deferred payment details' } }, { typeCredit: 'NEGOTIABLE_CREDIT', availableCreditsProps: { deferredPaymentDetails: 'Negotiation\nNegotiation / Deferred payment details' } } ], parties: { applicant: getNodeProfile(envConfig.scenario[dcScenario].applicant).name, beneficiary: getNodeProfile(envConfig.scenario[dcScenario].beneficiary).name, issuer: getNodeProfile(envConfig.scenario[dcScenario].issuingBank).name, advisingBank: getNodeProfile(envConfig.scenario[dcScenario].advisingBank).name, confirmingBank: getNodeProfile(envConfig.scenario[dcScenario].confirmingBank)?.name ?? null, availableWithBank: getNodeProfile(envConfig.scenario[dcScenario].nominatedBank)?.name ?? null, drawee: null, requestedBy: getNodeProfile(envConfig.scenario[dcScenario].applicant).name, counterparty: getNodeProfile(envConfig.scenario[dcScenario].beneficiary).name, availableWithAnyBank: getNodeProfile(envConfig.scenario[dcScenario].nominatedBank) ? false : true }, partyAddresses: { applicant: getNodeProfile(envConfig.scenario[dcScenario].applicant).address, beneficiary: getNodeProfile(envConfig.scenario[dcScenario].beneficiary).address, issuer: getNodeProfile(envConfig.scenario[dcScenario].issuingBank).address, advisingBank: getNodeProfile(envConfig.scenario[dcScenario].advisingBank).address, confirmingBank: getNodeProfile(envConfig.scenario[dcScenario].confirmingBank)?.address ?? null, availableWithBank: getNodeProfile(envConfig.scenario[dcScenario].nominatedBank)?.address ?? 'Any address', drawee: null } } } }; json = deepmerge(default_dc_payload, json, { arrayMerge: (destinationArray: any, sourceArray: any, options: any) => sourceArray }); const res = await makeAuthenticatedRequest( envConfig.scenario[dcScenario].applicant, roles[0], 'locapp/apply', HTTP_METHOD.PUT, JSON.stringify(json) ); if (hasApproverRole.includes(roles[0])) { await executeDraftAndMapNewId(envConfig.scenario[dcScenario].applicant, await res.id); } else { const getLinearIdRes = await makeAuthenticatedRequest( envConfig.scenario[dcScenario].applicant, roles[0], 'draft/' + (await res.id), HTTP_METHOD.GET, null ); scenarioContext().dc.uuid = await getLinearIdRes._datas[0].linearId.id; for (let i = 1; i < roles.length; i++) { await checkerApproverProceedDraft(PARTY.APPLICANT, roles[i], dcScenario, res.id, ACTION_TYPE.LOCAPP, 0); } } }