From 2d91aa69ec695e67824149d6c71745cf56b871f4 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Wed, 4 Oct 2017 16:26:09 -0400 Subject: [PATCH] Turn the add new registrant view to registrantForm This way we should be able to use it for edit and add. --- css/front.css | 21 ++++- js/frontRegApp.js | 84 ++++++++++++------- js/models/front/regEvent.js | 4 +- js/models/front/regRequestRegistrant.js | 6 ++ js/views/front/regClass.js | 23 ++++- js/views/front/regRequestRegistrant.js | 8 ++ .../{newRegistrant.js => registrantForm.js} | 2 +- models/front/registrations/registration.php | 45 +++++++--- views/admin/registrations/eventDashboard.html | 20 ++--- views/front/registrations/registration.html | 79 +++++++++++++---- 10 files changed, 219 insertions(+), 73 deletions(-) rename js/views/front/{newRegistrant.js => registrantForm.js} (85%) diff --git a/css/front.css b/css/front.css index c9fa998..fe5d0aa 100644 --- a/css/front.css +++ b/css/front.css @@ -168,10 +168,27 @@ div.glm-reg-register input.error { position: absolute; left: 1rem; top: 0; - width: 30rem; + width: 60rem; + z-index: 999; } -.new-reg .reg_fname, .new-reg .reg_lname { +.new-reg h2 { + width: auto; +} +.new-reg .reg_fname, +.new-reg .reg_lname, +.new-reg .reg_addr1, +.new-reg .reg_addr2, +.new-reg .reg_city, +.new-reg .reg_state, +.new-reg .reg_zip, +.new-reg .reg_country { width: 46%; margin-right: 1rem; float: left; } +.new-reg .reg_email { + width: 96%; +} +#reg-select-time { + width: 150px; +} diff --git a/js/frontRegApp.js b/js/frontRegApp.js index caa7152..e1dbbd5 100644 --- a/js/frontRegApp.js +++ b/js/frontRegApp.js @@ -166,8 +166,8 @@ app.Models.Front.RegEvent = Backbone.Model.extend({ event_code: '', descr: '', notify_email: '', - attendees_max: 0, - attendees_max_per_reg: 0, + attendee_max: 0, + attendee_max_per_reg: 0, reg_hold_minutes: 0, cart_hold_days: 0, terms: '', @@ -236,6 +236,12 @@ app.Models.Front.RegRequestRegistrant = Backbone.Model.extend({ email: '', fname: '', lname: '', + addr1: '', + addr2: '', + city: '', + state: '', + zip: '', + country: '', }, url: ajaxUrl+'&glm_action=regFront&collection=registrant', @@ -677,28 +683,6 @@ app.Views.Front.Login = Backbone.View.extend({ }); -app.Views.Front.NewRegistrant = Backbone.View.extend({ - tagName: 'div', - - className: 'new-reg', - - template: _.template( jQuery('#eventReg-registrant-add').html() ), - - events: { - }, - - initialize: function(){ -console.log(this); - return this; - }, - - render: function(){ - this.$el.html( this.template( this.model.toJSON() ) ); - return this; - }, - -}); - // js/views/regClass.js var newId = 0; app.Views.Front.RegClass = Backbone.View.extend({ @@ -775,9 +759,16 @@ app.Views.Front.RegClass = Backbone.View.extend({ addNew: function(){ var findByEmail = []; console.log( 'called addNew in regClass view' ); - var fname = this.$('.reg_fname').val().trim(); - var lname = this.$('.reg_lname').val().trim(); - var email = this.$('.reg_email').val().trim(); + var fname = this.$('.reg_fname').val().trim(); + var lname = this.$('.reg_lname').val().trim(); + var email = this.$('.reg_email').val().trim(); + var addr1 = this.$('.reg_addr1').val().trim(); + var addr2 = this.$('.reg_addr2').val().trim(); + var city = this.$('.reg_city').val().trim(); + var state = this.$('.reg_state').val().trim(); + var zip = this.$('.reg_zip').val().trim(); + var country = this.$('.reg_country').val().trim(); + var rTime = this.$('#reg-select-time').val().trim(); if ( fname === '' || lname === '' ) { alert( 'First and Last name required!' ); return; @@ -796,12 +787,19 @@ app.Views.Front.RegClass = Backbone.View.extend({ this.model.registrants.create({ option: 'add', reg_request: regRequest.id, + reg_time: rTime, reg_event: this.model.get( 'reg_event' ), reg_class: this.model.get( 'id' ), reg_rate: this.model.get( 'reg_rate_id' ), email: email, fname: fname, lname: lname, + addr1: addr1, + addr2: addr2, + city: city, + state: state, + zip: zip, + country: country, }); } this.newRegAccount.destroy(); @@ -817,8 +815,9 @@ app.Views.Front.RegClass = Backbone.View.extend({ console.log( 'Add New Account Called' ); // Create the new Registrant View this.newRegAccount = new app.Models.Front.RegRequestRegistrant(); - this.newRegAccountView = new app.Views.Front.NewRegistrant({model: this.newRegAccount}); + this.newRegAccountView = new app.Views.Front.RegistrantForm({model: this.newRegAccount}); this.$el.append( this.newRegAccountView.render().el ); + app.initFullCalendar(); }, toggleClassOpen: function(){ @@ -932,6 +931,14 @@ app.Views.Front.RegRequestRegistrant = Backbone.View.extend({ events: { 'click .glm-reg-level-registrant-delete': 'deleteOne', + 'click .glm-registrant-edit': 'editRegistrant', + }, + + editRegistrant: function(){ + console.log( 'Edit called' ); + console.log( this.model ); + // this.editRegAccountView = new app.Views.Front.RegistrantForm({model: this.model}); + }, render: function(){ @@ -1063,3 +1070,24 @@ app.Views.Front.Register = Backbone.View.extend({ }, }); + +app.Views.Front.RegistrantForm = Backbone.View.extend({ + tagName: 'div', + + className: 'new-reg', + + template: _.template( jQuery('#eventReg-registrant-add').html() ), + + events: { + }, + + initialize: function(){ + return this; + }, + + render: function(){ + this.$el.html( this.template( this.model.toJSON() ) ); + return this; + }, + +}); diff --git a/js/models/front/regEvent.js b/js/models/front/regEvent.js index 5045dab..607bd46 100644 --- a/js/models/front/regEvent.js +++ b/js/models/front/regEvent.js @@ -10,8 +10,8 @@ app.Models.Front.RegEvent = Backbone.Model.extend({ event_code: '', descr: '', notify_email: '', - attendees_max: 0, - attendees_max_per_reg: 0, + attendee_max: 0, + attendee_max_per_reg: 0, reg_hold_minutes: 0, cart_hold_days: 0, terms: '', diff --git a/js/models/front/regRequestRegistrant.js b/js/models/front/regRequestRegistrant.js index f00868c..d8ef556 100644 --- a/js/models/front/regRequestRegistrant.js +++ b/js/models/front/regRequestRegistrant.js @@ -17,6 +17,12 @@ app.Models.Front.RegRequestRegistrant = Backbone.Model.extend({ email: '', fname: '', lname: '', + addr1: '', + addr2: '', + city: '', + state: '', + zip: '', + country: '', }, url: ajaxUrl+'&glm_action=regFront&collection=registrant', diff --git a/js/views/front/regClass.js b/js/views/front/regClass.js index 92ddee8..f4dface 100644 --- a/js/views/front/regClass.js +++ b/js/views/front/regClass.js @@ -74,9 +74,16 @@ app.Views.Front.RegClass = Backbone.View.extend({ addNew: function(){ var findByEmail = []; console.log( 'called addNew in regClass view' ); - var fname = this.$('.reg_fname').val().trim(); - var lname = this.$('.reg_lname').val().trim(); - var email = this.$('.reg_email').val().trim(); + var fname = this.$('.reg_fname').val().trim(); + var lname = this.$('.reg_lname').val().trim(); + var email = this.$('.reg_email').val().trim(); + var addr1 = this.$('.reg_addr1').val().trim(); + var addr2 = this.$('.reg_addr2').val().trim(); + var city = this.$('.reg_city').val().trim(); + var state = this.$('.reg_state').val().trim(); + var zip = this.$('.reg_zip').val().trim(); + var country = this.$('.reg_country').val().trim(); + var rTime = this.$('#reg-select-time').val().trim(); if ( fname === '' || lname === '' ) { alert( 'First and Last name required!' ); return; @@ -95,12 +102,19 @@ app.Views.Front.RegClass = Backbone.View.extend({ this.model.registrants.create({ option: 'add', reg_request: regRequest.id, + reg_time: rTime, reg_event: this.model.get( 'reg_event' ), reg_class: this.model.get( 'id' ), reg_rate: this.model.get( 'reg_rate_id' ), email: email, fname: fname, lname: lname, + addr1: addr1, + addr2: addr2, + city: city, + state: state, + zip: zip, + country: country, }); } this.newRegAccount.destroy(); @@ -116,8 +130,9 @@ app.Views.Front.RegClass = Backbone.View.extend({ console.log( 'Add New Account Called' ); // Create the new Registrant View this.newRegAccount = new app.Models.Front.RegRequestRegistrant(); - this.newRegAccountView = new app.Views.Front.NewRegistrant({model: this.newRegAccount}); + this.newRegAccountView = new app.Views.Front.RegistrantForm({model: this.newRegAccount}); this.$el.append( this.newRegAccountView.render().el ); + app.initFullCalendar(); }, toggleClassOpen: function(){ diff --git a/js/views/front/regRequestRegistrant.js b/js/views/front/regRequestRegistrant.js index 07e79eb..07a670c 100644 --- a/js/views/front/regRequestRegistrant.js +++ b/js/views/front/regRequestRegistrant.js @@ -12,6 +12,14 @@ app.Views.Front.RegRequestRegistrant = Backbone.View.extend({ events: { 'click .glm-reg-level-registrant-delete': 'deleteOne', + 'click .glm-registrant-edit': 'editRegistrant', + }, + + editRegistrant: function(){ + console.log( 'Edit called' ); + console.log( this.model ); + // this.editRegAccountView = new app.Views.Front.RegistrantForm({model: this.model}); + }, render: function(){ diff --git a/js/views/front/newRegistrant.js b/js/views/front/registrantForm.js similarity index 85% rename from js/views/front/newRegistrant.js rename to js/views/front/registrantForm.js index 17420a8..82d930d 100644 --- a/js/views/front/newRegistrant.js +++ b/js/views/front/registrantForm.js @@ -1,4 +1,4 @@ -app.Views.Front.NewRegistrant = Backbone.View.extend({ +app.Views.Front.RegistrantForm = Backbone.View.extend({ tagName: 'div', className: 'new-reg', diff --git a/models/front/registrations/registration.php b/models/front/registrations/registration.php index 39d3d83..4496517 100644 --- a/models/front/registrations/registration.php +++ b/models/front/registrations/registration.php @@ -38,8 +38,9 @@ public function modelAction($actionData = false) { - $loginAccount = ''; - $cartId = false; + $loginAccount = ''; + $cartId = false; + $regEventFirstTime = false; // Have Backbone.js loaded $scripts = array( @@ -111,8 +112,25 @@ switch ( $option ) { default: // Get the RegEvent entry - $regEvent = $this->getEventConfig( $eventRegID ); -// echo '
$regEvent: ' . print_r( $regEvent, true ) . '
'; + $this->postProcAddedEventData = true; + $regEvent = $this->getEventConfig( $eventRegID, true, false, true ); + // echo '
$regEvent: ' . print_r( $regEvent, true ) . '
'; + if ( $regEvent ) { + if ( is_array( $regEvent['recurrences'] ) && count( $regEvent['recurrences'] ) ) { + foreach ($regEvent['recurrences'] as $k=>$v) { + $first = current($v['times']); + $first = current($v['times']); + $last = end($v['times']); + $regEvent['recurrences'][$k]['first_time'] = $first; + $regEvent['recurrences'][$k]['lastTime'] = $last; + if ($v['times'] && count($v['times']) > 0) { + if (!$regEventFirstTime || $regEventFirstTime['timestamp'] < $first ) { + $regEventFirstTime = $first; + } + } + } + } + } $event = array( 'id' => $regEvent['id'], @@ -129,6 +147,7 @@ 'terms' => $regEvent['terms'], ); + echo '
$event: ' . print_r( $event, true ) . '
'; break; } @@ -211,14 +230,16 @@ // Compile template data $templateData = array( - 'thisJsUrl' => GLM_MEMBERS_REGISTRATIONS_PLUGIN_URL . '/js', - 'regEventJSON' => json_encode( $event, JSON_NUMERIC_CHECK ), - 'regClassesJSON' => $regClassJSON, - 'regCartJSON' => $regCartJSON, - 'regRequestJSON' => $regRequestJSON, - 'loginAccount' => $loginAccount, - 'termsJSON' => $termsJSON, - 'regJSON' => json_encode( $registrants, JSON_NUMERIC_CHECK ), + 'regEvent' => $regEvent, + 'regEventFirstTime' => $regEventFirstTime, + 'thisJsUrl' => GLM_MEMBERS_REGISTRATIONS_PLUGIN_URL . '/js', + 'regEventJSON' => json_encode( $event, JSON_NUMERIC_CHECK ), + 'regClassesJSON' => $regClassJSON, + 'regCartJSON' => $regCartJSON, + 'regRequestJSON' => $regRequestJSON, + 'loginAccount' => $loginAccount, + 'termsJSON' => $termsJSON, + 'regJSON' => json_encode( $registrants, JSON_NUMERIC_CHECK ), ); // Return status, any suggested view, and any data to controller return array( diff --git a/views/admin/registrations/eventDashboard.html b/views/admin/registrations/eventDashboard.html index adeeb90..8761ad2 100644 --- a/views/admin/registrations/eventDashboard.html +++ b/views/admin/registrations/eventDashboard.html @@ -7,11 +7,11 @@ {if $reason}

{$reason}

{/if} - +

Event

{if $haveRegEvent} - +
@@ -63,16 +63,16 @@ {else}

Did not find selected event.

{/if} -
-
+
+
{if $haveRegEvent}

Dates and Availability

- + {if $regEvent.time_specific.value}

*** NEED TO ADD POP-UP FOR EDITING OF MAX ATTENDEES AND ATTENDEE LIST FOR EACH DATE ***

- +

Availability guide: (limit)-(registered)-(pending)-(available)

@@ -117,7 +117,7 @@ // If this is a time specific event, then display the calendar if ({$regEvent.time_specific.value}) { - + /* * Initialize the Full Calendar */ @@ -150,16 +150,16 @@ {/if} }); } - + initFullCalendar(); } - + // Flash certain elements for a short time after display $(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500); }); - + {include file='admin/footer.html'} diff --git a/views/front/registrations/registration.html b/views/front/registrations/registration.html index 72c9cdd..07096f2 100644 --- a/views/front/registrations/registration.html +++ b/views/front/registrations/registration.html @@ -62,8 +62,9 @@

<%= descr %>

- <% if ( !time_specific ) { %> + <% if ( !time_specific ) { %>

Attend any time during event

+ <% } else { %> <% _.each(reg_time, function(rTime) { %>

Maximum Registrants: <%= rTime.attendee_max %>
@@ -111,19 +112,37 @@ {/literal} {* Template for registrant add form *}{literal} {/literal}

@@ -157,6 +176,38 @@ var app = { Models: { Front: {}, Admin: {} }, Collections: { Front: {}, Admin: {} }, Views: { Front: {}, Admin: {} }, + initFullCalendar: function(){ + if ({$regEvent.time_specific.value}) { + $('#eventCalendar').fullCalendar({ + {if $regEvent} + events: [ + {$sep = ''} + {foreach $regEvent.reg_time as $t} + {$sep}{ + {if $t.attendee_max == 0} + title : 'unlimited', + {else} + title : '{$t.attendee_max}-{$t.attendee_count}-{$t.attendees_pending}-{$t.attendees_available}', + {/if} + start : '{$t.start_datetime.datetime}', + end : '{$t.end_datetime.datetime}', + allday : {$t.all_day.value}, + reg_time: {$t.id} + } + {$sep = ','} + {/foreach} + ], + defaultDate : '{$regEventFirstTime.start_time.datetime}', + timeFormat : 'h:mma', + fixedWeekCount : false, + eventClick: function(calEvent, jsEvent, view) { + jQuery('#reg-select-time').val( calEvent.reg_time ); + jQuery('#reg-select-time-display').html( calEvent.start.format('L LT') ); + } + {/if} + }); + } + }, }; var regEvent = ''; var cart = ''; -- 2.17.1