mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-27 21:16:48 +00:00
Order responsible (#602)
* Bump release notes and version * Display responsible owner for purchase order * Display responsible owner for sales order * Display order completion date
This commit is contained in:
parent
2ea29368ed
commit
854ef95fbf
@ -1,3 +1,9 @@
|
|||||||
|
### 0.17.4 - January 2025
|
||||||
|
---
|
||||||
|
- Display responsible owner for orders
|
||||||
|
- Display completion date for orders
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
### 0.17.3 - January 2025
|
### 0.17.3 - January 2025
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -1530,8 +1530,13 @@ class InvenTreeAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return a boolean global setting value
|
// Return a boolean global setting value
|
||||||
Future<bool> getGlobalBooleanSetting(String key) async {
|
Future<bool> getGlobalBooleanSetting(String key, { bool backup = false }) async {
|
||||||
String value = await getGlobalSetting(key);
|
String value = await getGlobalSetting(key);
|
||||||
|
|
||||||
|
if (value.isEmpty) {
|
||||||
|
return backup;
|
||||||
|
}
|
||||||
|
|
||||||
return value.toLowerCase().trim() == "true";
|
return value.toLowerCase().trim() == "true";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,11 +18,13 @@ class InvenTreeOrder extends InvenTreeModel {
|
|||||||
|
|
||||||
String get issueDate => getString("issue_date");
|
String get issueDate => getString("issue_date");
|
||||||
|
|
||||||
String get completeDate => getString("complete_date");
|
String get completionDate => getDateString("complete_date");
|
||||||
|
|
||||||
String get creationDate => getString("creation_date");
|
String get creationDate => getDateString("creation_date");
|
||||||
|
|
||||||
String get targetDate => getString("target_date");
|
String get shipmentDate => getDateString("shipment_date");
|
||||||
|
|
||||||
|
String get targetDate => getDateString("target_date");
|
||||||
|
|
||||||
int get lineItemCount => getInt("line_items", backup: 0);
|
int get lineItemCount => getInt("line_items", backup: 0);
|
||||||
|
|
||||||
@ -40,6 +42,10 @@ class InvenTreeOrder extends InvenTreeModel {
|
|||||||
|
|
||||||
int get responsibleId => getInt("responsible");
|
int get responsibleId => getInt("responsible");
|
||||||
|
|
||||||
|
String get responsibleName => getString("name", subKey: "responsible_detail");
|
||||||
|
|
||||||
|
String get responsibleLabel => getString("label", subKey: "responsible_detail");
|
||||||
|
|
||||||
// Project code information
|
// Project code information
|
||||||
int get projectCodeId => getInt("project_code");
|
int get projectCodeId => getInt("project_code");
|
||||||
|
|
||||||
@ -110,6 +116,5 @@ class InvenTreeOrderLine extends InvenTreeModel {
|
|||||||
|
|
||||||
String get partImage => getString("thumbnail", subKey: "part_detail");
|
String get partImage => getString("thumbnail", subKey: "part_detail");
|
||||||
|
|
||||||
// TODO: Perhaps parse this as an actual date?
|
String get targetDate => getDateString("target_date");
|
||||||
String get targetDate => getString("target_date");
|
|
||||||
}
|
}
|
@ -246,6 +246,9 @@
|
|||||||
"companies": "Companies",
|
"companies": "Companies",
|
||||||
"@companies": {},
|
"@companies": {},
|
||||||
|
|
||||||
|
"completionDate": "Completion Date",
|
||||||
|
"@completionDate": {},
|
||||||
|
|
||||||
"configureServer": "Configure server settings",
|
"configureServer": "Configure server settings",
|
||||||
"@configureServer": {},
|
"@configureServer": {},
|
||||||
|
|
||||||
@ -1047,6 +1050,9 @@
|
|||||||
"reportBugDescription": "Submit bug report (requires GitHub account)",
|
"reportBugDescription": "Submit bug report (requires GitHub account)",
|
||||||
"@reportBugDescription": {},
|
"@reportBugDescription": {},
|
||||||
|
|
||||||
|
"responsible": "Responsible",
|
||||||
|
"@responsible": {},
|
||||||
|
|
||||||
"results": "Results",
|
"results": "Results",
|
||||||
"@results": {},
|
"@results": {},
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
|
|||||||
lines = await widget.order.getLineItems();
|
lines = await widget.order.getLineItems();
|
||||||
|
|
||||||
showCameraShortcut = await InvenTreeSettingsManager().getBool(INV_PO_SHOW_CAMERA, true);
|
showCameraShortcut = await InvenTreeSettingsManager().getBool(INV_PO_SHOW_CAMERA, true);
|
||||||
supportProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED");
|
supportProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED", backup: true);
|
||||||
|
|
||||||
completedLines = 0;
|
completedLines = 0;
|
||||||
|
|
||||||
@ -426,7 +426,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
|
|||||||
if (widget.order.issueDate.isNotEmpty) {
|
if (widget.order.issueDate.isNotEmpty) {
|
||||||
tiles.add(ListTile(
|
tiles.add(ListTile(
|
||||||
title: Text(L10().issueDate),
|
title: Text(L10().issueDate),
|
||||||
subtitle: Text(widget.order.issueDate),
|
trailing: Text(widget.order.issueDate),
|
||||||
leading: Icon(TablerIcons.calendar),
|
leading: Icon(TablerIcons.calendar),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -434,11 +434,28 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
|
|||||||
if (widget.order.targetDate.isNotEmpty) {
|
if (widget.order.targetDate.isNotEmpty) {
|
||||||
tiles.add(ListTile(
|
tiles.add(ListTile(
|
||||||
title: Text(L10().targetDate),
|
title: Text(L10().targetDate),
|
||||||
subtitle: Text(widget.order.targetDate),
|
trailing: Text(widget.order.targetDate),
|
||||||
leading: Icon(TablerIcons.calendar),
|
leading: Icon(TablerIcons.calendar),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (widget.order.completionDate.isNotEmpty) {
|
||||||
|
tiles.add(ListTile(
|
||||||
|
title: Text(L10().completionDate),
|
||||||
|
trailing: Text(widget.order.completionDate),
|
||||||
|
leading: Icon(TablerIcons.calendar),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Responsible "owner"
|
||||||
|
if (widget.order.responsibleName.isNotEmpty && widget.order.responsibleLabel.isNotEmpty) {
|
||||||
|
tiles.add(ListTile(
|
||||||
|
title: Text(L10().responsible),
|
||||||
|
leading: Icon(widget.order.responsibleLabel == "group" ? TablerIcons.users : TablerIcons.user),
|
||||||
|
trailing: Text(widget.order.responsibleName)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// Notes tile
|
// Notes tile
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
@ -260,7 +260,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||||||
await widget.order.reload();
|
await widget.order.reload();
|
||||||
await api.SalesOrderStatus.load();
|
await api.SalesOrderStatus.load();
|
||||||
|
|
||||||
supportsProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED");
|
supportsProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED", backup: true);
|
||||||
showCameraShortcut = await InvenTreeSettingsManager().getBool(INV_SO_SHOW_CAMERA, true);
|
showCameraShortcut = await InvenTreeSettingsManager().getBool(INV_SO_SHOW_CAMERA, true);
|
||||||
|
|
||||||
InvenTreeSalesOrderAttachment().countAttachments(widget.order.pk).then((int value) {
|
InvenTreeSalesOrderAttachment().countAttachments(widget.order.pk).then((int value) {
|
||||||
@ -353,7 +353,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||||||
if (widget.order.customerReference.isNotEmpty) {
|
if (widget.order.customerReference.isNotEmpty) {
|
||||||
tiles.add(ListTile(
|
tiles.add(ListTile(
|
||||||
title: Text(L10().customerReference),
|
title: Text(L10().customerReference),
|
||||||
subtitle: Text(widget.order.customerReference),
|
trailing: Text(widget.order.customerReference),
|
||||||
leading: Icon(TablerIcons.hash),
|
leading: Icon(TablerIcons.hash),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -388,11 +388,28 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||||||
if (widget.order.targetDate.isNotEmpty) {
|
if (widget.order.targetDate.isNotEmpty) {
|
||||||
tiles.add(ListTile(
|
tiles.add(ListTile(
|
||||||
title: Text(L10().targetDate),
|
title: Text(L10().targetDate),
|
||||||
subtitle: Text(widget.order.targetDate),
|
trailing: Text(widget.order.targetDate),
|
||||||
leading: Icon(TablerIcons.calendar),
|
leading: Icon(TablerIcons.calendar),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (widget.order.shipmentDate.isNotEmpty) {
|
||||||
|
tiles.add(ListTile(
|
||||||
|
title: Text(L10().completionDate),
|
||||||
|
trailing: Text(widget.order.shipmentDate),
|
||||||
|
leading: Icon(TablerIcons.calendar),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Responsible "owner"
|
||||||
|
if (widget.order.responsibleName.isNotEmpty && widget.order.responsibleLabel.isNotEmpty) {
|
||||||
|
tiles.add(ListTile(
|
||||||
|
title: Text(L10().responsible),
|
||||||
|
leading: Icon(widget.order.responsibleLabel == "group" ? TablerIcons.users : TablerIcons.user),
|
||||||
|
trailing: Text(widget.order.responsibleName)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// Notes tile
|
// Notes tile
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name: inventree
|
name: inventree
|
||||||
description: InvenTree stock management
|
description: InvenTree stock management
|
||||||
|
|
||||||
version: 0.17.3+95
|
version: 0.17.4+96
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.19.5 <3.13.0"
|
sdk: ">=2.19.5 <3.13.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user