diff --git a/kfet/models.py b/kfet/models.py index ba521214..b95755b7 100644 --- a/kfet/models.py +++ b/kfet/models.py @@ -593,7 +593,8 @@ class GlobalPermissions(models.Model): ('order_to_inventory', "Générer un inventaire à partir d'une commande"), ('edit_balance_account', "Modifier la balance d'un compte"), ('change_account_password', "Modifier le mot de passe d'une personne de l'équipe"), - ('special_add_account', "Créer un compte avec une balance initiale") + ('special_add_account', "Créer un compte avec une balance initiale"), + ('can_close_kfet', "Peut fermer manuelement la K-Fêt"), ) diff --git a/kfet/static/kfet/js/kfet_open.js b/kfet/static/kfet/js/kfet_open.js index 1655b71f..93374094 100644 --- a/kfet/static/kfet/js/kfet_open.js +++ b/kfet/static/kfet/js/kfet_open.js @@ -1,7 +1,8 @@ -function kfet_open(init_date, init_satus) { +function kfet_open(init_date, init_satus, init_force_close, force_close_url, force_open_url) { // VARIABLES var kfet_open_bullet = $('#kfet-open'); var open_status = $('#open_status'); + var force_close_button = $('#force_close_button'); // bullet var open_color = "#73C252"; var closed_color = "#B42B26"; @@ -13,16 +14,25 @@ function kfet_open(init_date, init_satus) { var kfet_open_date = init_date; var kfet_open = init_status; + var force_close = init_force_close; + + // EVENT + force_close_button.click(function() { + if (force_close) { + $.get(force_open_url, function(data) {}); + } else { + $.get(force_close_url, function(data) {}); + } + }); // INITIALISAITION - update_open_bullet(); - update_open_status(); + update_open(); + update_force_button(); // On recherge toute les 30sec // (dans le cas où le statut deviendrait inconn) setInterval(function() { - update_open_bullet(); - update_open_status(); + update_open(); }, 30 * 1000); // 60 * 1000 milsec // FONCTIONS @@ -39,31 +49,42 @@ function kfet_open(init_date, init_satus) { return tmp; } - function update_open_bullet() { + function do_kfet_close() { + kfet_open_bullet.css({'background-color': closed_color}); + open_status.parent().css({'background-color': closed_color_status}); + open_status.html("FERMÉE"); + } + function do_kfet_open() { + kfet_open_bullet.css({'background-color': open_color}); + open_status.parent().css({'background-color': open_color_status}); + open_status.html("OUVERTE"); + } + function do_kfet_unknown() { + kfet_open_bullet.css({'background-color': unknown_color}); + open_status.parent().css({'background-color': unknown_color_status}); + open_status.html("?????"); + } + function update_open() { nb_min = nb_min_diff(); - console.log("BULLET | K-Fêt ouverte : " + kfet_open); + console.log("K-Fêt ouverte : " + (kfet_open&&(!force_close))); console.log(nb_min + " minute(s) depuis la dernière mise à jour"); - if (nb_min > 15) { - kfet_open_bullet.css({'background-color': unknown_color}); - } else if (kfet_open){ - kfet_open_bullet.css({'background-color': open_color}); + if (force_close) { + do_kfet_close(); } else { - kfet_open_bullet.css({'background-color': closed_color}); + if (nb_min > 15) { + do_kfet_unknown(); + } else if (kfet_open){ + do_kfet_open(); + } else { + do_kfet_close(); + } } } - function update_open_status() { - nb_min = nb_min_diff(); - console.log("STATUS | K-Fêt ouverte : " + kfet_open); - console.log(nb_min + " minute(s) depuis la dernière mise à jour"); - if (nb_min > 15) { - open_status.parent().css({'background-color': unknown_color}); - open_status.html("?????"); - } else if (kfet_open){ - open_status.parent().css({'background-color': open_color}); - open_status.html("OUVERTE"); + function update_force_button() { + if (force_close) { + force_close_button.html('Réouvrir la K-Fêt'); } else { - open_status.parent().css({'background-color': closed_color}); - open_status.html("FERMÉE"); + force_close_button.html('Fermer manuellement'); } } // SYNCHRONIZATION @@ -76,12 +97,21 @@ function kfet_open(init_date, init_satus) { socket.onmessage = function(e) { var data = $.extend({}, websocket_msg_default, JSON.parse(e.data)); - console.log("Message reçu de la part de la porte."); - kfet_open_date = new Date(data['kfet_open_date']); - kfet_open = data['kfet_open']; + if (data['door_action']) { + console.log("* Message reçu de la part de la porte."); - update_open_bullet(); - update_open_status(); + kfet_open_date = new Date(data['door_action']['kfet_open_date']); + kfet_open = data['door_action']['kfet_open']; + + update_open(); + } + if (data['force_action']) { + force_close = data['force_action']['force_close']; + console.log("* Message reçu de la part d'un-e utilisat-rice-eur. Close = " + force_close); + + update_open(); + update_force_button(); + } } } diff --git a/kfet/templates/kfet/base.html b/kfet/templates/kfet/base.html index 6d906436..81ca3dfd 100644 --- a/kfet/templates/kfet/base.html +++ b/kfet/templates/kfet/base.html @@ -21,6 +21,26 @@ + {# K-Fêt open #} + + {% block extra_head %}{% endblock %} {# Vieux IE pas comprendre HTML5 et Media Queries #} diff --git a/kfet/templates/kfet/base_nav.html b/kfet/templates/kfet/base_nav.html index d884d110..ff7314fd 100644 --- a/kfet/templates/kfet/base_nav.html +++ b/kfet/templates/kfet/base_nav.html @@ -57,15 +57,3 @@ - - diff --git a/kfet/templates/kfet/home.html b/kfet/templates/kfet/home.html index 40a1debd..6d4f163f 100644 --- a/kfet/templates/kfet/home.html +++ b/kfet/templates/kfet/home.html @@ -20,8 +20,8 @@
?????
- - Ouvrir manuellement + + Fermer manuellement
diff --git a/kfet/urls.py b/kfet/urls.py index aad89cd4..47f14b52 100644 --- a/kfet/urls.py +++ b/kfet/urls.py @@ -211,7 +211,10 @@ urlpatterns = [ url('^kfet_open/$', views.UpdateKfetOpen.as_view(), - name='kfet.settings.kfet_open'), + name='kfet.kfet_open'), + url('^force_close/$', + views.UpdateForceClose.as_view(), + name='kfet.force_close'), # ----- # Transfers urls diff --git a/kfet/views.py b/kfet/views.py index 7856cf22..77bb061d 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -94,15 +94,37 @@ class UpdateKfetOpen(View): cache.set('KFET_OPEN_DATE', timezone.now()) # Websocket - websocket_data = {} - websocket_data['kfet_open'] = is_open - websocket_data['kfet_open_date'] = timezone.now() + websocket_data = { + 'door_action': { + 'kfet_open': is_open, + 'kfet_open_date': timezone.now(), + }, + } consumers.KfetOpen.group_send('kfet.is_open', websocket_data) (is_open_get, time) = KFET_OPEN() return HttpResponse("%r at %s" % (is_open_get, time.isoformat())) +class UpdateForceClose(View): + def get(self, request, *args, **kwargs): + force_close = "close" in request.GET + cache.set('KFET_FORCE_CLOSE', force_close) + + # Websocket + websocket_data = { + 'force_action': { + 'force_close': force_close, + }, + } + consumers.KfetOpen.group_send('kfet.is_open', websocket_data) + + force_close_get = KFET_FORCE_CLOSE() + time = timezone.now() + return HttpResponse("closed : %r at %s" % (force_close_get, + time.isoformat())) + + @teamkfet_required def login_genericteam(request): # Check si besoin de déconnecter l'utilisateur de CAS