2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 21:46:46 +00:00

Display part notes and stock notes

This commit is contained in:
Oliver Walters 2021-02-13 22:36:44 +11:00
parent b0aaccb9e3
commit 90664bfe14
10 changed files with 118 additions and 20 deletions

View File

@ -101,6 +101,9 @@ class InvenTreeStockItem extends InvenTreeModel {
@override @override
String URL = "stock/"; String URL = "stock/";
@override
String WEB_URL = "stock/item/";
@override @override
Map<String, String> defaultGetFilters() { Map<String, String> defaultGetFilters() {

View File

@ -46,7 +46,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
onPressed: () { onPressed: () {
showSearch( showSearch(
context: context, context: context,
delegate: PartSearchDelegate(filters: {"category": "${category.pk}"}) delegate: PartSearchDelegate(context, filters: {"category": "${category.pk}"})
); );
} }
), ),

View File

@ -39,7 +39,7 @@ class InvenTreeDrawer extends StatelessWidget {
showSearch( showSearch(
context: context, context: context,
delegate: PartSearchDelegate() delegate: PartSearchDelegate(context)
); );
//Navigator.push(context, MaterialPageRoute(builder: (context) => SearchWidget())); //Navigator.push(context, MaterialPageRoute(builder: (context) => SearchWidget()));
@ -115,9 +115,12 @@ class InvenTreeDrawer extends StatelessWidget {
leading: Image.asset( leading: Image.asset(
"assets/image/icon.png", "assets/image/icon.png",
fit: BoxFit.scaleDown, fit: BoxFit.scaleDown,
width: 40, width: 30,
),
title: Text(
I18N.of(context).appTitle,
style: TextStyle(fontWeight: FontWeight.bold),
), ),
title: Text(I18N.of(context).appTitle),
onTap: _home, onTap: _home,
), ),
ListTile( ListTile(

View File

@ -46,7 +46,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> {
showSearch( showSearch(
context: context, context: context,
delegate: PartSearchDelegate() delegate: PartSearchDelegate(context)
); );
} }
@ -55,7 +55,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> {
showSearch( showSearch(
context: context, context: context,
delegate: StockSearchDelegate() delegate: StockSearchDelegate(context)
); );
} }

View File

@ -45,7 +45,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
onPressed: () { onPressed: () {
showSearch( showSearch(
context: context, context: context,
delegate: StockSearchDelegate(filters: {"location": "${location.pk}"}) delegate: StockSearchDelegate(context, filters: {"location": "${location.pk}"})
); );
} }
), ),

View File

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:InvenTree/inventree/stock.dart'; import 'package:InvenTree/inventree/stock.dart';
import 'package:InvenTree/widget/part_notes.dart';
import 'package:InvenTree/widget/progress.dart'; import 'package:InvenTree/widget/progress.dart';
import 'package:InvenTree/widget/snacks.dart'; import 'package:InvenTree/widget/snacks.dart';
import 'package:InvenTree/widget/stock_detail.dart'; import 'package:InvenTree/widget/stock_detail.dart';
@ -9,8 +10,6 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:InvenTree/inventree/part.dart'; import 'package:InvenTree/inventree/part.dart';
import 'package:InvenTree/widget/full_screen_image.dart'; import 'package:InvenTree/widget/full_screen_image.dart';
@ -20,6 +19,7 @@ import 'package:InvenTree/widget/fields.dart';
import 'package:InvenTree/api.dart'; import 'package:InvenTree/api.dart';
import 'package:InvenTree/widget/refreshable_state.dart'; import 'package:InvenTree/widget/refreshable_state.dart';
class PartDetailWidget extends StatefulWidget { class PartDetailWidget extends StatefulWidget {
PartDetailWidget(this.part, {Key key}) : super(key: key); PartDetailWidget(this.part, {Key key}) : super(key: key);
@ -325,7 +325,13 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
title: Text("Notes"), title: Text("Notes"),
leading: FaIcon(FontAwesomeIcons.stickyNote), leading: FaIcon(FontAwesomeIcons.stickyNote),
trailing: Text(""), trailing: Text(""),
onTap: null, onTap: () {
print("Hello");
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PartNotesWidget(part))
);
},
) )
); );
} }

View File

@ -0,0 +1,39 @@
import 'package:InvenTree/inventree/part.dart';
import 'package:InvenTree/widget/refreshable_state.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class PartNotesWidget extends StatefulWidget {
final InvenTreePart part;
PartNotesWidget(this.part, {Key key}) : super(key: key);
@override
_PartNotesState createState() => _PartNotesState(part);
}
class _PartNotesState extends RefreshableState<PartNotesWidget> {
final InvenTreePart part;
_PartNotesState(this.part);
@override
String getAppBarTitle(BuildContext context) => I18N.of(context).partNotes;
@override
Widget getBody(BuildContext context) {
return Markdown(
selectable: false,
data: part.notes,
);
}
}

View File

@ -1,13 +1,11 @@
import 'package:InvenTree/widget/part_detail.dart'; import 'package:InvenTree/widget/part_detail.dart';
import 'package:InvenTree/widget/progress.dart'; import 'package:InvenTree/widget/progress.dart';
import 'package:InvenTree/widget/snacks.dart';
import 'package:InvenTree/widget/stock_detail.dart'; import 'package:InvenTree/widget/stock_detail.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; 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:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:InvenTree/widget/refreshable_state.dart';
import 'package:InvenTree/inventree/part.dart'; import 'package:InvenTree/inventree/part.dart';
import 'package:InvenTree/inventree/stock.dart'; import 'package:InvenTree/inventree/stock.dart';
@ -19,17 +17,22 @@ class PartSearchDelegate extends SearchDelegate<InvenTreePart> {
final key = GlobalKey<ScaffoldState>(); final key = GlobalKey<ScaffoldState>();
BuildContext context;
bool _searching = false; bool _searching = false;
// Custom filters for the part search // Custom filters for the part search
Map<String, String> filters = {}; Map<String, String> filters = {};
PartSearchDelegate({this.filters}) { PartSearchDelegate(this.context, {this.filters}) {
if (filters == null) { if (filters == null) {
filters = {}; filters = {};
} }
} }
@override
String get searchFieldLabel => I18N.of(context).searchParts;
// List of part results // List of part results
List<InvenTreePart> partResults = []; List<InvenTreePart> partResults = [];
@ -184,17 +187,22 @@ class StockSearchDelegate extends SearchDelegate<InvenTreeStockItem> {
final key = GlobalKey<ScaffoldState>(); final key = GlobalKey<ScaffoldState>();
final BuildContext context;
bool _searching = false; bool _searching = false;
// Custom filters for the stock item search // Custom filters for the stock item search
Map<String, String> filters; Map<String, String> filters;
StockSearchDelegate({this.filters}) { StockSearchDelegate(this.context, {this.filters}) {
if (filters == null) { if (filters == null) {
filters = {}; filters = {};
} }
} }
@override
String get searchFieldLabel => I18N.of(context).searchStock;
// List of StockItem results // List of StockItem results
List<InvenTreeStockItem> itemResults = []; List<InvenTreeStockItem> itemResults = [];

View File

@ -12,6 +12,7 @@ import 'package:InvenTree/widget/progress.dart';
import 'package:InvenTree/widget/refreshable_state.dart'; import 'package:InvenTree/widget/refreshable_state.dart';
import 'package:InvenTree/widget/snacks.dart'; import 'package:InvenTree/widget/snacks.dart';
import 'package:InvenTree/widget/stock_item_test_results.dart'; import 'package:InvenTree/widget/stock_item_test_results.dart';
import 'package:InvenTree/widget/stock_notes.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -19,13 +20,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:InvenTree/api.dart'; import 'package:InvenTree/api.dart';
import 'package:InvenTree/widget/drawer.dart';
import 'package:InvenTree/widget/refreshable_state.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:flutter_speed_dial/flutter_speed_dial.dart';
import 'package:http/http.dart';
class StockDetailWidget extends StatefulWidget { class StockDetailWidget extends StatefulWidget {
@ -429,7 +425,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
); );
} }
// Stocktake?
// Supplier part? // Supplier part?
// TODO: Display supplier part info page? // TODO: Display supplier part info page?
@ -499,6 +495,10 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
leading: FaIcon(FontAwesomeIcons.stickyNote), leading: FaIcon(FontAwesomeIcons.stickyNote),
trailing: Text(""), trailing: Text(""),
onTap: () { onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => StockNotesWidget(item))
);
// TODO: Load notes in markdown viewer widget // TODO: Load notes in markdown viewer widget
// TODO: Make this widget editable? // TODO: Make this widget editable?
} }

View File

@ -0,0 +1,39 @@
import 'package:InvenTree/inventree/stock.dart';
import 'package:InvenTree/widget/refreshable_state.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class StockNotesWidget extends StatefulWidget {
final InvenTreeStockItem item;
StockNotesWidget(this.item, {Key key}) : super(key: key);
@override
_StockNotesState createState() => _StockNotesState(item);
}
class _StockNotesState extends RefreshableState<StockNotesWidget> {
final InvenTreeStockItem item;
_StockNotesState(this.item);
@override
String getAppBarTitle(BuildContext context) => I18N.of(context).stockItemNotes;
@override
Widget getBody(BuildContext context) {
return Markdown(
selectable: false,
data: item.notes,
);
}
}