Blame view

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