diff --git a/app/components/ui-table/cell/events/view/tickets/attendees/cell-action.js b/app/components/ui-table/cell/events/view/tickets/attendees/cell-action.js index ef3e79cd247..eb67605434a 100644 --- a/app/components/ui-table/cell/events/view/tickets/attendees/cell-action.js +++ b/app/components/ui-table/cell/events/view/tickets/attendees/cell-action.js @@ -1,5 +1,54 @@ import classic from 'ember-classic-decorator'; import Component from '@ember/component'; - +import moment from 'moment'; @classic -export default class CellAction extends Component {} +export default class CellAction extends Component { + currentlyCheckedin = []; + eventdates = []; + get allDates() { + const dates = []; + const date1 = moment(this.extraRecords.event.get('endsAtDate')); + const date2 = moment(this.extraRecords.event.get('startsAtDate')); + const diff = date1.diff(date2, 'days'); + for (let i = 0; i < diff; i++) { + dates.push((moment(this.extraRecords.event.get('startsAtDate'), 'MM-DD-YYYY').add(i, 'days').format('MM-DD-YYYY'))); + this.eventdates.push(moment(this.extraRecords.event.get('startsAtDate'), 'MM-DD-YYYY').add(i, 'days').format('MM-DD-YYYY')); + } + return dates; + } + + get checkinTimes() { + if (this.extraRecords.checkinTimes) { + const x = this.extraRecords.checkinTimes?.split(','); + const checkinDates = []; + for (const i of x) { + checkinDates.push(moment(i).format('MM-DD-YYYY')); + } + return checkinDates; + } + return []; + } + + get checkoutTimes() { + if (this.extraRecords.checkoutTimes) { + const x = this.extraRecords.checkoutTimes?.split(','); + const checkoutDates = []; + for (const i of x) { + checkoutDates.push(moment(i).format('MM-DD-YYYY')); + } + return checkoutDates; + } + return []; + } + + get currentlyChecked() { + for (const i of this.eventdates) { + const checkinCount = this.checkinTimes?.filter(x => x === i).length || 0; + const checkoutCount = this.checkoutTimes?.filter(x => x === i).length || 0; + if (checkinCount > checkoutCount && !this.currentlyCheckedin.includes(i)) { + this.currentlyCheckedin.push(i); + } + } + return this.currentlyCheckedin; + } +} diff --git a/app/controllers/events/view/tickets/attendees/list.js b/app/controllers/events/view/tickets/attendees/list.js index 08f00708ec0..89413ed8797 100644 --- a/app/controllers/events/view/tickets/attendees/list.js +++ b/app/controllers/events/view/tickets/attendees/list.js @@ -25,7 +25,7 @@ export default class extends Controller.extend(EmberTableControllerMixin) { }, { name : 'Date and Time', - width : 140, + width : 120, valuePath : 'order.completed_at', extraValuePaths : ['order'], cellComponent : 'ui-table/cell/events/view/tickets/attendees/cell-date', @@ -34,7 +34,7 @@ export default class extends Controller.extend(EmberTableControllerMixin) { }, { name : 'Ticket Price', - width : 90, + width : 50, valuePath : 'ticket.price', extraValuePaths : ['event', 'discountCode'], cellComponent : 'ui-table/cell/events/view/tickets/attendees/cell-price', @@ -44,23 +44,23 @@ export default class extends Controller.extend(EmberTableControllerMixin) { { name : 'First Name', valuePath : 'firstname', - width : 100 + width : 60 }, { name : 'Last Name', valuePath : 'lastname', - width : 90 + width : 60 }, { name : 'Email', valuePath : 'email', - width : 120 + width : 130 }, { name : 'Actions', valuePath : 'id', - width : 90, - extraValuePaths : ['order', 'isCheckedIn'], + width : 130, + extraValuePaths : ['order', 'isCheckedIn', 'event', 'checkinTimes', 'checkoutTimes'], cellComponent : 'ui-table/cell/events/view/tickets/attendees/cell-action', actions : { toggleCheckIn: this.toggleCheckIn.bind(this) @@ -70,16 +70,23 @@ export default class extends Controller.extend(EmberTableControllerMixin) { } @action - toggleCheckIn(attendee_id) { + toggleCheckIn(attendee_id, date, isCheckedInCurrently) { const attendee = this.store.peekRecord('attendee', attendee_id, { backgroundReload: false }); - attendee.toggleProperty('isCheckedIn'); - if (attendee.isCheckedIn) { - const newCheckinTimes = attendee.get('checkinTimes') === null ? `${moment().toISOString()}` : `${attendee.get('checkinTimes')},${moment().toISOString()}`; + let myTime = moment().toISOString(); + if (moment(date, 'MM-DD-YYYY').format('MM-DD-YYYY') !== moment().format('MM-DD-YYYY')) { + myTime = moment(date, 'MM-DD-YYYY'); + myTime = myTime.format('YYYY-MM-DD') + 'T13:00:00.000Z'; + } + if (!isCheckedInCurrently) { + const newCheckinTimes = attendee.get('checkinTimes') === null ? `${myTime}` : `${attendee.get('checkinTimes')},${myTime}`; attendee.set('checkinTimes', newCheckinTimes); + } else { + const newCheckoutTimes = attendee.get('checkoutTimes') === null ? `${myTime}` : `${attendee.get('checkoutTimes')},${myTime}`; + attendee.set('checkoutTimes', newCheckoutTimes); } attendee.save() - .then(savedAttendee => { - const message = savedAttendee.isCheckedIn ? this.l10n.t('Attendee Checked-In Successfully') : this.l10n.t('Attendee Checked-Out Successfully'); + .then(() => { + const message = !isCheckedInCurrently ? this.l10n.t('Attendee Checked-In Successfully') : this.l10n.t('Attendee Checked-Out Successfully'); this.notify.success(message); this.refreshModel.bind(this)(); }) diff --git a/app/models/attendee.js b/app/models/attendee.js index de42e624c60..0a45f2c57d2 100644 --- a/app/models/attendee.js +++ b/app/models/attendee.js @@ -12,6 +12,7 @@ export default ModelBase.extend({ lastname : attr('string'), isCheckedIn : attr('boolean', { defaultValue: false }), checkinTimes : attr('string'), + checkoutTimes : attr('string'), state : attr('string'), address : attr('string'), pdfUrl : attr('string'), diff --git a/app/templates/components/ui-table/cell/events/view/tickets/attendees/cell-action.hbs b/app/templates/components/ui-table/cell/events/view/tickets/attendees/cell-action.hbs index d7d27a79e20..67d300238dc 100644 --- a/app/templates/components/ui-table/cell/events/view/tickets/attendees/cell-action.hbs +++ b/app/templates/components/ui-table/cell/events/view/tickets/attendees/cell-action.hbs @@ -1,7 +1,18 @@ {{#if (eq this.extraRecords.order.status 'completed')}} - {{#if this.extraRecords.isCheckedIn}} - - {{else}} - - {{/if}} + +
+ {{t 'Checkin'}} +
+ + +
{{/if}}