feat: aggiunta consuntivazione automatica tramite variabili env. style: aggiunto bordino anche attorno al tempo nel caso di overperformance
This commit is contained in:
+69
-1
@@ -186,10 +186,13 @@ const App = {
|
||||
if (cached) {
|
||||
try {
|
||||
this.lookups = JSON.parse(cached);
|
||||
if (!this.lookups.config || this.lookups.config.autoTimeMinHour === undefined) {
|
||||
throw new Error('Outdated config cache (missing autoTimeMinHour)');
|
||||
}
|
||||
this.lookupsLoaded = true;
|
||||
return;
|
||||
} catch (e) {
|
||||
console.warn('Failed to parse cached lookups, reloading...', e);
|
||||
console.warn('Failed to parse cached lookups, reloading...', e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -436,6 +439,71 @@ const App = {
|
||||
}
|
||||
}
|
||||
|
||||
if (timerEl) {
|
||||
if (hasOverperformance) {
|
||||
timerEl.classList.add('overperformance-alarm');
|
||||
} else {
|
||||
timerEl.classList.remove('overperformance-alarm');
|
||||
}
|
||||
}
|
||||
|
||||
const minTimeStr = this.lookups.config?.autoTimeMinHour || '18:00';
|
||||
const [minHour, minMin] = minTimeStr.split(':').map(x => parseInt(x, 10));
|
||||
|
||||
const now = new Date();
|
||||
const currentHour = now.getHours();
|
||||
const currentMin = now.getMinutes();
|
||||
|
||||
let isPastTime = false;
|
||||
if (currentHour > minHour) {
|
||||
isPastTime = true;
|
||||
} else if (currentHour === minHour && currentMin >= minMin) {
|
||||
isPastTime = true;
|
||||
}
|
||||
|
||||
const triggerAction = async (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
const confirmed = confirm(`Sei sicuro di voler effettuare la consuntivazione automatica di ${remaining} minuti rimanenti di oggi? Verrà creato un ticket chiuso a tuo carico.`);
|
||||
if (!confirmed) return;
|
||||
|
||||
try {
|
||||
Toast.success('Consuntivazione in corso...');
|
||||
const res = await this.api('/api/tickets/auto-time', { method: 'POST' });
|
||||
Toast.success(res.message || 'Consuntivazione completata!');
|
||||
this.updateDailyTimer();
|
||||
this.route();
|
||||
} catch (err) {
|
||||
Toast.error('Errore consuntivazione automatica: ' + err.message);
|
||||
}
|
||||
};
|
||||
|
||||
if (isPastTime && remaining > 0) {
|
||||
if (brandEl) {
|
||||
brandEl.classList.add('clickable-auto-time');
|
||||
brandEl.setAttribute('title', `Consuntivazione Automatica fine giornata (${remaining} m)`);
|
||||
brandEl.onclick = triggerAction;
|
||||
}
|
||||
|
||||
if (timerEl) {
|
||||
timerEl.classList.add('clickable-auto-time');
|
||||
timerEl.setAttribute('title', `Consuntivazione Automatica fine giornata (${remaining} m). Clicca per eseguire.`);
|
||||
timerEl.onclick = triggerAction;
|
||||
}
|
||||
} else {
|
||||
if (brandEl) {
|
||||
brandEl.classList.remove('clickable-auto-time');
|
||||
brandEl.removeAttribute('title');
|
||||
brandEl.onclick = null;
|
||||
}
|
||||
|
||||
if (timerEl) {
|
||||
timerEl.classList.remove('clickable-auto-time');
|
||||
timerEl.removeAttribute('title');
|
||||
timerEl.onclick = null;
|
||||
}
|
||||
}
|
||||
|
||||
let phrase = "";
|
||||
const phraseThreshold = this.lookups.config?.phraseThreshold || 70;
|
||||
const isDemotivational = percentage >= phraseThreshold;
|
||||
|
||||
Reference in New Issue
Block a user