2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 13:36:50 +00:00

Refactor stock adjustment functions

- Provide compatibility with "modern" and "legacy" API versions
This commit is contained in:
Oliver 2022-01-08 23:05:45 +11:00
parent 7c3698beba
commit 5d0ffa059d
3 changed files with 48 additions and 18 deletions

View File

@ -267,7 +267,7 @@ class StockItemScanIntoLocationHandler extends BarcodeHandler {
} }
// Transfer stock to specified location // Transfer stock to specified location
final result = await item.transferStock(location); final result = await item.transferStock(context, location);
if (result) { if (result) {
@ -339,7 +339,7 @@ class StockLocationScanInItemsHandler extends BarcodeHandler {
success: true success: true
); );
} else { } else {
final result = await item.transferStock(location.pk); final result = await item.transferStock(context, location.pk);
if (result) { if (result) {

View File

@ -455,7 +455,8 @@ class InvenTreeStockItem extends InvenTreeModel {
* - Remove * - Remove
* - Count * - Count
*/ */
Future<bool> adjustStock(BuildContext context, String endpoint, double q, {String? notes}) async { // TODO: Remove this function when we deprecate support for the old API
Future<bool> adjustStock(BuildContext context, String endpoint, double q, {String? notes, int? location}) async {
// Serialized stock cannot be adjusted // Serialized stock cannot be adjusted
if (isSerialized()) { if (isSerialized()) {
@ -469,6 +470,35 @@ class InvenTreeStockItem extends InvenTreeModel {
print("Adjust stock: ${endpoint}"); print("Adjust stock: ${endpoint}");
Map<String, dynamic> data = {};
// Note: Format of adjustment API was updated in API v14
if (InvenTreeAPI().supportModernStockTransactions()) {
// Modern (> 14) API
data = {
"items": [
{
"pk": "${pk}",
"quantity": "${quantity}",
}
],
"notes": notes ?? ""
};
} else {
// Legacy (<= 14) API
data = {
"item": {
"pk": "${pk}",
"quantity": "${quantity}",
},
"notes": notes ?? "",
};
}
if (location != null) {
data["location"] = location;
}
var response = await api.post( var response = await api.post(
endpoint, endpoint,
body: { body: {
@ -509,25 +539,25 @@ class InvenTreeStockItem extends InvenTreeModel {
} }
// TODO: Remove this function when we deprecate support for the old API // TODO: Remove this function when we deprecate support for the old API
Future<bool> transferStock(int location, {double? quantity, String? notes}) async { Future<bool> transferStock(BuildContext context, int location, {double? quantity, String? notes}) async {
if ((quantity == null) || (quantity < 0) || (quantity > this.quantity)) {
quantity = this.quantity; print("transferStock()");
double q = this.quantity;
if (quantity != null) {
q = quantity;
} }
final response = await api.post( final bool result = await adjustStock(
context,
"/stock/transfer/", "/stock/transfer/",
body: { q,
"item": { notes: notes,
"pk": "${pk}", location: location,
"quantity": "${quantity}",
},
"location": "${location}",
"notes": notes ?? "",
},
expectedStatusCode: 200
); );
return response.isValid() && response.statusCode == 200; return result;
} }
} }

View File

@ -383,7 +383,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
_quantityController.clear(); _quantityController.clear();
_notesController.clear(); _notesController.clear();
var result = await item.transferStock(locationId, quantity: quantity, notes: notes); var result = await item.transferStock(context, locationId, quantity: quantity, notes: notes);
refresh(); refresh();