Front end work for accounts.
authorSteve Sutton <steve@gaslightmedia.com>
Mon, 18 Sep 2017 20:47:34 +0000 (16:47 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Mon, 18 Sep 2017 20:47:34 +0000 (16:47 -0400)
working on getting the accounts adding and deleting. When you refresh
the page the accounts are there and they update the price total for the
class level. Updated some of the functions for the localStorage.

js/collections/front/accounts.js
js/collections/front/regEvents.js [new file with mode: 0644]
js/frontRegApp.js
js/models/front/account.js
js/models/front/cart.js [new file with mode: 0644]
js/views/front/account.js
js/views/front/regClass.js
models/front/registrations/registration.php
views/front/registrations/registration.html

index 64dbed9..ec77db6 100644 (file)
@@ -5,37 +5,53 @@ app.Collections.Front.Accounts = Backbone.Collection.extend({
     model: app.Models.Front.Account,
 
     initialize: function( parent ){
-        console.log( 'initialize called with ' + parent );
         this.parent = parent;
     },
 
-    localStorage: new Backbone.LocalStorage( 'Accounts-' ),
-
-    sync: function( method, model, options ){
-        return;
-        //console.log('sync called on collection. method: ' + method );
-        //console.log( method );
-        switch( method ){
-            case 'create':
-                console.log('Create called on Accounts' + model);
-                break;
-            case 'read':
-                console.log('Read called on Accounts' + model);
-                break;
-            case 'update':
-                console.log('Update called on Accounts' + model);
-                break;
-            case 'delete':
-                console.log('Delete called on Accounts' + model);
-                break;
-        }
+    //localStorage: new Backbone.LocalStorage( 'Accounts-' ),
 
+    urlBase: function(){
+        return appAccountUrl;
     },
 
+    // sync: function( method, model, options ){
+    //     console.log('sync called on collection. method: ' + method );
+    //     //console.log( method );
+    //     switch( method ){
+    //         case 'create':
+    //             console.log('Create called on Accounts' + model);
+    //             break;
+    //         case 'read':
+    //             console.log('Read called on Accounts' + model);
+    //             break;
+    //         case 'update':
+    //             console.log('Update called on Accounts' + model);
+    //             break;
+    //         case 'delete':
+    //             console.log('Delete called on Accounts' + model);
+    //             break;
+    //     }
+    //
+    // },
+
     create: function( model ){
         localStorage.setItem('Account-' + model.parent + '-'+ model.id, JSON.stringify( model ) );
+        this.add( model );
+    },
+
+    remove: function( model ){
+        localStorage.removeItem( localStorage.key('Account-' + model.parent + '-'+ model.id ) );
+        console.log( 'Delete called in collection ' );
     },
 
+    read: function(){
+        console.log( 'Read called' );
+    },
+
+    // save: function(){
+    //     console.log('Update Called');
+    // },
+
     fetch: function(){
         var newModels = [];
         for ( var i = 0; i < localStorage.length; i++ ) {
diff --git a/js/collections/front/regEvents.js b/js/collections/front/regEvents.js
new file mode 100644 (file)
index 0000000..2c0cafe
--- /dev/null
@@ -0,0 +1,23 @@
+app.Collections.Front.RegEvents = Backbone.Collection.extend({
+    model: app.Models.Front.RegEvent,
+
+    initialize: function(){
+        // something here
+    },
+
+    urlBase: function(){
+        return appAccountUrl;
+    },
+
+    create: function( model ){},
+
+    remove: function( model ){},
+
+    read: function(){},
+
+    update: function(){},
+
+    fetch: function(){
+        // something here for the fetch
+    },
+});
index 4cf81b2..cd68d54 100644 (file)
@@ -10,6 +10,23 @@ app.Models.Front.Account = Backbone.Model.extend({
         parent: '',
     },
 
+    url: function(){
+        return appAccountUrl + '?model=' + this.id;
+    },
+
+    sync: function( method, model ){
+        // console.log( 'sync in model' );
+        // console.log( method );
+        // console.log( model );
+        switch ( method ) {
+            case 'delete':
+                console.log( 'Delete called in account model' );
+                break;
+        }
+        return false; //Backbone.sync.apply(this, arguments);
+
+    },
+
     initialize: function(){
         this.on( 'invalid', function( model, error ){
             console.log( error );
@@ -26,6 +43,18 @@ app.Models.Front.Account = Backbone.Model.extend({
         }
     },
 
+    // save: function( model, options ){
+    //     console.log( 'Save called on model account' );
+    //     console.log( this );
+    //     console.log( model );
+    //     console.log( options );
+    //     get the localStorage item and update it
+    //     localStorage.setItem(
+    //         'Account-' + this.parent + '-'+ this.id,
+    //         JSON.stringify({id: this.id, email: this.email, parent: this.parent})
+    //     );
+    // },
+
 });
 
 // js/models/accountDetail.js
@@ -55,6 +84,16 @@ app.Models.Front.AccountDetail = app.Models.Front.Account.extend({
     }
 });
 
+app.Models.Front.Cart = Backbone.Model.extend({
+    defaults: {
+        name: 'cart',
+    },
+
+    initialize: function(){
+        this.events = new app.Collections.Front.RegEvents;
+    },
+});
+
 // js/models/login.js
 
 // Login Model
@@ -169,37 +208,53 @@ app.Collections.Front.Accounts = Backbone.Collection.extend({
     model: app.Models.Front.Account,
 
     initialize: function( parent ){
-        console.log( 'initialize called with ' + parent );
         this.parent = parent;
     },
 
-    localStorage: new Backbone.LocalStorage( 'Accounts-' ),
+    //localStorage: new Backbone.LocalStorage( 'Accounts-' ),
+
+    urlBase: function(){
+        return appAccountUrl;
+    },
+
+    // sync: function( method, model, options ){
+    //     console.log('sync called on collection. method: ' + method );
+    //     //console.log( method );
+    //     switch( method ){
+    //         case 'create':
+    //             console.log('Create called on Accounts' + model);
+    //             break;
+    //         case 'read':
+    //             console.log('Read called on Accounts' + model);
+    //             break;
+    //         case 'update':
+    //             console.log('Update called on Accounts' + model);
+    //             break;
+    //         case 'delete':
+    //             console.log('Delete called on Accounts' + model);
+    //             break;
+    //     }
+    //
+    // },
 
-    sync: function( method, model, options ){
-        return;
-        //console.log('sync called on collection. method: ' + method );
-        //console.log( method );
-        switch( method ){
-            case 'create':
-                console.log('Create called on Accounts' + model);
-                break;
-            case 'read':
-                console.log('Read called on Accounts' + model);
-                break;
-            case 'update':
-                console.log('Update called on Accounts' + model);
-                break;
-            case 'delete':
-                console.log('Delete called on Accounts' + model);
-                break;
-        }
+    create: function( model ){
+        localStorage.setItem('Account-' + model.parent + '-'+ model.id, JSON.stringify( model ) );
+        this.add( model );
+    },
 
+    remove: function( model ){
+        localStorage.removeItem( localStorage.key('Account-' + model.parent + '-'+ model.id ) );
+        console.log( 'Delete called in collection ' );
     },
 
-    create: function( model ){
-        localStorage.setItem('Account-' + model.parent + '-'+ model.id, JSON.stringify( model ) );
+    read: function(){
+        console.log( 'Read called' );
     },
 
+    // save: function(){
+    //     console.log('Update Called');
+    // },
+
     fetch: function(){
         var newModels = [];
         for ( var i = 0; i < localStorage.length; i++ ) {
@@ -224,6 +279,30 @@ app.Collections.Front.RegClasses = Backbone.Collection.extend({
 
 });
 
+app.Collections.Front.RegEvents = Backbone.Collection.extend({
+    model: app.Models.Front.RegEvent,
+
+    initialize: function(){
+        // something here
+    },
+
+    urlBase: function(){
+        return appAccountUrl;
+    },
+
+    create: function( model ){},
+
+    remove: function( model ){},
+
+    read: function(){},
+
+    update: function(){},
+
+    fetch: function(){
+        // something here for the fetch
+    },
+});
+
 // js/collections/regRates.js
 
 // Registration Rate Collection
@@ -251,7 +330,7 @@ app.Views.Front.Account = Backbone.View.extend({
 
     initialize: function(){
         this.listenTo( this.model, 'change', this.render );
-        this.listenTo( this.model, 'destroy', this.remove );
+        //this.listenTo( this.model, 'destroy', this.remove );
         return this;
     },
 
@@ -264,10 +343,8 @@ app.Views.Front.Account = Backbone.View.extend({
 
     deleteOne: function(){
         //console.log( this.model );
-        var regClass = this.model.get('parent');
-        console.log( regClass );
         this.model.destroy();
-        //regClass.trigger('change');
+        this.remove();
     },
 
     edit: function(){
@@ -362,7 +439,7 @@ app.Views.Front.Login = Backbone.View.extend({
 });
 
 // js/views/regClass.js
-
+var newId = 0;
 app.Views.Front.RegClass = Backbone.View.extend({
     tagName: 'div',
 
@@ -375,15 +452,19 @@ app.Views.Front.RegClass = Backbone.View.extend({
         this.listenTo( this.model.accounts, 'create', this.addOne );
         this.listenTo( this.model.accounts, 'reset', this.addAll );
         this.listenTo( this.model, 'change', this.updateCount );
-        //this.listenTo( this.model, 'change', this.render );
-        //this.listenTo( this.model, 'change:accounts', this.render );
 
         this.model.accounts.fetch();
         return this;
     },
 
+    deleteOne: function(){
+        console.log( 'Delete called' );
+        //console.log( event );
+    },
+
     events: {
         'click .addRegistrant': 'newEntry',
+        //'click .glm-reg-level-registrant-delete': 'deleteOne',
     },
 
     // For the new entry check the email from the server and see
@@ -418,7 +499,10 @@ app.Views.Front.RegClass = Backbone.View.extend({
                 this.model.trigger('change');
                 this.$newEmail.val('');
             } else if ( account.email !== undefined ) {
+                // use the dummy id
+                newId++;
                 this.model.accounts.create({
+                    id: 'new_' + newId,
                     email: account.email,
                     parent: this.model.id
                 });
@@ -432,6 +516,7 @@ app.Views.Front.RegClass = Backbone.View.extend({
     },
 
     render: function(){
+        this.model.set({ reg_count: this.model.accounts.length });
         this.$el.html( this.template( this.model.toJSON() ) );
         // Need to see if this class has attendees and render them
         var view = this.model.accounts.map(function(item){
index c0023ac..7e671a1 100644 (file)
@@ -10,6 +10,23 @@ app.Models.Front.Account = Backbone.Model.extend({
         parent: '',
     },
 
+    url: function(){
+        return appAccountUrl + '?model=' + this.id;
+    },
+
+    sync: function( method, model ){
+        // console.log( 'sync in model' );
+        // console.log( method );
+        // console.log( model );
+        switch ( method ) {
+            case 'delete':
+                console.log( 'Delete called in account model' );
+                break;
+        }
+        return false; //Backbone.sync.apply(this, arguments);
+
+    },
+
     initialize: function(){
         this.on( 'invalid', function( model, error ){
             console.log( error );
@@ -26,9 +43,16 @@ app.Models.Front.Account = Backbone.Model.extend({
         }
     },
 
-    delete: function( model ){
-        console.log( 'Model delete called ' );
-        console.log( model );
-    },
+    // save: function( model, options ){
+    //     console.log( 'Save called on model account' );
+    //     console.log( this );
+    //     console.log( model );
+    //     console.log( options );
+    //     get the localStorage item and update it
+    //     localStorage.setItem(
+    //         'Account-' + this.parent + '-'+ this.id,
+    //         JSON.stringify({id: this.id, email: this.email, parent: this.parent})
+    //     );
+    // },
 
 });
diff --git a/js/models/front/cart.js b/js/models/front/cart.js
new file mode 100644 (file)
index 0000000..1436eee
--- /dev/null
@@ -0,0 +1,9 @@
+app.Models.Front.Cart = Backbone.Model.extend({
+    defaults: {
+        name: 'cart',
+    },
+
+    initialize: function(){
+        this.events = new app.Collections.Front.RegEvents;
+    },
+});
index 96049f8..55dd8af 100644 (file)
@@ -16,7 +16,7 @@ app.Views.Front.Account = Backbone.View.extend({
 
     initialize: function(){
         this.listenTo( this.model, 'change', this.render );
-        this.listenTo( this.model, 'destroy', this.remove );
+        //this.listenTo( this.model, 'destroy', this.remove );
         return this;
     },
 
@@ -29,10 +29,8 @@ app.Views.Front.Account = Backbone.View.extend({
 
     deleteOne: function(){
         //console.log( this.model );
-        var regClass = this.model.get('parent');
-        console.log( regClass );
         this.model.destroy();
-        //regClass.trigger('change');
+        this.remove();
     },
 
     edit: function(){
index d9bef8e..e24e12d 100644 (file)
@@ -1,5 +1,5 @@
 // js/views/regClass.js
-
+var newId = 0;
 app.Views.Front.RegClass = Backbone.View.extend({
     tagName: 'div',
 
@@ -12,15 +12,19 @@ app.Views.Front.RegClass = Backbone.View.extend({
         this.listenTo( this.model.accounts, 'create', this.addOne );
         this.listenTo( this.model.accounts, 'reset', this.addAll );
         this.listenTo( this.model, 'change', this.updateCount );
-        //this.listenTo( this.model, 'change', this.render );
-        //this.listenTo( this.model, 'change:accounts', this.render );
 
         this.model.accounts.fetch();
         return this;
     },
 
+    deleteOne: function(){
+        console.log( 'Delete called' );
+        //console.log( event );
+    },
+
     events: {
         'click .addRegistrant': 'newEntry',
+        //'click .glm-reg-level-registrant-delete': 'deleteOne',
     },
 
     // For the new entry check the email from the server and see
@@ -55,7 +59,10 @@ app.Views.Front.RegClass = Backbone.View.extend({
                 this.model.trigger('change');
                 this.$newEmail.val('');
             } else if ( account.email !== undefined ) {
+                // use the dummy id
+                newId++;
                 this.model.accounts.create({
+                    id: 'new_' + newId,
                     email: account.email,
                     parent: this.model.id
                 });
@@ -69,6 +76,7 @@ app.Views.Front.RegClass = Backbone.View.extend({
     },
 
     render: function(){
+        this.model.set({ reg_count: this.model.accounts.length });
         this.$el.html( this.template( this.model.toJSON() ) );
         // Need to see if this class has attendees and render them
         var view = this.model.accounts.map(function(item){
index dfb231c..587cba0 100644 (file)
@@ -38,7 +38,7 @@
     public function modelAction($actionData = false)
     {
         $scripts = array(
-            'backbone-local' => 'js/lib/backbone.localStorage.min.js',
+            //'backbone-local' => 'js/lib/backbone.localStorage.min.js',
             'regApp'         => 'js/frontRegApp.js',
         );
         foreach ( $scripts as $scriptName => $scriptPath ) {
index 92b4779..034facc 100644 (file)
@@ -74,6 +74,7 @@
 {* And create the RegClasses collection *}
 <script>
 var appLoginUrl = '{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=login';
+var appAccountUrl = '{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=account';
 var ajaxUrl = '{$ajaxUrl}?action=glm_members_admin_ajax';
 var app = {
     Models: { Front: {}, Admin: {} },