mirror of
https://github.com/inventree/inventree-app.git
synced 2026-09-09 03:10:14 +00:00
display model pk entries (#851)
This commit is contained in:
@@ -57,7 +57,7 @@ android {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "inventree.inventree_app"
|
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
|
targetSdkVersion 35
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
|
|||||||
@@ -406,6 +406,15 @@
|
|||||||
"darkModeEnable": "Enable dark mode",
|
"darkModeEnable": "Enable dark mode",
|
||||||
"@darkModeEnable": {},
|
"@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": "Delete",
|
||||||
"@delete": {},
|
"@delete": {},
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ const String INV_HOME_SHOW_CUSTOMERS = "homeShowCustomers";
|
|||||||
const String INV_HOME_SHOW_SUPPLIERS = "homeShowSuppliers";
|
const String INV_HOME_SHOW_SUPPLIERS = "homeShowSuppliers";
|
||||||
|
|
||||||
const String INV_SCREEN_ORIENTATION = "appScreenOrientation";
|
const String INV_SCREEN_ORIENTATION = "appScreenOrientation";
|
||||||
|
const String INV_SHOW_PK = "showPk";
|
||||||
|
|
||||||
// Available screen orientation values
|
// Available screen orientation values
|
||||||
const int SCREEN_ORIENTATION_SYSTEM = 0;
|
const int SCREEN_ORIENTATION_SYSTEM = 0;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
|
|||||||
bool strictHttps = false;
|
bool strictHttps = false;
|
||||||
bool enableLabelPrinting = true;
|
bool enableLabelPrinting = true;
|
||||||
bool darkMode = false;
|
bool darkMode = false;
|
||||||
|
bool showPk = false;
|
||||||
|
|
||||||
int screenOrientation = SCREEN_ORIENTATION_SYSTEM;
|
int screenOrientation = SCREEN_ORIENTATION_SYSTEM;
|
||||||
|
|
||||||
@@ -74,6 +75,8 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
|
|||||||
true,
|
true,
|
||||||
)
|
)
|
||||||
as bool;
|
as bool;
|
||||||
|
showPk =
|
||||||
|
await InvenTreeSettingsManager().getValue(INV_SHOW_PK, false) as bool;
|
||||||
|
|
||||||
darkMode = AdaptiveTheme.of(context).mode.isDark;
|
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(
|
GestureDetector(
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
title: Text(L10().orientation),
|
title: Text(L10().orientation),
|
||||||
|
|||||||
@@ -385,6 +385,10 @@ class _BuildOrderDetailState extends RefreshableState<BuildOrderDetailWidget> {
|
|||||||
// Header tile
|
// Header tile
|
||||||
tiles.add(headerTile(context));
|
tiles.add(headerTile(context));
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.order.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Part information
|
// Part information
|
||||||
if (widget.order.partDetail != null) {
|
if (widget.order.partDetail != null) {
|
||||||
InvenTreePart part = widget.order.partDetail!;
|
InvenTreePart part = widget.order.partDetail!;
|
||||||
|
|||||||
@@ -125,6 +125,10 @@ class _BuildItemDetailWidgetState
|
|||||||
List<Widget> getTiles(BuildContext context) {
|
List<Widget> getTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.item.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Stock item information
|
// Stock item information
|
||||||
if (widget.item.stockItem != null) {
|
if (widget.item.stockItem != null) {
|
||||||
tiles.add(
|
tiles.add(
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ class _BuildLineDetailWidgetState
|
|||||||
List<Widget> getTiles(BuildContext context) {
|
List<Widget> getTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.item.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Reference to the part
|
// Reference to the part
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -239,6 +239,10 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.company.pk));
|
||||||
|
}
|
||||||
|
|
||||||
if (!widget.company.active) {
|
if (!widget.company.active) {
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -125,6 +125,10 @@ class _ManufacturerPartDisplayState
|
|||||||
List<Widget> getTiles(BuildContext context) {
|
List<Widget> getTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.manufacturerPart.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Internal Part
|
// Internal Part
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -146,6 +146,10 @@ class _SupplierPartDisplayState
|
|||||||
return tiles;
|
return tiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.supplierPart.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Internal Part
|
// Internal Part
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -68,6 +68,10 @@ class _ExtraLineDetailWidgetState
|
|||||||
List<Widget> getTiles(BuildContext context) {
|
List<Widget> getTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.item.pk));
|
||||||
|
}
|
||||||
|
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(L10().reference),
|
title: Text(L10().reference),
|
||||||
|
|||||||
@@ -139,6 +139,10 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
|||||||
List<Widget> getTiles(BuildContext context) {
|
List<Widget> getTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.item.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Reference to the part
|
// Reference to the part
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -404,6 +404,10 @@ class _PurchaseOrderDetailState
|
|||||||
|
|
||||||
tiles.add(headerTile(context));
|
tiles.add(headerTile(context));
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.order.pk));
|
||||||
|
}
|
||||||
|
|
||||||
if (supportProjectCodes && widget.order.hasProjectCode) {
|
if (supportProjectCodes && widget.order.hasProjectCode) {
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -344,6 +344,10 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
|||||||
List<Widget> orderTiles(BuildContext context) {
|
List<Widget> orderTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [headerTile(context)];
|
List<Widget> tiles = [headerTile(context)];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.order.pk));
|
||||||
|
}
|
||||||
|
|
||||||
InvenTreeCompany? customer = widget.order.customer;
|
InvenTreeCompany? customer = widget.order.customer;
|
||||||
|
|
||||||
if (supportsProjectCodes && widget.order.hasProjectCode) {
|
if (supportsProjectCodes && widget.order.hasProjectCode) {
|
||||||
|
|||||||
@@ -165,6 +165,10 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
|
|||||||
List<Widget> getTiles(BuildContext context) {
|
List<Widget> getTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.item.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Reference to the part
|
// Reference to the part
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -218,6 +218,10 @@ class _SOShipmentDetailWidgetState
|
|||||||
List<Widget> shipmentTiles(BuildContext context) {
|
List<Widget> shipmentTiles(BuildContext context) {
|
||||||
List<Widget> tiles = [];
|
List<Widget> tiles = [];
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.shipment.pk));
|
||||||
|
}
|
||||||
|
|
||||||
final bool checked = widget.shipment.isChecked;
|
final bool checked = widget.shipment.isChecked;
|
||||||
final bool shipped = widget.shipment.isShipped;
|
final bool shipped = widget.shipment.isShipped;
|
||||||
final bool delivered = widget.shipment.isDelivered;
|
final bool delivered = widget.shipment.isDelivered;
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
|
|||||||
|
|
||||||
List<Widget> tiles = <Widget>[
|
List<Widget> tiles = <Widget>[
|
||||||
getCategoryDescriptionCard(),
|
getCategoryDescriptionCard(),
|
||||||
|
if (showPk && widget.category != null) pkTile(widget.category!.pk),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: PaginatedPartCategoryList(filters, title: L10().subcategories),
|
child: PaginatedPartCategoryList(filters, title: L10().subcategories),
|
||||||
flex: 10,
|
flex: 10,
|
||||||
|
|||||||
@@ -355,6 +355,10 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||||||
return tiles;
|
return tiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(part.pk));
|
||||||
|
}
|
||||||
|
|
||||||
if (!part.isActive) {
|
if (!part.isActive) {
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -5,9 +5,12 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
|||||||
import "package:inventree/api.dart";
|
import "package:inventree/api.dart";
|
||||||
import "package:inventree/app_colors.dart";
|
import "package:inventree/app_colors.dart";
|
||||||
import "package:inventree/barcode/barcode.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/back.dart";
|
||||||
import "package:inventree/widget/drawer.dart";
|
import "package:inventree/widget/drawer.dart";
|
||||||
|
import "package:inventree/widget/link_icon.dart";
|
||||||
import "package:inventree/widget/search.dart";
|
import "package:inventree/widget/search.dart";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -204,9 +207,22 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T>
|
|||||||
|
|
||||||
bool get loaded => !loading;
|
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
|
// Helper function to return API instance
|
||||||
InvenTreeAPI get api => InvenTreeAPI();
|
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
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -234,6 +250,8 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T>
|
|||||||
loading = true;
|
loading = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
showPk = await InvenTreeSettingsManager().getBool(INV_SHOW_PK, false);
|
||||||
|
|
||||||
await request(context);
|
await request(context);
|
||||||
|
|
||||||
// Escape if the widget is no longer loaded
|
// Escape if the widget is no longer loaded
|
||||||
|
|||||||
@@ -366,6 +366,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
|
|||||||
|
|
||||||
List<Widget> tiles = [
|
List<Widget> tiles = [
|
||||||
locationDescriptionCard(),
|
locationDescriptionCard(),
|
||||||
|
if (showPk && location != null) pkTile(location!.pk),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: PaginatedStockLocationList(filters, title: L10().sublocations),
|
child: PaginatedStockLocationList(filters, title: L10().sublocations),
|
||||||
flex: 10,
|
flex: 10,
|
||||||
|
|||||||
@@ -525,6 +525,10 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
|
|||||||
return tiles;
|
return tiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showPk) {
|
||||||
|
tiles.add(pkTile(widget.item.pk));
|
||||||
|
}
|
||||||
|
|
||||||
// Location information
|
// Location information
|
||||||
if ((widget.item.locationId > 0) && (widget.item.locationName.isNotEmpty)) {
|
if ((widget.item.locationId > 0) && (widget.item.locationName.isNotEmpty)) {
|
||||||
tiles.add(
|
tiles.add(
|
||||||
|
|||||||
Reference in New Issue
Block a user