2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-06-13 10:45:29 +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/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(

View File

@ -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");

View File

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

View File

@ -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"];

View File

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

View File

@ -43,6 +43,8 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
int attachmentCount = 0;
bool supportProjectCodes = false;
@override
String getAppBarTitle() => L10().purchaseOrder;
@ -139,6 +141,8 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
lines = await order.getLineItems();
supportProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED");
completedLines = 0;
for (var line in lines) {
@ -157,12 +161,20 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
// Edit the currently displayed PurchaseOrder
Future <void> 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<PurchaseOrderDetailWidg
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) {
tiles.add(ListTile(
title: Text(L10().supplier),