From 19b626d63c0be0ccc437b5ea34bee3d3b02ee024 Mon Sep 17 00:00:00 2001 From: Jane Sandberg Date: Tue, 26 Mar 2019 19:21:25 -0700 Subject: [PATCH] using Moment.js to generate the create grid --- .../staff/booking/create-reservation.component.ts | 116 +++++++++++---------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/staff/booking/create-reservation.component.ts b/Open-ILS/src/eg2/src/app/staff/booking/create-reservation.component.ts index f2da2d14ad..3563ad63d3 100644 --- a/Open-ILS/src/eg2/src/app/staff/booking/create-reservation.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/booking/create-reservation.component.ts @@ -9,6 +9,8 @@ import {IdlObject} from '@eg/core/idl.service'; import {PcrudService} from '@eg/core/pcrud.service'; import {ToastService} from '@eg/share/toast/toast.service'; +import * as Moment from 'moment-timezone'; + @Component({ templateUrl: './create-reservation.component.html' @@ -21,10 +23,9 @@ export class CreateReservationComponent implements OnInit { multiday = false; isBooked: (col: any, row: any) => string; resourceAvailabilityIcon: (row: any) => GridRowFlairEntry; - fetchData: (limiter: 'resource' | 'type', id: number) => void; - startTime: NgbTimeStruct = {hour: 9, minute: 0, second: 0}; - endTime: NgbTimeStruct = {hour: 17, minute: 0, second: 0}; + startTime: Moment; + endTime: Moment; granularity: 15 | 30 | 60 = 30; scheduleSource: GridDataSource = new GridDataSource(); @@ -40,58 +41,29 @@ export class CreateReservationComponent implements OnInit { private pcrud: PcrudService, private toast: ToastService, ) { + this.resourceAvailabilityIcon = (row: any) => { + let icon = {icon: 'event_busy', title: 'All resources are reserved at this time'}; + let busy_columns = 0; + for (const key in row) { + if (row[key]) { busy_columns = busy_columns + 1; } + } + if (busy_columns <= this.resources.length) { // equal or less than, since it counts the time column + icon = {icon: 'event_available', title: 'Resources are available at this time'}; + } + return icon; + }; } ngOnInit() { this.dateLimiter.initialDate = new Date(); - this.fetchData = (limiter: 'resource' | 'type', id: number) => { - this.resources = []; - let where = {}; - if ('type' === limiter) { - where = {type: id}; - } else if ('resource' === limiter) { - where = {id: id}; - } - this.pcrud.search('brsrc', where, { - order_by: 'barcode ASC', - flesh: 1, - flesh_fields: {'brsrc': ['curr_rsrcs']}, - select: {'curr_rsrcs': {'end_time': {'<' : '2019-04-01'}}} - }).subscribe( - r => { this.resources.push(r); }); - - this.scheduleSource.data = []; - let current_time = this.startTime; - while (this._firstTimeIsSmaller(current_time, this.endTime)) { - this.scheduleSource.data.push({ - 'time': current_time.hour + ':' + current_time.minute, - 'ROOM1231': 'Professor Pickle' - }); - if ((current_time.minute + this.granularity) >= 60) { - current_time.hour = current_time.hour + 1; - } - current_time.minute = (current_time.minute + this.granularity) % 60; - } - }; this.isBooked = (row: any, col: any) => { if ((col.name !== 'time') && (row[col.name])) { return 'bg-warning'; } }; - this.resourceAvailabilityIcon = (row: any) => { - let icon = {icon: 'event_busy', title: 'All resources are reserved at this time'}; - let busy_columns = 0; - for (const key in row) { - if (row[key]) { busy_columns = busy_columns + 1; } - } - if (busy_columns <= this.resources.length) { // equal or less than, since it counts the time column - icon = {icon: 'event_available', title: 'Resources are available at this time'}; - } - return icon; - }; this.limitByAttr = (attributeId: number, $event: ComboboxEntry) => { console.log('LIMIT'); @@ -99,7 +71,6 @@ export class CreateReservationComponent implements OnInit { console.log('event: ' + JSON.stringify($event)); }; - } showNewDialog(idlThing: IdlObject) { return this.newDialog.open({size: 'lg'}).then( @@ -110,25 +81,60 @@ export class CreateReservationComponent implements OnInit { err => {} ); } - - this.handleResourceTypeChange($event: ComboboxEntry) { - // TODO: unset resource barcode + handleResourceTypeChange(event: ComboboxEntry) { + // TODO: unset resource barcode this.attributes = []; - if ($event.id) { - this.pcrud.search('bra', {resource_type : $event.id}, { + if (event.id) { + this.pcrud.search('bra', {resource_type : event.id}, { order_by: 'name ASC', flesh: 1, flesh_fields: {'bra' : ['valid_values']} }).subscribe( - a => { this.attributes.push(a); }); - this.fetchData('type', $event.id); + a => { this.attributes.push(a); + }, err => { + console.log(err); + }, () => { + this.fetchData('type', event.id); + }); } } - private _firstTimeIsSmaller(first: NgbTimeStruct, second: NgbTimeStruct) { - if (first.hour < second.hour) { return true; } - if ((first.hour === second.hour) && (first.minute < second.minute)) { return true; } - return false; + fetchData (limiter: 'resource' | 'type', id: number) { + this.resources = []; + let where = {}; + if ('type' === limiter) { + where = {type: id}; + } else if ('resource' === limiter) { + where = {id: id}; + } + this.pcrud.search('brsrc', where, { + order_by: 'barcode ASC', + flesh: 1, + flesh_fields: {'brsrc': ['curr_rsrcs']}, + select: {'curr_rsrcs': {'end_time': {'<' : '2019-04-01'}}} + }).subscribe( + r => { this.resources.push(r); }); + + this.scheduleSource.data = []; + this.startTime = Moment(new Date( + this.dateLimiter.current.year, + this.dateLimiter.current.month - 1, + this.dateLimiter.current.day, + 9, 0, 0), 'Asia/Tokyo'); + this.endTime = Moment(new Date( + this.dateLimiter.current.year, + this.dateLimiter.current.month - 1, + this.dateLimiter.current.day, + 17, 0, 0), 'Asia/Tokyo'); + let currentTime = this.startTime; + while (currentTime < this.endTime) { + this.scheduleSource.data.push({ + 'time': currentTime.format('LT'), + 'ROOM1231': 'Professor Pickle' + }); + currentTime.minute(currentTime.minute() + this.granularity); + } } + } -- 2.11.0