From 2cc5d37f71586023aa0424cf18d419996a054527 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 11 Aug 2026 21:41:55 +1000 Subject: [PATCH] Fixes for build orders (#862) * Fixes for build orders - Display build description - Improve status display * Bump version info * More fixes --- assets/release_notes.md | 5 +++ lib/api.dart | 5 +++ lib/inventree/build.dart | 63 +++------------------------ lib/widget/build/build_detail.dart | 23 +++------- lib/widget/build/build_list.dart | 4 +- lib/widget/build/build_list_item.dart | 12 ++--- pubspec.yaml | 2 +- 7 files changed, 33 insertions(+), 81 deletions(-) diff --git a/assets/release_notes.md b/assets/release_notes.md index ce3e9fdf..23384f7a 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -1,3 +1,8 @@ +## 0.25.1 - August 2026 +--- + +- Improvements for build order display + ## 0.25.0 - July 2026 --- diff --git a/lib/api.dart b/lib/api.dart index d966db55..da323d3b 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -1927,11 +1927,15 @@ class InvenTreeAPI { InvenTreeStatusCode get SalesOrderStatus => _get_status_class("order/so/status/"); + InvenTreeStatusCode get BuildOrderStatus => + _get_status_class("build/status/"); + void clearStatusCodeData() { StockHistoryStatus.data.clear(); StockStatus.data.clear(); PurchaseOrderStatus.data.clear(); SalesOrderStatus.data.clear(); + BuildOrderStatus.data.clear(); } Future fetchStatusCodeData({bool forceReload = true}) async { @@ -1939,6 +1943,7 @@ class InvenTreeAPI { StockStatus.load(forceReload: forceReload); PurchaseOrderStatus.load(forceReload: forceReload); SalesOrderStatus.load(forceReload: forceReload); + BuildOrderStatus.load(forceReload: forceReload); } int notification_counter = 0; diff --git a/lib/inventree/build.dart b/lib/inventree/build.dart index 2d611e54..671e61d4 100644 --- a/lib/inventree/build.dart +++ b/lib/inventree/build.dart @@ -8,7 +8,6 @@ import "package:flutter/material.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; -import "package:inventree/app_colors.dart"; import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/orders.dart"; import "package:inventree/inventree/part.dart"; @@ -111,11 +110,13 @@ class InvenTreeBuildOrder extends InvenTreeOrder { // Status code handling // Note: These map to BuildStatus in backend/status_codes.py - bool get isWaitingForBuild => status == BuildOrderStatus.PENDING; - bool get isInProgress => status == BuildOrderStatus.PRODUCTION; - bool get isComplete => status == BuildOrderStatus.COMPLETE; - bool get isCancelled => status == BuildOrderStatus.CANCELLED; - bool get isOnHold => status == BuildOrderStatus.ON_HOLD; + bool get isWaitingForBuild => + api.BuildOrderStatus.isNameIn(status, ["PENDING"]); + bool get isInProgress => + api.BuildOrderStatus.isNameIn(status, ["PRODUCTION"]); + bool get isComplete => api.BuildOrderStatus.isNameIn(status, ["COMPLETE"]); + bool get isCancelled => api.BuildOrderStatus.isNameIn(status, ["CANCELLED"]); + bool get isOnHold => api.BuildOrderStatus.isNameIn(status, ["ON_HOLD"]); // Can this build order be completed? bool get canCompleteOrder { @@ -365,53 +366,3 @@ class InvenTreeBuildItem extends InvenTreeModel { }; } } - -/* - * Build Order Status Codes - */ -class BuildOrderStatus { - // Status codes as defined in backend status_codes.py - static const int PENDING = 10; // Build is pending / inactive - static const int PRODUCTION = 20; // Build is active - static const int ON_HOLD = 25; // Build is on hold - static const int CANCELLED = 30; // Build was cancelled - static const int COMPLETE = 40; // Build is complete - - // Return a color based on the build status - static Color getStatusColor(int status) { - switch (status) { - case PENDING: - return COLOR_GRAY_LIGHT; - case PRODUCTION: - return COLOR_PROGRESS; - case COMPLETE: - return COLOR_SUCCESS; - case CANCELLED: - return COLOR_DANGER; - case ON_HOLD: - return COLOR_WARNING; - default: - return COLOR_GRAY_LIGHT; - } - } - - // Return a string based on the build status - static String getStatusText(int status) { - // TODO: This can be pulled from the API - - switch (status) { - case PENDING: - return "Pending"; - case PRODUCTION: - return "In Progress"; - case COMPLETE: - return "Complete"; - case CANCELLED: - return "Cancelled"; - case ON_HOLD: - return "On Hold"; - default: - return "Unknown"; - } - } -} diff --git a/lib/widget/build/build_detail.dart b/lib/widget/build/build_detail.dart index 926c43f7..382afbe4 100644 --- a/lib/widget/build/build_detail.dart +++ b/lib/widget/build/build_detail.dart @@ -356,23 +356,12 @@ class _BuildOrderDetailState extends RefreshableState { /// Header tile for the build order Widget headerTile(BuildContext context) { return Card( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - widget.order.reference, - style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold), - ), - Text( - BuildOrderStatus.getStatusText(widget.order.status), - style: TextStyle( - color: BuildOrderStatus.getStatusColor(widget.order.status), - fontWeight: FontWeight.bold, - ), - ), - ], + child: ListTile( + title: Text(widget.order.reference), + subtitle: Text(widget.order.description), + trailing: LargeText( + api.BuildOrderStatus.label(widget.order.status), + color: api.BuildOrderStatus.color(widget.order.status), ), ), ); diff --git a/lib/widget/build/build_list.dart b/lib/widget/build/build_list.dart index 7a53c0fa..93c0dca1 100644 --- a/lib/widget/build/build_list.dart +++ b/lib/widget/build/build_list.dart @@ -168,9 +168,9 @@ class _PaginatedBuildOrderListState crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( - BuildOrderStatus.getStatusText(order.status), + InvenTreeAPI().BuildOrderStatus.label(order.status), style: TextStyle( - color: BuildOrderStatus.getStatusColor(order.status), + color: InvenTreeAPI().BuildOrderStatus.color(order.status), fontWeight: FontWeight.bold, ), ), diff --git a/lib/widget/build/build_list_item.dart b/lib/widget/build/build_list_item.dart index 1c4d6e9a..5bc9eeda 100644 --- a/lib/widget/build/build_list_item.dart +++ b/lib/widget/build/build_list_item.dart @@ -61,15 +61,17 @@ class BuildOrderListItem extends StatelessWidget { vertical: 4.0, ), decoration: BoxDecoration( - color: BuildOrderStatus.getStatusColor( - order.status, - ).withValues(alpha: 0.2), + color: InvenTreeAPI().BuildOrderStatus + .color(order.status) + .withValues(alpha: 0.2), borderRadius: BorderRadius.circular(12.0), ), child: Text( - BuildOrderStatus.getStatusText(order.status), + InvenTreeAPI().BuildOrderStatus.label(order.status), style: TextStyle( - color: BuildOrderStatus.getStatusColor(order.status), + color: InvenTreeAPI().BuildOrderStatus.color( + order.status, + ), fontWeight: FontWeight.bold, fontSize: 12, ), diff --git a/pubspec.yaml b/pubspec.yaml index 36f6b5ee..8214ba55 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: inventree description: InvenTree stock management -version: 0.25.0+123 +version: 0.25.1+124 environment: sdk: ^3.8.1