import DC_ACTION from '../../enum/dcAction'; import DC_SCENARIO from '../../enum/dcScenario'; import PARTY from '../../enum/party'; import USER_ROLE from '../../enum/userRole'; import envConfig from '../../env/env-config'; import { getNodeProfile } from '../../env/nodeProfile'; import { checkerApproverResponse, isWorkflowReadyForExecution } from '../apiUtil'; import { HTTP_METHOD } from '../httpMethod'; import { makeAuthenticatedRequest } from '../loginUtil'; import scenarioContext from '../scenarioContext'; import { executeDraftAndMapNewId } from '../updateDcId'; import { generateConfirmingBankProceededDc } from './generateConfirmingBankProceededDc'; import { checkForIdentitySwitching } from './multiIdentityUtil'; export async function generateNominatedBankProceededDc( dcScenario, action = DC_ACTION.ADVISED, proceededUserRoles = USER_ROLE.MAKER + '.' + USER_ROLE.CHECKER_APPROVER, attachmentNum = 0, documentSourceDataTable = null ) { await generateConfirmingBankProceededDc( dcScenario, DC_ACTION.ADVISED_WITH_CONFIRMATION, USER_ROLE.MAKER + '.' + USER_ROLE.CHECKER_APPROVER, attachmentNum, documentSourceDataTable ); const roles = proceededUserRoles.split('.'); // Only 3rd party nominated bank / case without confirming bank but with nominated bank const validDC_SCENARIO = [ DC_SCENARIO.SC2, DC_SCENARIO.SC8, DC_SCENARIO.SC11, DC_SCENARIO.SC12, DC_SCENARIO.SC2SPLIT, DC_SCENARIO.SC3SPLIT ]; if (validDC_SCENARIO.includes(dcScenario)) { const actionInfoMap = new Map() .set(DC_ACTION.ADVISED, { endPoint: 'locapp/availableWithBank/approve/' + scenarioContext().dc.appRefId, json: { args: { lcReference: envConfig.scenario[dcScenario].nominatedLCRef }, draftComment: null } }) .set(DC_ACTION.REJECTED, { endPoint: 'locapp/availableWithBank/reject/' + scenarioContext().dc.appRefId, json: { args: {}, draftComment: null } }); scenarioContext().currentParty = PARTY.NOMINATED_BANK; const endPoint = actionInfoMap.get(action).endPoint; const json = actionInfoMap.get(action).json; const nominatedBankNode = scenarioContext().getPartyNode(dcScenario, PARTY.NOMINATED_BANK); const nodeProfile = getNodeProfile(nominatedBankNode); await checkForIdentitySwitching(PARTY.NOMINATED_BANK, nominatedBankNode, nodeProfile, roles[0]); let nominatedBankAdviseResponse = await makeAuthenticatedRequest( nominatedBankNode, roles[0], endPoint, HTTP_METHOD.PUT, JSON.stringify(json) ); nominatedBankAdviseResponse = isWorkflowReadyForExecution(nominatedBankAdviseResponse) ? nominatedBankAdviseResponse : await checkerApproverResponse(nominatedBankNode, roles[1], nominatedBankAdviseResponse); await executeDraftAndMapNewId(nominatedBankNode, await nominatedBankAdviseResponse.id); } }