From: Coleman Watts <coleman@civicrm.org> Date: Wed, 1 Feb 2023 02:48:16 +0000 (-0500) Subject: Fix dev/core#4104 - APIv4 autocomplete for contributions X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=5773bd73f220661408517d5863202d927b6ee488;p=civicrm-core.git Fix dev/core#4104 - APIv4 autocomplete for contributions --- diff --git a/Civi/Api4/Service/Autocomplete/ContributionAutocompleteProvider.php b/Civi/Api4/Service/Autocomplete/ContributionAutocompleteProvider.php new file mode 100644 index 0000000000..0e05a824d4 --- /dev/null +++ b/Civi/Api4/Service/Autocomplete/ContributionAutocompleteProvider.php @@ -0,0 +1,84 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Service\Autocomplete; + +use Civi\Core\Event\GenericHookEvent; +use Civi\Core\HookInterface; + +/** + * @service + * @internal + */ +class ContributionAutocompleteProvider extends \Civi\Core\Service\AutoService implements HookInterface { + + /** + * Provide default SavedSearch for Contribution autocompletes + * + * @param \Civi\Core\Event\GenericHookEvent $e + */ + public static function on_civi_search_autocompleteDefault(GenericHookEvent $e) { + if (!is_array($e->savedSearch) || $e->savedSearch['api_entity'] !== 'Contribution') { + return; + } + $e->savedSearch['api_params'] = [ + 'version' => 4, + 'select' => [ + 'id', + 'contact_id.display_name', + 'total_amount', + 'receive_date', + 'financial_type_id:label', + ], + 'orderBy' => [], + 'where' => [], + 'groupBy' => [], + 'join' => [], + 'having' => [], + ]; + } + + /** + * Provide default SearchDisplay for Contribution autocompletes + * + * @param \Civi\Core\Event\GenericHookEvent $e + */ + public static function on_civi_search_defaultDisplay(GenericHookEvent $e) { + if ($e->display['settings'] || $e->display['type'] !== 'autocomplete' || $e->savedSearch['api_entity'] !== 'Contribution') { + return; + } + $e->display['settings'] = [ + 'sort' => [ + ['contact_id.sort_name', 'ASC'], + ['total_amount', 'ASC'], + ['receive_date', 'DESC'], + ], + 'columns' => [ + [ + 'type' => 'field', + 'key' => 'contact_id.display_name', + 'rewrite' => '[contact_id.display_name] - [total_amount]', + ], + [ + 'type' => 'field', + 'key' => 'financial_type_id:label', + 'rewrite' => '#[id] [financial_type_id:label]', + ], + [ + 'type' => 'field', + 'key' => 'receive_date', + ], + ], + ]; + } + +}