2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-08-20 19:15:50 +00:00

Allow purchase orders to be completed directly from the app (#686)

* Allow purchase orders to be completed directly from the app

* Code formatting
This commit is contained in:
Oliver
2025-08-19 11:37:37 +10:00
committed by GitHub
parent 7d32bd6d88
commit a0b8795b27
5 changed files with 44 additions and 1 deletions

View File

@@ -27,7 +27,7 @@ We enforce consistent code formatting using Dart's built-in formatter. Before su
1. Fork the repository and create a feature branch 1. Fork the repository and create a feature branch
2. Make your changes 2. Make your changes
3. Ensure your code passes all tests and linting 3. Ensure your code passes all tests and linting
4. Format your code using `fvm dart format` 4. Format your code using `invoke format`
5. Submit a pull request with a clear description of the changes 5. Submit a pull request with a clear description of the changes
6. Address any review comments 6. Address any review comments

View File

@@ -1,6 +1,7 @@
### TBD - ??? ### TBD - ???
--- ---
- Allow purchase orders to be completed
- Improved UX across the entire app - Improved UX across the entire app
- Fix bug which prevented display of part images for purchase order line items - Fix bug which prevented display of part images for purchase order line items

View File

@@ -261,6 +261,12 @@
"companies": "Companies", "companies": "Companies",
"@companies": {}, "@companies": {},
"complete": "Complete",
"@complete": {},
"completeOrder": "Complete Order",
"@completeOrder": {},
"completionDate": "Completion Date", "completionDate": "Completion Date",
"@completionDate": {}, "@completionDate": {},

View File

@@ -1,6 +1,7 @@
import "package:flutter/material.dart"; import "package:flutter/material.dart";
import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart";
import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:inventree/api_form.dart";
import "package:inventree/app_colors.dart"; import "package:inventree/app_colors.dart";
import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/barcode.dart";
@@ -122,6 +123,18 @@ class _PurchaseOrderDetailState
); );
} }
if (widget.order.isOpen && !widget.order.isPending) {
actions.add(
SpeedDialChild(
child: Icon(TablerIcons.circle_check, color: Colors.green),
label: L10().completeOrder,
onTap: () async {
_completeOrder(context);
},
),
);
}
if (widget.order.isOpen) { if (widget.order.isOpen) {
actions.add( actions.add(
SpeedDialChild( SpeedDialChild(
@@ -182,6 +195,24 @@ class _PurchaseOrderDetailState
); );
} }
/// Complete this order
Future<void> _completeOrder(BuildContext context) async {
Map<String, Map<String, dynamic>> fields = {"accept_incomplete": {}};
String URL = "order/po/${widget.order.pk}/complete/";
launchApiForm(
context,
L10().completeOrder,
URL,
fields,
method: "POST",
onSuccess: (data) async {
refresh(context);
},
);
}
/// Cancel this order /// Cancel this order
Future<void> _cancelOrder(BuildContext context) async { Future<void> _cancelOrder(BuildContext context) async {
confirmationDialog( confirmationDialog(

View File

@@ -5,6 +5,11 @@ import sys
from invoke import task from invoke import task
@task
def format(c):
"""Code formatting using dart format."""
c.run("fvm dart format lib")
@task @task
def clean(c): def clean(c):
"""Clean flutter build.""" """Clean flutter build."""