2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-06-14 19:25:27 +00:00

Display and edit project code for purchase orders

This commit is contained in:
Oliver Walters
2023-04-21 21:05:03 +10:00
parent 340c3ba766
commit 8d1f6161fa
6 changed files with 44 additions and 1 deletions

View File

@ -15,6 +15,7 @@ import "package:inventree/l10.dart";
import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/company.dart";
import "package:inventree/inventree/part.dart"; import "package:inventree/inventree/part.dart";
import "package:inventree/inventree/project_code.dart";
import "package:inventree/inventree/sentry.dart"; import "package:inventree/inventree/sentry.dart";
import "package:inventree/inventree/stock.dart"; import "package:inventree/inventree/stock.dart";
@ -667,6 +668,13 @@ class APIFormField {
height: 40 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: default:
return ListTile( return ListTile(
title: Text( title: Text(

View File

@ -335,7 +335,7 @@ class InvenTreePart extends InvenTreeModel {
double get building => getDouble("building"); double get building => getDouble("building");
// Get the number of BOMs this Part is used in (if it is a component) // 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"); bool get isAssembly => getBool("assembly");

View File

@ -23,4 +23,6 @@ class InvenTreeProjectCode extends InvenTreeModel {
"description": {}, "description": {},
}; };
} }
String get code => getString("code");
} }

View File

@ -34,6 +34,7 @@ class InvenTreePurchaseOrder extends InvenTreeModel {
}, },
"supplier_reference": {}, "supplier_reference": {},
"description": {}, "description": {},
"project_code": {},
"target_date": {}, "target_date": {},
"link": {}, "link": {},
"responsible": {}, "responsible": {},
@ -77,6 +78,15 @@ class InvenTreePurchaseOrder extends InvenTreeModel {
int get supplierId => getInt("supplier"); 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 { InvenTreeCompany? get supplier {
dynamic supplier_detail = jsondata["supplier_detail"]; dynamic supplier_detail = jsondata["supplier_detail"];

View File

@ -759,6 +759,9 @@
"profileTapToCreate": "Tap to create or select a profile", "profileTapToCreate": "Tap to create or select a profile",
"@profileTapToCreate": {}, "@profileTapToCreate": {},
"projectCode": "Project Code",
"@projectCode": {},
"purchaseOrder": "Purchase Order", "purchaseOrder": "Purchase Order",
"@purchaseOrder": {}, "@purchaseOrder": {},

View File

@ -43,6 +43,8 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
int attachmentCount = 0; int attachmentCount = 0;
bool supportProjectCodes = false;
@override @override
String getAppBarTitle() => L10().purchaseOrder; String getAppBarTitle() => L10().purchaseOrder;
@ -139,6 +141,8 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
lines = await order.getLineItems(); lines = await order.getLineItems();
supportProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED");
completedLines = 0; completedLines = 0;
for (var line in lines) { for (var line in lines) {
@ -157,12 +161,20 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
// Edit the currently displayed PurchaseOrder // Edit the currently displayed PurchaseOrder
Future <void> editOrder(BuildContext context) async { Future <void> editOrder(BuildContext context) async {
var fields = order.formFields(); var fields = order.formFields();
// Cannot edit supplier field from here
fields.remove("supplier"); fields.remove("supplier");
// Contact model not supported by server
if (!api.supportsContactModel) { if (!api.supportsContactModel) {
fields.remove("contact"); fields.remove("contact");
} }
// ProjectCode model not supported by server
if (!supportProjectCodes) {
fields.remove("project_code");
}
order.editForm( order.editForm(
context, context,
L10().purchaseOrderEdit, L10().purchaseOrderEdit,
@ -202,6 +214,14 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
tiles.add(headerTile(context)); tiles.add(headerTile(context));
if (supportProjectCodes && order.hasProjectCode) {
tiles.add(ListTile(
title: Text(L10().projectCode),
subtitle: Text("${order.projectCode} - ${order.projectCodeDescription}"),
leading: FaIcon(FontAwesomeIcons.list),
));
}
if (supplier != null) { if (supplier != null) {
tiles.add(ListTile( tiles.add(ListTile(
title: Text(L10().supplier), title: Text(L10().supplier),