From 046af50146e9f469658c7cf340390ab5cc88c21f Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 18 Apr 2022 21:39:09 +1000 Subject: [PATCH] Use 'available_stock' when available (new API) --- lib/inventree/part.dart | 29 +++++++++---- lib/widget/part_detail.dart | 85 +++++++++++++++++++------------------ 2 files changed, 65 insertions(+), 49 deletions(-) diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index 7a625a35..db62ba66 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -1,6 +1,7 @@ import "dart:io"; import "package:inventree/api.dart"; +import "package:inventree/helpers.dart"; import "package:inventree/inventree/stock.dart"; import "package:inventree/inventree/company.dart"; import "package:flutter/material.dart"; @@ -250,11 +251,7 @@ class InvenTreePart extends InvenTreeModel { String get onOrderString { - if (onOrder == onOrder.toInt()) { - return onOrder.toInt().toString(); - } else { - return onOrder.toString(); - } + return simpleNumberString(onOrder); } // Get the stock count for this Part @@ -262,12 +259,28 @@ class InvenTreePart extends InvenTreeModel { String get inStockString { - String q = inStock.toString(); + String q = simpleNumberString(inStock); - if (inStock == inStock.toInt()) { - q = inStock.toInt().toString(); + if (units.isNotEmpty) { + q += " ${units}"; } + return q; + } + + // Get the 'available stock' for this Part + double get availableStock { + // Note that the 'available_stock' was not added until API v35 + if (jsondata.containsKey("available_stock")) { + return double.tryParse(jsondata["available_stock"].toString()) ?? 0; + } else { + return inStock; + } + } + + String get availableStockString { + String q = simpleNumberString(availableStock); + if (units.isNotEmpty) { q += " ${units}"; } diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index ae7a0fed..254761f4 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -218,10 +218,10 @@ class _PartDisplayState extends RefreshableState { // Stock information tiles.add( ListTile( - title: Text(L10().stock), + title: Text(L10().availableStock), subtitle: Text(L10().stockDetails), leading: FaIcon(FontAwesomeIcons.boxes, color: COLOR_CLICK), - trailing: Text("${part.inStockString}"), + trailing: Text(part.availableStockString), onTap: () { setState(() { tabIndex = 1; @@ -230,48 +230,9 @@ class _PartDisplayState extends RefreshableState { ), ); - // Keywords? - if (part.keywords.isNotEmpty) { - tiles.add( - ListTile( - title: Text("${part.keywords}"), - leading: FaIcon(FontAwesomeIcons.key), - ) - ); - } - - // External link? - if (part.link.isNotEmpty) { - tiles.add( - ListTile( - title: Text("${part.link}"), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_CLICK), - onTap: () { - part.openLink(); - }, - ) - ); - } - // Tiles for "purchaseable" parts if (part.isPurchaseable) { - tiles.add( - ListTile( - title: Text(L10().suppliers), - leading: FaIcon(FontAwesomeIcons.industry), - trailing: Text("${part.supplierCount}"), - /* TODO: - onTap: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => PartSupplierWidget(part)) - ); - }, - */ - ) - ); - // On order tiles.add( ListTile( @@ -317,6 +278,29 @@ class _PartDisplayState extends RefreshableState { } } + // Keywords? + if (part.keywords.isNotEmpty) { + tiles.add( + ListTile( + title: Text("${part.keywords}"), + leading: FaIcon(FontAwesomeIcons.key), + ) + ); + } + + // External link? + if (part.link.isNotEmpty) { + tiles.add( + ListTile( + title: Text("${part.link}"), + leading: FaIcon(FontAwesomeIcons.link, color: COLOR_CLICK), + onTap: () { + part.openLink(); + }, + ) + ); + } + // Tiles for "component" part if (part.isComponent && part.usedInCount > 0) { @@ -333,6 +317,25 @@ class _PartDisplayState extends RefreshableState { ); } + if (part.isPurchaseable) { + tiles.add( + ListTile( + title: Text(L10().suppliers), + leading: FaIcon(FontAwesomeIcons.industry), + trailing: Text("${part.supplierCount}"), + /* TODO: + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => PartSupplierWidget(part)) + ); + }, + */ + ) + ); + } + + // TODO - Add request tests? /* if (part.isTrackable) {