diff --git a/includes/lang/ca.php b/includes/lang/ca.php index 116927d..9e00a01 100644 --- a/includes/lang/ca.php +++ b/includes/lang/ca.php @@ -316,6 +316,9 @@ return [ 'fc_err_fetch_gov' => 'Error en la connexió amb l\'API governamental.', 'fc_err_no_data_gov' => 'No s\'han trobat dades a l\'API del govern per a aquest any.', 'fc_err_action' => 'Error en l\'acció: ', + 'fc_err_select_leave' => "Si us plau, selecciona un tipus de permís.", +'fc_confirm_del_catalog' => "Voleu eliminar definitivament el permís %s del catàleg? Això també el retirarà dels membres que l'utilitzen.", +'fc_confirm_del_member_leave' => "Estàs segur que vols retirar aquest permís per a aquest membre?", 'fc_today_short' => 'Avui', 'fc_today_title' => 'Anar a avui', 'fc_tab_foyer' => '🏡 Llar', diff --git a/includes/lang/en.php b/includes/lang/en.php index c34c6d6..bdc21dc 100644 --- a/includes/lang/en.php +++ b/includes/lang/en.php @@ -317,6 +317,9 @@ return [ 'fc_err_fetch_gov' => 'Error connecting to the government API.', 'fc_err_no_data_gov' => 'No data found on the government API for this year.', 'fc_err_action' => 'Error during action: ', + 'fc_err_select_leave' => "Please select a leave type.", +'fc_confirm_del_catalog' => "Permanently delete leave %s from the catalog? This will also remove it from members using it.", +'fc_confirm_del_member_leave' => "Do you really want to remove this leave for this member?", 'fc_today_short' => 'Today', 'fc_today_title' => 'Today', 'fc_tab_foyer' => '🏡 Household', diff --git a/includes/lang/fr.php b/includes/lang/fr.php index 35c3a6f..25db5a7 100644 --- a/includes/lang/fr.php +++ b/includes/lang/fr.php @@ -318,6 +318,9 @@ return [ 'fc_err_fetch_gov' => 'Erreur lors de la connexion à l\'API gouvernementale.', 'fc_err_no_data_gov' => 'Aucune donnée trouvée sur l\'API du gouvernement pour cette année.', 'fc_err_action' => 'Erreur lors de l\'action : ', + 'fc_err_select_leave' => "Veuillez sélectionner un type de congé.", +'fc_confirm_del_catalog' => "Supprimer définitivement le congé %s du catalogue ? Cela le retirera également des membres qui l'utilisent.", +'fc_confirm_del_member_leave' => "Voulez-vous vraiment retirer ce congé pour ce membre ?", 'fc_today_short' => 'Auj.', 'fc_today_title' => "Aujourd'hui", 'care_nounou' => 'Nounou', diff --git a/modules/budget/views/budget_prev.php b/modules/budget/views/budget_prev.php index dd98d20..d50f4b7 100644 --- a/modules/budget/views/budget_prev.php +++ b/modules/budget/views/budget_prev.php @@ -794,7 +794,7 @@ function duplicateMonth() { const parentMap = window.CONFIG.parentMapping; if (!sourceDateStr) { - alert(tr('bud_prev_err_no_history')); + showToast(tr('bud_prev_err_no_history'), 'error'); return; } @@ -955,10 +955,10 @@ async function validateTransfers(personCss, month) { if(result.success) { window.location.reload(); } else { - alert(tr('bud_err_tech') + " : " + result.error); + showToast(tr('bud_err_tech') + " : " + (result.error || "Inconnue"), 'error'); } } catch(e) { - alert(tr('bud_err_tech')); + showToast(tr('bud_err_tech'), 'error'); } } @@ -1035,13 +1035,13 @@ async function handleAdvanceSubmit(event, form) { if (result.success) { window.location.reload(); } else { - alert((tr('bud_err_tech') || "Erreur") + " : " + (result.error || "Opération échouée")); + showToast((tr('bud_err_tech') || "Erreur") + " : " + (result.error || "Opération échouée"), 'error'); btnSubmit.disabled = false; btnSubmit.innerHTML = oldText; } } catch (err) { console.error("AJAX Error:", err); - alert(tr('bud_err_tech') || "Une erreur technique est survenue."); + showToast(tr('bud_err_tech') || "Une erreur technique est survenue.", 'error'); btnSubmit.disabled = false; btnSubmit.innerHTML = oldText; } @@ -1155,7 +1155,7 @@ document.querySelectorAll('#addCatModal form, #editCatModal form').forEach(form alert((tr('bud_err_tech') || 'Erreur') + " : " + (result.error || "Inconnue")); } } catch (error) { - alert(tr('bud_err_tech') || "Une erreur technique est survenue."); + showToast(tr('bud_err_tech') || "Une erreur technique est survenue.", 'error'); } finally { submitBtn.disabled = false; submitBtn.innerText = originalText; diff --git a/modules/budget/views/epargne.php b/modules/budget/views/epargne.php index 8f84971..4678667 100644 --- a/modules/budget/views/epargne.php +++ b/modules/budget/views/epargne.php @@ -306,10 +306,10 @@ async function promptNewSavingsLine(owner, latestMonth) { if (result.success) { window.location.reload(); } else { - alert(window.I18N['bud_err_tech'] + " : " + (result.error || "Erreur")); + showToast(window.I18N['bud_err_tech'] + " : " + (result.error || "Erreur"), 'error'); } } catch (err) { - alert(window.I18N['bud_err_tech']); + showToast(window.I18N['bud_err_tech'], 'error'); } } @@ -330,7 +330,7 @@ async function updateEpargneCell(month, category, owner, inputEl) { return; } } catch (err) { - alert(window.I18N['bud_err_tech']); + showToast(window.I18N['bud_err_tech'], 'error'); return; } @@ -472,7 +472,7 @@ if (savingsForm) { submitBtn.disabled = false; } } catch (error) { - alert(window.I18N['bud_err_tech']); + showToast(window.I18N['bud_err_tech'], 'error'); submitBtn.innerText = originalText; submitBtn.disabled = false; } @@ -495,7 +495,7 @@ async function deleteEntireMonth(monthDate, owner) { if (result.success) window.location.reload(); else alert(result.error || window.I18N['bud_err_delete']); } catch(err) { - alert(window.I18N['bud_err_delete']); + showToast(window.I18N['bud_err_tech'], 'error'); } } diff --git a/modules/budget/views/provisions.php b/modules/budget/views/provisions.php index 30a477a..ea3df3d 100644 --- a/modules/budget/views/provisions.php +++ b/modules/budget/views/provisions.php @@ -184,7 +184,7 @@ if (formAdd) { submitBtn.disabled = false; } } catch (error) { - alert(window.I18N['bud_err_tech']); + showToast(window.I18N['bud_err_tech'], 'error'); submitBtn.innerText = originalText; submitBtn.disabled = false; } @@ -205,7 +205,7 @@ async function deleteProvision(id) { alert(result.message); } } catch(err) { - alert(window.I18N['bud_err_tech']); + showToast(window.I18N['bud_err_tech'], 'error'); } } diff --git a/modules/budget/views/suivi.php b/modules/budget/views/suivi.php index c504509..512b9ad 100644 --- a/modules/budget/views/suivi.php +++ b/modules/budget/views/suivi.php @@ -1020,11 +1020,11 @@ document.addEventListener('DOMContentLoaded', () => { formExpense.reset(); window.location.reload(); } else { - alert((window.I18N['error_occured'] || 'Erreur') + ' : ' + (result.error || 'Inconnue')); + showToast((window.I18N['error_occured'] || 'Erreur') + ' : ' + (result.error || 'Inconnue'), 'error'); } } catch (error) { console.error("Erreur réseau :", error); - alert(window.I18N['bud_err_tech'] || "Erreur critique réseau."); + showToast(window.I18N['bud_err_tech'] || "Erreur critique réseau.", 'error'); } finally { submitBtn.disabled = false; submitBtn.innerText = originalBtnText; diff --git a/modules/family-calendar/family-calendar.js b/modules/family-calendar/family-calendar.js index ba02891..ea0ac76 100644 --- a/modules/family-calendar/family-calendar.js +++ b/modules/family-calendar/family-calendar.js @@ -54,7 +54,7 @@ async function openCalendarSettings() { document.body.classList.add("no-scroll"); } } catch (err) { - alert((tr("fc_error") || "Erreur : ") + err.message); + showToast((tr("fc_error") || "Erreur : ") + err.message, "error"); } } @@ -137,11 +137,10 @@ async function submitCalFoyer(e) { tr("fc_settings_updated") || "Configuration enregistrée !", "success", ); - else alert(tr("fc_settings_updated") || "Configuration enregistrée !"); setTimeout(() => window.location.reload(), 800); } catch (err) { - alert("Erreur : " + err.message); + showToast((tr("fc_error") || "Erreur : ") + err.message, "error"); } } @@ -162,7 +161,6 @@ window.submitChildCareModes = async function () { if (!res.success) throw new Error(res.error); if (window.showToast) showToast(tr("fc_child_saved") || "Sauvegardé !", "success"); - else alert(tr("fc_child_saved") || "Sauvegardé !"); const currentPerson = calGlobalData.people.find( (k) => parseInt(k.id) === window.currentSelectedMemberId, @@ -171,7 +169,7 @@ window.submitChildCareModes = async function () { currentPerson.care_modes = JSON.stringify(selectedModes); } } catch (err) { - alert("Erreur: " + err.message); + showToast((tr("fc_error") || "Erreur : ") + err.message, "error"); } }; @@ -254,12 +252,11 @@ function resetLeaveTypeForm() { } async function deleteLeaveType(code, label) { - if ( - !confirm( - `Supprimer définitivement le congé "${label}" du catalogue ? Cela le retirera également des membres qui l'utilisent.`, - ) - ) - return; + const msg = ( + tr("fc_confirm_del_catalog") || + "Supprimer définitivement le congé %s du catalogue ?" + ).replace("%s", `"${label}"`); + if (!(await pachaConfirm(tr("btn_delete") || "Supprimer", msg))) return; const fd = new FormData(); fd.append("action", "delete_leave_type"); @@ -280,7 +277,7 @@ async function deleteLeaveType(code, label) { loadMemberConfigView(); } } catch (err) { - alert("Erreur de suppression : " + err.message); + showToast((tr("fc_error") || "Erreur : ") + err.message, "error"); } } @@ -290,10 +287,10 @@ async function saveLeaveType() { const carryMax = document.getElementById("lt-carry-max").value; const carryDeadline = document.getElementById("lt-carry-deadline").value; - if (!code || !label) - return window.showToast - ? showToast(tr("fc_err_code_label"), "error") - : alert(tr("fc_err_code_label")); + if (!code || !label) { + showToast(tr("fc_err_code_label"), "error"); + return; + } const fd = new FormData(); fd.append("action", "save_leave_type"); @@ -314,7 +311,7 @@ async function saveLeaveType() { resetLeaveTypeForm(); loadLeaveCatalog(); } catch (err) { - alert(tr("error_occured") + " " + err.message); + showToast((tr("fc_error") || "Erreur : ") + err.message, "error"); } } @@ -571,9 +568,11 @@ async function addMemberLeave(personId) { ).value; if (!leaveCode) { - return window.showToast - ? showToast("Veuillez sélectionner un type de congé", "error") - : alert("Veuillez sélectionner un type de congé"); + showToast( + tr("fc_err_select_leave") || "Veuillez sélectionner un type de congé", + "error", + ); + return; } const fd = new FormData(); @@ -597,17 +596,17 @@ async function addMemberLeave(personId) { if (window.showToast) showToast("Opération réussie !", "success"); loadMemberConfigView(); } catch (err) { - if (window.showToast) showToast("Erreur : " + err.message, "error"); - else alert("Erreur: " + err.message); + showToast((tr("error_occured") || "Erreur : ") + err.message, "error"); } } async function deleteMemberLeave(id, personId) { if ( - !confirm( - tr("confirm_delete") || + !(await pachaConfirm( + tr("btn_delete") || "Supprimer", + tr("fc_confirm_del_member_leave") || "Voulez-vous vraiment retirer ce congé pour ce membre ?", - ) + )) ) return; @@ -629,12 +628,7 @@ async function deleteMemberLeave(id, personId) { ); loadMemberConfigView(); // Recharge la vue des attributions du membre } catch (err) { - if (window.showToast) - showToast( - (tr("error_occured") || "Erreur") + " : " + err.message, - "error", - ); - else alert("Erreur: " + err.message); + showToast((tr("error_occured") || "Erreur : ") + err.message, "error"); } } @@ -2365,7 +2359,7 @@ document.addEventListener("DOMContentLoaded", () => { await this.refreshAllData(); // Recharge les graphiques en direct } catch (err) { - alert(tr("error_occured") + " " + err.message); + showToast((tr("fc_error") || "Erreur : ") + err.message, "error"); } finally { if (btn) { btn.innerHTML = originalText; @@ -2682,7 +2676,7 @@ document.addEventListener("DOMContentLoaded", () => { } await this.refreshAllData(); } catch (e) { - alert("Erreur: " + e.message); + showToast((tr("error_occured") || "Erreur : ") + e.message, "error"); } } } diff --git a/modules/holidays/holidays.js b/modules/holidays/holidays.js index 77e9594..3092db7 100644 --- a/modules/holidays/holidays.js +++ b/modules/holidays/holidays.js @@ -1190,9 +1190,7 @@ function openGlobalPlanningModal() { const holidayData = JSON.parse(holidayDataJsonEl.textContent).main; if (!holidayData.start_date || !holidayData.end_date) { - alert( - "Veuillez d'abord définir les dates globales du voyage dans 'Modifier les bases' ⚙️", - ); + showToast(tr("hdl_js_missing_global_dates"), "error"); return; } @@ -1957,7 +1955,8 @@ async function addQuickTransitExpense( "/modules/holidays/includes/api/save_checkpoint.php", { method: "POST", body: fd }, ); - if (!data.success) alert("Erreur : " + data.error); + if (!data.success) + showToast((tr("error_occured") || "Erreur : ") + data.error, "error"); } catch (err) { console.error(err); } @@ -1977,7 +1976,7 @@ function updateFuelPrice() { localStorage.setItem("holidays_fuel_price", newPrice); window.location.reload(); } else { - alert("Prix invalide."); + showToast(tr("hdl_invalid_price"), "error"); } } } @@ -2177,11 +2176,11 @@ async function deleteAttachment(fileId, btnElement) { '

Aucun document pour cette étape.

'; } } else { - alert("Erreur : " + data.error); + showToast("Erreur : " + data.error, "error"); row.style.opacity = "1"; } } catch (err) { - alert("Erreur réseau lors de la suppression."); + showToast(tr("hdl_js_network_error"), "error"); row.style.opacity = "1"; } } @@ -2194,7 +2193,7 @@ window.generateTravelBook = function () { const btn = document.querySelector('button[onclick="generateTravelBook()"]'); if (!element) { - alert("Erreur : Le modèle de carnet de voyage est introuvable."); + showToast(tr("hdl_err_travel_book_missing"), "error"); return; }