diff --git a/lib/api.dart b/lib/api.dart index 1617dda9..f0fdc839 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -282,6 +282,18 @@ class InvenTreeAPI { // Consolidated search request API v102 or newer bool get supportsConsolidatedSearch => isConnected() && apiVersion >= 102; + // ReturnOrder supports API v104 or newer + bool get supportsReturnOrders => isConnected() && apiVersion >= 104; + + // Status label endpoints API v105 or newer + bool get supportsStatusLabelEndpoints => isConnected() && apiVersion >= 105; + + // Regex search API v106 or newer + bool get supportsRegexSearch => isConnected() && apiVersion >= 106; + + // Order barcodes API v107 or newer + bool get supportsOrderBarcodes => isConnected() && apiVersion >= 107; + // Are plugins enabled on the server? bool _pluginsEnabled = false; diff --git a/lib/barcode.dart b/lib/barcode.dart index a0306315..5c7d512d 100644 --- a/lib/barcode.dart +++ b/lib/barcode.dart @@ -1,6 +1,8 @@ import "dart:io"; import "package:flutter/material.dart"; import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:inventree/inventree/purchase_order.dart"; +import "package:inventree/widget/purchase_order_detail.dart"; import "package:one_context/one_context.dart"; import "package:qr_code_scanner/qr_code_scanner.dart"; @@ -159,6 +161,7 @@ class BarcodeHandler { * - StockItem * - Part * - SupplierPart + * - PurchaseOrder */ class BarcodeScanHandler extends BarcodeHandler { @@ -232,6 +235,21 @@ class BarcodeScanHandler extends BarcodeHandler { } } + + /* + * Response when a "PurchaseOrder" instance is scanned + */ + Future handlePurchaseOrder(int pk) async { + var order = await InvenTreePurchaseOrder().get(pk); + + if (order is InvenTreePurchaseOrder) { + OneContext().pop(); + OneContext().push(MaterialPageRoute( + builder: (context) => PurchaseOrderDetailWidget(order))); + } + } + + @override Future onBarcodeMatched(Map data) async { int pk = -1; @@ -239,13 +257,18 @@ class BarcodeScanHandler extends BarcodeHandler { String model = ""; // The following model types can be matched with barcodes - final List validModels = [ + List validModels = [ "part", "stockitem", "stocklocation", - "supplierpart" + "supplierpart", ]; + + if (InvenTreeAPI().supportsOrderBarcodes) { + validModels.add("purchaseorder"); + } + for (var key in validModels) { if (data.containsKey(key)) { pk = (data[key]?["pk"] ?? -1) as int; @@ -276,6 +299,9 @@ class BarcodeScanHandler extends BarcodeHandler { case "supplierpart": await handleSupplierPart(pk); return; + case "purchaseorder": + await handlePurchaseOrder(pk); + return; default: // Fall through to failure state break;