mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-28 05:26:47 +00:00
Display part notes and stock notes
This commit is contained in:
parent
b0aaccb9e3
commit
90664bfe14
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user