From: Galen Charlton <gmc@equinoxinitiative.org>
Date: Mon, 6 May 2019 21:41:31 +0000 (-0400)
Subject: LP#1831784: fix Angular's formatting of DOB field
X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=91be2d61b99f52fd4186f7d7ab606b994b49c6db;p=contrib%2FConifer.git

LP#1831784: fix Angular's formatting of DOB field

Otherwise, depending on the local time zone, the date displayed
could be off a day.

The 'dob' columns are currently the the _only_ database/IDL fields
that are truly dates, not timestamps, hence the hard-coded exception.
However, an alternative approach would be to define a new 'date'
field type in the IDL.

To test
-------
[1] Construct an eg-grid (say, on the Angular sandbox page) that retrieves
    patron records. For users in North America, the birth dates are
    likely off by a day.
[2] Apply the patch and repeat step 1. This time, the birth dates should
    display as entered.

Sponsored-by: MassLNC
Sponsored-by: Georgia Public Library Service
Sponsored-by: Indiana State Library
Sponsored-by: CW MARS
Sponsored-by: King County Library System

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
---

diff --git a/Open-ILS/src/eg2/src/app/core/format.service.ts b/Open-ILS/src/eg2/src/app/core/format.service.ts
index b0e8072a53..63aeec66f0 100644
--- a/Open-ILS/src/eg2/src/app/core/format.service.ts
+++ b/Open-ILS/src/eg2/src/app/core/format.service.ts
@@ -116,7 +116,15 @@ export class FormatService {
                 if (params.datePlusTime) {
                     fmt = this.dateTimeFormat || 'short';
                 }
-                return this.datePipe.transform(date, fmt);
+                let tz;
+                if (params.idlField === 'dob') {
+                    // special case: since dob is the only date column that the
+                    // IDL thinks of as a timestamp, the date object comes over
+                    // as a UTC value; apply the correct timezone rather than the
+                    // local one
+                    tz = 'UTC';
+                }
+                return this.datePipe.transform(date, fmt, tz);
 
             case 'money':
                 return this.currencyPipe.transform(value);