diff --git a/apps/cement-cli/lib.js b/apps/cement-cli/lib.js index 6f1b0a4abae25d18c8eff6e2def1260020a8fac9..6f6dfce8a711d519374a274570ac8c1824564bb3 100644 --- a/apps/cement-cli/lib.js +++ b/apps/cement-cli/lib.js @@ -19,7 +19,7 @@ const bidAsset = async ( { type: "number", name: "inputQuantity", - message: `Choose an ammount of slag (in ${assetToBid.units}, max ${assetToBid.quantity}):` + message: `Choose an ammount of slag (max: ${assetToBid.quantity} ${assetToBid.units}):` } ]) chosenQuantity = inputQuantity diff --git a/apps/pubadmin-cli/index.js b/apps/pubadmin-cli/index.js index 7bce50742be1dcf32f056616d2228a76d61d0be7..922c5a33a7b633b9df53ea77f5db5d9d50c4c414 100644 --- a/apps/pubadmin-cli/index.js +++ b/apps/pubadmin-cli/index.js @@ -39,12 +39,13 @@ const humanizePercentage = value => { if (value.percentage === undefined) { return value.total } - return `${value.total} [%${value.percentage.toFixed(2)}]` + return `${value.total.toFixed(3)} [%${(value.percentage * 100).toFixed(2)}]` } -const humanizePrice = value => `${value.avg} [${value.min}, ${value.max}]` +const humanizePrice = value => + `${value.avg.toFixed(2)} [${value.min.toFixed(2)}, ${value.max.toFixed(2)}]` const toLine = stat => [ - stat.total, + stat.total.toFixed(3), humanizePercentage(stat.reused), humanizePercentage(stat.discarded), humanizePrice(stat.price) @@ -61,11 +62,10 @@ const getStats = async apiClient => { "Discarded\nt [%]", "Price (€)\n Avg [Min, Max]" ], - ...Object.entries(stats.perCompany || []).map(([org, val]) => [ + ...Object.entries(stats.perSteelCompany || []).map(([org, val]) => [ org, ...toLine(val) - ]), - ["Total", ...toLine(stats.global)] + ]) ] console.log(table(tableValues, TABLE_CONFIG)) diff --git a/apps/sidenor-cli/lib.js b/apps/sidenor-cli/lib.js index 4e6fd7a3c15996e693206333888ecbf7e9505c7d..5039deb25f60ea9f3f1044afa76d9316966859b5 100644 --- a/apps/sidenor-cli/lib.js +++ b/apps/sidenor-cli/lib.js @@ -199,7 +199,7 @@ const bidResponse = name: "inputBidder", message: `Select the bidder whose bid will be ${action}ed`, choices: assetSelected.fields.bids.map(b => ({ - name: `${b.bidder.id} (quantity: ${b.quantity}, price: ${b.price})`, + name: `${b.bidder.id} (quantity: ${b.quantity} ${assetSelected.units}, price: ${b.price})`, value: b.bidder })) } diff --git a/chaincode/controller/stats/stats_controller.go b/chaincode/controller/stats/stats_controller.go index 7d4b33c31345f39deeebeb7302f9ed10106e0864..f8bf0c1eae82648fd03552d72a9a3f448705675a 100644 --- a/chaincode/controller/stats/stats_controller.go +++ b/chaincode/controller/stats/stats_controller.go @@ -15,8 +15,7 @@ import ( type StatsResult struct { - GlobalStats model.Stats `json:"global"` // in tons - PerCompany map[string]model.Stats `json:"perCompany,omitempty"` + PerSteelCompany map[string]model.Stats `json:"perSteelCompany,omitempty"` } func GetStatsOperation(stub shared.LedgerBuildrStubInterface, request shared.LedgerBuildrAsset) protos.Response { @@ -29,14 +28,8 @@ func GetStatsOperation(stub shared.LedgerBuildrStubInterface, request shared.Led return api.NewApiResponsePtr(fnName, err, nil).SendResponse() } - globalStat, err := getStats(stub, GLOBAL_KEY) - if err != nil { - return api.NewApiResponsePtr(fnName, err, nil).SendResponse() - } - ret.GlobalStats = *globalStat.RefineStats() - if len(*orgs) > 0 { - ret.PerCompany = make(map[string]model.Stats) + ret.PerSteelCompany = make(map[string]model.Stats) } for _, org := range *orgs { @@ -44,7 +37,7 @@ func GetStatsOperation(stub shared.LedgerBuildrStubInterface, request shared.Led if err != nil { return api.NewApiResponsePtr(fnName, err, nil).SendResponse() } - ret.PerCompany[org] = *orgStat.RefineStats() + ret.PerSteelCompany[org] = *orgStat.RefineStats() } return api.NewAPIGenericResponsePtr(fnName, nil, ret).SendResponse() diff --git a/chaincode/controller/stats/stub.go b/chaincode/controller/stats/stub.go index eedc0ac02c0bbce00f2467ab2dd0f1a2e460800c..590c281d972d35125926758476c390ef2127bfbe 100644 --- a/chaincode/controller/stats/stub.go +++ b/chaincode/controller/stats/stub.go @@ -9,14 +9,14 @@ package stats import ( "encoding/json" "fmt" + "math" "git.code.tecnalia.com/blockchain/hypercog/model" "git.code.tecnalia.com/ledgerbuilder/sdk/core/util/logging" "git.code.tecnalia.com/ledgerbuilder/sdk/shared" ) -const GLOBAL_KEY = "global" -const ORG_LIST_KEY = "org_list" +const STEEL_ORG_LIST_KEY = "steel_orgs" type OrgList []string @@ -26,6 +26,7 @@ func getStats(stub shared.LedgerBuildrStubInterface, key string) (st *model.RawS value, err := stub.GetState(key) if err != nil || len(value) == 0 { st = new(model.RawStats) + st.MinPrice = math.MaxFloat64 } else { err = json.Unmarshal(value, &st) if err != nil { @@ -51,7 +52,7 @@ func putStats(stub shared.LedgerBuildrStubInterface, key string, stats *model.Ra } func getOrgList(stub shared.LedgerBuildrStubInterface) (st *OrgList, err error) { - value, err := stub.GetState(ORG_LIST_KEY) + value, err := stub.GetState(STEEL_ORG_LIST_KEY) if err != nil || len(value) == 0 { st = new(OrgList) } else { @@ -65,11 +66,6 @@ func getOrgList(stub shared.LedgerBuildrStubInterface) (st *OrgList, err error) } func resetStats(stub shared.LedgerBuildrStubInterface) (error) { - err := stub.DelState(GLOBAL_KEY) - if err != nil { - return err - } - orgs, err := getOrgList(stub) if len(*orgs) > 0 { for _, org := range *orgs { @@ -80,7 +76,7 @@ func resetStats(stub shared.LedgerBuildrStubInterface) (error) { } } - err = stub.DelState(ORG_LIST_KEY) + err = stub.DelState(STEEL_ORG_LIST_KEY) return err } @@ -107,7 +103,7 @@ func addOrgIfNotExist(stub shared.LedgerBuildrStubInterface, org string) (err er return err } - err = stub.PutState(ORG_LIST_KEY, serialized) + err = stub.PutState(STEEL_ORG_LIST_KEY, serialized) if err != nil { return err } @@ -119,26 +115,21 @@ func addOrgIfNotExist(stub shared.LedgerBuildrStubInterface, org string) (err er } -func retrieveExistingStats(stub shared.LedgerBuildrStubInterface) (*model.RawStats, *model.RawStats, error) { +func retrieveExistingStats(stub shared.LedgerBuildrStubInterface) (*model.RawStats, error) { org, err := stub.GetOrganization() if err != nil { - return nil, nil, err + return nil, err } customStats, err := getStats(stub, org) if err != nil { - return nil, nil, err + return nil, err } - globalStats, err := getStats(stub , GLOBAL_KEY) - if err != nil { - return nil, nil, err - } - - return globalStats, customStats, nil + return customStats, nil } -func upgradeStats(stub shared.LedgerBuildrStubInterface, globalStats *model.RawStats, customStats *model.RawStats) (error) { +func upgradeStats(stub shared.LedgerBuildrStubInterface, customStats *model.RawStats) (error) { org, err := stub.GetOrganization() if err != nil { return err @@ -149,11 +140,6 @@ func upgradeStats(stub shared.LedgerBuildrStubInterface, globalStats *model.RawS return err } - err = putStats(stub, GLOBAL_KEY, globalStats) - if err != nil { - return err - } - err = addOrgIfNotExist(stub, org) if err != nil { return err @@ -165,15 +151,14 @@ func upgradeStats(stub shared.LedgerBuildrStubInterface, globalStats *model.RawS func RegisterSlag(stub shared.LedgerBuildrStubInterface, quantity uint32, units string) (error) { - globalStats, customStats, err := retrieveExistingStats(stub) + orgStats, err := retrieveExistingStats(stub) if err != nil { return err } - customStats.RegisterSlag(quantity, units) - globalStats.RegisterSlag(quantity, units) + orgStats.RegisterSlag(quantity, units) - err = upgradeStats(stub, globalStats, customStats) + err = upgradeStats(stub, orgStats) if err != nil { return err } @@ -182,17 +167,16 @@ func RegisterSlag(stub shared.LedgerBuildrStubInterface, quantity uint32, units } func RegisterSale(stub shared.LedgerBuildrStubInterface, quantity uint32, price float32, units string) (error) { - globalStats, orgStats, err := retrieveExistingStats(stub) + orgStats, err := retrieveExistingStats(stub) if err != nil { return err } - orgStats.UpgradeSell(quantity, price, units) - orgStats.UpgradeSell(quantity, price, units) + orgStats.UpgradeSale(quantity, price, units) log.Debug(fmt.Sprintf("Sale registered in stats (quantity: %d %s, price: %.2f €)", quantity, units, price)) - err = upgradeStats(stub, globalStats, orgStats) + err = upgradeStats(stub, orgStats) if err != nil { return err } diff --git a/chaincode/model/stats.go b/chaincode/model/stats.go index 75f302fd9f6282ab501798381157c178cd6edad8..b63e8e60be9020001188ceb78f3d60445928df59 100644 --- a/chaincode/model/stats.go +++ b/chaincode/model/stats.go @@ -50,7 +50,7 @@ func (raw *RawStats) RegisterSlag(quantity uint32, units string) { raw.TotalSlag += toTons(quantity, units) } -func (raw *RawStats) UpgradeSell(quantity uint32, price float32, units string) { +func (raw *RawStats) UpgradeSale(quantity uint32, price float32, units string) { raw.SlagReused += toTons(quantity, units) raw.TotalPrice += float64(price) raw.BidAmount += 1