]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix: consistent monetary field display in list and cards (#6645)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Thu, 9 May 2024 04:32:14 +0000 (21:32 -0700)
committerGitHub <noreply@github.com>
Thu, 9 May 2024 04:32:14 +0000 (04:32 +0000)
src-ui/src/app/components/common/custom-field-display/custom-field-display.component.spec.ts
src-ui/src/app/components/common/custom-field-display/custom-field-display.component.ts

index d2b8d9f406a5b7379f4ce19d1fd0c0b99bebeaa7..4d263aa86d363b99f9f9fa0fd203a04bb059deaf 100644 (file)
@@ -17,7 +17,7 @@ const document: Document = {
   title: 'Doc 1',
   custom_fields: [
     { field: 1, document: 1, created: null, value: 'Text value' },
-    { field: 2, document: 1, created: null, value: '100 USD' },
+    { field: 2, document: 1, created: null, value: 'USD100' },
     { field: 3, document: 1, created: null, value: '1,2,3' },
   ],
 }
@@ -86,4 +86,16 @@ describe('CustomFieldDisplayComponent', () => {
     expect(title2).toEqual('Document 2')
     expect(title3).toEqual('Document 3')
   })
+
+  it('should fallback to default currency', () => {
+    component['defaultCurrencyCode'] = 'EUR' // mock default locale injection
+    component.fieldId = 2
+    component.document = {
+      id: 1,
+      title: 'Doc 1',
+      custom_fields: [{ field: 2, document: 1, created: null, value: '100' }],
+    }
+    expect(component.currency).toEqual('EUR')
+    expect(component.value).toEqual(100)
+  })
 })
index 0477b32c37bf7db9305d781a5ef92b2f6f2c2cd1..eb1fdb830d46d82cca9a8b852b984e38d4c5b343 100644 (file)
@@ -1,4 +1,12 @@
-import { Component, Input, OnDestroy, OnInit } from '@angular/core'
+import { getLocaleCurrencyCode } from '@angular/common'
+import {
+  Component,
+  Inject,
+  Input,
+  LOCALE_ID,
+  OnDestroy,
+  OnInit,
+} from '@angular/core'
 import { Subject, takeUntil } from 'rxjs'
 import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
 import { DisplayField, Document } from 'src/app/data/document'
@@ -54,11 +62,14 @@ export class CustomFieldDisplayComponent implements OnInit, OnDestroy {
   private docLinkDocuments: Document[] = []
 
   private unsubscribeNotifier: Subject<any> = new Subject()
+  private defaultCurrencyCode: any
 
   constructor(
     private customFieldService: CustomFieldsService,
-    private documentService: DocumentService
+    private documentService: DocumentService,
+    @Inject(LOCALE_ID) currentLocale: string
   ) {
+    this.defaultCurrencyCode = getLocaleCurrencyCode(currentLocale)
     this.customFieldService.listAll().subscribe((r) => {
       this.customFields = r.results
       this.init()
@@ -78,7 +89,8 @@ export class CustomFieldDisplayComponent implements OnInit, OnDestroy {
       (f) => f.field === this._fieldId
     )?.value
     if (this.value && this.field.data_type === CustomFieldDataType.Monetary) {
-      this.currency = this.value.match(/([A-Z]{3})/)?.[0]
+      this.currency =
+        this.value.match(/([A-Z]{3})/)?.[0] ?? this.defaultCurrencyCode
       this.value = parseFloat(this.value.replace(this.currency, ''))
     } else if (
       this.value?.length &&