mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-10-31 13:25:40 +00:00 
			
		
		
		
	Company active filters (#484)
* Add support for "active" status for: - SupplierPart - Company * Add filtering options * Fix default value * Add inactive tiles * Update text and release notes
This commit is contained in:
		| @@ -1,3 +1,10 @@ | ||||
| ### 0.14.3 - April 2024 | ||||
| --- | ||||
|  | ||||
| - Support "active" field for Company model | ||||
| - Support "active" field for SupplierPart model | ||||
| - Updated translations | ||||
|  | ||||
| ### 0.14.2 - February 2024 | ||||
| --- | ||||
|  | ||||
|   | ||||
| @@ -342,6 +342,9 @@ class InvenTreeAPI { | ||||
|   // Does the server support "null" top-level filtering for PartCategory and StockLocation endpoints? | ||||
|   bool get supportsNullTopLevelFiltering => isConnected() && apiVersion < 174; | ||||
|  | ||||
|   // Does the server support "active" status on Company and SupplierPart API endpoints? | ||||
|   bool get supportsCompanyActiveStatus => isConnected() && apiVersion >= 189; | ||||
|  | ||||
|   // Cached list of plugins (refreshed when we connect to the server) | ||||
|   List<InvenTreePlugin> _plugins = []; | ||||
|  | ||||
|   | ||||
| @@ -23,7 +23,7 @@ class InvenTreeCompany extends InvenTreeModel { | ||||
|  | ||||
|   @override | ||||
|   Map<String, Map<String, dynamic>> formFields() { | ||||
|     return { | ||||
|     Map<String, Map<String, dynamic>> fields = { | ||||
|       "name": {}, | ||||
|       "description": {}, | ||||
|       "website": {}, | ||||
| @@ -32,6 +32,12 @@ class InvenTreeCompany extends InvenTreeModel { | ||||
|       "is_customer": {}, | ||||
|       "currency": {}, | ||||
|     }; | ||||
|  | ||||
|     if (InvenTreeAPI().supportsCompanyActiveStatus) { | ||||
|       fields["active"] = {}; | ||||
|     } | ||||
|  | ||||
|     return fields; | ||||
|   } | ||||
|  | ||||
|   String get image => (jsondata["image"] ?? jsondata["thumbnail"] ?? InvenTreeAPI.staticImage) as String; | ||||
| @@ -50,6 +56,8 @@ class InvenTreeCompany extends InvenTreeModel { | ||||
|  | ||||
|   bool get isCustomer => getBool("is_customer"); | ||||
|  | ||||
|   bool get active => getBool("active", backup: true); | ||||
|  | ||||
|   int get partSuppliedCount => getInt("part_supplied"); | ||||
|    | ||||
|   int get partManufacturedCount => getInt("parts_manufactured"); | ||||
| @@ -137,6 +145,10 @@ class InvenTreeSupplierPart extends InvenTreeModel { | ||||
|       fields["pack_quantity"] = {}; | ||||
|     } | ||||
|  | ||||
|     if (InvenTreeAPI().supportsCompanyActiveStatus) { | ||||
|       fields["active"] = {}; | ||||
|     } | ||||
|  | ||||
|     return fields; | ||||
|   } | ||||
|  | ||||
| @@ -176,6 +188,8 @@ class InvenTreeSupplierPart extends InvenTreeModel { | ||||
|  | ||||
|   String get SKU => getString("SKU"); | ||||
|  | ||||
|   bool get active => getBool("active", backup: true); | ||||
|    | ||||
|   int get partId => getInt("part"); | ||||
|    | ||||
|   String get partImage => (jsondata["part_detail"]?["thumbnail"] ?? InvenTreeAPI.staticThumb) as String; | ||||
|   | ||||
| @@ -509,6 +509,9 @@ | ||||
|   "inactive": "Inactive", | ||||
|   "@inactive": {}, | ||||
|  | ||||
|   "inactiveCompany": "This company is marked as inactive", | ||||
|   "@inactiveCompany": {}, | ||||
|  | ||||
|   "inactiveDetail": "This part is marked as inactive", | ||||
|   "@inactiveDetail": {}, | ||||
|  | ||||
|   | ||||
| @@ -233,6 +233,29 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | ||||
|       ), | ||||
|     )); | ||||
|  | ||||
|     if (!widget.company.active) { | ||||
|       tiles.add( | ||||
|           ListTile( | ||||
|             title: Text( | ||||
|                 L10().inactive, | ||||
|                 style: TextStyle( | ||||
|                     color: COLOR_DANGER | ||||
|                 ) | ||||
|             ), | ||||
|             subtitle: Text( | ||||
|                 L10().inactiveCompany, | ||||
|                 style: TextStyle( | ||||
|                     color: COLOR_DANGER | ||||
|                 ) | ||||
|             ), | ||||
|             leading: FaIcon( | ||||
|                 FontAwesomeIcons.circleExclamation, | ||||
|                 color: COLOR_DANGER | ||||
|             ), | ||||
|           ) | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|   if (widget.company.website.isNotEmpty) { | ||||
|     tiles.add(ListTile( | ||||
|       title: Text("${widget.company.website}"), | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| import "package:flutter/material.dart"; | ||||
|  | ||||
| import "package:inventree/api.dart"; | ||||
| import "package:inventree/l10.dart"; | ||||
|  | ||||
| import "package:inventree/inventree/company.dart"; | ||||
| import "package:inventree/inventree/model.dart"; | ||||
| @@ -58,6 +59,22 @@ class _CompanyListState extends PaginatedSearchState<PaginatedCompanyList> { | ||||
|  | ||||
|   _CompanyListState() : super(); | ||||
|  | ||||
|   @override | ||||
|   Map<String, Map<String, dynamic>> get filterOptions { | ||||
|  | ||||
|     Map<String, Map<String, dynamic>> filters = {}; | ||||
|  | ||||
|     if (InvenTreeAPI().supportsCompanyActiveStatus) { | ||||
|       filters["active"] = { | ||||
|         "label": L10().filterActive, | ||||
|         "help_text": L10().filterActiveDetail, | ||||
|         "tristate": true, | ||||
|       }; | ||||
|     } | ||||
|  | ||||
|     return filters; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<InvenTreePageResponse?> requestPage(int limit, int offset, Map<String, String> params) async { | ||||
|  | ||||
|   | ||||
| @@ -131,6 +131,29 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | ||||
|         ) | ||||
|     ); | ||||
|  | ||||
|     if (!widget.supplierPart.active) { | ||||
|       tiles.add( | ||||
|           ListTile( | ||||
|             title: Text( | ||||
|                 L10().inactive, | ||||
|                 style: TextStyle( | ||||
|                     color: COLOR_DANGER | ||||
|                 ) | ||||
|             ), | ||||
|             subtitle: Text( | ||||
|                 L10().inactiveDetail, | ||||
|                 style: TextStyle( | ||||
|                     color: COLOR_DANGER | ||||
|                 ) | ||||
|             ), | ||||
|             leading: FaIcon( | ||||
|                 FontAwesomeIcons.circleExclamation, | ||||
|                 color: COLOR_DANGER | ||||
|             ), | ||||
|           ) | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     // Supplier details | ||||
|     tiles.add( | ||||
|       ListTile( | ||||
|   | ||||
| @@ -62,7 +62,20 @@ class _PaginatedSupplierPartListState extends PaginatedSearchState<PaginatedSupp | ||||
|   Map<String, String> get orderingOptions => {}; | ||||
|  | ||||
|   @override | ||||
|   Map<String, Map<String, dynamic>> get filterOptions => {}; | ||||
|   Map<String, Map<String, dynamic>> get filterOptions { | ||||
|  | ||||
|     Map<String, Map<String, dynamic>> filters = {}; | ||||
|  | ||||
|     if (InvenTreeAPI().supportsCompanyActiveStatus) { | ||||
|       filters["active"] = { | ||||
|         "label": L10().filterActive, | ||||
|         "help_text": L10().filterActiveDetail, | ||||
|         "tristate": true, | ||||
|       }; | ||||
|     } | ||||
|  | ||||
|     return filters; | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   Future<InvenTreePageResponse?> requestPage(int limit, int offset, Map<String, String> params) async { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user