mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-30 22:46:49 +00:00
Catch some subtle errors (#202)
- Prevent API requests for invalid PK values - Perform checks for invalid PK values at multiple points - Change order of operations in StockDetail widget
This commit is contained in:
parent
61bacefd36
commit
e7c5186823
@ -7,6 +7,7 @@
|
|||||||
- Allow serial numbers to be specified when creating new stock items
|
- Allow serial numbers to be specified when creating new stock items
|
||||||
- Allow serial numbers to be edited for existing stock items
|
- Allow serial numbers to be edited for existing stock items
|
||||||
- Allow app locale to be changed manually
|
- Allow app locale to be changed manually
|
||||||
|
- Improved handling of certain errors
|
||||||
|
|
||||||
### 0.8.1 - August 2022
|
### 0.8.1 - August 2022
|
||||||
---
|
---
|
||||||
|
@ -276,6 +276,12 @@ class InvenTreeModel {
|
|||||||
/// Delete the instance on the remote server
|
/// Delete the instance on the remote server
|
||||||
/// Returns true if the operation was successful, else false
|
/// Returns true if the operation was successful, else false
|
||||||
Future<bool> delete() async {
|
Future<bool> delete() async {
|
||||||
|
|
||||||
|
// Return if we do not have a valid pk
|
||||||
|
if (pk < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var response = await api.delete(url);
|
var response = await api.delete(url);
|
||||||
|
|
||||||
if (!response.isValid() || response.data == null || (response.data is! Map)) {
|
if (!response.isValid() || response.data == null || (response.data is! Map)) {
|
||||||
@ -303,18 +309,35 @@ class InvenTreeModel {
|
|||||||
*/
|
*/
|
||||||
Future<bool> reload() async {
|
Future<bool> reload() async {
|
||||||
|
|
||||||
|
// If we do not have a valid pk (for some reason), exit immediately
|
||||||
|
if (pk < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var response = await api.get(url, params: defaultGetFilters(), expectedStatusCode: 200);
|
var response = await api.get(url, params: defaultGetFilters(), expectedStatusCode: 200);
|
||||||
|
|
||||||
if (!response.isValid() || response.data == null || (response.data is! Map)) {
|
// A valid response has been returned
|
||||||
|
if (response.isValid() && response.statusCode == 200) {
|
||||||
|
|
||||||
reportModelError(
|
// Returned data was not a valid JSON object
|
||||||
"InvenTreeModel.reload() returned invalid response",
|
if (response.data == null || response.data is! Map) {
|
||||||
response,
|
reportModelError(
|
||||||
context: {
|
"InvenTreeModel.reload() returned invalid response",
|
||||||
"pk": pk.toString(),
|
response,
|
||||||
}
|
context: {
|
||||||
);
|
"pk": pk.toString(),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
showServerError(
|
||||||
|
url,
|
||||||
|
L10().serverError,
|
||||||
|
L10().responseInvalid,
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
showServerError(
|
showServerError(
|
||||||
url,
|
url,
|
||||||
L10().serverError,
|
L10().serverError,
|
||||||
@ -322,7 +345,6 @@ class InvenTreeModel {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lastReload = DateTime.now();
|
lastReload = DateTime.now();
|
||||||
@ -337,6 +359,13 @@ class InvenTreeModel {
|
|||||||
|
|
||||||
var url = path.join(URL, pk.toString());
|
var url = path.join(URL, pk.toString());
|
||||||
|
|
||||||
|
// Return if we do not have a valid pk
|
||||||
|
if (pk < 0) {
|
||||||
|
return APIResponse(
|
||||||
|
url: url,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (!url.endsWith("/")) {
|
if (!url.endsWith("/")) {
|
||||||
url += "/";
|
url += "/";
|
||||||
}
|
}
|
||||||
@ -396,6 +425,11 @@ class InvenTreeModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<InvenTreeModel?> get(int pk, {Map<String, String> filters = const {}}) async {
|
Future<InvenTreeModel?> get(int pk, {Map<String, String> filters = const {}}) async {
|
||||||
|
|
||||||
|
if (pk < 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return getModel(pk.toString(), filters: filters);
|
return getModel(pk.toString(), filters: filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,13 +109,13 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
|||||||
@override
|
@override
|
||||||
Future<void> request(BuildContext context) async {
|
Future<void> request(BuildContext context) async {
|
||||||
|
|
||||||
final bool result = await item.reload();
|
|
||||||
|
|
||||||
stockShowHistory = await InvenTreeSettingsManager().getValue(INV_STOCK_SHOW_HISTORY, false) as bool;
|
stockShowHistory = await InvenTreeSettingsManager().getValue(INV_STOCK_SHOW_HISTORY, false) as bool;
|
||||||
|
|
||||||
|
final bool result = item.pk > 0 && await item.reload();
|
||||||
|
|
||||||
// Could not load this stock item for some reason
|
// Could not load this stock item for some reason
|
||||||
// Perhaps it has been depleted?
|
// Perhaps it has been depleted?
|
||||||
if (!result || item.pk == -1) {
|
if (!result) {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,9 @@ class _StockNotesState extends RefreshableState<StockNotesWidget> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> request(BuildContext context) async {
|
Future<void> request(BuildContext context) async {
|
||||||
await item.reload();
|
if (item.pk > 0) {
|
||||||
|
await item.reload();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user