mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-28 13:36:50 +00:00
Allows displays of Bill of Materials for assembled parts
This commit is contained in:
parent
f7e045aaeb
commit
e35c4df846
@ -303,9 +303,6 @@ class InvenTreePart extends InvenTreeModel {
|
|||||||
// Get the number of units being build for this Part
|
// Get the number of units being build for this Part
|
||||||
double get building => double.tryParse(jsondata["building"].toString()) ?? 0;
|
double get building => double.tryParse(jsondata["building"].toString()) ?? 0;
|
||||||
|
|
||||||
// Get the number of BOM items in this Part (if it is an assembly)
|
|
||||||
int get bomItemCount => (jsondata["bom_items"] ?? 0) as int;
|
|
||||||
|
|
||||||
// Get the number of BOMs this Part is used in (if it is a component)
|
// Get the number of BOMs this Part is used in (if it is a component)
|
||||||
int get usedInCount => (jsondata["used_in"] ?? 0) as int;
|
int get usedInCount => (jsondata["used_in"] ?? 0) as int;
|
||||||
|
|
||||||
|
@ -2,16 +2,18 @@ import "package:flutter/material.dart";
|
|||||||
|
|
||||||
import "package:font_awesome_flutter/font_awesome_flutter.dart";
|
import "package:font_awesome_flutter/font_awesome_flutter.dart";
|
||||||
|
|
||||||
|
import "package:inventree/api.dart";
|
||||||
import "package:inventree/app_colors.dart";
|
import "package:inventree/app_colors.dart";
|
||||||
import "package:inventree/inventree/stock.dart";
|
import "package:inventree/inventree/stock.dart";
|
||||||
import "package:inventree/l10.dart";
|
import "package:inventree/l10.dart";
|
||||||
import "package:inventree/helpers.dart";
|
import "package:inventree/helpers.dart";
|
||||||
|
import "package:inventree/inventree/part.dart";
|
||||||
|
|
||||||
import "package:inventree/widget/attachment_widget.dart";
|
import "package:inventree/widget/attachment_widget.dart";
|
||||||
|
import "package:inventree/widget/part_list.dart";
|
||||||
import "package:inventree/widget/part_notes.dart";
|
import "package:inventree/widget/part_notes.dart";
|
||||||
import "package:inventree/widget/progress.dart";
|
import "package:inventree/widget/progress.dart";
|
||||||
import "package:inventree/inventree/part.dart";
|
|
||||||
import "package:inventree/widget/category_display.dart";
|
import "package:inventree/widget/category_display.dart";
|
||||||
import "package:inventree/api.dart";
|
|
||||||
import "package:inventree/widget/refreshable_state.dart";
|
import "package:inventree/widget/refreshable_state.dart";
|
||||||
import "package:inventree/widget/part_image_widget.dart";
|
import "package:inventree/widget/part_image_widget.dart";
|
||||||
import "package:inventree/widget/snacks.dart";
|
import "package:inventree/widget/snacks.dart";
|
||||||
@ -41,6 +43,8 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||||||
|
|
||||||
int attachmentCount = 0;
|
int attachmentCount = 0;
|
||||||
|
|
||||||
|
int bomCount = 0;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String getAppBarTitle(BuildContext context) => L10().partDetails;
|
String getAppBarTitle(BuildContext context) => L10().partDetails;
|
||||||
|
|
||||||
@ -118,6 +122,12 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||||||
"part": part.pk.toString()
|
"part": part.pk.toString()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
bomCount = await InvenTreePart().count(
|
||||||
|
filters: {
|
||||||
|
"in_bom_for": part.pk.toString(),
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future <void> _toggleStar() async {
|
Future <void> _toggleStar() async {
|
||||||
@ -296,14 +306,24 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||||||
// Tiles for an "assembly" part
|
// Tiles for an "assembly" part
|
||||||
if (part.isAssembly) {
|
if (part.isAssembly) {
|
||||||
|
|
||||||
if (part.bomItemCount > 0) {
|
if (bomCount > 0) {
|
||||||
tiles.add(
|
tiles.add(
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(L10().billOfMaterials),
|
title: Text(L10().billOfMaterials),
|
||||||
leading: FaIcon(FontAwesomeIcons.thList),
|
leading: FaIcon(FontAwesomeIcons.thList, color: COLOR_CLICK),
|
||||||
trailing: Text("${part.bomItemCount}"),
|
trailing: Text("${bomCount}"),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
// TODO
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => PartList(
|
||||||
|
{
|
||||||
|
"in_bom_for": "${part.pk}",
|
||||||
|
},
|
||||||
|
title: L10().billOfMaterials,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -583,7 +603,6 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
|
|||||||
icon: FaIcon(FontAwesomeIcons.boxes),
|
icon: FaIcon(FontAwesomeIcons.boxes),
|
||||||
label: L10().stock
|
label: L10().stock
|
||||||
),
|
),
|
||||||
// TODO - Add part actions
|
|
||||||
BottomNavigationBarItem(
|
BottomNavigationBarItem(
|
||||||
icon: FaIcon(FontAwesomeIcons.wrench),
|
icon: FaIcon(FontAwesomeIcons.wrench),
|
||||||
label: L10().actions,
|
label: L10().actions,
|
||||||
|
@ -12,23 +12,27 @@ import "package:inventree/l10.dart";
|
|||||||
|
|
||||||
class PartList extends StatefulWidget {
|
class PartList extends StatefulWidget {
|
||||||
|
|
||||||
const PartList(this.filters);
|
const PartList(this.filters, {this.title = ""});
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
|
||||||
final Map<String, String> filters;
|
final Map<String, String> filters;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_PartListState createState() => _PartListState(filters);
|
_PartListState createState() => _PartListState(filters, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class _PartListState extends RefreshableState<PartList> {
|
class _PartListState extends RefreshableState<PartList> {
|
||||||
|
|
||||||
_PartListState(this.filters);
|
_PartListState(this.filters, this.title);
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
|
||||||
final Map<String, String> filters;
|
final Map<String, String> filters;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String getAppBarTitle(BuildContext context) => L10().parts;
|
String getAppBarTitle(BuildContext context) => title.isNotEmpty ? title : L10().parts;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget getBody(BuildContext context) {
|
Widget getBody(BuildContext context) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user