Blame view

js/init.js 14.4 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
          // Champs (à remplacer par des objets)
          mdp: '',
          idCarte: '',
33a27ead   Geoffrey PREUD'HOMME   Reset des champs ...
45
46
47
          solde: '',
          credit: '',
          prix: '',
dc030339   Geoffrey PREUD'HOMME   Modification de s...
48
49
          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
          },
5f0b1280   Geoffrey PREUD'HOMME   Reset des données
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
          resetDonnees: function() {
              this.login =  ''
              this.droit =  ''
              this.jeton =  ''
              this.connecte =  false
              this.date =  1
              this.mdp =  ''
              this.idCarte =  ''
              this.solde =  ''
              this.credit =  ''
              this.prix =  ''
              this.moi =  {}
              this.u_nouveau =  {}
              this.clients =  []
              this.transactions =  []
              this.utilisateurs =  []
              this.statistiques =  {}
          },
9868802a   Geoffrey PREUD'HOMME   Liste des clients
94
95
96
97
98
99
100
101
102
103
104
105
106
107
          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...
108
109
          actuTransactions: function() {
              var that = this
5464dee3   Geoffrey PREUD'HOMME   Affichage propres...
110
              if (this.moi.droit >= 3) {
f4bbceae   Geoffrey PREUD'HOMME   Fix appel api tra...
111
                  appel = "transactions"
5464dee3   Geoffrey PREUD'HOMME   Affichage propres...
112
113
114
115
116
117
                  donnees = {}
              } else {
                  appel = "utilisateur/fiche"
                  donnees = {login: this.moi.login}
              }
              this.api(appel, donnees, function(retour, donnees) {
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
118
119
                  switch(retour) {
                      case "ok":
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
120
121
122
123
124
125
126
127
                          that.transactions = donnees.transactions
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
128
          },
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
          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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
          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
157
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
158
          // Affichage
1de801b7   Geoffrey PREUD'HOMME   Ajouter utilisateur
159
160
161
          modal: function(nom) {
              $('#' + nom).openModal();
          },
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
162
163
164
165
166
          toast: function(texte) {
              Materialize.toast(texte, 4000);
          },
          erreur: function(retour, donnees) {
              this.erreurTitre = retour
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
167
              this.erreurMessage = donnees.message
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
168
169
              $("#modalErreur").openModal();
          },
2c195774   Geoffrey PREUD'HOMME   Statistiques client
170
171
172
173
174
175
          changerPage: function(page, onglet) {
              this.page = page
              if (typeof(onglet) == 'string') {
                  $('ul.tabs').tabs('select_tab', onglet);
              }
          },
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
176
          annuler: function(id) {
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
177
178
179
180
              var that = this
              this.api("annuler", {idTransaction: id}, function(retour, donnees) {
                  switch(retour) {
                      case "ok":
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
181
182
183
184
185
                          for (transaction of that.transactions) {
                              if (transaction.id == id) {
                                  transaction.valide = 0
                              }
                          }
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
186
187
188
189
190
191
192
193
194
                          that.toast("Client " + donnees.client + " : " + donnees.soldeAncien + " → " + donnees.soldeNouveau)
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
195
          transaction: function(id, texte) {
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
196
197
198
199
200
201
              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 ...
202
          c_decouvert: function(client, e) {
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
203
204
205
              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 ...
206
                  client.decouvert = $(e.target).is(':checked')
d449eb6b   Geoffrey PREUD'HOMME   Fix mise à jour d...
207
              }
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
208
209
210
211
212
213
214
215
216
217
218
              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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
          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 ...
233
234
235
          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...
236
237
                  switch(retour) {
                      case "ok":
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
                          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...
267
268
269
270
271
272
273
274
275
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
276
277
          // Fonctionnement
          connecter: function() {
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
278
279
280
281
282
              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...
283
                          // TODO Virer les variables non-objet globales
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
284
285
286
287
                          that.login = donnees.login
                          that.droit = donnees.droit
                          that.jeton = donnees.jeton
                          that.connecte = that.date
dc030339   Geoffrey PREUD'HOMME   Modification de s...
288
289
  
                          that.moi = {login: donnees.login, droit: donnees.droit, jeton: donnees.jeton, connecte: that.date}
e5e2f19a   Geoffrey PREUD'HOMME   Mutli-pages
290
291
                          that.toast("Correctement identifié en tant que " + that.login + " pour " + JETON_DUREE/60+ " minutes")
                          that.page = 'operations'
c450b12e   Geoffrey PREUD'HOMME   Annulation + ombres
292
                          break;
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
293
  
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
294
295
296
297
298
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
07329faa   Geoffrey PREUD'HOMME   Simplification de...
299
              return false
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
300
          },
e924b695   Geoffrey PREUD'HOMME   Déconnexion
301
302
303
304
305
          deconnecter: function() {
              var that = this;
              this.api("utilisateur/deconnexion", {} , function(retour, donnees) {
                  switch(retour) {
                      case "ok":
5f0b1280   Geoffrey PREUD'HOMME   Reset des données
306
                          that.resetDonnees()
e924b695   Geoffrey PREUD'HOMME   Déconnexion
307
308
309
310
311
312
313
314
315
316
                          that.page = 'connexion'
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              })
              return false
          },
344a37ad   Geoffrey PREUD'HOMME   Création de clients
317
          creer: function() {
344a37ad   Geoffrey PREUD'HOMME   Création de clients
318
              var that = this
9868802a   Geoffrey PREUD'HOMME   Liste des clients
319
              this.api("client/ajouter", {idCarte: this.idCarte, solde: this.solde, decouvert: this.decouvert}, function(retour, donnees) {
344a37ad   Geoffrey PREUD'HOMME   Création de clients
320
321
                  switch(retour) {
                      case "ok":
1b5199e6   Geoffrey PREUD'HOMME   Toast avant de re...
322
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " crée avec un solde de " + that.solde + " €")
33a27ead   Geoffrey PREUD'HOMME   Reset des champs ...
323
324
                          that.idCarte = ''
                          that.solde = ''
344a37ad   Geoffrey PREUD'HOMME   Création de clients
325
326
                          break;
  
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
327
328
329
330
331
332
333
334
335
336
337
                      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":
1b5199e6   Geoffrey PREUD'HOMME   Toast avant de re...
338
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " rechargé : " + donnees.soldeAncien + " + " + that.credit + " → " + donnees.soldeNouveau + " €")
33a27ead   Geoffrey PREUD'HOMME   Reset des champs ...
339
340
                          that.idCarte = ''
                          that.credit = ''
344a37ad   Geoffrey PREUD'HOMME   Création de clients
341
342
343
344
345
346
347
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
348
349
350
351
352
353
354
355
356
357
358
359
          },
          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":
1b5199e6   Geoffrey PREUD'HOMME   Toast avant de re...
360
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " débité : " + donnees.soldeAncien + " - " + donnees.montant + " → " + donnees.soldeNouveau + " €")
33a27ead   Geoffrey PREUD'HOMME   Reset des champs ...
361
362
                          that.idCarte = ''
                          that.prix = ''
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
363
364
365
366
367
368
369
370
371
372
373
374
375
                          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
376
                          that.transaction(donnees.idTransaction, "Client " + that.idCarte + " vidé : " + donnees.soldeAncien + " → 0 €")
1b5199e6   Geoffrey PREUD'HOMME   Toast avant de re...
377
                          that.idCarte = ''
1dc9797d   Geoffrey PREUD'HOMME   Reste des transac...
378
379
380
381
382
383
384
385
                          break;
  
                      default:
                          that.erreur(retour, donnees);
                          break;
                  }
              });
          },
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
386
387
      },
      computed: {
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
388
          timer: function() {
90e646d5   Geoffrey PREUD'HOMME   Remonte le timer ...
389
              var secondes = this.moi.connecte + JETON_DUREE - this.date
e924b695   Geoffrey PREUD'HOMME   Déconnexion
390
391
392
              if (secondes <= 0) {
                  this.deconnecter()
              }
e5e2f19a   Geoffrey PREUD'HOMME   Mutli-pages
393
394
395
              var minutes = Math.floor(secondes/60)
              var secondes = secondes % 60
              return  minutes + ':' + (secondes < 10 ? '0' : '') + secondes
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
396
397
          }
      },
c85f3520   Geoffrey PREUD'HOMME   Modification des ...
398
      components: {
dc030339   Geoffrey PREUD'HOMME   Modification de s...
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
          '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 ...
415
416
417
418
419
420
      },
      watch: {
          utilisateurs: function() {
              desactiverForms()
          }
      }
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
421
  })
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...
422
  
dc030339   Geoffrey PREUD'HOMME   Modification de s...
423
  // Filtres
d0fe5751   Geoffrey PREUD'HOMME   Liste des transac...
424
425
426
427
  Vue.filter('date', function(timestamp) {
      return Date(timestamp).toLocaleString();
  })
  
dc030339   Geoffrey PREUD'HOMME   Modification de s...
428
  // Actualisation du timer
2146d35a   Geoffrey PREUD'HOMME   Vue interactive
429
430
431
  setInterval(function actualiserDate() {
      app.$data.date = Math.floor(Date.now()/1000)
  }, 1000);
79bb411d   Geoffrey PREUD'HOMME   Possibilité de se...