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 { generateIssuingBankProceededDc } from './generateIssuingBankProceededDc'; import { checkForIdentitySwitching } from './multiIdentityUtil'; export async function generateConfirmingBankProceededDc( dcScenario, action = DC_ACTION.ADVISED_WITH_CONFIRMATION, proceededUserRoles = USER_ROLE.MAKER + '.' + USER_ROLE.CHECKER_APPROVER, attachmentNum = 0, documentSourceDataTable = null ) { await generateIssuingBankProceededDc( dcScenario, DC_ACTION.ISSUED, USER_ROLE.MAKER + '.' + USER_ROLE.CHECKER_APPROVER, attachmentNum, documentSourceDataTable ); const roles = proceededUserRoles.split('.'); // Case with confirming bank const validDC_SCENARIO = [ DC_SCENARIO.SC4, DC_SCENARIO.SC5, DC_SCENARIO.SC6, DC_SCENARIO.SC8, DC_SCENARIO.SC10, DC_SCENARIO.SC11 ]; if (validDC_SCENARIO.includes(dcScenario)) { const actionInfoMap = new Map() .set(DC_ACTION.ADVISED_WITH_CONFIRMATION, { endPoint: 'locapp/requestedConfirmationParty/advise/' + scenarioContext().dc.appRefId + '/withConfirmation', json: { args: { lcReference: envConfig.scenario[dcScenario].confirmedLCRef }, draftComment: null } }) .set(DC_ACTION.ADVISED_WITHOUT_CONFIRMATION, { endPoint: 'locapp/requestedConfirmationParty/advise/' + scenarioContext().dc.appRefId + '/withoutConfirmation', json: { args: { lcReference: envConfig.scenario[dcScenario].confirmedLCRef }, draftComment: null } }) .set(DC_ACTION.REJECTED, { endPoint: 'locapp/requestedConfirmationParty/reject/' + scenarioContext().dc.appRefId, json: { args: {}, draftComment: null } }); scenarioContext().currentParty = PARTY.CONFIRMING_BANK; const endPoint = actionInfoMap.get(action).endPoint; const json = actionInfoMap.get(action).json; const confirmingBankNode = scenarioContext().getPartyNode(dcScenario, PARTY.CONFIRMING_BANK); const nodeProfile = getNodeProfile(confirmingBankNode); await checkForIdentitySwitching(PARTY.CONFIRMING_BANK, confirmingBankNode, nodeProfile, roles[0]); let confirmingBankAdviseResponse = await makeAuthenticatedRequest( confirmingBankNode, roles[0], endPoint, HTTP_METHOD.PUT, JSON.stringify(json) ); confirmingBankAdviseResponse = isWorkflowReadyForExecution(confirmingBankAdviseResponse) ? confirmingBankAdviseResponse : await checkerApproverResponse(confirmingBankNode, roles[1], confirmingBankAdviseResponse); await executeDraftAndMapNewId(confirmingBankNode, await confirmingBankAdviseResponse.id); } }