From 488df257584b16152872d01d12a2039b011e2334 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 3 Oct 2021 22:26:45 +1100 Subject: [PATCH] Display link to purchase orders on the "company" page --- lib/inventree/company.dart | 30 ++++++++++++++++++++++++++++++ lib/widget/company_detail.dart | 29 +++++++++++++++++++++++++++++ lib/widget/home.dart | 3 +-- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/lib/inventree/company.dart b/lib/inventree/company.dart index a749d233..8d89a5a4 100644 --- a/lib/inventree/company.dart +++ b/lib/inventree/company.dart @@ -1,5 +1,9 @@ +import "dart:async"; +import "dart:io"; + import "package:inventree/api.dart"; import "package:inventree/inventree/model.dart"; +import "package:inventree/inventree/purchase_order.dart"; /* @@ -44,6 +48,32 @@ class InvenTreeCompany extends InvenTreeModel { bool get isCustomer => (jsondata["is_customer"] ?? false) as bool; + // Request a list of purchase orders against this company + Future> getPurchaseOrders({bool? outstanding}) async { + + Map filters = { + "supplier": "${pk}" + }; + + if (outstanding != null) { + filters["outstanding"] = outstanding ? "true" : "false"; + } + + final List results = await InvenTreePurchaseOrder().list( + filters: filters + ); + + List orders = []; + + for (InvenTreeModel model in results) { + if (model is InvenTreePurchaseOrder) { + orders.add(model); + } + } + + return orders; + } + @override InvenTreeModel createFromJson(Map json) { var company = InvenTreeCompany.fromJson(json); diff --git a/lib/widget/company_detail.dart b/lib/widget/company_detail.dart index 21b9e380..608dc578 100644 --- a/lib/widget/company_detail.dart +++ b/lib/widget/company_detail.dart @@ -2,12 +2,15 @@ import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/inventree/company.dart"; +import "package:inventree/inventree/purchase_order.dart"; +import "package:inventree/widget/purchase_order_list.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:flutter/cupertino.dart"; import "package:flutter/material.dart"; import "package:font_awesome_flutter/font_awesome_flutter.dart"; import "package:inventree/l10.dart"; + class CompanyDetailWidget extends StatefulWidget { const CompanyDetailWidget(this.company, {Key? key}) : super(key: key); @@ -26,6 +29,8 @@ class _CompanyDetailState extends RefreshableState { final InvenTreeCompany company; + List outstandingOrders = []; + @override String getAppBarTitle(BuildContext context) => L10().company; @@ -60,6 +65,10 @@ class _CompanyDetailState extends RefreshableState { @override Future request() async { await company.reload(); + + if (company.isSupplier) { + outstandingOrders = await company.getPurchaseOrders(outstanding: true); + } } Future editCompany(BuildContext context) async { @@ -145,6 +154,26 @@ class _CompanyDetailState extends RefreshableState { // TODO - Add list of purchase orders tiles.add(Divider()); + + tiles.add( + ListTile( + title: Text(L10().purchaseOrders), + leading: FaIcon(FontAwesomeIcons.shoppingCart, color: COLOR_CLICK), + trailing: Text("${outstandingOrders.length}"), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PurchaseOrderListWidget( + filters: { + "supplier": "${company.pk}" + } + ) + ) + ); + } + ) + ); } if (company.isManufacturer) { diff --git a/lib/widget/home.dart b/lib/widget/home.dart index eba54768..486ebc8c 100644 --- a/lib/widget/home.dart +++ b/lib/widget/home.dart @@ -82,8 +82,7 @@ class _InvenTreeHomePageState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => PurchaseOrderListWidget( - ) + builder: (context) => PurchaseOrderListWidget() ) ); }