diff --git a/lib/api_form.dart b/lib/api_form.dart index 1b723604..d08d29a3 100644 --- a/lib/api_form.dart +++ b/lib/api_form.dart @@ -15,6 +15,7 @@ import "package:inventree/l10.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/part.dart"; +import "package:inventree/inventree/project_code.dart"; import "package:inventree/inventree/sentry.dart"; import "package:inventree/inventree/stock.dart"; @@ -667,6 +668,13 @@ class APIFormField { height: 40 ) ); + case "projectcode": + var project_code = InvenTreeProjectCode.fromJson(data); + return ListTile( + title: Text(project_code.code), + subtitle: Text(project_code.description), + leading: FaIcon(FontAwesomeIcons.list) + ); default: return ListTile( title: Text( diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index 99c66733..b476937a 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -335,7 +335,7 @@ class InvenTreePart extends InvenTreeModel { double get building => getDouble("building"); // Get the number of BOMs this Part is used in (if it is a component) - int get usedInCount => getInt("used_in"); + int get usedInCount => jsondata.containsKey("used_in") ? getInt("used_in", backup: 0) : 0; bool get isAssembly => getBool("assembly"); diff --git a/lib/inventree/project_code.dart b/lib/inventree/project_code.dart index 9b67a1ad..8e2c75b6 100644 --- a/lib/inventree/project_code.dart +++ b/lib/inventree/project_code.dart @@ -23,4 +23,6 @@ class InvenTreeProjectCode extends InvenTreeModel { "description": {}, }; } + + String get code => getString("code"); } diff --git a/lib/inventree/purchase_order.dart b/lib/inventree/purchase_order.dart index 28e27afe..e22d009f 100644 --- a/lib/inventree/purchase_order.dart +++ b/lib/inventree/purchase_order.dart @@ -34,6 +34,7 @@ class InvenTreePurchaseOrder extends InvenTreeModel { }, "supplier_reference": {}, "description": {}, + "project_code": {}, "target_date": {}, "link": {}, "responsible": {}, @@ -77,6 +78,15 @@ class InvenTreePurchaseOrder extends InvenTreeModel { int get supplierId => getInt("supplier"); + // Project code information + int get projectCodeId => getInt("project_code"); + + String get projectCode => getString("code", subKey: "project_code_detail"); + + String get projectCodeDescription => getString("description", subKey: "project_code_detail"); + + bool get hasProjectCode => projectCode.isNotEmpty; + InvenTreeCompany? get supplier { dynamic supplier_detail = jsondata["supplier_detail"]; diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 66ded8ba..9802d72b 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -759,6 +759,9 @@ "profileTapToCreate": "Tap to create or select a profile", "@profileTapToCreate": {}, + "projectCode": "Project Code", + "@projectCode": {}, + "purchaseOrder": "Purchase Order", "@purchaseOrder": {}, diff --git a/lib/widget/purchase_order_detail.dart b/lib/widget/purchase_order_detail.dart index 1e405f07..e6017c57 100644 --- a/lib/widget/purchase_order_detail.dart +++ b/lib/widget/purchase_order_detail.dart @@ -43,6 +43,8 @@ class _PurchaseOrderDetailState extends RefreshableState L10().purchaseOrder; @@ -139,6 +141,8 @@ class _PurchaseOrderDetailState extends RefreshableState editOrder(BuildContext context) async { var fields = order.formFields(); + + // Cannot edit supplier field from here fields.remove("supplier"); + // Contact model not supported by server if (!api.supportsContactModel) { fields.remove("contact"); } + // ProjectCode model not supported by server + if (!supportProjectCodes) { + fields.remove("project_code"); + } + order.editForm( context, L10().purchaseOrderEdit, @@ -202,6 +214,14 @@ class _PurchaseOrderDetailState extends RefreshableState