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
2. Make your changes
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
6. Address any review comments

View File

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

View File

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

View File

@@ -1,6 +1,7 @@
import "package:flutter/material.dart";
import "package:flutter_speed_dial/flutter_speed_dial.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/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) {
actions.add(
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
Future<void> _cancelOrder(BuildContext context) async {
confirmationDialog(

View File

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