mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-11-04 07:15:46 +00:00 
			
		
		
		
	Order picture action (#557)
* Add "take picture" to purchase order detail * Rename uploaded images * Provide prefix when uploading images * Add similar functionality for "sales order" detail * Add new settings screens * Control camera shortcut * Bump release notes
This commit is contained in:
		@@ -19,6 +19,7 @@ import "package:inventree/widget/progress.dart";
 | 
			
		||||
import "package:inventree/widget/refreshable_state.dart";
 | 
			
		||||
import "package:inventree/widget/snacks.dart";
 | 
			
		||||
import "package:inventree/widget/stock/stock_list.dart";
 | 
			
		||||
import "package:inventree/preferences.dart";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -45,6 +46,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
 | 
			
		||||
  int attachmentCount = 0;
 | 
			
		||||
 | 
			
		||||
  bool showCameraShortcut = true;
 | 
			
		||||
  bool supportProjectCodes = false;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
@@ -73,6 +75,18 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
  List<SpeedDialChild> actionButtons(BuildContext context) {
 | 
			
		||||
    List<SpeedDialChild> actions = [];
 | 
			
		||||
 | 
			
		||||
    if (showCameraShortcut && widget.order.canEdit) {
 | 
			
		||||
      actions.add(
 | 
			
		||||
          SpeedDialChild(
 | 
			
		||||
              child: Icon(TablerIcons.camera, color: Colors.blue),
 | 
			
		||||
              label: L10().takePicture,
 | 
			
		||||
              onTap: () async {
 | 
			
		||||
                _uploadImage(context);
 | 
			
		||||
              }
 | 
			
		||||
          )
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (widget.order.canCreate) {
 | 
			
		||||
      if (widget.order.isPending) {
 | 
			
		||||
 | 
			
		||||
@@ -137,6 +151,15 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Upload an image against the current PurchaseOrder
 | 
			
		||||
  Future<void> _uploadImage(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
    InvenTreePurchaseOrderAttachment().uploadImage(
 | 
			
		||||
        widget.order.pk,
 | 
			
		||||
        prefix: widget.order.reference,
 | 
			
		||||
    ).then((result) => refresh(context));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Issue this order
 | 
			
		||||
  Future<void> _issueOrder(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
@@ -217,6 +240,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
 | 
			
		||||
    lines = await widget.order.getLineItems();
 | 
			
		||||
 | 
			
		||||
    showCameraShortcut = await InvenTreeSettingsManager().getBool(INV_PO_SHOW_CAMERA, true);
 | 
			
		||||
    supportProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED");
 | 
			
		||||
 | 
			
		||||
    completedLines = 0;
 | 
			
		||||
@@ -389,6 +413,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg
 | 
			
		||||
                builder: (context) => AttachmentWidget(
 | 
			
		||||
                    InvenTreePurchaseOrderAttachment(),
 | 
			
		||||
                    widget.order.pk,
 | 
			
		||||
                    widget.order.reference,
 | 
			
		||||
                    widget.order.canEdit
 | 
			
		||||
                )
 | 
			
		||||
              )
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import "package:inventree/barcode/barcode.dart";
 | 
			
		||||
import "package:inventree/barcode/sales_order.dart";
 | 
			
		||||
import "package:inventree/inventree/company.dart";
 | 
			
		||||
import "package:inventree/inventree/sales_order.dart";
 | 
			
		||||
import "package:inventree/preferences.dart";
 | 
			
		||||
import "package:inventree/widget/order/so_line_list.dart";
 | 
			
		||||
import "package:inventree/widget/order/so_shipment_list.dart";
 | 
			
		||||
import "package:inventree/widget/refreshable_state.dart";
 | 
			
		||||
@@ -40,6 +41,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
 | 
			
		||||
 | 
			
		||||
  List<InvenTreeSOLineItem> lines = [];
 | 
			
		||||
 | 
			
		||||
  bool showCameraShortcut = true;
 | 
			
		||||
  bool supportsProjectCodes = false;
 | 
			
		||||
  int attachmentCount = 0;
 | 
			
		||||
 | 
			
		||||
@@ -100,6 +102,14 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Upload an image for this order
 | 
			
		||||
  Future<void> _uploadImage(BuildContext context) async {
 | 
			
		||||
    InvenTreeSalesOrderAttachment().uploadImage(
 | 
			
		||||
      widget.order.pk,
 | 
			
		||||
      prefix: widget.order.reference,
 | 
			
		||||
    ).then((result) => refresh(context));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Issue this order
 | 
			
		||||
  Future<void> _issueOrder(BuildContext context) async {
 | 
			
		||||
 | 
			
		||||
@@ -136,6 +146,18 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
 | 
			
		||||
  List<SpeedDialChild> actionButtons(BuildContext context) {
 | 
			
		||||
    List<SpeedDialChild> actions = [];
 | 
			
		||||
 | 
			
		||||
    if (showCameraShortcut && widget.order.canEdit) {
 | 
			
		||||
      actions.add(
 | 
			
		||||
          SpeedDialChild(
 | 
			
		||||
            child: Icon(TablerIcons.camera, color: Colors.blue),
 | 
			
		||||
            label: L10().takePicture,
 | 
			
		||||
            onTap: () async {
 | 
			
		||||
              _uploadImage(context);
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (widget.order.isPending) {
 | 
			
		||||
      actions.add(
 | 
			
		||||
          SpeedDialChild(
 | 
			
		||||
@@ -231,6 +253,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
 | 
			
		||||
    await api.SalesOrderStatus.load();
 | 
			
		||||
 | 
			
		||||
    supportsProjectCodes = api.supportsProjectCodes && await api.getGlobalBooleanSetting("PROJECT_CODES_ENABLED");
 | 
			
		||||
    showCameraShortcut = await InvenTreeSettingsManager().getBool(INV_SO_SHOW_CAMERA, true);
 | 
			
		||||
 | 
			
		||||
    InvenTreeSalesOrderAttachment().countAttachments(widget.order.pk).then((int value) {
 | 
			
		||||
      if (mounted) {
 | 
			
		||||
@@ -378,6 +401,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
 | 
			
		||||
            builder: (context) => AttachmentWidget(
 | 
			
		||||
            InvenTreeSalesOrderAttachment(),
 | 
			
		||||
            widget.order.pk,
 | 
			
		||||
            widget.order.reference,
 | 
			
		||||
            widget.order.canEdit
 | 
			
		||||
            )
 | 
			
		||||
          )
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user