Blame view

js/init.js 13.3 KB
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
1
2
  // Constantes
  var JETON_TAILLE = 30 // Taille d'un jeton
90e646d5   Geoffrey PREUD'HOMME   Remonte le timer ...
3
  var JETON_DUREE = 5*60 // Temps de validité du jeton en secondes
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
4
5
6
7
8
9
10
11
  
  var TRANSACTION_CREATION = 1
  var TRANSACTION_RECHARGEMENT = 2
  var TRANSACTION_PAIEMENT = 3
  var TRANSACTION_VIDANGE = 4
  
  var TRANSACTION_DUREE = 60
  
344a37ad   Geoffrey PREUD'HOMME   Création de clients
12
13
  var PEUT_NFC = false
  
07329faa   Geoffrey PREUD'HOMME   Simplification de...
14
  // Préparation de l'interactivité
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
15
16
17
  function desactiverForms() {
      $('form').submit(function() { return false });
  }
bf26706c   Geoffrey PREUD'HOMME   Écran principal
18
19
20
  $(function(){
      $('.button-collapse').sideNav();
      $('.modal-trigger').leanModal()
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
21
      desactiverForms()
4525b510   Geoffrey PREUD'HOMME   Des trucs useless
22
      $('[name=idCarte]').characterCounter();
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
23
  });
bf26706c   Geoffrey PREUD'HOMME   Écran principal
24
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
25
  // Application
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
26
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
27
28
29
  var app = new Vue({
      el: 'body',
      data: {
344a37ad   Geoffrey PREUD'HOMME   Création de clients
30
31
32
          // Constantes
          PEUT_NFC: PEUT_NFC,
          // Affichage
e5e2f19a   Geoffrey PREUD'HOMME   Mutli-pages
33
          page: 'connexion',
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
34
35
          erreurTitre: '',
          erreurMessage: '',
344a37ad   Geoffrey PREUD'HOMME   Création de clients
36
          // Session
9868802a   Geoffrey PREUD'HOMME   Liste des clients
37
38
39
          login: '',
          droit: '',
          jeton: '',
344a37ad   Geoffrey PREUD'HOMME   Création de clients
40
          connecte: false,
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
41
          date: 1,
dc030339   Geoffrey PREUD'HOMME   Modification de s...
42
43
44
45
46
47
48
49
          // Champs (à remplacer par des objets)
          mdp: '',
          idCarte: '',
          solde: 0,
          credit: 0,
          prix: 0,
          moi: {},
          u_nouveau: {},
9868802a   Geoffrey PREUD'HOMME   Liste des clients
50
51
          // Données
          clients: [],
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
52
          transactions: [],
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
53
          utilisateurs: [],
2c195774   Geoffrey PREUD'HOMME   Statistiques client
54
          statistiques: {},
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
55
56
57
58
      },
      methods: {
          // API
          apiBrute: function(chemin, donnees, cb) {
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
59
60
              $('body').css('opacity', 0.7)
              $.post('api/' + chemin, donnees).done(function(data) {
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
61
                  cb(data['status'], data);
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
62
63
64
65
              }).error(function() {
                  cb('erreur_communication', {});
              }).always(function() {
                  $('body').css('opacity', 1)
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
66
67
              })
          },
344a37ad   Geoffrey PREUD'HOMME   Création de clients
68
          api: function(chemin, donnees, cb) {
90e646d5   Geoffrey PREUD'HOMME   Remonte le timer ...
69
              var that = this
344a37ad   Geoffrey PREUD'HOMME   Création de clients
70
              donnees['jeton'] = this.jeton
90e646d5   Geoffrey PREUD'HOMME   Remonte le timer ...
71
72
73
74
              this.apiBrute(chemin, donnees, function(retour, donnees) {
                  that.moi.connecte = that.date
                  cb(retour, donnees)
              })
344a37ad   Geoffrey PREUD'HOMME   Création de clients
75
          },
9868802a   Geoffrey PREUD'HOMME   Liste des clients
76
77
78
79
80
81
82
83
84
85
86
87
88
89
          actuClients: function() {
              var that = this
              this.api("client/liste", {}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.clients = donnees.clients
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
          },
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
90
91
92
93
94
          actuTransactions: function() {
              var that = this
              this.api("transactions", {}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
95
96
97
98
99
100
101
102
                          that.transactions = donnees.transactions
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
103
          },
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
104
105
106
107
108
109
110
111
112
113
114
115
116
117
          actuUtilisateurs: function() {
              var that = this
              this.api("utilisateur/liste", {}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.utilisateurs = donnees.utilisateurs
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
          },
2c195774   Geoffrey PREUD'HOMME   Statistiques client
118
119
120
121
122
123
124
125
126
127
128
129
130
131
          actuStatistiques: function() {
              var that = this
              this.api("statistiques", {}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.statistiques = donnees
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
          },
9868802a   Geoffrey PREUD'HOMME   Liste des clients
132
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
133
          // Affichage
1de801b7   Geoffrey PREUD'HOMME   Ajouter utilisateur
134
135
136
          modal: function(nom) {
              $('#' + nom).openModal();
          },
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
137
138
139
140
141
          toast: function(texte) {
              Materialize.toast(texte, 4000);
          },
          erreur: function(retour, donnees) {
              this.erreurTitre = retour
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
142
              this.erreurMessage = donnees.message
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
143
144
              $("#modalErreur").openModal();
          },
2c195774   Geoffrey PREUD'HOMME   Statistiques client
145
146
147
148
149
150
          changerPage: function(page, onglet) {
              this.page = page
              if (typeof(onglet) == 'string') {
                  $('ul.tabs').tabs('select_tab', onglet);
              }
          },
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
151
          annuler: function(id) {
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
152
153
154
155
              var that = this
              this.api("annuler", {idTransaction: id}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
156
157
158
159
160
                          for (transaction of that.transactions) {
                              if (transaction.id == id) {
                                  transaction.valide = 0
                              }
                          }
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
161
162
163
164
165
166
167
168
169
                          that.toast("Client " + donnees.client + " : " + donnees.soldeAncien + " → " + donnees.soldeNouveau)
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
170
          transaction: function(id, texte) {
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
171
172
173
174
175
176
              var that = this
              var interieur = $('<span>').text(texte + ' ').append($('<a>').text('Annuler').one('click', function() {
                  that.annuler(id)
              }))
              that.toast(interieur);
          },
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
177
          c_decouvert: function(client, e) {
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
178
179
180
              var that = this
              // Hack pour récupérer la vraie valeur (decouvert peut mais pas obligatoirement avoir la bonne valeur tel qu'implémenté dans le HTML actuellmenent)
              if (typeof(e) == 'object') {
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
181
                  client.decouvert = $(e.target).is(':checked')
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
182
              }
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
183
184
185
186
187
188
189
190
191
192
193
              this.api("client/decouvert", {idCarte: client.idCarte, decouvert: client.decouvert}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
1de801b7   Geoffrey PREUD'HOMME   Ajouter utilisateur
194
195
196
197
198
199
200
201
202
203
204
205
206
207
          u_ajouter: function(utilisateur) {
              var that = this
              this.api("utilisateur/ajouter", utilisateur, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.toast("Utilisateur " + utilisateur.login + " ajouté")
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
208
209
210
          u_mdp: function(utilisateur) {
              var that = this
              this.api("utilisateur/mdp", {login: utilisateur.login, mdp: utilisateur.mdp}, function(retour, donnees) {
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
211
212
                  switch(retour) {
                      case "ok":
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
                          that.toast(utilisateur.login + " : mot de passe changé")
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
          u_droit: function(utilisateur) {
              var that = this
              this.api("utilisateur/droit", {login: utilisateur.login, droit: utilisateur.droit}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.toast(utilisateur.login + " : droit changé")
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
          u_carte: function(utilisateur) {
              var that = this
              this.api("utilisateur/carte", {login: utilisateur.login, idCarte: utilisateur.idCarte}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.toast(utilisateur.login + " : carte changée")
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
242
243
244
245
246
247
248
249
250
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
251
252
          // Fonctionnement
          connecter: function() {
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
253
254
255
256
257
              var that = this;
              this.apiBrute("utilisateur/connexion", {login: this.login , mdp: this.mdp} , function(retour, donnees) {
                  that.mdp = ''
                  switch(retour) {
                      case "ok":
dc030339   Geoffrey PREUD'HOMME   Modification de s...
258
                          // TODO Virer les variables non-objet globales
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
259
260
261
262
                          that.login = donnees.login
                          that.droit = donnees.droit
                          that.jeton = donnees.jeton
                          that.connecte = that.date
dc030339   Geoffrey PREUD'HOMME   Modification de s...
263
264
  
                          that.moi = {login: donnees.login, droit: donnees.droit, jeton: donnees.jeton, connecte: that.date}
e5e2f19a   Geoffrey PREUD'HOMME   Mutli-pages
265
266
                          that.toast("Correctement identifié en tant que " + that.login + " pour " + JETON_DUREE/60+ " minutes")
                          that.page = 'operations'
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
267
                          break;
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
268
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
269
270
271
272
273
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
07329faa   Geoffrey PREUD'HOMME   Simplification de...
274
              return false
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
275
          },
e924b695   Geoffrey PREUD'HOMME   Déconnexion
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
          deconnecter: function() {
              var that = this;
              this.api("utilisateur/deconnexion", {} , function(retour, donnees) {
                  switch(retour) {
                      case "ok":
                          that.moi = {}
                          that.page = 'connexion'
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
              return false
          },
344a37ad   Geoffrey PREUD'HOMME   Création de clients
292
          creer: function() {
344a37ad   Geoffrey PREUD'HOMME   Création de clients
293
              var that = this
9868802a   Geoffrey PREUD'HOMME   Liste des clients
294
              this.api("client/ajouter", {idCarte: this.idCarte, solde: this.solde, decouvert: this.decouvert}, function(retour, donnees) {
344a37ad   Geoffrey PREUD'HOMME   Création de clients
295
296
                  switch(retour) {
                      case "ok":
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
297
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " crée avec un solde de " + that.solde + " €")
344a37ad   Geoffrey PREUD'HOMME   Création de clients
298
299
                          break;
  
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
300
301
302
303
304
305
306
307
308
309
310
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
          recharger: function() {
              var that = this
              this.api("client/recharger", {idCarte: this.idCarte, montant: this.credit}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
311
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " rechargé : " + donnees.soldeAncien + " + " + that.credit + " → " + donnees.soldeNouveau + " €")
344a37ad   Geoffrey PREUD'HOMME   Création de clients
312
313
314
315
316
317
318
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
319
320
321
322
323
324
325
326
327
328
329
330
          },
          payer: function(quantite) {
              var that = this
              var options = {idCarte: this.idCarte}
              if (typeof(quantite) == 'number') {
                  options.quantite = quantite
              } else {
                  options.montant = that.prix
              }
              this.api("client/payer", options, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
331
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " débité : " + donnees.soldeAncien + " - " + donnees.montant + " → " + donnees.soldeNouveau + " €")
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
332
333
334
335
336
337
338
339
340
341
342
343
344
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
          vidanger: function() {
              var that = this
              this.api("client/vidange", {idCarte: this.idCarte}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
345
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " vidé : " + donnees.soldeAncien + " → 0 €")
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
346
347
348
349
350
351
352
353
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
354
355
      },
      computed: {
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
356
          timer: function() {
90e646d5   Geoffrey PREUD'HOMME   Remonte le timer ...
357
              var secondes = this.moi.connecte + JETON_DUREE - this.date
e924b695   Geoffrey PREUD'HOMME   Déconnexion
358
359
360
              if (secondes <= 0) {
                  this.deconnecter()
              }
e5e2f19a   Geoffrey PREUD'HOMME   Mutli-pages
361
362
363
              var minutes = Math.floor(secondes/60)
              var secondes = secondes % 60
              return  minutes + ':' + (secondes < 10 ? '0' : '') + secondes
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
364
365
          }
      },
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
366
      components: {
dc030339   Geoffrey PREUD'HOMME   Modification de s...
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
          'todo': Vue.extend({
              template: $('#todo').html(),
          }),
          'umodifier': Vue.extend({
              props: ['utilisateur'],
              template: $('#u_modifier').html(),
              methods: { // TODO Pas bien
                  u_droit: function(data) { return this.$parent.u_droit(data) },
                  u_mdp: function(data) { return this.$parent.u_mdp(data) },
                  u_carte: function(data) { return this.$parent.u_carte(data) },
              },
              computed: {
                  moi: function() { return this.$parent.moi },
              },
          }),
  
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
383
384
385
386
387
388
      },
      watch: {
          utilisateurs: function() {
              desactiverForms()
          }
      }
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
389
  })
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
390
  
dc030339   Geoffrey PREUD'HOMME   Modification de s...
391
  // Filtres
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
392
393
394
395
  Vue.filter('date', function(timestamp) {
      return Date(timestamp).toLocaleString();
  })
  
dc030339   Geoffrey PREUD'HOMME   Modification de s...
396
  // Actualisation du timer
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
397
398
399
  setInterval(function actualiserDate() {
      app.$data.date = Math.floor(Date.now()/1000)
  }, 1000);
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...