From c3bae8f2de7a9cdfc645079cf84ddf05788b572c Mon Sep 17 00:00:00 2001 From: Lauren-D Date: Thu, 12 Oct 2023 23:45:36 +0200 Subject: [PATCH] acquisition: improve sorting for vendors and orders * Uses normalizer for sorting. * Adds sort config. Co-Authored-by: Lauren-D --- rero_ils/config.py | 33 ++++++++++++++++--- .../acq_order_line-v0.0.1.json | 4 --- .../v7/acq_orders/acq_order-v0.0.1.json | 5 +++ .../acquisition/acq_receipt_lines/dumpers.py | 5 ++- .../acq_receipt_lines/serializers.py | 10 +++--- .../jsonschemas/vendors/vendor-v0.0.1.json | 2 +- .../mappings/v7/vendors/vendor-v0.0.1.json | 13 +++++--- 7 files changed, 52 insertions(+), 20 deletions(-) diff --git a/rero_ils/config.py b/rero_ils/config.py index a9be9ac806..056e32b208 100644 --- a/rero_ils/config.py +++ b/rero_ils/config.py @@ -1516,6 +1516,7 @@ def _(x): }, record_serializers_aliases={ 'json': 'application/json', + 'rero': 'application/rero+json' }, search_serializers={ 'application/json': 'rero_ils.modules.serializers:json_v1_search', @@ -2016,7 +2017,6 @@ def _(x): _('library'): and_term_filter('library.pid'), _('vendor'): and_term_filter('vendor.pid'), _('type'): and_term_filter('type'), - _('status'): and_term_filter('status'), _('account'): and_term_filter('order_lines.account.pid'), _('budget'): and_term_filter('budget.pid'), _('order_date'): range_filter( @@ -2032,6 +2032,9 @@ def _(x): end_date_math='/d' ) }, + post_filters={ + _('status'): terms_filter('status'), + } ), entities=dict( aggs=dict( @@ -2365,6 +2368,22 @@ def _(x): fields=['-receipts.receipt_date'], title='Receipt date', default_order='desc' ) +RECORDS_REST_SORT_OPTIONS['acq_orders']['order_date_new'] = dict( + fields=['-order_date'], title='Order date (newest)', + default_order='desc' +) +RECORDS_REST_SORT_OPTIONS['acq_orders']['order_date_old'] = dict( + fields=['order_date'], title='Order date (oldest)', + default_order='asc' +) +RECORDS_REST_SORT_OPTIONS['acq_orders']['reference_asc'] = dict( + fields=['reference.sort'], title='Reference (asc)', + default_order='asc' +) +RECORDS_REST_SORT_OPTIONS['acq_orders']['reference_desc'] = dict( + fields=['-reference.sort'], title='Reference (desc)', + default_order='desc' +) RECORDS_REST_DEFAULT_SORT['acq_orders'] = dict( query='bestmatch', noquery='receipt_date') @@ -2590,12 +2609,16 @@ def _(x): query='bestmatch', noquery='name') # ------ VENDORS SORT -RECORDS_REST_SORT_OPTIONS['vendors']['name'] = dict( - fields=['vendor_name'], title='Vendor name', +RECORDS_REST_SORT_OPTIONS['vendors']['name_asc'] = dict( + fields=['name.sort'], title='Vendor name (asc)', default_order='asc' ) +RECORDS_REST_SORT_OPTIONS['vendors']['name_desc'] = dict( + fields=['-name.sort'], title='Vendor name (desc)', + default_order='desc' +) RECORDS_REST_DEFAULT_SORT['vendors'] = dict( - query='bestmatch', noquery='name') + query='bestmatch', noquery='name_asc') # ------ PATRON TRANSACTION SORT RECORDS_REST_SORT_OPTIONS['patron_transaction_events']['created'] = dict( @@ -3038,7 +3061,7 @@ def _(x): 'base_url': os.environ.get('RERO_ILS_MEF_CONCEPTS_URL', 'https://mef.rero.ch/api/concepts'), 'sources': ['idref'], 'filters': [ - {'idref.bnf_type': 'genre/forme Rameau'} + {'idref.bnf_type': 'genre/forme Rameau'} ] }, 'places': { diff --git a/rero_ils/modules/acquisition/acq_order_lines/jsonschemas/acq_order_lines/acq_order_line-v0.0.1.json b/rero_ils/modules/acquisition/acq_order_lines/jsonschemas/acq_order_lines/acq_order_line-v0.0.1.json index 9322bc36f2..a66ea4ac34 100644 --- a/rero_ils/modules/acquisition/acq_order_lines/jsonschemas/acq_order_lines/acq_order_line-v0.0.1.json +++ b/rero_ils/modules/acquisition/acq_order_lines/jsonschemas/acq_order_lines/acq_order_line-v0.0.1.json @@ -139,10 +139,6 @@ } }, "form": { - "hide": true, - "navigation": { - "essential": true - }, "templateOptions": { "wrappers": [ "card" diff --git a/rero_ils/modules/acquisition/acq_orders/mappings/v7/acq_orders/acq_order-v0.0.1.json b/rero_ils/modules/acquisition/acq_orders/mappings/v7/acq_orders/acq_order-v0.0.1.json index 4f3418ac82..881556a802 100644 --- a/rero_ils/modules/acquisition/acq_orders/mappings/v7/acq_orders/acq_order-v0.0.1.json +++ b/rero_ils/modules/acquisition/acq_orders/mappings/v7/acq_orders/acq_order-v0.0.1.json @@ -65,6 +65,11 @@ "raw": { "type": "keyword", "ignore_above": 256 + }, + "sort": { + "type": "keyword", + "normalizer": "sort_normalizer", + "ignore_above": 256 } } }, diff --git a/rero_ils/modules/acquisition/acq_receipt_lines/dumpers.py b/rero_ils/modules/acquisition/acq_receipt_lines/dumpers.py index b2c9160305..63000b788c 100644 --- a/rero_ils/modules/acquisition/acq_receipt_lines/dumpers.py +++ b/rero_ils/modules/acquisition/acq_receipt_lines/dumpers.py @@ -44,9 +44,12 @@ def dump(self, record, data): if notes := record.get('notes', []): data['notes'] = [note['content'] for note in notes] + order_line = record.order_line + # Add acq_account information's: pid + data['acq_account'] = {'pid': order_line.account_pid} # Add document information's: pid, formatted title and ISBN identifiers # (remove None values from document metadata) - document = record.order_line.document + document = order_line.document identifiers = document.get_identifiers( filters=[IdentifierType.ISBN], with_alternatives=True diff --git a/rero_ils/modules/acquisition/acq_receipt_lines/serializers.py b/rero_ils/modules/acquisition/acq_receipt_lines/serializers.py index 3e6ec6f90c..31e1637b52 100644 --- a/rero_ils/modules/acquisition/acq_receipt_lines/serializers.py +++ b/rero_ils/modules/acquisition/acq_receipt_lines/serializers.py @@ -34,11 +34,11 @@ def _postprocess_search_hit(self, hit: dict) -> None: :param hit: the dictionary representing an ElasticSearch search hit. """ - metadata = hit.get('metadata', {}) - if doc_pid := metadata.get('document', {}).get('pid'): - document = Document.get_record_by_pid(doc_pid) - metadata['document'] = document.dumps( - dumper=document_acquisition_dumper) + # metadata = hit.get('metadata', {}) + # if doc_pid := metadata.get('document', {}).get('pid'): + # document = Document.get_record_by_pid(doc_pid) + # metadata['document'] = document.dumps( + # dumper=document_acquisition_dumper) super()._postprocess_search_hit(hit) diff --git a/rero_ils/modules/vendors/jsonschemas/vendors/vendor-v0.0.1.json b/rero_ils/modules/vendors/jsonschemas/vendors/vendor-v0.0.1.json index 46418014a2..94cdc0453e 100644 --- a/rero_ils/modules/vendors/jsonschemas/vendors/vendor-v0.0.1.json +++ b/rero_ils/modules/vendors/jsonschemas/vendors/vendor-v0.0.1.json @@ -43,7 +43,7 @@ "validation": { "validators": { "valueAlreadyExists": { - "term": "vendor_name" + "term": "name.raw" } }, "messages": { diff --git a/rero_ils/modules/vendors/mappings/v7/vendors/vendor-v0.0.1.json b/rero_ils/modules/vendors/mappings/v7/vendors/vendor-v0.0.1.json index de330ffdd6..19e52b5d88 100644 --- a/rero_ils/modules/vendors/mappings/v7/vendors/vendor-v0.0.1.json +++ b/rero_ils/modules/vendors/mappings/v7/vendors/vendor-v0.0.1.json @@ -11,10 +11,15 @@ }, "name": { "type": "text", - "copy_to": "vendor_name" - }, - "vendor_name": { - "type": "keyword" + "fields": { + "raw": { + "type": "keyword" + }, + "sort": { + "type": "keyword", + "normalizer": "sort_normalizer" + } + } }, "notes": { "properties": {