2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +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
final result = await item.transferStock(location);
final result = await item.transferStock(context, location);
if (result) {
@ -339,7 +339,7 @@ class StockLocationScanInItemsHandler extends BarcodeHandler {
success: true
);
} else {
final result = await item.transferStock(location.pk);
final result = await item.transferStock(context, location.pk);
if (result) {

View File

@ -455,7 +455,8 @@ class InvenTreeStockItem extends InvenTreeModel {
* - Remove
* - 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
if (isSerialized()) {
@ -469,6 +470,35 @@ class InvenTreeStockItem extends InvenTreeModel {
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(
endpoint,
body: {
@ -509,25 +539,25 @@ class InvenTreeStockItem extends InvenTreeModel {
}
// TODO: Remove this function when we deprecate support for the old API
Future<bool> transferStock(int location, {double? quantity, String? notes}) async {
if ((quantity == null) || (quantity < 0) || (quantity > this.quantity)) {
quantity = this.quantity;
Future<bool> transferStock(BuildContext context, int location, {double? quantity, String? notes}) async {
print("transferStock()");
double q = this.quantity;
if (quantity != null) {
q = quantity;
}
final response = await api.post(
final bool result = await adjustStock(
context,
"/stock/transfer/",
body: {
"item": {
"pk": "${pk}",
"quantity": "${quantity}",
},
"location": "${location}",
"notes": notes ?? "",
},
expectedStatusCode: 200
q,
notes: notes,
location: location,
);
return response.isValid() && response.statusCode == 200;
return result;
}
}

View File

@ -383,7 +383,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
_quantityController.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();