mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-10-30 21:05:42 +00:00 
			
		
		
		
	Display part notes and stock notes
This commit is contained in:
		| @@ -101,6 +101,9 @@ class InvenTreeStockItem extends InvenTreeModel { | ||||
|   @override | ||||
|   String URL = "stock/"; | ||||
|  | ||||
|   @override | ||||
|   String WEB_URL = "stock/item/"; | ||||
|  | ||||
|   @override | ||||
|   Map<String, String> defaultGetFilters() { | ||||
|  | ||||
|   | ||||
| @@ -46,7 +46,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> { | ||||
|           onPressed: () { | ||||
|             showSearch( | ||||
|                 context: context, | ||||
|                 delegate: PartSearchDelegate(filters: {"category": "${category.pk}"}) | ||||
|                 delegate: PartSearchDelegate(context, filters: {"category": "${category.pk}"}) | ||||
|             ); | ||||
|           } | ||||
|       ), | ||||
|   | ||||
| @@ -39,7 +39,7 @@ class InvenTreeDrawer extends StatelessWidget { | ||||
|  | ||||
|     showSearch( | ||||
|       context: context, | ||||
|       delegate: PartSearchDelegate() | ||||
|       delegate: PartSearchDelegate(context) | ||||
|     ); | ||||
|  | ||||
|     //Navigator.push(context, MaterialPageRoute(builder: (context) => SearchWidget())); | ||||
| @@ -115,9 +115,12 @@ class InvenTreeDrawer extends StatelessWidget { | ||||
|                   leading: Image.asset( | ||||
|                     "assets/image/icon.png", | ||||
|                     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, | ||||
|                 ), | ||||
|                 ListTile( | ||||
|   | ||||
| @@ -46,7 +46,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> { | ||||
|  | ||||
|     showSearch( | ||||
|         context: context, | ||||
|         delegate: PartSearchDelegate() | ||||
|         delegate: PartSearchDelegate(context) | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| @@ -55,7 +55,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> { | ||||
|  | ||||
|     showSearch( | ||||
|         context: context, | ||||
|         delegate: StockSearchDelegate() | ||||
|         delegate: StockSearchDelegate(context) | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -45,7 +45,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | ||||
|         onPressed: () { | ||||
|           showSearch( | ||||
|             context: context, | ||||
|             delegate: StockSearchDelegate(filters: {"location": "${location.pk}"}) | ||||
|             delegate: StockSearchDelegate(context, filters: {"location": "${location.pk}"}) | ||||
|           ); | ||||
|         } | ||||
|       ), | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| import 'dart:io'; | ||||
|  | ||||
| import 'package:InvenTree/inventree/stock.dart'; | ||||
| import 'package:InvenTree/widget/part_notes.dart'; | ||||
| import 'package:InvenTree/widget/progress.dart'; | ||||
| import 'package:InvenTree/widget/snacks.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_gen/gen_l10n/app_localizations.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/widget/full_screen_image.dart'; | ||||
| @@ -20,6 +19,7 @@ import 'package:InvenTree/widget/fields.dart'; | ||||
| import 'package:InvenTree/api.dart'; | ||||
| import 'package:InvenTree/widget/refreshable_state.dart'; | ||||
|  | ||||
|  | ||||
| class PartDetailWidget extends StatefulWidget { | ||||
|  | ||||
|   PartDetailWidget(this.part, {Key key}) : super(key: key); | ||||
| @@ -325,7 +325,13 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | ||||
|             title: Text("Notes"), | ||||
|             leading: FaIcon(FontAwesomeIcons.stickyNote), | ||||
|             trailing: Text(""), | ||||
|             onTap: null, | ||||
|             onTap: () { | ||||
|               print("Hello"); | ||||
|               Navigator.push( | ||||
|                 context, | ||||
|                 MaterialPageRoute(builder: (context) => PartNotesWidget(part)) | ||||
|               ); | ||||
|             }, | ||||
|           ) | ||||
|       ); | ||||
|     } | ||||
|   | ||||
							
								
								
									
										39
									
								
								lib/widget/part_notes.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								lib/widget/part_notes.dart
									
									
									
									
									
										Normal 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, | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -1,13 +1,11 @@ | ||||
|  | ||||
| import 'package:InvenTree/widget/part_detail.dart'; | ||||
| import 'package:InvenTree/widget/progress.dart'; | ||||
| import 'package:InvenTree/widget/snacks.dart'; | ||||
| import 'package:InvenTree/widget/stock_detail.dart'; | ||||
| import 'package:flutter/cupertino.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:font_awesome_flutter/font_awesome_flutter.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/stock.dart'; | ||||
|  | ||||
| @@ -19,17 +17,22 @@ class PartSearchDelegate extends SearchDelegate<InvenTreePart> { | ||||
|  | ||||
|   final key = GlobalKey<ScaffoldState>(); | ||||
|  | ||||
|   BuildContext context; | ||||
|  | ||||
|   bool _searching = false; | ||||
|  | ||||
|   // Custom filters for the part search | ||||
|   Map<String, String> filters = {}; | ||||
|  | ||||
|   PartSearchDelegate({this.filters}) { | ||||
|   PartSearchDelegate(this.context, {this.filters}) { | ||||
|     if (filters == null) { | ||||
|       filters = {}; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   String get searchFieldLabel => I18N.of(context).searchParts; | ||||
|  | ||||
|   // List of part results | ||||
|   List<InvenTreePart> partResults = []; | ||||
|  | ||||
| @@ -184,17 +187,22 @@ class StockSearchDelegate extends SearchDelegate<InvenTreeStockItem> { | ||||
|  | ||||
|   final key = GlobalKey<ScaffoldState>(); | ||||
|  | ||||
|   final BuildContext context; | ||||
|  | ||||
|   bool _searching = false; | ||||
|  | ||||
|   // Custom filters for the stock item search | ||||
|   Map<String, String> filters; | ||||
|  | ||||
|   StockSearchDelegate({this.filters}) { | ||||
|   StockSearchDelegate(this.context, {this.filters}) { | ||||
|     if (filters == null) { | ||||
|       filters = {}; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   String get searchFieldLabel => I18N.of(context).searchStock; | ||||
|  | ||||
|   // List of StockItem results | ||||
|   List<InvenTreeStockItem> itemResults = []; | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,7 @@ import 'package:InvenTree/widget/progress.dart'; | ||||
| import 'package:InvenTree/widget/refreshable_state.dart'; | ||||
| import 'package:InvenTree/widget/snacks.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/material.dart'; | ||||
|  | ||||
| @@ -19,13 +20,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.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/services.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 { | ||||
|  | ||||
| @@ -429,7 +425,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     // Stocktake? | ||||
|  | ||||
|     // Supplier part? | ||||
|     // TODO: Display supplier part info page? | ||||
| @@ -499,6 +495,10 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | ||||
|           leading: FaIcon(FontAwesomeIcons.stickyNote), | ||||
|           trailing: Text(""), | ||||
|           onTap: () { | ||||
|             Navigator.push( | ||||
|               context, | ||||
|               MaterialPageRoute(builder: (context) => StockNotesWidget(item)) | ||||
|             ); | ||||
|             // TODO: Load notes in markdown viewer widget | ||||
|             // TODO: Make this widget editable? | ||||
|           } | ||||
|   | ||||
							
								
								
									
										39
									
								
								lib/widget/stock_notes.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								lib/widget/stock_notes.dart
									
									
									
									
									
										Normal 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, | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user