nodebb-plugin-onekite-calendar 2.0.24 → 2.0.26
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.
- package/CHANGELOG.md +6 -0
- package/lib/admin.js +3 -0
- package/lib/widgets.js +35 -0
- package/package.json +1 -1
- package/pkg/package/CHANGELOG.md +15 -0
- package/pkg/package/lib/admin.js +3 -0
- package/pkg/package/package.json +1 -1
- package/plugin.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog – calendar-onekite
|
|
2
2
|
|
|
3
|
+
## 1.3.21
|
|
4
|
+
- Comptabilisation : les **sorties gratuites annulées** ne sont plus comptées (elles sont exclues si `cancelledAt` est présent, même si le statut est resté `paid`).
|
|
5
|
+
|
|
6
|
+
## 1.3.20
|
|
7
|
+
- Temps réel : le **widget** (Calendrier 2 semaines) se met à jour dynamiquement comme la page calendrier (créations / changements de statut / annulations…), sans rechargement.
|
|
8
|
+
|
|
3
9
|
## 1.3.19
|
|
4
10
|
- Annulation : un validateur/gestionnaire peut désormais annuler **même sa propre** réservation après paiement (la restriction `cannot-cancel-paid` ne s'applique plus aux validateurs).
|
|
5
11
|
|
package/lib/admin.js
CHANGED
|
@@ -512,6 +512,9 @@ admin.getAccounting = async function (req, res) {
|
|
|
512
512
|
const r = await dbLayer.getReservation(rid);
|
|
513
513
|
if (!r) continue;
|
|
514
514
|
if (String(r.status) !== 'paid') continue;
|
|
515
|
+
// Defensive: if a reservation was cancelled but its status remained 'paid'
|
|
516
|
+
// (legacy data / edge cases), never count it in accounting.
|
|
517
|
+
if (r.cancelledAt) continue;
|
|
515
518
|
if (r.accPurgedAt) continue;
|
|
516
519
|
const start = parseInt(r.start, 10);
|
|
517
520
|
if (!Number.isFinite(start)) continue;
|
package/lib/widgets.js
CHANGED
|
@@ -370,6 +370,41 @@ dateClick: function() { window.location.href = calUrl; },
|
|
|
370
370
|
|
|
371
371
|
calendar.render();
|
|
372
372
|
|
|
373
|
+
// Real-time refresh for the widget (same server events as the main calendar)
|
|
374
|
+
try {
|
|
375
|
+
// Debounce per widget instance
|
|
376
|
+
let tRefetch = null;
|
|
377
|
+
const refetch = function () {
|
|
378
|
+
try {
|
|
379
|
+
if (tRefetch) return;
|
|
380
|
+
tRefetch = setTimeout(() => {
|
|
381
|
+
tRefetch = null;
|
|
382
|
+
try {
|
|
383
|
+
calendar.refetchEvents();
|
|
384
|
+
} catch (e) {}
|
|
385
|
+
}, 200);
|
|
386
|
+
} catch (e) {}
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
// Register refetcher and bind socket listeners once per page
|
|
390
|
+
window.__oneKiteWidgetRefetchers = window.__oneKiteWidgetRefetchers || [];
|
|
391
|
+
window.__oneKiteWidgetRefetchers.push(refetch);
|
|
392
|
+
|
|
393
|
+
if (!window.__oneKiteWidgetSocketBound && typeof socket !== 'undefined' && socket && typeof socket.on === 'function') {
|
|
394
|
+
window.__oneKiteWidgetSocketBound = true;
|
|
395
|
+
const triggerAll = function () {
|
|
396
|
+
try {
|
|
397
|
+
const list = window.__oneKiteWidgetRefetchers || [];
|
|
398
|
+
for (let i = 0; i < list.length; i += 1) {
|
|
399
|
+
try { list[i](); } catch (e) {}
|
|
400
|
+
}
|
|
401
|
+
} catch (e) {}
|
|
402
|
+
};
|
|
403
|
+
socket.on('event:calendar-onekite.calendarUpdated', triggerAll);
|
|
404
|
+
socket.on('event:calendar-onekite.reservationUpdated', triggerAll);
|
|
405
|
+
}
|
|
406
|
+
} catch (e) {}
|
|
407
|
+
|
|
373
408
|
// Mobile swipe (left/right) to navigate weeks
|
|
374
409
|
try {
|
|
375
410
|
let touchStartX = null;
|
package/package.json
CHANGED
package/pkg/package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog – calendar-onekite
|
|
2
2
|
|
|
3
|
+
## 1.3.21
|
|
4
|
+
- Comptabilisation : les **sorties gratuites annulées** ne sont plus comptées (elles sont exclues si `cancelledAt` est présent, même si le statut est resté `paid`).
|
|
5
|
+
|
|
6
|
+
## 1.3.20
|
|
7
|
+
- Temps réel : le **widget** (Calendrier 2 semaines) se met à jour dynamiquement comme la page calendrier (créations / changements de statut / annulations…), sans rechargement.
|
|
8
|
+
|
|
9
|
+
## 1.3.19
|
|
10
|
+
- Annulation : un validateur/gestionnaire peut désormais annuler **même sa propre** réservation après paiement (la restriction `cannot-cancel-paid` ne s'applique plus aux validateurs).
|
|
11
|
+
|
|
12
|
+
## 1.3.18
|
|
13
|
+
- Fix HelloAsso webhook : suppression d'une double déclaration `realtime` qui empêchait le plugin de se charger (SyntaxError).
|
|
14
|
+
|
|
15
|
+
## 1.3.17
|
|
16
|
+
- Temps réel : les **créations** (locations / évènements), **changements de statut** (validation, refus, annulation, paiement reçu) et **expirations** se répercutent automatiquement sur le calendrier pour **tous les utilisateurs connectés**, sans rechargement de page.
|
|
17
|
+
|
|
3
18
|
## 1.3.16
|
|
4
19
|
- Calendrier : le **jour actuel** n’est plus affiché comme indisponible (gris + panneau sens interdit). Seules les **dates passées** restent désactivées visuellement.
|
|
5
20
|
|
package/pkg/package/lib/admin.js
CHANGED
|
@@ -502,6 +502,9 @@ admin.getAccounting = async function (req, res) {
|
|
|
502
502
|
const r = await dbLayer.getReservation(rid);
|
|
503
503
|
if (!r) continue;
|
|
504
504
|
if (String(r.status) !== 'paid') continue;
|
|
505
|
+
// Defensive: if a reservation was cancelled but its status remained 'paid'
|
|
506
|
+
// (legacy data / edge cases), never count it in accounting.
|
|
507
|
+
if (r.cancelledAt) continue;
|
|
505
508
|
if (r.accPurgedAt) continue;
|
|
506
509
|
const start = parseInt(r.start, 10);
|
|
507
510
|
if (!Number.isFinite(start)) continue;
|
package/pkg/package/package.json
CHANGED
package/plugin.json
CHANGED