mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-28 13:36:50 +00:00
Display history
This commit is contained in:
parent
4a7884f7fd
commit
43faec8b21
@ -56,6 +56,67 @@ class InvenTreeStockItemTestResult extends InvenTreeModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class InvenTreeStockItemHistory extends InvenTreeModel {
|
||||||
|
|
||||||
|
InvenTreeStockItemHistory() : super();
|
||||||
|
|
||||||
|
InvenTreeStockItemHistory.fromJson(Map<String, dynamic> json) : super.fromJson(json);
|
||||||
|
|
||||||
|
@override
|
||||||
|
InvenTreeModel createFromJson(Map<String, dynamic> json) {
|
||||||
|
return InvenTreeStockItemHistory.fromJson(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get URL => "stock/track/";
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, String> defaultListFilters() {
|
||||||
|
|
||||||
|
// By default, order by decreasing date
|
||||||
|
return {
|
||||||
|
"ordering": "-date",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DateTime? get date {
|
||||||
|
if (jsondata.containsKey("date")) {
|
||||||
|
return DateTime.tryParse((jsondata["date"] ?? "") as String);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String get dateString {
|
||||||
|
var d = date;
|
||||||
|
|
||||||
|
if (d == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return DateFormat("yyyy-MM-dd").format(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
String get label => (jsondata["label"] ?? "") as String;
|
||||||
|
|
||||||
|
String get quantityString {
|
||||||
|
Map<String, dynamic> deltas = (jsondata["deltas"] ?? {}) as Map<String, dynamic>;
|
||||||
|
|
||||||
|
// Serial number takes priority here
|
||||||
|
if (deltas.containsKey("serial")) {
|
||||||
|
var serial = (deltas["serial"] ?? "").toString() as String;
|
||||||
|
return "# ${serial}";
|
||||||
|
} else if (deltas.containsKey("quantity")) {
|
||||||
|
double q = (deltas["quantity"] ?? 0);
|
||||||
|
|
||||||
|
return simpleNumberString(q);
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeStockItem extends InvenTreeModel {
|
class InvenTreeStockItem extends InvenTreeModel {
|
||||||
|
|
||||||
InvenTreeStockItem() : super();
|
InvenTreeStockItem() : super();
|
||||||
|
@ -6,6 +6,8 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:inventree/widget/refreshable_state.dart';
|
import 'package:inventree/widget/refreshable_state.dart';
|
||||||
import 'package:inventree/l10.dart';
|
import 'package:inventree/l10.dart';
|
||||||
import 'package:inventree/inventree/stock.dart';
|
import 'package:inventree/inventree/stock.dart';
|
||||||
|
import 'package:inventree/inventree/model.dart';
|
||||||
|
|
||||||
|
|
||||||
class StockItemHistoryWidget extends StatefulWidget {
|
class StockItemHistoryWidget extends StatefulWidget {
|
||||||
|
|
||||||
@ -27,9 +29,24 @@ class _StockItemHistoryDisplayState extends RefreshableState<StockItemHistoryWid
|
|||||||
@override
|
@override
|
||||||
String getAppBarTitle(BuildContext context) => L10().stockItemHistory;
|
String getAppBarTitle(BuildContext context) => L10().stockItemHistory;
|
||||||
|
|
||||||
|
List<InvenTreeStockItemHistory> history = [];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> request(BuildContext refresh) async {
|
Future<void> request(BuildContext refresh) async {
|
||||||
// TODO
|
|
||||||
|
history.clear();
|
||||||
|
|
||||||
|
InvenTreeStockItemHistory().list(filters: {"item": "${item.pk}"}).then((List<InvenTreeModel> results) {
|
||||||
|
for (var result in results) {
|
||||||
|
if (result is InvenTreeStockItemHistory) {
|
||||||
|
history.add(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh
|
||||||
|
setState(() {
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -37,8 +54,25 @@ class _StockItemHistoryDisplayState extends RefreshableState<StockItemHistoryWid
|
|||||||
return ListView(
|
return ListView(
|
||||||
children: ListTile.divideTiles(
|
children: ListTile.divideTiles(
|
||||||
context: context,
|
context: context,
|
||||||
tiles: [],
|
tiles: historyList(),
|
||||||
).toList()
|
).toList()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Widget> historyList() {
|
||||||
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
for (var entry in history) {
|
||||||
|
tiles.add(
|
||||||
|
ListTile(
|
||||||
|
leading: Text(entry.dateString),
|
||||||
|
trailing: entry.quantityString.isNotEmpty ? Text(entry.quantityString) : null,
|
||||||
|
title: Text(entry.label),
|
||||||
|
subtitle: entry.notes.isNotEmpty ? Text(entry.notes) : null,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tiles;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user