feat(Devis.php): Ajoute adresses de facturation et de livraison au devis.

🔒️ fix(IntranetLocked.php): Autorise l'accès à la route st_control en mode debug.

 feat(CustomerAddress.php): Gère les adresses de facturation et livraison.

 feat: Ajoute la console superadmin pour le contrôle système.

 feat(DevisController.php): Supprime la génération PDF temporaire.

 feat(st_control.js): Ajoute la logique de contrôle système via JS.

 feat: Crée les templates CGV, Cookies, Hébergement et RGPD.

🎨 style(app.scss): Ajoute un style de fond pour la console.

 feat: Ajoute le template pour les informations d'hébergement.

 feat: Crée un template de mail d'alerte pour les accès root.

 feat: Crée le template RGPD (données personnelles).

🐛 fix(ErrorListener.php): Gère les erreurs 404 en prod (JSON/HTML).

 feat: Ajoute les mentions légales.

 feat(DevisPdfService.php): Améliore la génération PDF du devis.

 feat(admin.js): Charge dynamiquement les produits dans le select.

 feat(add.twig): Ajoute un sélecteur de produit et d'autres champs.

 chore(config): Ajoute INTRANET_LOCK à l'env.
```
This commit is contained in:
Serreau Jovann
2026-01-19 13:52:41 +01:00
parent d86d6612b5
commit 4c14932fee
25 changed files with 1744 additions and 117 deletions

View File

@@ -30,22 +30,30 @@ function initAdminLayout() {
}
document.querySelectorAll('select').forEach((el) => {
if (!el.tomselect) { // Éviter la double initialisation avec Turbo
new TomSelect(el, {
controlInput: null,
allowEmptyOption: true,
highlight: true,
plugins: ['dropdown_input'], // Permet d'avoir la recherche dans le dropdown
render: {
option: function(data, escape) {
return `<div class="py-2 px-3">
if(el.getAttribute('data-load') == "product") {
fetch("/crm/product/json")
.then(r=>r.json())
.then(products=>{
})
} else {
new TomSelect(el, {
controlInput: null,
allowEmptyOption: true,
highlight: true,
plugins: ['dropdown_input'], // Permet d'avoir la recherche dans le dropdown
render: {
option: function (data, escape) {
return `<div class="py-2 px-3">
<div class="text-[13px] font-bold text-white">${escape(data.text)}</div>
</div>`;
},
item: function(data, escape) {
return `<div class="text-blue-400 font-bold">${escape(data.text)}</div>`;
},
item: function (data, escape) {
return `<div class="text-blue-400 font-bold">${escape(data.text)}</div>`;
}
}
}
});
});
}
}
});
const imageInput = document.getElementById('product_image_input');