2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-30 22:46:49 +00:00

Merge pull request #82 from SchrodingersGat/stock-transfer-fix

Stock transfer fix
This commit is contained in:
Oliver 2022-01-09 08:04:18 +11:00 committed by GitHub
commit 27da8b2820
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 29 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,10 +455,11 @@ 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()) {
// Serialized stock cannot be adjusted (unless it is a "transfer")
if (isSerialized() && location == null) {
return false;
}
@ -467,18 +468,42 @@ class InvenTreeStockItem extends InvenTreeModel {
return false;
}
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}",
}
],
};
} else {
// Legacy (<= 14) API
data = {
"item": {
"pk": "${pk}",
"quantity": "${quantity}",
},
};
}
data["notes"] = notes ?? "";
if (location != null) {
data["location"] = location;
}
// Expected API return code depends on server API version
final int expected_response = InvenTreeAPI().supportModernStockTransactions() ? 201 : 200;
var response = await api.post(
endpoint,
body: {
"item": {
"pk": "${pk}",
"quantity": "${q}",
},
"notes": notes ?? "",
},
expectedStatusCode: 200
body: data,
expectedStatusCode: expected_response,
);
return response.isValid();
@ -509,25 +534,23 @@ 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 {
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();