2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00

Pop to the previous context if the stock item is "bad"

This commit is contained in:
Oliver Walters 2022-03-26 17:38:30 +11:00
parent 0b3e716827
commit faf8e45138
12 changed files with 60 additions and 50 deletions

View File

@ -66,7 +66,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
context, context,
L10().editCategory, L10().editCategory,
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
showSnackIcon(L10().categoryUpdated, success: true); showSnackIcon(L10().categoryUpdated, success: true);
} }
); );
@ -79,11 +79,11 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
@override @override
Future<void> onBuild(BuildContext context) async { Future<void> onBuild(BuildContext context) async {
refresh(); refresh(context);
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
int pk = category?.pk ?? -1; int pk = category?.pk ?? -1;
@ -234,7 +234,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
) )
); );
} else { } else {
refresh(); refresh(context);
} }
} }
); );

View File

@ -64,7 +64,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await company.reload(); await company.reload();
if (company.isSupplier) { if (company.isSupplier) {
@ -78,7 +78,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
context, context,
L10().companyEdit, L10().companyEdit,
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
showSnackIcon(L10().companyUpdated, success: true); showSnackIcon(L10().companyUpdated, success: true);
} }
); );

View File

@ -88,7 +88,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
context, context,
L10().editLocation, L10().editLocation,
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
showSnackIcon(L10().locationUpdated, success: true); showSnackIcon(L10().locationUpdated, success: true);
} }
); );
@ -109,11 +109,11 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
@override @override
Future<void> onBuild(BuildContext context) async { Future<void> onBuild(BuildContext context) async {
refresh(); refresh(context);
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
int pk = location?.pk ?? -1; int pk = location?.pk ?? -1;
@ -385,8 +385,8 @@ List<Widget> detailTiles() {
MaterialPageRoute(builder: (context) => MaterialPageRoute(builder: (context) =>
InvenTreeQRView( InvenTreeQRView(
StockLocationScanInItemsHandler(_loc))) StockLocationScanInItemsHandler(_loc)))
).then((context) { ).then((value) {
refresh(); refresh(context);
}); });
} }
}, },

View File

@ -72,11 +72,11 @@ class _PartAttachmentDisplayState extends RefreshableState<PartAttachmentsWidget
showSnackIcon(L10().uploadFailed, success: false); showSnackIcon(L10().uploadFailed, success: false);
} }
refresh(); refresh(context);
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await InvenTreePartAttachment().list( await InvenTreePartAttachment().list(
filters: { filters: {

View File

@ -77,7 +77,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
@override @override
Future<void> onBuild(BuildContext context) async { Future<void> onBuild(BuildContext context) async {
refresh(); refresh(context);
setState(() { setState(() {
@ -85,7 +85,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await part.reload(); await part.reload();
await part.getTestTemplates(); await part.getTestTemplates();
} }
@ -94,7 +94,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
if (InvenTreeAPI().checkPermission("part", "view")) { if (InvenTreeAPI().checkPermission("part", "view")) {
await part.update(values: {"starred": "${!part.starred}"}); await part.update(values: {"starred": "${!part.starred}"});
refresh(); refresh(context);
} }
} }
@ -104,7 +104,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
context, context,
L10().editPart, L10().editPart,
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
showSnackIcon(L10().partEdited, success: true); showSnackIcon(L10().partEdited, success: true);
} }
); );
@ -130,7 +130,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
builder: (context) => PartImageWidget(part) builder: (context) => PartImageWidget(part)
) )
).then((value) { ).then((value) {
refresh(); refresh(context);
}); });
}), }),
), ),

View File

@ -32,7 +32,7 @@ class _PartImageState extends RefreshableState<PartImageWidget> {
final InvenTreePart part; final InvenTreePart part;
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await part.reload(); await part.reload();
} }
@ -60,7 +60,7 @@ class _PartImageState extends RefreshableState<PartImageWidget> {
showSnackIcon(L10().uploadFailed, success: false); showSnackIcon(L10().uploadFailed, success: false);
} }
refresh(); refresh(context);
} }
); );

View File

@ -26,7 +26,7 @@ class _PartNotesState extends RefreshableState<PartNotesWidget> {
final InvenTreePart part; final InvenTreePart part;
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await part.reload(); await part.reload();
} }
@ -53,7 +53,7 @@ class _PartNotesState extends RefreshableState<PartNotesWidget> {
} }
}, },
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
} }
); );
} }

View File

@ -61,7 +61,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await order.reload(); await order.reload();
lines = await order.getLineItems(); lines = await order.getLineItems();
@ -82,7 +82,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
context, context,
L10().purchaseOrderEdit, L10().purchaseOrderEdit,
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
showSnackIcon(L10().purchaseOrderUpdated, success: true); showSnackIcon(L10().purchaseOrderUpdated, success: true);
} }
); );
@ -218,7 +218,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
icon: FontAwesomeIcons.signInAlt, icon: FontAwesomeIcons.signInAlt,
onSuccess: (data) async { onSuccess: (data) async {
showSnackIcon(L10().receivedItem, success: true); showSnackIcon(L10().receivedItem, success: true);
refresh(); refresh(context);
} }
); );
} }

View File

@ -41,21 +41,21 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T> {
// Function called after the widget is first build // Function called after the widget is first build
Future<void> onBuild(BuildContext context) async { Future<void> onBuild(BuildContext context) async {
refresh(); refresh(context);
} }
// Function to request data for this page // Function to request data for this page
Future<void> request() async { Future<void> request(BuildContext context) async {
return; return;
} }
Future<void> refresh() async { Future<void> refresh(BuildContext context) async {
setState(() { setState(() {
loading = true; loading = true;
}); });
await request(); await request(context);
setState(() { setState(() {
loading = false; loading = false;
@ -100,7 +100,9 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T> {
body: Builder( body: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
return RefreshIndicator( return RefreshIndicator(
onRefresh: refresh, onRefresh: () async {
refresh(context);
},
child: getBody(context) child: getBody(context)
); );
} }

View File

@ -22,6 +22,7 @@ import "package:inventree/l10.dart";
import "package:inventree/helpers.dart"; import "package:inventree/helpers.dart";
import "package:inventree/api.dart"; import "package:inventree/api.dart";
import "package:inventree/api_form.dart"; import "package:inventree/api_form.dart";
import 'package:one_context/one_context.dart';
class StockDetailWidget extends StatefulWidget { class StockDetailWidget extends StatefulWidget {
@ -96,13 +97,20 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
// Load part data if not already loaded // Load part data if not already loaded
if (part == null) { if (part == null) {
refresh(); refresh(context);
} }
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await item.reload();
final bool result = await item.reload();
// Could not load this stock item for some reason
// Perhaps it has been depleted?
if (!result || item.pk == -1) {
Navigator.of(context).pop();
}
// Request part information // Request part information
part = await InvenTreePart().get(item.partId) as InvenTreePart?; part = await InvenTreePart().get(item.partId) as InvenTreePart?;
@ -244,7 +252,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
L10().editItem, L10().editItem,
fields: fields, fields: fields,
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
showSnackIcon(L10().stockItemUpdated, success: true); showSnackIcon(L10().stockItemUpdated, success: true);
} }
); );
@ -261,7 +269,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
_stockUpdateMessage(result); _stockUpdateMessage(result);
refresh(); refresh(context);
} }
Future <void> _addStockDialog() async { Future <void> _addStockDialog() async {
@ -293,7 +301,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
icon: FontAwesomeIcons.plusCircle, icon: FontAwesomeIcons.plusCircle,
onSuccess: (data) async { onSuccess: (data) async {
_stockUpdateMessage(true); _stockUpdateMessage(true);
refresh(); refresh(context);
} }
); );
@ -340,7 +348,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
_stockUpdateMessage(result); _stockUpdateMessage(result);
refresh(); refresh(context);
} }
@ -372,7 +380,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
icon: FontAwesomeIcons.minusCircle, icon: FontAwesomeIcons.minusCircle,
onSuccess: (data) async { onSuccess: (data) async {
_stockUpdateMessage(true); _stockUpdateMessage(true);
refresh(); refresh(context);
} }
); );
@ -413,7 +421,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
_stockUpdateMessage(result); _stockUpdateMessage(result);
refresh(); refresh(context);
} }
Future <void> _countStockDialog() async { Future <void> _countStockDialog() async {
@ -445,7 +453,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
icon: FontAwesomeIcons.clipboardCheck, icon: FontAwesomeIcons.clipboardCheck,
onSuccess: (data) async { onSuccess: (data) async {
_stockUpdateMessage(true); _stockUpdateMessage(true);
refresh(); refresh(context);
} }
); );
@ -494,7 +502,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
); );
} }
refresh(); refresh(context);
} }
@ -509,7 +517,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
var result = await item.transferStock(context, locationId, quantity: quantity, notes: notes); var result = await item.transferStock(context, locationId, quantity: quantity, notes: notes);
refresh(); refresh(context);
if (result) { if (result) {
showSnackIcon(L10().stockItemTransferred, success: true); showSnackIcon(L10().stockItemTransferred, success: true);
@ -549,7 +557,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
icon: FontAwesomeIcons.dolly, icon: FontAwesomeIcons.dolly,
onSuccess: (data) async { onSuccess: (data) async {
_stockUpdateMessage(true); _stockUpdateMessage(true);
refresh(); refresh(context);
} }
); );
@ -801,7 +809,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
MaterialPageRoute( MaterialPageRoute(
builder: (context) => StockItemTestResultsWidget(item)) builder: (context) => StockItemTestResultsWidget(item))
).then((context) { ).then((context) {
refresh(); refresh(context);
}); });
} }
) )
@ -928,7 +936,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
context, context,
MaterialPageRoute(builder: (context) => InvenTreeQRView(StockItemScanIntoLocationHandler(item))) MaterialPageRoute(builder: (context) => InvenTreeQRView(StockItemScanIntoLocationHandler(item)))
).then((context) { ).then((context) {
refresh(); refresh(context);
}); });
}, },
) )
@ -958,7 +966,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
icon: Icons.qr_code, icon: Icons.qr_code,
); );
refresh(); refresh(context);
} }
}); });
}); });

View File

@ -44,7 +44,7 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes
} }
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await item.getTestTemplates(); await item.getTestTemplates();
await item.getTestResults(); await item.getTestResults();
} }
@ -61,7 +61,7 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes
"test": "${name}", "test": "${name}",
}, },
onSuccess: (data) { onSuccess: (data) {
refresh(); refresh(context);
}, },
fileField: "attachment", fileField: "attachment",
); );

View File

@ -31,7 +31,7 @@ class _StockNotesState extends RefreshableState<StockNotesWidget> {
String getAppBarTitle(BuildContext context) => L10().stockItemNotes; String getAppBarTitle(BuildContext context) => L10().stockItemNotes;
@override @override
Future<void> request() async { Future<void> request(BuildContext context) async {
await item.reload(); await item.reload();
} }
@ -54,7 +54,7 @@ class _StockNotesState extends RefreshableState<StockNotesWidget> {
} }
}, },
onSuccess: (data) async { onSuccess: (data) async {
refresh(); refresh(context);
} }
); );
} }