Fixes for build orders (#862)

* Fixes for build orders

- Display build description
- Improve status display

* Bump version info

* More fixes
This commit is contained in:
Oliver
2026-08-11 21:41:55 +10:00
committed by GitHub
parent 1f52caf4b8
commit 2cc5d37f71
7 changed files with 33 additions and 81 deletions
+5
View File
@@ -1,3 +1,8 @@
## 0.25.1 - August 2026
---
- Improvements for build order display
## 0.25.0 - July 2026 ## 0.25.0 - July 2026
--- ---
+5
View File
@@ -1927,11 +1927,15 @@ class InvenTreeAPI {
InvenTreeStatusCode get SalesOrderStatus => InvenTreeStatusCode get SalesOrderStatus =>
_get_status_class("order/so/status/"); _get_status_class("order/so/status/");
InvenTreeStatusCode get BuildOrderStatus =>
_get_status_class("build/status/");
void clearStatusCodeData() { void clearStatusCodeData() {
StockHistoryStatus.data.clear(); StockHistoryStatus.data.clear();
StockStatus.data.clear(); StockStatus.data.clear();
PurchaseOrderStatus.data.clear(); PurchaseOrderStatus.data.clear();
SalesOrderStatus.data.clear(); SalesOrderStatus.data.clear();
BuildOrderStatus.data.clear();
} }
Future<void> fetchStatusCodeData({bool forceReload = true}) async { Future<void> fetchStatusCodeData({bool forceReload = true}) async {
@@ -1939,6 +1943,7 @@ class InvenTreeAPI {
StockStatus.load(forceReload: forceReload); StockStatus.load(forceReload: forceReload);
PurchaseOrderStatus.load(forceReload: forceReload); PurchaseOrderStatus.load(forceReload: forceReload);
SalesOrderStatus.load(forceReload: forceReload); SalesOrderStatus.load(forceReload: forceReload);
BuildOrderStatus.load(forceReload: forceReload);
} }
int notification_counter = 0; int notification_counter = 0;
+7 -56
View File
@@ -8,7 +8,6 @@ import "package:flutter/material.dart";
import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:inventree/api.dart"; import "package:inventree/api.dart";
import "package:inventree/app_colors.dart";
import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/model.dart";
import "package:inventree/inventree/orders.dart"; import "package:inventree/inventree/orders.dart";
import "package:inventree/inventree/part.dart"; import "package:inventree/inventree/part.dart";
@@ -111,11 +110,13 @@ class InvenTreeBuildOrder extends InvenTreeOrder {
// Status code handling // Status code handling
// Note: These map to BuildStatus in backend/status_codes.py // Note: These map to BuildStatus in backend/status_codes.py
bool get isWaitingForBuild => status == BuildOrderStatus.PENDING; bool get isWaitingForBuild =>
bool get isInProgress => status == BuildOrderStatus.PRODUCTION; api.BuildOrderStatus.isNameIn(status, ["PENDING"]);
bool get isComplete => status == BuildOrderStatus.COMPLETE; bool get isInProgress =>
bool get isCancelled => status == BuildOrderStatus.CANCELLED; api.BuildOrderStatus.isNameIn(status, ["PRODUCTION"]);
bool get isOnHold => status == BuildOrderStatus.ON_HOLD; 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? // Can this build order be completed?
bool get canCompleteOrder { 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";
}
}
}
+6 -17
View File
@@ -356,23 +356,12 @@ class _BuildOrderDetailState extends RefreshableState<BuildOrderDetailWidget> {
/// Header tile for the build order /// Header tile for the build order
Widget headerTile(BuildContext context) { Widget headerTile(BuildContext context) {
return Card( return Card(
child: Padding( child: ListTile(
padding: const EdgeInsets.all(8.0), title: Text(widget.order.reference),
child: Row( subtitle: Text(widget.order.description),
mainAxisAlignment: MainAxisAlignment.spaceBetween, trailing: LargeText(
children: [ api.BuildOrderStatus.label(widget.order.status),
Text( color: api.BuildOrderStatus.color(widget.order.status),
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,
),
),
],
), ),
), ),
); );
+2 -2
View File
@@ -168,9 +168,9 @@ class _PaginatedBuildOrderListState
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
Text( Text(
BuildOrderStatus.getStatusText(order.status), InvenTreeAPI().BuildOrderStatus.label(order.status),
style: TextStyle( style: TextStyle(
color: BuildOrderStatus.getStatusColor(order.status), color: InvenTreeAPI().BuildOrderStatus.color(order.status),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
+7 -5
View File
@@ -61,15 +61,17 @@ class BuildOrderListItem extends StatelessWidget {
vertical: 4.0, vertical: 4.0,
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
color: BuildOrderStatus.getStatusColor( color: InvenTreeAPI().BuildOrderStatus
order.status, .color(order.status)
).withValues(alpha: 0.2), .withValues(alpha: 0.2),
borderRadius: BorderRadius.circular(12.0), borderRadius: BorderRadius.circular(12.0),
), ),
child: Text( child: Text(
BuildOrderStatus.getStatusText(order.status), InvenTreeAPI().BuildOrderStatus.label(order.status),
style: TextStyle( style: TextStyle(
color: BuildOrderStatus.getStatusColor(order.status), color: InvenTreeAPI().BuildOrderStatus.color(
order.status,
),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 12, fontSize: 12,
), ),
+1 -1
View File
@@ -1,7 +1,7 @@
name: inventree name: inventree
description: InvenTree stock management description: InvenTree stock management
version: 0.25.0+123 version: 0.25.1+124
environment: environment:
sdk: ^3.8.1 sdk: ^3.8.1