exports.init_z2bEvents = function (req, res, next) { let method = 'init_z2bEvents'; if (bRegistered) {res.send('Already Registered');} else{ bRegistered = true; // svc.createAlertSocket(); let businessNetworkConnection; businessNetworkConnection = new BusinessNetworkConnection(); businessNetworkConnection.setMaxListeners(50); // // v0.14 // return businessNetworkConnection.connect(config.composer.connectionProfile, config.composer.network, config.composer.adminID, config.composer.adminPW) // // v0.15 return businessNetworkConnection.connect(config.composer.adminCard) .then(() => { // using the businessNetworkConnection, start monitoring for events. // when an event is provided, call the _monitor function, passing in the al_connection, f_connection and event information businessNetworkConnection.on('event', (event) => {_monitor(req.app.locals, event); }); res.send('event registration complete'); }).catch((error) => { // if an error is encountered, log the error and send it back to the requestor console.log(method+' business network connection failed'+error.message); res.send(method+' business network connection failed'+error.message); }); } };
exports.addInbound = function(feedItem, callback) { /** * parameters expected in the args: * feedItem (Inbound) **/ const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection; const bizNetworkConnection = new BusinessNetworkConnection(); bizNetworkConnection.connect(process.env.CARD_NAME) .then((bizNetworkDefinition) => { const factory = bizNetworkDefinition.getFactory(); const id = generateId(); bizNetworkConnection.getParticipantRegistry('info.glennengstrand.Inbound') .then((inboundRegistry) => { var inb = factory.newResource('info.glennengstrand', 'Inbound', id); inb.created = new Date(); inb.subject = feedItem.subject; inb.story = feedItem.story; inb.recipient = factory.newRelationship('info.glennengstrand', 'Broadcaster', feedItem.to); inboundRegistry.add(inb) .then((result) => { callback(null, feedItem); }); }); }); }
exports.getInbound = function(args, callback) { /** * parameters expected in the args: * id (Long) **/ const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection; const bizNetworkConnection = new BusinessNetworkConnection(); bizNetworkConnection.connect(process.env.CARD_NAME) .then((bizNetworkDefinition) => { var query = bizNetworkConnection.buildQuery('SELECT info.glennengstrand.Inbound WHERE (recipient == _$broadcaster)'); bizNetworkConnection.query(query, { broadcaster: 'resource:info.glennengstrand.Broadcaster#PID:' + args.id.value }) .then((results) => { const retVal = results.map(function(result) { return { "from": null, "to": args.id.value, "occurred": result.created, "subject": result.subject, "story": result.story }; }); callback(null, retVal); }); }); }
.then(() => { businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); events = []; businessNetworkConnection.on('event', (event) => { events.push(event); }); return businessNetworkConnection.connect('defaultProfile', 'my-network', identity.userID, identity.userSecret); });
.then(() => { // Create and establish a business network connection businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); return businessNetworkConnection.connect('defaultProfile', 'decentralized-energy-network', 'admin', 'adminpw'); })
/** * Reconnect using a different identity. * @param {String} cardName The name of the card for the identity to use */ async function useIdentity(cardName) { await businessNetworkConnection.disconnect(); businessNetworkConnection = new BusinessNetworkConnection({ cardStore: cardStore }); events = []; businessNetworkConnection.on('event', (event) => { events.push(event); }); await businessNetworkConnection.connect(cardName); factory = businessNetworkConnection.getBusinessNetwork().getFactory(); }
.then(() => { // Create and establish a business network connection businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); events = []; businessNetworkConnection.on('event', (event) => { events.push(event); }); return businessNetworkConnection.connect('defaultProfile', 'my-network', 'admin', 'adminpw'); })
.then((modelSchemas) => { console.log('Generated schemas for all types in business network definition'); console.log('Adding schemas for all types to Loopback ...'); modelSchemas.forEach((modelSchema) => { let model = app.loopback.createModel(modelSchema); app.model(model, { dataSource: dataSource, public: true }); }); businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); return businessNetworkConnection.connect('defaultProfile', 'bond-network', 'admin', 'Xurw3yU9zI0l'); })
.then((modelSchemas) => { console.log('Generated schemas for all types in business network definition'); console.log('Adding schemas for all types to Loopback ...'); modelSchemas.forEach((modelSchema) => { let model = app.loopback.createModel(modelSchema); app.model(model, { dataSource: dataSource, public: true }); }); businessNetworkConnection = new BusinessNetworkConnection({ cardStore }); return businessNetworkConnection.connect('admin@bond-network'); })
it('should bind an identity and make it available for a ping request', async function () { const identityName = uuid.v4(); const cardName = `${identityName}@systest-identities`; const { certificate, privateKey } = getNextIdentity(); await client.bindIdentity(participant, certificate); const card = new IdCard({ businessNetwork: 'systest-identities', userName: identityName }, TestUtil.getCurrentConnectionProfile()); card.setCredentials({ certificate, privateKey }); const admin = new AdminConnection({ cardStore }); await admin.importCard(cardName, card); client = new BusinessNetworkConnection({ cardStore }); await client.connect(cardName); const result = await client.ping(); result.participant.should.equal(participant.getFullyQualifiedIdentifier()); });
it('should bind an identity and make the identity available for transaction processor functions', async function () { const identityName = uuid.v4(); const cardName = `${identityName}@systest-identities`; const { certificate, privateKey } = getNextIdentity(); await client.bindIdentity(participant, certificate); const card = new IdCard({ businessNetwork: 'systest-identities', userName: identityName }, TestUtil.getCurrentConnectionProfile()); card.setCredentials({ certificate, privateKey }); const admin = new AdminConnection({ cardStore }); await admin.importCard(cardName, card); client = new BusinessNetworkConnection({ cardStore }); await client.connect(cardName); const factory = client.getBusinessNetwork().getFactory(); const transaction = factory.newTransaction('systest.identities', 'TestGetCurrentIdentity'); await client.submitTransaction(transaction); });
.then((bnd) => { ser = bnd.getSerializer(); // // v0.14 // return businessNetworkConnection.connect(config.composer.connectionProfile, config.composer.network, req.body.userID, req.body.secret) // // v0.15 console.log(method+' req.body.userID is: '+req.body.userID ); return businessNetworkConnection.connect(req.body.userID) .then(() => { return businessNetworkConnection.query('selectOrders') .then((orders) => { allOrders = new Array(); for (let each in orders) { (function (_idx, _arr) { let _jsn = ser.toJSON(_arr[_idx]); _jsn.id = _arr[_idx].orderNumber; allOrders.push(_jsn); })(each, orders); } res.send({'result': 'success', 'orders': allOrders}); }) .catch((error) => {console.log('selectOrders failed ', error); res.send({'result': 'failed', 'error': 'selectOrders: '+error.message}); }); }) .catch((error) => {console.log('businessNetwork connect failed ', error); res.send({'result': 'failed', 'error': 'businessNetwork: '+error.message}); }); })
/** * Disconnects from the Hyperledger Fabric. * @return {Promise} A promise that will be resolved when the connection is * terminated. */ disconnect () { debug('disconnect'); // Remove all registered event listeners. this.businessNetworkConnection.removeAllListeners(); // Now disconnect from the business network. return this.businessNetworkConnection.disconnect() .then(() => { this.connected = this.connecting = false; }) .catch((error) => { this.connected = this.connecting = false; throw error; }); }
.then((bizNetworkDefinition) => { var query = bizNetworkConnection.buildQuery('SELECT info.glennengstrand.Inbound WHERE (recipient == _$broadcaster)'); bizNetworkConnection.query(query, { broadcaster: 'resource:info.glennengstrand.Broadcaster#PID:' + args.id.value }) .then((results) => { const retVal = results.map(function(result) { return { "from": null, "to": args.id.value, "occurred": result.created, "subject": result.subject, "story": result.story }; }); callback(null, retVal); }); });
beforeEach(async () => { // Generate a business network definition from the project directory. let businessNetworkDefinition = await BusinessNetworkDefinition.fromDirectory(path.resolve(__dirname, '..')); businessNetworkName = businessNetworkDefinition.getName(); await adminConnection.install(businessNetworkDefinition); const startOptions = { networkAdmins: [ { userName: '******', enrollmentSecret: 'adminpw' } ] }; const adminCards = await adminConnection.start(businessNetworkName, businessNetworkDefinition.getVersion(), startOptions); await adminConnection.importCard(adminCardName, adminCards.get('admin')); // Create and establish a business network connection businessNetworkConnection = new BusinessNetworkConnection({ cardStore: cardStore }); events = []; businessNetworkConnection.on('event', event => { events.push(event); }); await businessNetworkConnection.connect(adminCardName); // Get the factory for the business network. factory = businessNetworkConnection.getBusinessNetwork().getFactory(); const participantRegistry = await businessNetworkConnection.getParticipantRegistry(participantNS); // Create the participants. const alice = factory.newResource(namespace, participantType, '*****@*****.**'); alice.firstName = 'Alice'; alice.lastName = 'A'; const bob = factory.newResource(namespace, participantType, '*****@*****.**'); bob.firstName = 'Bob'; bob.lastName = 'B'; participantRegistry.addAll([alice, bob]); const assetRegistry = await businessNetworkConnection.getAssetRegistry(assetNS); // Create the assets. const asset1 = factory.newResource(namespace, assetType, '1'); asset1.owner = factory.newRelationship(namespace, participantType, '*****@*****.**'); asset1.value = '10'; const asset2 = factory.newResource(namespace, assetType, '2'); asset2.owner = factory.newRelationship(namespace, participantType, '*****@*****.**'); asset2.value = '20'; assetRegistry.addAll([asset1, asset2]); // Issue the identities. let identity = await businessNetworkConnection.issueIdentity(participantNS + '#alice@email.com', 'alice1'); await importCardForIdentity(aliceCardName, identity); identity = await businessNetworkConnection.issueIdentity(participantNS + '#bob@email.com', 'bob1'); await importCardForIdentity(bobCardName, identity); });
.then(() => { return businessNetworkConnection.submitTransaction(createNew) .then(() => {console.log(' order '+orderNo+' successfully added'); res.send({'result': ' order '+orderNo+' successfully added'}); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo); svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection); } else {console.log(orderNo+' submitTransaction failed with text: ',error.message);} }); })
.then((bizNetworkDefinition) => { const factory = bizNetworkDefinition.getFactory(); const id = generateId(); bizNetworkConnection.getParticipantRegistry('info.glennengstrand.Inbound') .then((inboundRegistry) => { var inb = factory.newResource('info.glennengstrand', 'Inbound', id); inb.created = new Date(); inb.subject = feedItem.subject; inb.story = feedItem.story; inb.recipient = factory.newRelationship('info.glennengstrand', 'Broadcaster', feedItem.to); inboundRegistry.add(inb) .then((result) => { callback(null, feedItem); }); }); });
exports.getMyOrders = function (req, res, next) { // connect to the network let method = 'getMyOrders'; console.log(method+' req.body.userID is: '+req.body.userID ); let allOrders = new Array(); let businessNetworkConnection; if (svc.m_connection === null) {svc.createMessageSocket();} let ser; let archiveFile = fs.readFileSync(path.join(path.dirname(require.main.filename),'network','dist','zerotoblockchain-network.bna')); businessNetworkConnection = new BusinessNetworkConnection(); return BusinessNetworkDefinition.fromArchive(archiveFile) .then((bnd) => { ser = bnd.getSerializer(); // // v0.14 // return businessNetworkConnection.connect(config.composer.connectionProfile, config.composer.network, req.body.userID, req.body.secret) // // v0.15 console.log(method+' req.body.userID is: '+req.body.userID ); return businessNetworkConnection.connect(req.body.userID) .then(() => { return businessNetworkConnection.query('selectOrders') .then((orders) => { allOrders = new Array(); for (let each in orders) { (function (_idx, _arr) { let _jsn = ser.toJSON(_arr[_idx]); _jsn.id = _arr[_idx].orderNumber; allOrders.push(_jsn); })(each, orders); } res.send({'result': 'success', 'orders': allOrders}); }) .catch((error) => {console.log('selectOrders failed ', error); res.send({'result': 'failed', 'error': 'selectOrders: '+error.message}); }); }) .catch((error) => {console.log('businessNetwork connect failed ', error); res.send({'result': 'failed', 'error': 'businessNetwork: '+error.message}); }); }) .catch((error) => {console.log('create bnd from archive failed ', error); res.send({'result': 'failed', 'error': 'create bnd from archive: '+error.message}); }); };
.then(() => { return businessNetworkConnection.query('selectOrders') .then((orders) => { allOrders = new Array(); for (let each in orders) { (function (_idx, _arr) { let _jsn = ser.toJSON(_arr[_idx]); _jsn.id = _arr[_idx].orderNumber; allOrders.push(_jsn); })(each, orders); } res.send({'result': 'success', 'orders': allOrders}); }) .catch((error) => {console.log('selectOrders failed ', error); res.send({'result': 'failed', 'error': 'selectOrders: '+error.message}); }); })
/** * Connect to the Business Network * @return {Promise} A promise that is resolved when the connector has connected. */ connect() { debug('connect'); this.connecting = true; this.connected = false; this.connectionPromise = this.businessNetworkConnection.connect(this.settings.card) .then((businessNetwork) => { this.businessNetwork = businessNetwork; this.serializer = this.businessNetwork.getSerializer(); this.modelManager = this.businessNetwork.getModelManager(); this.introspector = this.businessNetwork.getIntrospector(); }) .then(() => { this.connected = true; this.connecting = false; return this.businessNetworkConnection; }) .catch((error) => { this.connected = this.connecting = false; throw error; }); return this.connectionPromise; }
exports.addOrder = function (req, res, next) { let method = 'addOrder'; console.log(method+' req.body.buyer is: '+req.body.buyer ); let businessNetworkConnection; let factory; let ts = Date.now(); let orderNo = req.body.buyer.replace(/@/, '').replace(/\./, '')+ts; if (svc.m_connection === null) {svc.createMessageSocket();} businessNetworkConnection = new BusinessNetworkConnection(); // // v0.14 // return businessNetworkConnection.connect(config.composer.connectionProfile, config.composer.network, req.body.buyer, req.body.secret) // // v0.15 return businessNetworkConnection.connect(req.body.buyer) //return businessNetworkConnection.connect(config.composer.adminCard) .then(() => { factory = businessNetworkConnection.getBusinessNetwork().getFactory(); let order = factory.newResource(NS, 'Order', orderNo); order = svc.createOrderTemplate(order); order.amount = 0; order.orderNumber = orderNo; order.buyer = factory.newRelationship(NS, 'Buyer', req.body.buyer); order.seller = factory.newRelationship(NS, 'Seller', req.body.seller); order.provider = factory.newRelationship(NS, 'Provider', 'noop@dummy'); order.shipper = factory.newRelationship(NS, 'Shipper', 'noop@dummy'); order.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); for (let each in req.body.items) {(function(_idx, _arr) { _arr[_idx].description = _arr[_idx].itemDescription; order.items.push(JSON.stringify(_arr[_idx])); order.amount += parseInt(_arr[_idx].extendedPrice); })(each, req.body.items); } // create the buy transaction const createNew = factory.newTransaction(NS, 'CreateOrder'); createNew.order = factory.newRelationship(NS, 'Order', order.$identifier); createNew.buyer = factory.newRelationship(NS, 'Buyer', req.body.buyer); createNew.seller = factory.newRelationship(NS, 'Seller', req.body.seller); createNew.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); createNew.amount = order.amount; // add the order to the asset registry. return businessNetworkConnection.getAssetRegistry(NS+'.Order') .then((assetRegistry) => { return assetRegistry.add(order) .then(() => { return businessNetworkConnection.submitTransaction(createNew) .then(() => {console.log(' order '+orderNo+' successfully added'); res.send({'result': ' order '+orderNo+' successfully added'}); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo); svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection); } else {console.log(orderNo+' submitTransaction failed with text: ',error.message);} }); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo); svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection); } else { console.log(orderNo+' assetRegistry.add failed: ',error.message); res.send({'result': 'failed', 'error':' order '+orderNo+' getAssetRegistry failed '+error.message}); } }); }) .catch((error) => { console.log(orderNo+' getAssetRegistry failed: ',error.message); res.send({'result': 'failed', 'error':' order '+orderNo+' getAssetRegistry failed '+error.message}); }); }) .catch((error) => { console.log(method + ' : '+orderNo+' business network connection failed: text',error.message); res.send({'result': 'failed', 'error':' order '+orderNo+' add failed on on business network connection '+error.message}); }); };
.then((result) => { app = result.app; businessNetworkConnection = new BusinessNetworkConnection({ cardStore }); return businessNetworkConnection.connect('admin@bond-network'); })
before(function () { businessNetworkConnection = new BusinessNetworkConnection(); return businessNetworkConnection.connect('admin@zerotoblockchain-network'); });
.then(function() { businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); return businessNetworkConnection.connect('defaultProfile', '<%= appname%>', 'admin', 'Xurw3yU9zI0l'); });
.then(() => { businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); return businessNetworkConnection.connect('defaultProfile', 'decentralized-energy-network', identity.userID, identity.userSecret); });
.then((result) => { app = result.app; businessNetworkConnection = new BusinessNetworkConnection({ fs: bfs_fs }); return businessNetworkConnection.connect('defaultProfile', 'bond-network', 'admin', 'Xurw3yU9zI0l'); })
.then((result) => { httpServer = result.server; businessNetworkConnection = new BusinessNetworkConnection({ cardStore }); return businessNetworkConnection.connect('admin@bond-network'); });
exports.orderAction = function (req, res, next) { let method = 'orderAction'; console.log(method+' req.body.participant is: '+req.body.participant ); if ((req.body.action === 'Dispute') && (typeof(req.body.reason) !== 'undefined') && (req.body.reason.length > 0) ) {/*let reason = req.body.reason;*/} else { if ((req.body.action === 'Dispute') && ((typeof(req.body.reason) === 'undefined') || (req.body.reason.length <1) )) {res.send({'result': 'failed', 'error': 'no reason provided for dispute'});} } if (svc.m_connection === null) {svc.createMessageSocket();} let businessNetworkConnection; let updateOrder; businessNetworkConnection = new BusinessNetworkConnection(); // // v0.14 // return businessNetworkConnection.connect(config.composer.connectionProfile, config.composer.network, req.body.participant, req.body.secret) // // v0.15 return businessNetworkConnection.connect(req.body.participant) .then(() => { return businessNetworkConnection.getAssetRegistry(NS+'.Order') .then((assetRegistry) => { return assetRegistry.get(req.body.orderNo) .then((order) => { let factory = businessNetworkConnection.getBusinessNetwork().getFactory(); order.status = req.body.action; switch (req.body.action) { case 'Pay': console.log('Pay entered'); updateOrder = factory.newTransaction(NS, 'Pay'); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; case 'Dispute': console.log('Dispute entered'); updateOrder = factory.newTransaction(NS, 'Dispute'); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.dispute = req.body.reason; break; case 'Purchase': console.log('Purchase entered'); updateOrder = factory.newTransaction(NS, 'Buy'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; case 'Order From Supplier': console.log('Order from Supplier entered for '+order.orderNumber+ ' inbound id: '+ req.body.participant+' with order.seller as: '+order.seller.$identifier); updateOrder = factory.newTransaction(NS, 'OrderFromSupplier'); updateOrder.provider = factory.newRelationship(NS, 'Provider', req.body.provider); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; case 'Request Payment': console.log('Request Payment entered'); updateOrder = factory.newTransaction(NS, 'RequestPayment'); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); break; case 'Refund': console.log('Refund Payment entered'); updateOrder = factory.newTransaction(NS, 'Refund'); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.refund = req.body.reason; break; case 'Resolve': console.log('Resolve entered'); updateOrder = factory.newTransaction(NS, 'Resolve'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', order.shipper.$identifier); updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.resolve = req.body.reason; break; case 'Request Shipping': console.log('Request Shipping entered'); updateOrder = factory.newTransaction(NS, 'RequestShipping'); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.shipper); updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier); break; case 'Update Delivery Status': console.log('Update Delivery Status'); updateOrder = factory.newTransaction(NS, 'Delivering'); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.participant); updateOrder.deliveryStatus = req.body.delivery; break; case 'Delivered': console.log('Delivered entered'); updateOrder = factory.newTransaction(NS, 'Deliver'); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.participant); break; case 'BackOrder': console.log('BackOrder entered'); updateOrder = factory.newTransaction(NS, 'BackOrder'); updateOrder.backorder = req.body.reason; updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier); updateOrder.backorder = req.body.reason; break; case 'Authorize Payment': console.log('Authorize Payment entered'); updateOrder = factory.newTransaction(NS, 'AuthorizePayment'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); break; case 'Cancel': console.log('Cancel entered'); updateOrder = factory.newTransaction(NS, 'OrderCancel'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; default : console.log('default entered for action: '+req.body.action); res.send({'result': 'failed', 'error':' order '+req.body.orderNo+' unrecognized request: '+req.body.action}); } updateOrder.order = factory.newRelationship(NS, 'Order', order.$identifier); return businessNetworkConnection.submitTransaction(updateOrder) .then(() => { console.log(' order '+req.body.orderNo+' successfully updated to '+req.body.action); res.send({'result': ' order '+req.body.orderNo+' successfully updated to '+req.body.action}); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(' retrying assetRegistry.update for: '+req.body.orderNo); svc.loadTransaction(req.app.locals, updateOrder, req.body.orderNo, businessNetworkConnection); } else {console.log(req.body.orderNo+' submitTransaction to update status to '+req.body.action+' failed with text: ',error.message);} }); }) .catch((error) => { console.log('Registry Get Order failed: '+error.message); res.send({'result': 'failed', 'error': 'Registry Get Order failed: '+error.message}); }); }) .catch((error) => {console.log('Get Asset Registry failed: '+error.message); res.send({'result': 'failed', 'error': 'Get Asset Registry failed: '+error.message}); }); }) .catch((error) => {console.log('Business Network Connect failed: '+error.message); res.send({'result': 'failed', 'error': 'Get Asset Registry failed: '+error.message}); }); };
.then(() => { factory = businessNetworkConnection.getBusinessNetwork().getFactory(); let order = factory.newResource(NS, 'Order', orderNo); order = svc.createOrderTemplate(order); order.amount = 0; order.orderNumber = orderNo; order.buyer = factory.newRelationship(NS, 'Buyer', req.body.buyer); order.seller = factory.newRelationship(NS, 'Seller', req.body.seller); order.provider = factory.newRelationship(NS, 'Provider', 'noop@dummy'); order.shipper = factory.newRelationship(NS, 'Shipper', 'noop@dummy'); order.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); for (let each in req.body.items) {(function(_idx, _arr) { _arr[_idx].description = _arr[_idx].itemDescription; order.items.push(JSON.stringify(_arr[_idx])); order.amount += parseInt(_arr[_idx].extendedPrice); })(each, req.body.items); } // create the buy transaction const createNew = factory.newTransaction(NS, 'CreateOrder'); createNew.order = factory.newRelationship(NS, 'Order', order.$identifier); createNew.buyer = factory.newRelationship(NS, 'Buyer', req.body.buyer); createNew.seller = factory.newRelationship(NS, 'Seller', req.body.seller); createNew.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); createNew.amount = order.amount; // add the order to the asset registry. return businessNetworkConnection.getAssetRegistry(NS+'.Order') .then((assetRegistry) => { return assetRegistry.add(order) .then(() => { return businessNetworkConnection.submitTransaction(createNew) .then(() => {console.log(' order '+orderNo+' successfully added'); res.send({'result': ' order '+orderNo+' successfully added'}); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo); svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection); } else {console.log(orderNo+' submitTransaction failed with text: ',error.message);} }); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo); svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection); } else { console.log(orderNo+' assetRegistry.add failed: ',error.message); res.send({'result': 'failed', 'error':' order '+orderNo+' getAssetRegistry failed '+error.message}); } }); }) .catch((error) => { console.log(orderNo+' getAssetRegistry failed: ',error.message); res.send({'result': 'failed', 'error':' order '+orderNo+' getAssetRegistry failed '+error.message}); }); })
.then((order) => { let factory = businessNetworkConnection.getBusinessNetwork().getFactory(); order.status = req.body.action; switch (req.body.action) { case 'Pay': console.log('Pay entered'); updateOrder = factory.newTransaction(NS, 'Pay'); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; case 'Dispute': console.log('Dispute entered'); updateOrder = factory.newTransaction(NS, 'Dispute'); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.dispute = req.body.reason; break; case 'Purchase': console.log('Purchase entered'); updateOrder = factory.newTransaction(NS, 'Buy'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; case 'Order From Supplier': console.log('Order from Supplier entered for '+order.orderNumber+ ' inbound id: '+ req.body.participant+' with order.seller as: '+order.seller.$identifier); updateOrder = factory.newTransaction(NS, 'OrderFromSupplier'); updateOrder.provider = factory.newRelationship(NS, 'Provider', req.body.provider); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; case 'Request Payment': console.log('Request Payment entered'); updateOrder = factory.newTransaction(NS, 'RequestPayment'); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); break; case 'Refund': console.log('Refund Payment entered'); updateOrder = factory.newTransaction(NS, 'Refund'); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.refund = req.body.reason; break; case 'Resolve': console.log('Resolve entered'); updateOrder = factory.newTransaction(NS, 'Resolve'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', order.shipper.$identifier); updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); updateOrder.resolve = req.body.reason; break; case 'Request Shipping': console.log('Request Shipping entered'); updateOrder = factory.newTransaction(NS, 'RequestShipping'); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.shipper); updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier); break; case 'Update Delivery Status': console.log('Update Delivery Status'); updateOrder = factory.newTransaction(NS, 'Delivering'); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.participant); updateOrder.deliveryStatus = req.body.delivery; break; case 'Delivered': console.log('Delivered entered'); updateOrder = factory.newTransaction(NS, 'Deliver'); updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.participant); break; case 'BackOrder': console.log('BackOrder entered'); updateOrder = factory.newTransaction(NS, 'BackOrder'); updateOrder.backorder = req.body.reason; updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier); updateOrder.backorder = req.body.reason; break; case 'Authorize Payment': console.log('Authorize Payment entered'); updateOrder = factory.newTransaction(NS, 'AuthorizePayment'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID); break; case 'Cancel': console.log('Cancel entered'); updateOrder = factory.newTransaction(NS, 'OrderCancel'); updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier); updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier); break; default : console.log('default entered for action: '+req.body.action); res.send({'result': 'failed', 'error':' order '+req.body.orderNo+' unrecognized request: '+req.body.action}); } updateOrder.order = factory.newRelationship(NS, 'Order', order.$identifier); return businessNetworkConnection.submitTransaction(updateOrder) .then(() => { console.log(' order '+req.body.orderNo+' successfully updated to '+req.body.action); res.send({'result': ' order '+req.body.orderNo+' successfully updated to '+req.body.action}); }) .catch((error) => { if (error.message.search('MVCC_READ_CONFLICT') !== -1) {console.log(' retrying assetRegistry.update for: '+req.body.orderNo); svc.loadTransaction(req.app.locals, updateOrder, req.body.orderNo, businessNetworkConnection); } else {console.log(req.body.orderNo+' submitTransaction to update status to '+req.body.action+' failed with text: ',error.message);} }); })