import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; import "package:font_awesome_flutter/font_awesome_flutter.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/model.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/l10.dart"; import "package:inventree/api.dart"; import "package:inventree/inventree/purchase_order.dart"; /* * Widget class for displaying a list of Purchase Orders */ class PurchaseOrderListWidget extends StatefulWidget { const PurchaseOrderListWidget({this.filters = const {}, Key? key}) : super(key: key); final Map filters; @override _PurchaseOrderListWidgetState createState() => _PurchaseOrderListWidgetState(filters); } class _PurchaseOrderListWidgetState extends RefreshableState { _PurchaseOrderListWidgetState(this.filters); final Map filters; bool showFilterOptions = false; @override String getAppBarTitle() => L10().purchaseOrders; @override List appBarActions(BuildContext context) => [ IconButton( icon: FaIcon(FontAwesomeIcons.filter), onPressed: () async { setState(() { showFilterOptions = !showFilterOptions; }); }, ) ]; @override List actionButtons(BuildContext context) { List actions = []; if (api.checkPermission("purchase_order", "add")) { actions.add( SpeedDialChild( child: FaIcon(FontAwesomeIcons.circlePlus), label: L10().purchaseOrderCreate, onTap: () { createPurchaseOrder(context); } ) ); } return actions; } Future createPurchaseOrder(BuildContext context) async { var fields = InvenTreePurchaseOrder().formFields(); fields.remove("contact"); InvenTreePurchaseOrder().createForm( context, L10().purchaseOrderCreate, fields: fields, onSuccess: (result) async { Map data = result as Map; if (data.containsKey("pk")) { var order = InvenTreePurchaseOrder.fromJson(data); Navigator.push( context, MaterialPageRoute( builder: (context) => PurchaseOrderDetailWidget(order) ) ); } } ); } @override Widget getBody(BuildContext context) { return PaginatedPurchaseOrderList(filters, showFilterOptions); } } class PaginatedPurchaseOrderList extends PaginatedSearchWidget { const PaginatedPurchaseOrderList(Map filters, bool showSearch) : super(filters: filters, showSearch: showSearch); @override _PaginatedPurchaseOrderListState createState() => _PaginatedPurchaseOrderListState(); } class _PaginatedPurchaseOrderListState extends PaginatedSearchState { _PaginatedPurchaseOrderListState() : super(); @override String get prefix => "po_"; @override Map get orderingOptions => { "reference": L10().reference, "supplier__name": L10().supplier, "status": L10().status, "target_date": L10().targetDate, }; @override Future requestPage(int limit, int offset, Map params) async { params["outstanding"] = "true"; final page = await InvenTreePurchaseOrder().listPaginated(limit, offset, filters: params); return page; } @override Widget buildItem(BuildContext context, InvenTreeModel model) { InvenTreePurchaseOrder order = model as InvenTreePurchaseOrder; InvenTreeCompany? supplier = order.supplier; return ListTile( title: Text(order.reference), subtitle: Text(order.description), leading: supplier == null ? null : InvenTreeAPI().getImage( supplier.thumbnail, width: 40, height: 40, ), trailing: Text("${order.lineItemCount}"), onTap: () async { Navigator.push( context, MaterialPageRoute( builder: (context) => PurchaseOrderDetailWidget(order) ) ); }, ); } }