mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-11-04 07:15:46 +00:00 
			
		
		
		
	Pop to the previous context if the stock item is "bad"
This commit is contained in:
		@@ -66,7 +66,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
 | 
			
		||||
        context,
 | 
			
		||||
        L10().editCategory,
 | 
			
		||||
        onSuccess: (data) async {
 | 
			
		||||
          refresh();
 | 
			
		||||
          refresh(context);
 | 
			
		||||
          showSnackIcon(L10().categoryUpdated, success: true);
 | 
			
		||||
        }
 | 
			
		||||
    );
 | 
			
		||||
@@ -79,11 +79,11 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> onBuild(BuildContext context) async {
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
    int pk = category?.pk ?? -1;
 | 
			
		||||
 | 
			
		||||
@@ -234,7 +234,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
 | 
			
		||||
            )
 | 
			
		||||
          );
 | 
			
		||||
        } else {
 | 
			
		||||
          refresh();
 | 
			
		||||
          refresh(context);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await company.reload();
 | 
			
		||||
 | 
			
		||||
    if (company.isSupplier) {
 | 
			
		||||
@@ -78,7 +78,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
 | 
			
		||||
      context,
 | 
			
		||||
      L10().companyEdit,
 | 
			
		||||
      onSuccess: (data) async {
 | 
			
		||||
        refresh();
 | 
			
		||||
        refresh(context);
 | 
			
		||||
        showSnackIcon(L10().companyUpdated, success: true);
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
 | 
			
		||||
      context,
 | 
			
		||||
      L10().editLocation,
 | 
			
		||||
      onSuccess: (data) async {
 | 
			
		||||
        refresh();
 | 
			
		||||
        refresh(context);
 | 
			
		||||
        showSnackIcon(L10().locationUpdated, success: true);
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
@@ -109,11 +109,11 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> onBuild(BuildContext context) async {
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
    int pk = location?.pk ?? -1;
 | 
			
		||||
 | 
			
		||||
@@ -385,8 +385,8 @@ List<Widget> detailTiles() {
 | 
			
		||||
                      MaterialPageRoute(builder: (context) =>
 | 
			
		||||
                          InvenTreeQRView(
 | 
			
		||||
                              StockLocationScanInItemsHandler(_loc)))
 | 
			
		||||
                  ).then((context) {
 | 
			
		||||
                    refresh();
 | 
			
		||||
                  ).then((value) {
 | 
			
		||||
                    refresh(context);
 | 
			
		||||
                  });
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
 
 | 
			
		||||
@@ -72,11 +72,11 @@ class _PartAttachmentDisplayState extends RefreshableState<PartAttachmentsWidget
 | 
			
		||||
      showSnackIcon(L10().uploadFailed, success: false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
    await InvenTreePartAttachment().list(
 | 
			
		||||
      filters: {
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> onBuild(BuildContext context) async {
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
 | 
			
		||||
    setState(() {
 | 
			
		||||
 | 
			
		||||
@@ -85,7 +85,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await part.reload();
 | 
			
		||||
    await part.getTestTemplates();
 | 
			
		||||
  }
 | 
			
		||||
@@ -94,7 +94,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
 | 
			
		||||
 | 
			
		||||
    if (InvenTreeAPI().checkPermission("part", "view")) {
 | 
			
		||||
      await part.update(values: {"starred": "${!part.starred}"});
 | 
			
		||||
      refresh();
 | 
			
		||||
      refresh(context);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -104,7 +104,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
 | 
			
		||||
      context,
 | 
			
		||||
      L10().editPart,
 | 
			
		||||
      onSuccess: (data) async {
 | 
			
		||||
        refresh();
 | 
			
		||||
        refresh(context);
 | 
			
		||||
        showSnackIcon(L10().partEdited, success: true);
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
@@ -130,7 +130,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
 | 
			
		||||
                  builder: (context) => PartImageWidget(part)
 | 
			
		||||
                )
 | 
			
		||||
              ).then((value) {
 | 
			
		||||
                refresh();
 | 
			
		||||
                refresh(context);
 | 
			
		||||
              });
 | 
			
		||||
            }),
 | 
			
		||||
        ),
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ class _PartImageState extends RefreshableState<PartImageWidget> {
 | 
			
		||||
  final InvenTreePart part;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await part.reload();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -60,7 +60,7 @@ class _PartImageState extends RefreshableState<PartImageWidget> {
 | 
			
		||||
                  showSnackIcon(L10().uploadFailed, success: false);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                refresh();
 | 
			
		||||
                refresh(context);
 | 
			
		||||
              }
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ class _PartNotesState extends RefreshableState<PartNotesWidget> {
 | 
			
		||||
  final InvenTreePart part;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await part.reload();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +53,7 @@ class _PartNotesState extends RefreshableState<PartNotesWidget> {
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              onSuccess: (data) async {
 | 
			
		||||
                refresh();
 | 
			
		||||
                refresh(context);
 | 
			
		||||
              }
 | 
			
		||||
            );
 | 
			
		||||
          }
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await order.reload();
 | 
			
		||||
 | 
			
		||||
    lines = await order.getLineItems();
 | 
			
		||||
@@ -82,7 +82,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
      context,
 | 
			
		||||
      L10().purchaseOrderEdit,
 | 
			
		||||
      onSuccess: (data) async {
 | 
			
		||||
        refresh();
 | 
			
		||||
        refresh(context);
 | 
			
		||||
        showSnackIcon(L10().purchaseOrderUpdated, success: true);
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
@@ -218,7 +218,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
        icon: FontAwesomeIcons.signInAlt,
 | 
			
		||||
        onSuccess: (data) async {
 | 
			
		||||
          showSnackIcon(L10().receivedItem, success: true);
 | 
			
		||||
          refresh();
 | 
			
		||||
          refresh(context);
 | 
			
		||||
        }
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -41,21 +41,21 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T> {
 | 
			
		||||
 | 
			
		||||
  // Function called after the widget is first build
 | 
			
		||||
  Future<void> onBuild(BuildContext context) async {
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Function to request data for this page
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> refresh() async {
 | 
			
		||||
  Future<void> refresh(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
    setState(() {
 | 
			
		||||
      loading = true;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await request();
 | 
			
		||||
    await request(context);
 | 
			
		||||
 | 
			
		||||
    setState(() {
 | 
			
		||||
      loading = false;
 | 
			
		||||
@@ -100,7 +100,9 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T> {
 | 
			
		||||
      body: Builder(
 | 
			
		||||
        builder: (BuildContext context) {
 | 
			
		||||
          return RefreshIndicator(
 | 
			
		||||
              onRefresh: refresh,
 | 
			
		||||
              onRefresh: () async {
 | 
			
		||||
                refresh(context);
 | 
			
		||||
              },
 | 
			
		||||
              child: getBody(context)
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ import "package:inventree/l10.dart";
 | 
			
		||||
import "package:inventree/helpers.dart";
 | 
			
		||||
import "package:inventree/api.dart";
 | 
			
		||||
import "package:inventree/api_form.dart";
 | 
			
		||||
import 'package:one_context/one_context.dart';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class StockDetailWidget extends StatefulWidget {
 | 
			
		||||
@@ -96,13 +97,20 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
 | 
			
		||||
    // Load part data if not already loaded
 | 
			
		||||
    if (part == null) {
 | 
			
		||||
      refresh();
 | 
			
		||||
      refresh(context);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
    await item.reload();
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
    part = await InvenTreePart().get(item.partId) as InvenTreePart?;
 | 
			
		||||
@@ -244,7 +252,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
      L10().editItem,
 | 
			
		||||
      fields: fields,
 | 
			
		||||
      onSuccess: (data) async {
 | 
			
		||||
        refresh();
 | 
			
		||||
        refresh(context);
 | 
			
		||||
        showSnackIcon(L10().stockItemUpdated, success: true);
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
@@ -261,7 +269,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
 | 
			
		||||
    _stockUpdateMessage(result);
 | 
			
		||||
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future <void> _addStockDialog() async {
 | 
			
		||||
@@ -293,7 +301,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
        icon: FontAwesomeIcons.plusCircle,
 | 
			
		||||
        onSuccess: (data) async {
 | 
			
		||||
          _stockUpdateMessage(true);
 | 
			
		||||
          refresh();
 | 
			
		||||
          refresh(context);
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@@ -340,7 +348,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
 | 
			
		||||
    _stockUpdateMessage(result);
 | 
			
		||||
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -372,7 +380,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
          icon: FontAwesomeIcons.minusCircle,
 | 
			
		||||
          onSuccess: (data) async {
 | 
			
		||||
            _stockUpdateMessage(true);
 | 
			
		||||
            refresh();
 | 
			
		||||
            refresh(context);
 | 
			
		||||
          }
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@@ -413,7 +421,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
 | 
			
		||||
    _stockUpdateMessage(result);
 | 
			
		||||
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future <void> _countStockDialog() async {
 | 
			
		||||
@@ -445,7 +453,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
          icon: FontAwesomeIcons.clipboardCheck,
 | 
			
		||||
          onSuccess: (data) async {
 | 
			
		||||
            _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);
 | 
			
		||||
 | 
			
		||||
    refresh();
 | 
			
		||||
    refresh(context);
 | 
			
		||||
 | 
			
		||||
    if (result) {
 | 
			
		||||
      showSnackIcon(L10().stockItemTransferred, success: true);
 | 
			
		||||
@@ -549,7 +557,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
          icon: FontAwesomeIcons.dolly,
 | 
			
		||||
          onSuccess: (data) async {
 | 
			
		||||
            _stockUpdateMessage(true);
 | 
			
		||||
            refresh();
 | 
			
		||||
            refresh(context);
 | 
			
		||||
          }
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
@@ -801,7 +809,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
                    MaterialPageRoute(
 | 
			
		||||
                        builder: (context) => StockItemTestResultsWidget(item))
 | 
			
		||||
                ).then((context) {
 | 
			
		||||
                  refresh();
 | 
			
		||||
                  refresh(context);
 | 
			
		||||
                });
 | 
			
		||||
              }
 | 
			
		||||
          )
 | 
			
		||||
@@ -928,7 +936,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
            context,
 | 
			
		||||
            MaterialPageRoute(builder: (context) => InvenTreeQRView(StockItemScanIntoLocationHandler(item)))
 | 
			
		||||
          ).then((context) {
 | 
			
		||||
            refresh();
 | 
			
		||||
            refresh(context);
 | 
			
		||||
          });
 | 
			
		||||
        },
 | 
			
		||||
      )
 | 
			
		||||
@@ -958,7 +966,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
 | 
			
		||||
                    icon: Icons.qr_code,
 | 
			
		||||
                  );
 | 
			
		||||
 | 
			
		||||
                  refresh();
 | 
			
		||||
                  refresh(context);
 | 
			
		||||
                }
 | 
			
		||||
              });
 | 
			
		||||
            });
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await item.getTestTemplates();
 | 
			
		||||
    await item.getTestResults();
 | 
			
		||||
  }
 | 
			
		||||
@@ -61,7 +61,7 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes
 | 
			
		||||
        "test": "${name}",
 | 
			
		||||
      },
 | 
			
		||||
      onSuccess: (data) {
 | 
			
		||||
        refresh();
 | 
			
		||||
        refresh(context);
 | 
			
		||||
      },
 | 
			
		||||
      fileField: "attachment",
 | 
			
		||||
    );
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ class _StockNotesState extends RefreshableState<StockNotesWidget> {
 | 
			
		||||
  String getAppBarTitle(BuildContext context) => L10().stockItemNotes;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Future<void> request() async {
 | 
			
		||||
  Future<void> request(BuildContext context) async {
 | 
			
		||||
    await item.reload();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -54,7 +54,7 @@ class _StockNotesState extends RefreshableState<StockNotesWidget> {
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  onSuccess: (data) async {
 | 
			
		||||
                    refresh();
 | 
			
		||||
                    refresh(context);
 | 
			
		||||
                  }
 | 
			
		||||
                );
 | 
			
		||||
              }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user