After the seller receives LC advice from the confirming bank, the seller ships the goods. In this step, we define the SellerDeliverGoods transaction and related event for the LC update:
transaction SellerDeliverGoods {
--> LetterOfCredit lc
o String evidence
}
event SellerDeliverGoodsEvent {
--> LetterOfCredit lc
}
The letter status is set to DELIVER_PRODUCT, and the step to 4:
/**
* seller deliver product
* @param {org.example.lc.SellerDeliverGoods} sellerDeliverGoods - seller deliver product
* @transaction
*/
async function sellerDeliverGoods(request) { // eslint-disable-line no-unused-vars
const factory = getFactory();
const namespace = 'org.example.lc';
let letter = request.lc;
if (letter.status === 'CLOSED') {
throw new Error ('This letter of credit has already been closed');
} else if (letter.step!== 3) {
throw new Error ('This letter of credit should be in step 3 - ADVICE_LC');
}
letter.status = 'DELIVER_PRODUCT';
letter.step=4;
letter.evidence.push(request.evidence);
const assetRegistry = await getAssetRegistry(request.lc.getFullyQualifiedType());
await assetRegistry.update(letter);
// emit event
const sellerDeliverGoodsEvent = factory.newEvent(namespace, 'SellerDeliverGoodsEvent');
sellerDeliverGoodsEvent.lc = letter;
emit(sellerDeliverGoodsEvent);
}