LP1816475: adding an alert when library timezones don't match
authorJane Sandberg <sandbej@linnbenton.edu>
Sun, 7 Apr 2019 18:29:35 +0000 (11:29 -0700)
committerJane Sandberg <sandbej@linnbenton.edu>
Wed, 17 Apr 2019 20:41:53 +0000 (13:41 -0700)
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Open-ILS/src/eg2/src/app/staff/booking/create-reservation.component.html
Open-ILS/src/eg2/src/app/staff/booking/create-reservation.component.ts

index 3cf0f3f..af736ba 100644 (file)
 <eg-fm-record-editor #newDialog
   idlClass="bresv"
   datetimeFields="start_time,end_time"
-  [fieldOptions]="{usr:{customTemplate:{template:patronTemplate}},start_time:{customTemplate:{template:datetimeWithDefaults}},end_time:{customTemplate:{template:datetimeWithDefaults}}}"
+  [fieldOptions]="{usr:{customTemplate:{template:patronTemplate}},start_time:{customTemplate:{template:datetimeWithDefaults}},end_time:{customTemplate:{template:datetimeWithDefaults}},pickup_lib:{customTemplate:{template:pickupLibrary}}}"
   hiddenFields="id,xact_start,request_time,capture_time,pickup_time,return_time,capture_staff,xact_finish,cancel_time,booking_interval,target_resource,unrecovered,request_lib,fine_interval,fine_amount,max_fine">
 </eg-fm-record-editor>
 
   </div>
 </ng-template>
 <ng-template #datetimeWithDefaults let-record="record" let-field="field">
-  <input type="hidden" value="{{record[field.name](defaultTimes[field.name].toIsoString()}}">
+  <input type="hidden" value="{{record[field.name](defaultTimes[field.name].toISOString())}}">
   <eg-datetime-select
     [showTZ]="true"
     [minuteStep]="minuteStep()"
-    timezone="{{format.wsOrgTimezone}}"
+    [timezone]="pickupLibUsesDifferentTz ? pickupLibUsesDifferentTz : format.wsOrgTimezone"
     (onChangeAsIso)="record[field.name]($event)"
     [initialMoment]="defaultTimes[field.name]">
   </eg-datetime-select>
 </ng-template>
+<ng-template #pickupLibrary let-record="record" let-field="field">
+  <input type="hidden" value="{{record.pickup_lib(auth.user().ws_ou())}}">
+  <eg-org-select
+    [initialOrgId]="auth.user().ws_ou()"
+    (onChange)="handlePickupLibChange($event)">
+  </eg-org-select>
+  <div *ngIf="pickupLibUsesDifferentTz" class="alert alert-primary" i18n>Pickup library uses a different timezone than your library does. Please choose times in the pickup library's timezone.</div>
+</ng-template>
 
index 91a3ea6..75a66a6 100644 (file)
@@ -12,6 +12,7 @@ import {GridComponent} from '@eg/share/grid/grid.component';
 import {GridDataSource,  GridRowFlairEntry} from '@eg/share/grid/grid';
 import {IdlObject} from '@eg/core/idl.service';
 import {NetService} from '@eg/core/net.service';
+import {OrgService} from '@eg/core/org.service';
 import {PatronService} from '@eg/staff/share/patron.service';
 import {PcrudService} from '@eg/core/pcrud.service';
 import {ResourceTypeComboboxComponent} from './resource-type-combobox.component';
@@ -40,6 +41,8 @@ export class CreateReservationComponent implements OnInit, AfterViewInit {
     resourceId: number;
     resourceTypeId: number;
 
+    pickupLibUsesDifferentTz: string;
+
     startOfDay: NgbTimeStruct = {hour: 9, minute: 0, second: 0};
     endOfDay: NgbTimeStruct = {hour: 17, minute: 0, second: 0};
     granularity: 15 | 30 | 60 | 1440 = 30; // 1440 minutes = 24 hours
@@ -59,6 +62,7 @@ export class CreateReservationComponent implements OnInit, AfterViewInit {
     handleMultiDayReservation: () => void;
     handleSingleDayReservation: () => void;
     changeGranularity: ($event: ComboboxEntry) => void;
+    handlePickupLibChange: ($event: IdlObject) => void;
 
     @ViewChildren('dateLimiter') dateLimiters: QueryList<DateSelectComponent>;
     @ViewChildren('dateRangeLimiter') dateRangeLimiters: QueryList<DateRangeSelectComponent>;
@@ -72,6 +76,7 @@ export class CreateReservationComponent implements OnInit, AfterViewInit {
         private auth: AuthService,
         private format: FormatService,
         private net: NetService,
+        private org: OrgService,
         private patron: PatronService,
         private pcrud: PcrudService,
         private route: ActivatedRoute,
@@ -193,6 +198,17 @@ export class CreateReservationComponent implements OnInit, AfterViewInit {
             this.fetchData();
         };
 
+       this.handlePickupLibChange = ($event) => {
+            this.newDialog.record.pickup_lib($event);
+            this.org.settings('lib.timezone', $event.id()).then((tz) => {
+                if (tz['lib.timezone'] && (this.format.wsOrgTimezone !== tz['lib.timezone'])) {
+                    this.pickupLibUsesDifferentTz = tz['lib.timezone']
+                } else {
+                    this.pickupLibUsesDifferentTz = null;
+                }
+            });
+        };
+
         this.useCurrentResourceBarcode = () => {
             if (this.resourceBarcode) {
                 this.router.navigate(['/staff', 'booking', 'create_reservation', 'for_resource', this.resourceBarcode]);