mirror of
https://github.com/inventree/inventree-app.git
synced 2026-07-07 05:11:31 +00:00
display model pk entries (#851)
This commit is contained in:
@@ -57,7 +57,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId "inventree.inventree_app"
|
||||
minSdkVersion 23
|
||||
minSdkVersion flutter.minSdkVersion // Flutter now requires API 24+; hardcoding a lower value gets auto-rewritten on every build
|
||||
targetSdkVersion 35
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
|
||||
@@ -406,6 +406,15 @@
|
||||
"darkModeEnable": "Enable dark mode",
|
||||
"@darkModeEnable": {},
|
||||
|
||||
"showPkValue": "Show ID",
|
||||
"@showPkValue": {},
|
||||
|
||||
"showPkValueDetail": "Display the internal ID (PK) value for parts, stock items and other objects",
|
||||
"@showPkValueDetail": {},
|
||||
|
||||
"pk": "ID",
|
||||
"@pk": {},
|
||||
|
||||
"delete": "Delete",
|
||||
"@delete": {},
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ const String INV_HOME_SHOW_CUSTOMERS = "homeShowCustomers";
|
||||
const String INV_HOME_SHOW_SUPPLIERS = "homeShowSuppliers";
|
||||
|
||||
const String INV_SCREEN_ORIENTATION = "appScreenOrientation";
|
||||
const String INV_SHOW_PK = "showPk";
|
||||
|
||||
// Available screen orientation values
|
||||
const int SCREEN_ORIENTATION_SYSTEM = 0;
|
||||
|
||||
@@ -35,6 +35,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
|
||||
bool strictHttps = false;
|
||||
bool enableLabelPrinting = true;
|
||||
bool darkMode = false;
|
||||
bool showPk = false;
|
||||
|
||||
int screenOrientation = SCREEN_ORIENTATION_SYSTEM;
|
||||
|
||||
@@ -74,6 +75,8 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
|
||||
true,
|
||||
)
|
||||
as bool;
|
||||
showPk =
|
||||
await InvenTreeSettingsManager().getValue(INV_SHOW_PK, false) as bool;
|
||||
|
||||
darkMode = AdaptiveTheme.of(context).mode.isDark;
|
||||
|
||||
@@ -194,6 +197,20 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: Text(L10().showPkValue),
|
||||
subtitle: Text(L10().showPkValueDetail),
|
||||
leading: Icon(TablerIcons.hash),
|
||||
trailing: Switch(
|
||||
value: showPk,
|
||||
onChanged: (bool value) {
|
||||
InvenTreeSettingsManager().setValue(INV_SHOW_PK, value);
|
||||
setState(() {
|
||||
showPk = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
child: ListTile(
|
||||
title: Text(L10().orientation),
|
||||
|
||||
@@ -385,6 +385,10 @@ class _BuildOrderDetailState extends RefreshableState<BuildOrderDetailWidget> {
|
||||
// Header tile
|
||||
tiles.add(headerTile(context));
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.order.pk));
|
||||
}
|
||||
|
||||
// Part information
|
||||
if (widget.order.partDetail != null) {
|
||||
InvenTreePart part = widget.order.partDetail!;
|
||||
|
||||
@@ -125,6 +125,10 @@ class _BuildItemDetailWidgetState
|
||||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.item.pk));
|
||||
}
|
||||
|
||||
// Stock item information
|
||||
if (widget.item.stockItem != null) {
|
||||
tiles.add(
|
||||
|
||||
@@ -57,6 +57,10 @@ class _BuildLineDetailWidgetState
|
||||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.item.pk));
|
||||
}
|
||||
|
||||
// Reference to the part
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -239,6 +239,10 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
|
||||
),
|
||||
);
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.company.pk));
|
||||
}
|
||||
|
||||
if (!widget.company.active) {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -125,6 +125,10 @@ class _ManufacturerPartDisplayState
|
||||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.manufacturerPart.pk));
|
||||
}
|
||||
|
||||
// Internal Part
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -146,6 +146,10 @@ class _SupplierPartDisplayState
|
||||
return tiles;
|
||||
}
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.supplierPart.pk));
|
||||
}
|
||||
|
||||
// Internal Part
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -68,6 +68,10 @@ class _ExtraLineDetailWidgetState
|
||||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.item.pk));
|
||||
}
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().reference),
|
||||
|
||||
@@ -139,6 +139,10 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
||||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.item.pk));
|
||||
}
|
||||
|
||||
// Reference to the part
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -404,6 +404,10 @@ class _PurchaseOrderDetailState
|
||||
|
||||
tiles.add(headerTile(context));
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.order.pk));
|
||||
}
|
||||
|
||||
if (supportProjectCodes && widget.order.hasProjectCode) {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -344,6 +344,10 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
List<Widget> orderTiles(BuildContext context) {
|
||||
List<Widget> tiles = [headerTile(context)];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.order.pk));
|
||||
}
|
||||
|
||||
InvenTreeCompany? customer = widget.order.customer;
|
||||
|
||||
if (supportsProjectCodes && widget.order.hasProjectCode) {
|
||||
|
||||
@@ -165,6 +165,10 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
|
||||
List<Widget> getTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.item.pk));
|
||||
}
|
||||
|
||||
// Reference to the part
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -218,6 +218,10 @@ class _SOShipmentDetailWidgetState
|
||||
List<Widget> shipmentTiles(BuildContext context) {
|
||||
List<Widget> tiles = [];
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.shipment.pk));
|
||||
}
|
||||
|
||||
final bool checked = widget.shipment.isChecked;
|
||||
final bool shipped = widget.shipment.isShipped;
|
||||
final bool delivered = widget.shipment.isDelivered;
|
||||
|
||||
@@ -198,6 +198,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
|
||||
|
||||
List<Widget> tiles = <Widget>[
|
||||
getCategoryDescriptionCard(),
|
||||
if (showPk && widget.category != null) pkTile(widget.category!.pk),
|
||||
Expanded(
|
||||
child: PaginatedPartCategoryList(filters, title: L10().subcategories),
|
||||
flex: 10,
|
||||
|
||||
@@ -355,6 +355,10 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
||||
return tiles;
|
||||
}
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(part.pk));
|
||||
}
|
||||
|
||||
if (!part.isActive) {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
|
||||
@@ -5,9 +5,12 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/api.dart";
|
||||
import "package:inventree/app_colors.dart";
|
||||
import "package:inventree/barcode/barcode.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/preferences.dart";
|
||||
|
||||
import "package:inventree/widget/back.dart";
|
||||
import "package:inventree/widget/drawer.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/search.dart";
|
||||
|
||||
/*
|
||||
@@ -204,9 +207,22 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T>
|
||||
|
||||
bool get loaded => !loading;
|
||||
|
||||
// Whether to display the "pk" (primary key / ID) value of the loaded model
|
||||
bool showPk = false;
|
||||
|
||||
// Helper function to return API instance
|
||||
InvenTreeAPI get api => InvenTreeAPI();
|
||||
|
||||
// Construct a tile to display the "pk" (primary key / ID) value of a model
|
||||
// Only rendered by callers when the "showPk" setting is enabled
|
||||
Widget pkTile(int pk) {
|
||||
return ListTile(
|
||||
title: Text(L10().pk),
|
||||
leading: Icon(TablerIcons.hash),
|
||||
trailing: LargeText(pk.toString()),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -234,6 +250,8 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T>
|
||||
loading = true;
|
||||
});
|
||||
|
||||
showPk = await InvenTreeSettingsManager().getBool(INV_SHOW_PK, false);
|
||||
|
||||
await request(context);
|
||||
|
||||
// Escape if the widget is no longer loaded
|
||||
|
||||
@@ -366,6 +366,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
|
||||
|
||||
List<Widget> tiles = [
|
||||
locationDescriptionCard(),
|
||||
if (showPk && location != null) pkTile(location!.pk),
|
||||
Expanded(
|
||||
child: PaginatedStockLocationList(filters, title: L10().sublocations),
|
||||
flex: 10,
|
||||
|
||||
@@ -525,6 +525,10 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
||||
return tiles;
|
||||
}
|
||||
|
||||
if (showPk) {
|
||||
tiles.add(pkTile(widget.item.pk));
|
||||
}
|
||||
|
||||
// Location information
|
||||
if ((widget.item.locationId > 0) && (widget.item.locationName.isNotEmpty)) {
|
||||
tiles.add(
|
||||
|
||||
Reference in New Issue
Block a user