Turn the add new registrant view to registrantForm
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 4 Oct 2017 20:26:09 +0000 (16:26 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Wed, 4 Oct 2017 20:26:09 +0000 (16:26 -0400)
This way we should be able to use it for edit and add.

css/front.css
js/frontRegApp.js
js/models/front/regEvent.js
js/models/front/regRequestRegistrant.js
js/views/front/newRegistrant.js [deleted file]
js/views/front/regClass.js
js/views/front/regRequestRegistrant.js
js/views/front/registrantForm.js [new file with mode: 0644]
models/front/registrations/registration.php
views/admin/registrations/eventDashboard.html
views/front/registrations/registration.html

index c9fa998..fe5d0aa 100644 (file)
@@ -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;
+}
index caa7152..e1dbbd5 100644 (file)
@@ -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;
+    },
+
+});
index 5045dab..607bd46 100644 (file)
@@ -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: '',
index f00868c..d8ef556 100644 (file)
@@ -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/newRegistrant.js b/js/views/front/newRegistrant.js
deleted file mode 100644 (file)
index 17420a8..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-app.Views.Front.NewRegistrant = 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;
-    },
-
-});
index 92ddee8..f4dface 100644 (file)
@@ -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(){
index 07e79eb..07a670c 100644 (file)
@@ -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/registrantForm.js b/js/views/front/registrantForm.js
new file mode 100644 (file)
index 0000000..82d930d
--- /dev/null
@@ -0,0 +1,20 @@
+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;
+    },
+
+});
index 39d3d83..4496517 100644 (file)
@@ -38,8 +38,9 @@
     public function modelAction($actionData = false)
     {
 
-        $loginAccount   = '';
-        $cartId         = false;
+        $loginAccount      = '';
+        $cartId            = false;
+        $regEventFirstTime = false;
 
         // Have Backbone.js loaded
         $scripts = array(
         switch ( $option ) {
         default:
             // Get the RegEvent entry
-            $regEvent = $this->getEventConfig( $eventRegID );
-//            echo '<pre>$regEvent: ' . print_r( $regEvent, true ) . '</pre>';
+            $this->postProcAddedEventData = true;
+            $regEvent = $this->getEventConfig( $eventRegID, true, false, true );
+            // echo '<pre>$regEvent: ' . print_r( $regEvent, true ) . '</pre>';
+            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'],
                 'terms'                => $regEvent['terms'],
             );
 
+            echo '<pre>$event: ' . print_r( $event, true ) . '</pre>';
             break;
 
         }
 
         // 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(
index adeeb90..8761ad2 100644 (file)
@@ -7,11 +7,11 @@
     {if $reason}
        <p class="glm-error">{$reason}</p>
     {/if}
-    
+
     <h3>Event</h3>
     <div id="glm-admin-member-dashboard" class="glm-admin-table">
       {if $haveRegEvent}
-    
+
         <div class="glm-row">
             <div class="glm-small-4 glm-left">
                 <div class="glm-admin-table">
         {else}
             <h3>Did not find selected event.</h3>
         {/if}
-    </div>    
-</div>        
+    </div>
+</div>
 
 <div class="glm-admin-table-inner glm-admin-table">
   {if $haveRegEvent}
     <p><h3>Dates and Availability</h3></p>
-    
+
     {if $regEvent.time_specific.value}
     <p>*** NEED TO ADD POP-UP FOR EDITING OF MAX ATTENDEES AND ATTENDEE LIST FOR EACH DATE ***</p>
-    
+
     <p>Availability guide: (limit)-(registered)-(pending)-(available)</p>
     <table id="glm-table-calendar" class="glm-admin-table glm-event-table">
         <tr>
 
             // If this is a time specific event, then display the calendar
             if ({$regEvent.time_specific.value}) {
-                
+
                 /*
                  * Initialize the Full Calendar
                  */
                         {/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);
 
         });
     </script>
-    
+
 {include file='admin/footer.html'}
 
index 72c9cdd..07096f2 100644 (file)
@@ -62,8 +62,9 @@
     </div>
     <div>
         <p><%= descr %></p>
-        <% if ( !time_specific ) { %> 
+        <% if ( !time_specific ) { %>
             <p>Attend any time during event</p>
+        <% } else { %>
           <% _.each(reg_time, function(rTime) { %>
             <p>
                 Maximum Registrants: <%= rTime.attendee_max %><br>
 {/literal}
 {* Template for registrant add form *}{literal}
 <script type="text/template" id="eventReg-registrant-add">
-    <div>
-        {/literal}{$terms.reg_term_contact_information}{literal}
-    </div>
-    <div>
-        <input class="reg_fname" placeholder="First Name">
-        <input class="reg_lname" placeholder="Last Name">
+    <div style="float: right; width: 48%;">
+        <div id="eventCalendar" style="width: 90%;"></div>
     </div>
-    <div>
-        <input class="reg_email" placeholder="Email Address" value="<%- email %>">
-        (Email is optional)
-
-    <div>
-        <p>*** Calendar selection goes here when event is time_specific. ***</p>
+    <div style="width: 48%;">
+        <div>
+            {/literal}{$terms.reg_term_contact_information}{literal}
+        </div>
+        <div>
+            <input class="reg_fname" placeholder="First Name">
+            <input class="reg_lname" placeholder="Last Name">
+        </div>
+        <div>
+            <input class="reg_email" placeholder="Email Address" value="<%- email %>">
+            (Email is optional)
+        </div>
+        <div>
+            <input class="reg_addr1" placeholder="Address 1">
+            <input class="reg_addr2" placeholder="Address 2">
+        </div>
+        <div>
+            <input class="reg_city" placeholder="City">
+            <input class="reg_state" placeholder="State">
+        </div>
+        <div>
+            <input class="reg_zip" placeholder="Zip/Postal Code">
+            <input class="reg_country" placeholder="Country">
+        </div>
+        <div>
+            Selected Time: <span id="reg-select-time-display"></span>
+            <input type="hidden" id="reg-select-time">
+        </div>
     </div>
 
     <div>
 {* Template for registrant *}{literal}
 <script type="text/template" id="registrant-template">
     <a class="glm-reg-level-registrant-delete">Delete</a>
-    <span class="glm-reg-level-registrant-email"><%= fname %> <%= lname %> <%= email %></span>
+    <span class="glm-registrant-edit"><%= fname %> <%= lname %> <%= email %></span>
 </script>
 {/literal}
 <div class="glm-reg-event-list" id="regApp">
@@ -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 = '';