LP#1904244: format: switch from CurrencyPipe to DecimalPipe
authorGalen Charlton <gmc@equinoxOLI.org>
Tue, 1 Jun 2021 22:23:36 +0000 (18:23 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 12 Aug 2021 19:29:26 +0000 (15:29 -0400)
CurrencyPipe has no easy way of displaying the monetary amount
without a currency symbol, which means that currency amounts
display with a dollar sign -- which isn't a univeral assumption
for Evergreen.

Future work is indicated to (a) teach Evergreen a global flag
or a library setting for the system's base currency and (b) let
the format service be passed a currency code. Once both are in place,
CurrencyPipe can be restored.

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/core/core.module.ts
Open-ILS/src/eg2/src/app/core/format.service.ts
Open-ILS/src/eg2/src/app/core/format.spec.ts

index 82052f5..40cfe29 100644 (file)
@@ -5,7 +5,7 @@
  * and do not require entry in our 'providers' array.
  */
 import {NgModule} from '@angular/core';
-import {CommonModule, DatePipe, CurrencyPipe} from '@angular/common';
+import {CommonModule, DatePipe, DecimalPipe} from '@angular/common';
 import {FormatService, FormatValuePipe} from './format.service';
 
 @NgModule({
@@ -21,7 +21,7 @@ import {FormatService, FormatValuePipe} from './format.service';
   ],
   providers: [
     DatePipe,
-    CurrencyPipe
+    DecimalPipe
   ]
 })
 
index 3cd755d..9622bd0 100644 (file)
@@ -1,5 +1,5 @@
 import {Injectable, Pipe, PipeTransform} from '@angular/core';
-import {DatePipe, CurrencyPipe, getLocaleDateFormat, getLocaleTimeFormat, getLocaleDateTimeFormat, FormatWidth} from '@angular/common';
+import {DatePipe, DecimalPipe, getLocaleDateFormat, getLocaleTimeFormat, getLocaleDateTimeFormat, FormatWidth} from '@angular/common';
 import {IdlService, IdlObject} from '@eg/core/idl.service';
 import {OrgService} from '@eg/core/org.service';
 import {LocaleService} from '@eg/core/locale.service';
@@ -30,7 +30,7 @@ export class FormatService {
 
     constructor(
         private datePipe: DatePipe,
-        private currencyPipe: CurrencyPipe,
+        private decimalPipe: DecimalPipe,
         private idl: IdlService,
         private org: OrgService,
         private locale: LocaleService
@@ -133,7 +133,12 @@ export class FormatService {
                 return this.datePipe.transform(date.toISOString(true), fmt, date.format('ZZ'));
 
             case 'money':
-                return this.currencyPipe.transform(value);
+                // TODO: this used to use CurrencyPipe, but that injected
+                // an assumption that the default currency is always going to be
+                // USD. Since CurrencyPipe doesn't have an apparent way to specify
+                // that that currency symbol shouldn't be displayed at all, it
+                // was switched to DecimalPipe
+                return this.decimalPipe.transform(value, '1.2-2');
 
             case 'bool':
                 // Slightly better than a bare 't' or 'f'.
index d0d3bfd..6ff5346 100644 (file)
@@ -1,4 +1,4 @@
-import {DatePipe, CurrencyPipe, registerLocaleData} from '@angular/common';
+import {DatePipe, DecimalPipe, registerLocaleData} from '@angular/common';
 import {IdlService} from './idl.service';
 import {EventService} from './event.service';
 import {DbStoreService} from './db-store.service';
@@ -18,7 +18,7 @@ import localeFrCA from '@angular/common/locales/fr-CA';
 
 describe('FormatService', () => {
 
-    let currencyPipe: CurrencyPipe;
+    let decimalPipe: DecimalPipe;
     let datePipe: DatePipe;
     let idlService: IdlService;
     let netService: NetService;
@@ -35,7 +35,7 @@ describe('FormatService', () => {
     let service: FormatService;
 
     beforeEach(() => {
-        currencyPipe = new CurrencyPipe('en');
+        decimalPipe = new DecimalPipe('en');
         datePipe = new DatePipe('en');
         idlService = new IdlService();
         evtService = new EventService();
@@ -99,7 +99,7 @@ describe('FormatService', () => {
             value: '12.1',
             datatype: 'money'
         });
-        expect(str).toBe('$12.10');
+        expect(str).toBe('12.10');
     });
 
     it('should transform M/d/yy, h:mm a Angular format string to a valid MomentJS one', () => {