mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-28 05:26:47 +00:00
Add barcode handler to scan stock item into location
This commit is contained in:
parent
db6aae8a78
commit
c00e367ae5
@ -339,6 +339,40 @@ class _QRViewState extends State<InvenTreeQRView> {
|
||||
}
|
||||
|
||||
|
||||
class StockItemScanIntoLocationHandler extends BarcodeHandler {
|
||||
/**
|
||||
* Barcode handler for scanning a provided StockItem into a scanned StockLocation
|
||||
*/
|
||||
|
||||
final InvenTreeStockItem item;
|
||||
|
||||
StockItemScanIntoLocationHandler(this.item);
|
||||
|
||||
@override
|
||||
Future<void> onBarcodeMatched(Map<String, dynamic> data) {
|
||||
// If the barcode points to a 'stocklocation', great!
|
||||
if (!data.containsKey('stocklocation')) {
|
||||
showErrorDialog(
|
||||
_context,
|
||||
"Invalid Barcode",
|
||||
"Barcode does not match a Stock Location",
|
||||
onDismissed: _controller.resumeCamera,
|
||||
);
|
||||
} else {
|
||||
// Extract location information
|
||||
int location = data['stocklocation']['pk'] as int;
|
||||
|
||||
// Transfer stock to specified location
|
||||
item.transferStock(location).then((response) {
|
||||
print("Response: ${response.statusCode}");
|
||||
_controller.dispose();
|
||||
Navigator.of(_context).pop();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Future<void> scanQrCode(BuildContext context) async {
|
||||
|
||||
Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeQRView(BarcodeScanHandler())));
|
||||
|
@ -379,20 +379,26 @@ class InvenTreeStockItem extends InvenTreeModel {
|
||||
});
|
||||
}
|
||||
|
||||
Future<http.Response> transferStock(double q, int location, {String notes}) async {
|
||||
Future<http.Response> transferStock(int location, {double quantity, String notes}) async {
|
||||
if (quantity == null) {} else
|
||||
if ((quantity < 0) || (quantity > this.quantity)) {
|
||||
quantity = this.quantity;
|
||||
}
|
||||
|
||||
if ((q == null) || (q > quantity)) q = quantity;
|
||||
|
||||
return api.post("/stock/transfer/", body: {
|
||||
Map<String, dynamic> data = {
|
||||
"item": {
|
||||
"pk": "${pk}",
|
||||
"quantity": "${q}",
|
||||
},
|
||||
},
|
||||
"location": "${location}",
|
||||
"notes": notes ?? '',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
if (quantity != null) {
|
||||
data["item"]["quantity"] = "${quantity}";
|
||||
}
|
||||
|
||||
return api.post("/stock/transfer/", body: data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -253,7 +253,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
||||
_quantityController.clear();
|
||||
_notesController.clear();
|
||||
|
||||
var response = await item.transferStock(quantity, location.pk, notes: notes);
|
||||
var response = await item.transferStock(location.pk, quantity: quantity, notes: notes);
|
||||
|
||||
// TODO - Error handling (potentially return false?)
|
||||
refresh();
|
||||
@ -525,6 +525,10 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
||||
leading: FaIcon(FontAwesomeIcons.exchangeAlt),
|
||||
trailing: FaIcon(FontAwesomeIcons.qrcode),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => InvenTreeQRView(StockItemScanIntoLocationHandler(item)))
|
||||
);
|
||||
},
|
||||
)
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user