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

Display purchase order info

This commit is contained in:
Oliver 2021-09-28 00:45:48 +10:00
parent 1cc5d1ffe6
commit 61a9557df5
4 changed files with 162 additions and 7 deletions

View File

@ -30,6 +30,13 @@ class InvenTreePurchaseOrder extends InvenTreeModel {
InvenTreePurchaseOrder() : super(); InvenTreePurchaseOrder() : super();
@override
Map<String, String> defaultGetFilters() {
return {
"supplier_detail": "true",
};
}
@override @override
Map<String, String> defaultListFilters() { Map<String, String> defaultListFilters() {
return { return {
@ -55,11 +62,15 @@ class InvenTreePurchaseOrder extends InvenTreeModel {
int get supplierId => jsondata['supplier'] ?? -1; int get supplierId => jsondata['supplier'] ?? -1;
InvenTreeCompany get supplier { InvenTreeCompany? get supplier {
dynamic supplier_detail = jsondata["supplier_detail"] ?? {}; dynamic supplier_detail = jsondata["supplier_detail"] ?? null;
return InvenTreeCompany.fromJson(supplier_detail); if (supplier_detail == null) {
return null;
} else {
return InvenTreeCompany.fromJson(supplier_detail);
}
} }
String get supplierReference => jsondata['supplier_reference'] ?? ""; String get supplierReference => jsondata['supplier_reference'] ?? "";

View File

@ -1,6 +1,5 @@
import 'package:inventree/api.dart'; import 'package:inventree/api.dart';
import 'package:inventree/api_form.dart';
import 'package:inventree/app_colors.dart'; import 'package:inventree/app_colors.dart';
import 'package:inventree/inventree/company.dart'; import 'package:inventree/inventree/company.dart';
import 'package:inventree/widget/refreshable_state.dart'; import 'package:inventree/widget/refreshable_state.dart';

View File

@ -0,0 +1,138 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:inventree/api.dart';
import 'package:inventree/inventree/company.dart';
import 'package:inventree/inventree/purchase_order.dart';
import 'package:inventree/widget/refreshable_state.dart';
import '../l10.dart';
import 'location_display.dart';
class PurchaseOrderDetailWidget extends StatefulWidget {
PurchaseOrderDetailWidget(this.order, {Key? key}): super(key: key);
final InvenTreePurchaseOrder order;
@override
_PurchaseOrderDetailState createState() => _PurchaseOrderDetailState(order);
}
class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidget> {
_PurchaseOrderDetailState(this.order);
final InvenTreePurchaseOrder order;
@override
String getAppBarTitle(BuildContext context) => L10().purchaseOrder;
@override
List<Widget> getAppBarActions(BuildContext context) {
List<Widget> actions = [];
if (InvenTreeAPI().checkPermission("purchase_order", "change")) {
actions.add(
IconButton(
icon: FaIcon(FontAwesomeIcons.edit),
tooltip: L10().edit,
onPressed: () {
editOrder(context);
}
)
);
}
return actions;
}
@override
Future<void> request() async {
await order.reload();
}
void editOrder(BuildContext context) async {
order.editForm(
context,
L10().purchaseOrderEdit,
onSuccess: (data) async {
refresh();
}
);
}
List<Widget> orderTiles(BuildContext context) {
List<Widget> tiles = [];
InvenTreeCompany? supplier = order.supplier;
print(order.jsondata);
tiles.add(Card(
child: ListTile(
title: Text(order.reference),
subtitle: Text(order.description),
leading: supplier == null ? null : InvenTreeAPI().getImage(supplier.thumbnail, width: 40, height: 40),
trailing: Text("${order.lineItems}"),
)
));
return tiles;
}
@override
Widget getBody(BuildContext context) {
return Center(
child: getSelectedWidget(context, tabIndex),
);
}
Widget getSelectedWidget(BuildContext context, int index) {
switch (index) {
case 0:
return ListView(
children: orderTiles(context)
);
case 2:
// Stock items received against this order
Map<String, String> filters = {
"purchase_order": "${order.pk}"
};
return PaginatedStockList(filters);
default:
return ListView();
}
}
@override
Widget getBottomNavBar(BuildContext context) {
return BottomNavigationBar(
currentIndex: tabIndex,
onTap: onTabSelectionChanged,
items: [
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.info),
label: L10().details
),
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.thList),
label: L10().lineItems,
),
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.boxes),
label: L10().stockItems
)
],
);
}
}

View File

@ -1,8 +1,10 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:inventree/inventree/company.dart';
import 'package:inventree/inventree/sentry.dart'; import 'package:inventree/inventree/sentry.dart';
import 'package:inventree/widget/paginator.dart'; import 'package:inventree/widget/paginator.dart';
import 'package:inventree/widget/purchase_order_detail.dart';
import 'package:inventree/widget/refreshable_state.dart'; import 'package:inventree/widget/refreshable_state.dart';
import '../l10.dart'; import '../l10.dart';
@ -154,19 +156,24 @@ class _PaginatedPurchaseOrderListState extends State<_PaginatedPurchaseOrderList
Widget _buildOrder(BuildContext context, InvenTreePurchaseOrder order) { Widget _buildOrder(BuildContext context, InvenTreePurchaseOrder order) {
var supplier = order.supplier; InvenTreeCompany? supplier = order.supplier;
return ListTile( return ListTile(
title: Text(order.reference), title: Text(order.reference),
subtitle: Text(order.description), subtitle: Text(order.description),
leading: InvenTreeAPI().getImage( leading: supplier == null ? null : InvenTreeAPI().getImage(
supplier.thumbnail, supplier.thumbnail,
width: 40, width: 40,
height: 40, height: 40,
), ),
trailing: Text("${order.lineItems}"), trailing: Text("${order.lineItems}"),
onTap: () async { onTap: () async {
// TODO - Display purchase order information Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PurchaseOrderDetailWidget(order)
)
);
}, },
); );
} }