From a4c9f2e833a1386051ccd5266346c4518341ee7e Mon Sep 17 00:00:00 2001
From: "Gomez Goiri, Aitor" <aitor.gomez@tecnalia.com>
Date: Tue, 8 Mar 2022 09:48:08 +0100
Subject: [PATCH] Adding discard command to Sidenor CLI

---
 apps/sidenor-cli/index.js                  | 11 ++---
 apps/sidenor-cli/lib.js                    | 52 +++++++++++++++++++++-
 apps/utils/package-lock.json               | 14 +++---
 apps/utils/package.json                    |  2 +-
 chaincode/controller/bid/bid_controller.go |  2 +-
 scripts/package-lock.json                  | 14 +++---
 scripts/package.json                       |  2 +-
 7 files changed, 74 insertions(+), 23 deletions(-)

diff --git a/apps/sidenor-cli/index.js b/apps/sidenor-cli/index.js
index ee4592d..88c53ed 100644
--- a/apps/sidenor-cli/index.js
+++ b/apps/sidenor-cli/index.js
@@ -8,7 +8,8 @@ const {
   sendToCone,
   sendToStock,
   acceptBid,
-  rejectBid
+  rejectBid,
+  discardStock
 } = require("./lib")
 
 const program = createCLIApp()
@@ -63,14 +64,14 @@ program
   )
   .action(loginAndCallAfterwards(rejectBid))
 
-/*program
+program
   .command("discard-stock")
-  .description("Discard part of a slag stock")
+  .description("Discard part of a slag stock sending it to the landfill")
   .option("--asset-id [value]", "Identifier of the slag stock")
   .option(
     "--quantity [value]",
-    "Quantity of the bidder for the provided slag stock"
+    "Quantity of the slag stock to discard (i.e., to be sent to the landfill)"
   )
-  .action(loginAndCallAfterwards(discardStock))*/
+  .action(loginAndCallAfterwards(discardStock))
 
 program.parse(process.argv)
diff --git a/apps/sidenor-cli/lib.js b/apps/sidenor-cli/lib.js
index 0840417..a3e730b 100644
--- a/apps/sidenor-cli/lib.js
+++ b/apps/sidenor-cli/lib.js
@@ -218,6 +218,55 @@ const bidResponse =
 const acceptBid = bidResponse("accept")
 const rejectBid = bidResponse("reject")
 
+const discardStock = async (apiClient, { assetId: paramAssetId, quantity }) => {
+  const discadableAssets = await apiClient.richQuery({
+    fields: {
+      status: STATUSES.STOCK
+    }
+  })
+
+  const assetId = paramAssetId || (await promptAssetSelection(discadableAssets))
+  const assetToDiscard = discadableAssets.find(({ id }) => id === assetId)
+
+  let chosenQuantity = quantity
+  if (!quantity) {
+    const { inputQuantity } = await inquirer.prompt([
+      {
+        type: "number",
+        name: "inputQuantity",
+        message: `Choose an ammount of slag (max: ${assetToDiscard.quantity} ${assetToDiscard.units}):`,
+        default: Math.floor(assetToDiscard.quantity * 0.1) // Default: 10%
+      }
+    ])
+    chosenQuantity = inputQuantity
+  }
+
+  const newAssets = await apiClient.splitAsset(assetId, 2, {
+    archiveOld: true,
+    bidirectional: true,
+    base: {
+      type: assetToDiscard.type,
+      fields: assetToDiscard.fields
+    }
+  })
+
+  await apiClient.modifyAsset({
+    id: newAssets[0],
+    quantity: assetToDiscard.quantity - chosenQuantity,
+    units: assetToDiscard.units
+  })
+
+  await apiClient.modifyAsset({
+    id: newAssets[1],
+    quantity: chosenQuantity,
+    units: assetToDiscard.units
+  })
+
+  await apiClient.deleteAsset(newAssets[1])
+
+  console.log(`Discarded stock ${newAssets[1]} (new stock ${newAssets[0]})`)
+}
+
 // To be reused as a library in @hypercog/batch-sim
 module.exports = {
   createAsset,
@@ -225,5 +274,6 @@ module.exports = {
   sendToCone,
   sendToStock,
   acceptBid,
-  rejectBid
+  rejectBid,
+  discardStock
 }
diff --git a/apps/utils/package-lock.json b/apps/utils/package-lock.json
index 93d34ec..eb7271b 100644
--- a/apps/utils/package-lock.json
+++ b/apps/utils/package-lock.json
@@ -9,7 +9,7 @@
 			"version": "0.0.1",
 			"dependencies": {
 				"@faker-js/faker": "^5.5.3",
-				"@traceblock/api-client": "^0.2.5",
+				"@traceblock/api-client": "^0.2.9",
 				"commander": "^9.0.0",
 				"dotenv": "^16.0.0",
 				"inquirer": "^8.2.0"
@@ -21,9 +21,9 @@
 			"integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw=="
 		},
 		"node_modules/@traceblock/api-client": {
-			"version": "0.2.5",
-			"resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz",
-			"integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=",
+			"version": "0.2.9",
+			"resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz",
+			"integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=",
 			"dependencies": {
 				"cross-fetch": "^3.1.4",
 				"jsonwebtoken": "^8.5.1"
@@ -709,9 +709,9 @@
 			"integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw=="
 		},
 		"@traceblock/api-client": {
-			"version": "0.2.5",
-			"resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz",
-			"integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=",
+			"version": "0.2.9",
+			"resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz",
+			"integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=",
 			"requires": {
 				"cross-fetch": "^3.1.4",
 				"jsonwebtoken": "^8.5.1"
diff --git a/apps/utils/package.json b/apps/utils/package.json
index 247923d..ba52c6f 100644
--- a/apps/utils/package.json
+++ b/apps/utils/package.json
@@ -3,7 +3,7 @@
   "version": "0.0.1",
   "main": "index.js",
   "dependencies": {
-    "@traceblock/api-client": "^0.2.5",
+    "@traceblock/api-client": "^0.2.9",
     "@faker-js/faker": "^5.5.3",
     "commander": "^9.0.0",
     "dotenv": "^16.0.0",
diff --git a/chaincode/controller/bid/bid_controller.go b/chaincode/controller/bid/bid_controller.go
index 77056a5..e1f1d3a 100644
--- a/chaincode/controller/bid/bid_controller.go
+++ b/chaincode/controller/bid/bid_controller.go
@@ -232,7 +232,7 @@ func  (c BidDecisionController) _acceptBid(stub shared.LedgerBuildrStubInterface
 		splitParams.SplitConfig.ArchiveOld = true
 		splitParams.SplitConfig.Bidirectional = true
 		splitParams.SplitConfig.ChildCount = 2
-		splitParams.SplitConfig.BaseAsset.AssetType = "stocked"
+		splitParams.SplitConfig.BaseAsset.AssetType = biddableAsset.AssetType
 
 		subAssets, err := split.SplitAsset(c.TraceblockBaseController, stub, biddableAsset, *splitParams)
 		if err != nil {
diff --git a/scripts/package-lock.json b/scripts/package-lock.json
index ca172e9..af4535f 100644
--- a/scripts/package-lock.json
+++ b/scripts/package-lock.json
@@ -8,14 +8,14 @@
       "name": "hypercog-config-scripts",
       "version": "0.0.1",
       "dependencies": {
-        "@traceblock/api-client": "^0.2.5",
+        "@traceblock/api-client": "^0.2.9",
         "dotenv": "^10.0.0"
       }
     },
     "node_modules/@traceblock/api-client": {
-      "version": "0.2.5",
-      "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz",
-      "integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=",
+      "version": "0.2.9",
+      "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz",
+      "integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=",
       "dependencies": {
         "cross-fetch": "^3.1.4",
         "jsonwebtoken": "^8.5.1"
@@ -168,9 +168,9 @@
   },
   "dependencies": {
     "@traceblock/api-client": {
-      "version": "0.2.5",
-      "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz",
-      "integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=",
+      "version": "0.2.9",
+      "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz",
+      "integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=",
       "requires": {
         "cross-fetch": "^3.1.4",
         "jsonwebtoken": "^8.5.1"
diff --git a/scripts/package.json b/scripts/package.json
index 970c6ed..a464e86 100644
--- a/scripts/package.json
+++ b/scripts/package.json
@@ -3,7 +3,7 @@
   "version": "0.0.1",
   "private": true,
   "dependencies": {
-    "@traceblock/api-client": "^0.2.5",
+    "@traceblock/api-client": "^0.2.9",
     "dotenv": "^10.0.0"
   },
   "scripts": {
-- 
GitLab