nodebb-plugin-onekite-calendar 2.0.14 → 2.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/widgets.js +9 -1
  3. package/package.json +1 -1
  4. package/pkg/nodebb-plugin-onekite-calendar-1.3.9.tgz +0 -0
  5. package/pkg/package/CHANGELOG.md +116 -0
  6. package/pkg/package/lib/admin.js +564 -0
  7. package/pkg/package/lib/api.js +1458 -0
  8. package/pkg/package/lib/controllers.js +11 -0
  9. package/pkg/package/lib/db.js +224 -0
  10. package/pkg/package/lib/discord.js +190 -0
  11. package/pkg/package/lib/helloasso.js +352 -0
  12. package/pkg/package/lib/helloassoWebhook.js +389 -0
  13. package/pkg/package/lib/scheduler.js +201 -0
  14. package/pkg/package/lib/widgets.js +468 -0
  15. package/pkg/package/library.js +164 -0
  16. package/pkg/package/package.json +14 -0
  17. package/pkg/package/plugin.json +43 -0
  18. package/pkg/package/public/admin.js +1487 -0
  19. package/pkg/package/public/client.js +2373 -0
  20. package/pkg/package/templates/admin/plugins/calendar-onekite.tpl +307 -0
  21. package/pkg/package/templates/calendar-onekite.tpl +51 -0
  22. package/pkg/package/templates/emails/calendar-onekite_approved.tpl +40 -0
  23. package/pkg/package/templates/emails/calendar-onekite_cancelled.tpl +15 -0
  24. package/pkg/package/templates/emails/calendar-onekite_expired.tpl +11 -0
  25. package/pkg/package/templates/emails/calendar-onekite_paid.tpl +15 -0
  26. package/pkg/package/templates/emails/calendar-onekite_pending.tpl +15 -0
  27. package/pkg/package/templates/emails/calendar-onekite_refused.tpl +15 -0
  28. package/pkg/package/templates/emails/calendar-onekite_reminder.tpl +20 -0
  29. package/plugin.json +1 -1
  30. package/public/client.js +42 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog – calendar-onekite
2
2
 
3
+ ## 1.3.9
4
+ - Mobile FAB : correction de la sélection de plage (tous les jours sélectionnés sont désormais bien inclus dans la surbrillance).
5
+ - Mobile FAB : amélioration du rendu en mode sombre (bordures/fonds adaptés, contraste renforcé).
6
+
3
7
  ## 1.3.8
4
8
  - ACP Comptabilisation : ajout d’un **grand total** (montant total des locations payées sur la période) + compteurs (payées / sorties gratuites).
5
9
 
@@ -110,3 +114,7 @@
110
114
  - Mobile: ajout d’un bouton flottant (FAB) sur la page calendrier uniquement.
111
115
  - Le FAB ouvre une mini-modale de sélection de dates (dd/mm/yyyy) puis ouvre la modale standard de réservation.
112
116
  - Le FAB est automatiquement retiré quand on navigue hors de la page calendrier.
117
+
118
+ ## 1.3.10
119
+ - Widget : ne pas afficher le statut « Payée » pour les sorties gratuites (validateurs).
120
+ - Modale réservation : affichage de la période corrigé (fin affichée inclusive, fin stockée exclusive).
package/lib/widgets.js CHANGED
@@ -319,7 +319,15 @@ dateClick: function() { window.location.href = calUrl; },
319
319
  const k = String(s || '');
320
320
  return map[k] || '';
321
321
  });
322
- const status = (String(ep.type || '') === 'reservation') ? statusLabel(ep.status) : '';
322
+ let status = (String(ep.type || '') === 'reservation') ? statusLabel(ep.status) : '';
323
+ // Do not display "Payée" for free validator rentals.
324
+ // Free rentals are marked with extendedProps.isFree === true.
325
+ try {
326
+ const isFree = !!(ep && (ep.isFree === true || String(ep.isFree) === 'true'));
327
+ if (isFree && String(ep.status) === 'paid') {
328
+ status = '';
329
+ }
330
+ } catch (e) {}
323
331
  const reservedBy = (String(ep.type || '') === 'reservation') ? String(ep.reservedByUsername || '') : '';
324
332
  const html = '' +
325
333
  '<div style="font-weight:600; margin-bottom:2px;">' + escapeHtml(title) + '</div>' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-onekite-calendar",
3
- "version": "2.0.14",
3
+ "version": "2.0.16",
4
4
  "description": "FullCalendar-based equipment reservation workflow with admin approval & HelloAsso payment for NodeBB",
5
5
  "main": "library.js",
6
6
  "license": "MIT",
@@ -0,0 +1,116 @@
1
+ # Changelog – calendar-onekite
2
+
3
+ ## 1.3.8
4
+ - ACP Comptabilisation : ajout d’un **grand total** (montant total des locations payées sur la période) + compteurs (payées / sorties gratuites).
5
+
6
+ ## 1.3.7
7
+ - Mobile FAB : remplacement des 2 champs date par un **sélecteur unique** (calendrier) permettant de choisir directement une plage (clic début puis fin, fin incluse), avec dates passées/aujourd'hui désactivées.
8
+
9
+ ## 1.3.6
10
+ - ACP Comptabilisation : ajout d’un tableau séparé « Détails des sorties gratuites » (avec le nom du matériel).
11
+ - Mobile FAB : la modale utilise maintenant des champs date avec calendrier (type="date") et empêche toute réservation pour le jour même ou dans le passé.
12
+
13
+ ## 1.3.5
14
+ - ACP : ajout d’un paramètre « Location longue durée (jours) pour validateurs ». Si une réservation faite par un validateur dépasse ce nombre de jours, elle redevient payante et suit le workflow normal (demande → validation → paiement HelloAsso). Mets 0 pour conserver le comportement « toujours gratuit ».
15
+
16
+ ## 1.3.4
17
+ - Réservations gratuites (validateurs) : ne sont plus comptées comme chiffre d’affaires dans la comptabilisation. Elles apparaissent désormais sur une ligne séparée « Sorties gratuites » (et sont marquées (gratuit) dans le détail).
18
+
19
+ ## 1.3.3
20
+ - Comptabilité : les réservations « auto-checkées » (réservations faites par un validateur) recalculent désormais le total côté serveur (catalogue HelloAsso × nb jours calendaires) afin d’être comptabilisées correctement.
21
+
22
+ ## 1.3.2
23
+ - Les membres validateurs (ceux qui peuvent valider/supprimer une demande) voient leurs propres réservations passer directement en statut payé/checked (pas de workflow paiement).
24
+ - UI : message de succès adapté (réservation confirmée).
25
+
26
+ ## 1.3.1
27
+ - ACP : ajout de 2 actions rapides dans l’onglet Maintenance : « Tout mettre en maintenance » et « Tout enlever de maintenance » (avec audit).
28
+
29
+ ## 1.3.0
30
+ - Maintenance (sans dates) : blocage manuel ON/OFF par matériel (ACP + API). Les matériels en maintenance sont grisés et affichés comme : 🔧 Nom (en maintenance).
31
+ - Audit : journal des actions (demande, validation, refus, annulation, maintenance) avec consultation et purge par année (ACP + API).
32
+
33
+ ## 1.2.18
34
+ - API events + anti double booking : les tests de chevauchement utilisent désormais en priorité startDate/endDate (YYYY-MM-DD) quand disponibles (logique calendaire pure, endDate exclusive). Cela supprime définitivement les faux chevauchements liés aux timestamps/fuseaux/DST, notamment sur mobile et « Durée rapide ».
35
+
36
+ ## 1.2.17
37
+ - Modale réservation : la requête de disponibilité initiale utilise aussi des dates calendaires (YYYY-MM-DD) au lieu de startStr/endStr/toISOString(), ce qui corrige le grisé erroné (mobile + durée rapide).
38
+
39
+ ## 1.2.16
40
+ - Modale réservation (Durée rapide) : correction du grisé erroné des matériels réservés la veille. Les requêtes de disponibilité utilisent désormais des dates calendaires (YYYY-MM-DD) au lieu de toISOString() (UTC), pour éviter tout faux chevauchement lié au fuseau/DST.
41
+
42
+ ## 1.2.15
43
+ - Réservations (Durée rapide) : génération des évènements all-day basée sur startDate/endDate (YYYY-MM-DD) quand disponibles, pour éviter tout décalage lié à toISOString() (UTC) et empêcher un grisé « non disponible » le jour suivant.
44
+
45
+ ## 1.2.14
46
+ - Réservations : correction d’un faux chevauchement (problème 1h) quand FullCalendar envoie des bornes all-day à minuit UTC (Z / +00:00) — le lendemain n’est plus marqué « non disponible ».
47
+
48
+ ## 1.2.13
49
+ - ACP (mode sombre) : correction de la visibilité de la liste d’autocomplete d’adresse (couleurs via variables Bootstrap)
50
+
51
+ ## 1.2.12
52
+ - Modales (calendrier + ACP) : autocomplete adresse rendu identique et compatible Bootstrap input-group (plus de wrapper qui casse l’affichage)
53
+
54
+ ## 1.2.11
55
+ - ACP : ajout de la recherche automatique d’adresse (autocomplete Nominatim) dans la modale de validation (unitaire + batch), comme sur le calendrier
56
+
57
+ ## 1.2.10
58
+ - HelloAsso : calcul des jours 100% fiable (différence en jours calendaires Y/M/J, sans dépendance aux heures/au fuseau/DST)
59
+ - FullCalendar : endDate traitée comme exclusive partout (UI + checkout)
60
+ - HelloAsso : montant du checkout recalculé côté serveur à partir du catalogue (prix/jour × nbJours)
61
+
62
+ ## 1.2.9
63
+ - Modale réservation : retour du grisé des matériels indisponibles (API events expose à nouveau itemIds)
64
+
65
+ ## 1.2.8
66
+ - Popup réservation : correction « Durée rapide » (la période envoyée correspond bien à la durée sélectionnée)
67
+
68
+ ## 1.2.7
69
+ - UI : suppression du bouton flottant mobile « + Réserver »
70
+ - Client : nettoyage du code associé (suppression du bloc FAB)
71
+
72
+ ## 1.2.6
73
+ - ACP : anti double action (verrou UI + boutons désactivés/spinner) sur valider/refuser (unitaire + batch)
74
+
75
+ ## 1.2.5
76
+ - Mobile : bouton flottant « + Réserver »
77
+ - Création : anti double-tap/click (verrou actions) + invalidation cache events + refetch léger
78
+ - Calendrier : jours passés / aujourd’hui affichés comme non-sélectionnables (règle visuelle)
79
+ - Popup réservation : raccourcis de durée (1j/2j/3j/7j) + recalcul total + mise à jour des matériels bloqués
80
+ - ACP : actions en batch (valider/refuser une sélection) + compteur de sélection
81
+ - API : idempotence sur valider/refuser + audit enrichi (refusedBy, cancelledByUsername)
82
+
83
+ ## 1.0.3
84
+ - Suppression du texte d’archivage dans le toast de purge (plus de « 0 archivés »)
85
+ - Renommage du plugin : nodebb-plugin-onekite-calendar
86
+ - Discord : notification « ❌ Réservation annulée » (annulation manuelle + annulation automatique) + option ACP
87
+
88
+ ## 1.0.2
89
+ - Purge calendrier : suppression réelle des réservations (aucune logique d’archivage)
90
+ - Compta conservée séparément (la purge n’y touche jamais)
91
+
92
+ ## 1.0.1
93
+ - ACP : modales Valider / Refuser OK (plus de retour au premier onglet)
94
+ - Scheduler : optimisation (batch DB, scans réduits)
95
+ - API events : pagination interne + ETag optimisé
96
+ - HelloAsso : token mis en cache + protection rate-limit (429 / Cloudflare 1015), sans logs supplémentaires
97
+ - Discord : notifications en embeds + icônes ⏳ (demande) et 💳 (paiement)
98
+ - Widget : suppression de “2 semaines” dans le titre affiché
99
+ - Correctifs divers de stabilité/performance (dont crash au démarrage)
100
+
101
+ ## 1.0.0
102
+ - Première version stable du plugin calendar-onekite
103
+ - Gestion des réservations de matériel avec contrôle de disponibilité
104
+ - Calendrier FullCalendar via CDN
105
+ - Validation / refus des demandes depuis l’ACP
106
+ - Notifications Discord
107
+ - Intégration paiements HelloAsso
108
+
109
+ ## 1.2.19
110
+ - Mobile: ajout d’un bouton flottant (FAB) sur la page calendrier uniquement.
111
+ - Le FAB ouvre une mini-modale de sélection de dates (dd/mm/yyyy) puis ouvre la modale standard de réservation.
112
+ - Le FAB est automatiquement retiré quand on navigue hors de la page calendrier.
113
+
114
+ ## 1.3.10
115
+ - Widget : ne pas afficher le statut « Payée » pour les sorties gratuites (validateurs).
116
+ - Modale réservation : affichage de la période corrigé (fin affichée inclusive, fin stockée exclusive).