Valide
40
Bootstrap_new/images/new/README.md
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
# PWA Assets
|
||||||
|
|
||||||
|
Generated by PWA Icon Generator
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
- `/icons/` - All PWA icons in various sizes
|
||||||
|
- `/splash/` - iOS splash screens (if generated)
|
||||||
|
- `manifest.json` - Web app manifest file
|
||||||
|
- `meta-tags.html` - HTML meta tags to include in your index.html
|
||||||
|
- `favicon.png` - Favicon for your site
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Copy the `icons` folder to your project's public directory
|
||||||
|
2. Copy the `splash` folder to your project's public directory (if using splash screens)
|
||||||
|
3. Copy `manifest.json` to your project's root/public directory
|
||||||
|
4. Add the contents of `meta-tags.html` to your `index.html` `<head>` section
|
||||||
|
|
||||||
|
## Icon Sizes Included
|
||||||
|
|
||||||
|
- 16x16
|
||||||
|
- 32x32
|
||||||
|
- 48x48
|
||||||
|
- 64x64
|
||||||
|
- 96x96
|
||||||
|
- 128x128
|
||||||
|
- 144x144
|
||||||
|
- 152x152
|
||||||
|
- 180x180
|
||||||
|
- 192x192
|
||||||
|
- 384x384
|
||||||
|
- 512x512
|
||||||
|
- 192x192 (maskable)
|
||||||
|
- 512x512 (maskable)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
Generated with PWA Icon Generator
|
||||||
BIN
Bootstrap_new/images/new/favicon.png
Executable file → Normal file
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
Bootstrap_new/images/new/icons/icon-128x128.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
Bootstrap_new/images/new/icons/icon-144x144.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Bootstrap_new/images/new/icons/icon-152x152.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
Bootstrap_new/images/new/icons/icon-16x16.png
Normal file
|
After Width: | Height: | Size: 507 B |
BIN
Bootstrap_new/images/new/icons/icon-180x180.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
Bootstrap_new/images/new/icons/icon-192x192-maskable.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
Bootstrap_new/images/new/icons/icon-192x192.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
Bootstrap_new/images/new/icons/icon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
Bootstrap_new/images/new/icons/icon-384x384.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
Bootstrap_new/images/new/icons/icon-48x48.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Bootstrap_new/images/new/icons/icon-512x512-maskable.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
Bootstrap_new/images/new/icons/icon-512x512.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
Bootstrap_new/images/new/icons/icon-64x64.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
Bootstrap_new/images/new/icons/icon-96x96.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
41
Bootstrap_new/images/new/manifest.json
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"name": "My PWA App",
|
||||||
|
"short_name": "App",
|
||||||
|
"description": "A Progressive Web App",
|
||||||
|
"start_url": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"theme_color": "#3b82f6",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/icons/icon-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icons/icon-384x384.png",
|
||||||
|
"sizes": "384x384",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icons/icon-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icons/icon-192x192-maskable.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icons/icon-512x512-maskable.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
10
Bootstrap_new/images/new/meta-tags.html
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
<!-- PWA Meta Tags -->
|
||||||
|
<link rel="icon" href="/favicon.ico" sizes="48x48">
|
||||||
|
<link rel="icon" href="/icons/icon-192x192.png" type="image/png" sizes="192x192">
|
||||||
|
<link rel="icon" href="/icons/icon-512x512.png" type="image/png" sizes="512x512">
|
||||||
|
<link rel="apple-touch-icon" href="/icons/icon-180x180.png">
|
||||||
|
<link rel="manifest" href="/manifest.json">
|
||||||
|
<meta name="theme-color" content="#3b82f6">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="My PWA App">
|
||||||
|
|
@ -42,7 +42,17 @@ class ControleurAccueil extends Controleur {
|
||||||
|
|
||||||
$dataTabClaims = json_encode($tabclaims, JSON_NUMERIC_CHECK);
|
$dataTabClaims = json_encode($tabclaims, JSON_NUMERIC_CHECK);
|
||||||
|
|
||||||
// SINISTRALITÉ (manquante jusqu’ici)
|
// Evolution des sinistres par mois
|
||||||
|
$claimsMonth = $this->synthese->getClaimsMonth();
|
||||||
|
|
||||||
|
$tabclaimsMonth = [
|
||||||
|
'months' => array_column($claimsMonth, 'months'),
|
||||||
|
'monthlyClaims' => array_column($claimsMonth, 'monthlyClaims')
|
||||||
|
];
|
||||||
|
|
||||||
|
$dataTabClaimsMonth = json_encode($tabclaimsMonth, JSON_NUMERIC_CHECK);
|
||||||
|
|
||||||
|
// SINISTRALITÉ
|
||||||
$lossRatioLabels = ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin"];
|
$lossRatioLabels = ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin"];
|
||||||
$lossRatioValues = [62, 68, 71, 65, 73, 69]; // %
|
$lossRatioValues = [62, 68, 71, 65, 73, 69]; // %
|
||||||
|
|
||||||
|
|
@ -58,6 +68,7 @@ class ControleurAccueil extends Controleur {
|
||||||
'lossRatioLabels' => $lossRatioLabels,
|
'lossRatioLabels' => $lossRatioLabels,
|
||||||
'lossRatioValues' => $lossRatioValues,
|
'lossRatioValues' => $lossRatioValues,
|
||||||
'dataTabClaims' => $dataTabClaims,
|
'dataTabClaims' => $dataTabClaims,
|
||||||
|
'dataTabClaimsMonth' => $dataTabClaimsMonth,
|
||||||
'polices' => $polices
|
'polices' => $polices
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
372
Js/fonctions.js
|
|
@ -1,3 +1,239 @@
|
||||||
|
|
||||||
|
$(function(){
|
||||||
|
|
||||||
|
appliquerDataTable();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Gestion du menu burger - Version simplifiée
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const burgerToggle = document.getElementById('burgerMenuToggle');
|
||||||
|
const burgerDropdown = document.getElementById('burgerDropdown');
|
||||||
|
|
||||||
|
if (burgerToggle && burgerDropdown) {
|
||||||
|
// Ouvrir/fermer le menu burger
|
||||||
|
burgerToggle.addEventListener('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
burgerDropdown.classList.toggle('show');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fermer le menu quand on clique ailleurs sur la page
|
||||||
|
document.addEventListener('click', function(e) {
|
||||||
|
if (!e.target.closest('.burger-menu-container')) {
|
||||||
|
burgerDropdown.classList.remove('show');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Empêcher la fermeture quand on clique dans le menu dropdown
|
||||||
|
burgerDropdown.addEventListener('click', function(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Fonction pour formater les messages avec retours à la ligne automatiques
|
||||||
|
function formatMessageForSwal(message) {
|
||||||
|
if (!message) return '';
|
||||||
|
|
||||||
|
// Définir la longueur maximale par ligne selon la largeur de l'écran
|
||||||
|
const screenWidth = window.innerWidth;
|
||||||
|
let maxLineLength;
|
||||||
|
|
||||||
|
if (screenWidth < 576) { // Mobile
|
||||||
|
maxLineLength = 40;
|
||||||
|
} else if (screenWidth < 768) { // Tablet
|
||||||
|
maxLineLength = 60;
|
||||||
|
} else { // Desktop
|
||||||
|
maxLineLength = 80;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si le message est déjà court, ne pas le modifier
|
||||||
|
if (message.length <= maxLineLength && !message.includes('\n')) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diviser le message en mots
|
||||||
|
const words = message.split(' ');
|
||||||
|
let lines = [];
|
||||||
|
let currentLine = '';
|
||||||
|
|
||||||
|
words.forEach(word => {
|
||||||
|
// Si ajouter ce mot dépasse la limite, créer une nouvelle ligne
|
||||||
|
if ((currentLine + ' ' + word).length > maxLineLength && currentLine !== '') {
|
||||||
|
lines.push(currentLine);
|
||||||
|
currentLine = word;
|
||||||
|
} else {
|
||||||
|
// Ajouter le mot à la ligne courante
|
||||||
|
currentLine = currentLine ? currentLine + ' ' + word : word;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Ajouter la dernière ligne
|
||||||
|
if (currentLine) {
|
||||||
|
lines.push(currentLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
return lines.join('<br>');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour ajuster dynamiquement le contenu SweetAlert
|
||||||
|
function adjustSwalContent() {
|
||||||
|
const popup = Swal.getPopup();
|
||||||
|
const title = Swal.getTitle();
|
||||||
|
const htmlContainer = Swal.getHtmlContainer();
|
||||||
|
|
||||||
|
if (popup && title) {
|
||||||
|
// Ajuster la largeur maximale selon l'écran
|
||||||
|
const screenWidth = window.innerWidth;
|
||||||
|
if (screenWidth < 576) {
|
||||||
|
popup.style.maxWidth = '95vw';
|
||||||
|
popup.style.width = '95vw';
|
||||||
|
popup.style.margin = '10px';
|
||||||
|
} else if (screenWidth < 768) {
|
||||||
|
popup.style.maxWidth = '85vw';
|
||||||
|
popup.style.width = '85vw';
|
||||||
|
} else {
|
||||||
|
popup.style.maxWidth = '500px';
|
||||||
|
popup.style.width = '500px';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gérer le défilement si nécessaire
|
||||||
|
const titleHeight = title.scrollHeight;
|
||||||
|
const maxTitleHeight = Math.min(window.innerHeight * 0.6, 400);
|
||||||
|
|
||||||
|
if (titleHeight > maxTitleHeight) {
|
||||||
|
title.style.overflowY = 'auto';
|
||||||
|
title.style.maxHeight = maxTitleHeight + 'px';
|
||||||
|
title.style.paddingRight = '10px';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajuster également le conteneur HTML si présent
|
||||||
|
if (htmlContainer) {
|
||||||
|
const containerHeight = htmlContainer.scrollHeight;
|
||||||
|
const maxContainerHeight = Math.min(window.innerHeight * 0.4, 300);
|
||||||
|
|
||||||
|
if (containerHeight > maxContainerHeight) {
|
||||||
|
htmlContainer.style.overflowY = 'auto';
|
||||||
|
htmlContainer.style.maxHeight = maxContainerHeight + 'px';
|
||||||
|
htmlContainer.style.paddingRight = '10px';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction d'alerte principale
|
||||||
|
function alert_ebene(p_msg, p_msg_eng) {
|
||||||
|
let codeLangue = $("#codeLangue").val();
|
||||||
|
let message = (codeLangue === "en_US") ? p_msg_eng : p_msg;
|
||||||
|
|
||||||
|
// Formater le message pour les retours à la ligne
|
||||||
|
let formattedMessage = formatMessageForSwal(message);
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: formattedMessage,
|
||||||
|
icon: 'info',
|
||||||
|
confirmButtonText: codeLangue === "en_US" ? 'OK' : 'D\'accord',
|
||||||
|
customClass: {
|
||||||
|
popup: 'responsive-swal-popup',
|
||||||
|
title: 'responsive-swal-title',
|
||||||
|
htmlContainer: 'responsive-swal-html'
|
||||||
|
},
|
||||||
|
didOpen: () => {
|
||||||
|
adjustSwalContent();
|
||||||
|
},
|
||||||
|
willOpen: () => {
|
||||||
|
// Ajustement avant l'ouverture
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
},
|
||||||
|
willClose: () => {
|
||||||
|
document.body.style.overflow = 'auto';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction de confirmation
|
||||||
|
function confirm_ebene(p_msg, p_msg_eng) {
|
||||||
|
let codeLangue = $("#codeLangue").val();
|
||||||
|
let message = (codeLangue === "en_US") ? p_msg_eng : p_msg;
|
||||||
|
|
||||||
|
// Formater le message pour les retours à la ligne
|
||||||
|
let formattedMessage = formatMessageForSwal(message);
|
||||||
|
|
||||||
|
return Swal.fire({
|
||||||
|
title: formattedMessage,
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: codeLangue === "en_US" ? 'Yes' : 'Oui',
|
||||||
|
cancelButtonText: codeLangue === "en_US" ? 'No' : 'Non',
|
||||||
|
customClass: {
|
||||||
|
popup: 'responsive-swal-popup',
|
||||||
|
title: 'responsive-swal-title',
|
||||||
|
htmlContainer: 'responsive-swal-html'
|
||||||
|
},
|
||||||
|
didOpen: () => {
|
||||||
|
adjustSwalContent();
|
||||||
|
},
|
||||||
|
willOpen: () => {
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
},
|
||||||
|
willClose: () => {
|
||||||
|
document.body.style.overflow = 'auto';
|
||||||
|
}
|
||||||
|
}).then((result) => {
|
||||||
|
return result.isConfirmed;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction de prompt
|
||||||
|
function prompt_ebene(p_msg, p_msg_eng, p_retour, callback) {
|
||||||
|
let codeLangue = $("#codeLangue").val();
|
||||||
|
let message = (codeLangue === "en_US") ? p_msg_eng : p_msg;
|
||||||
|
|
||||||
|
// Formater le message pour les retours à la ligne
|
||||||
|
let formattedMessage = formatMessageForSwal(message);
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: formattedMessage,
|
||||||
|
input: 'text',
|
||||||
|
inputValue: p_retour,
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: 'OK',
|
||||||
|
cancelButtonText: 'Annuler',
|
||||||
|
customClass: {
|
||||||
|
popup: 'responsive-swal-popup',
|
||||||
|
title: 'responsive-swal-title',
|
||||||
|
htmlContainer: 'responsive-swal-html'
|
||||||
|
},
|
||||||
|
didOpen: () => {
|
||||||
|
adjustSwalContent();
|
||||||
|
},
|
||||||
|
willOpen: () => {
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
},
|
||||||
|
willClose: () => {
|
||||||
|
document.body.style.overflow = 'auto';
|
||||||
|
}
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
callback(result.value);
|
||||||
|
} else {
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Écouter les changements de taille de fenêtre
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
// Réajuster si une alerte est ouverte
|
||||||
|
if (Swal.isVisible()) {
|
||||||
|
setTimeout(adjustSwalContent, 100);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
function change_password()
|
function change_password()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -137,3 +373,139 @@ function connexion_cookie()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Applique la librairie DataBase sur les tableaux
|
||||||
|
function appliquerDataTable() {
|
||||||
|
const $table = $('.tabliste');
|
||||||
|
const codeLangue = $("#codeLangue").val();
|
||||||
|
|
||||||
|
// Détruire l'instance existante si elle existe
|
||||||
|
if ($.fn.DataTable.isDataTable($table)) {
|
||||||
|
$table.DataTable().destroy();
|
||||||
|
$table.empty(); // Optionnel
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Dictionnaire des traductions
|
||||||
|
const translations = {
|
||||||
|
en_US: {
|
||||||
|
lengthMenu: "Display _MENU_ records per page",
|
||||||
|
zeroRecords: "Nothing found - sorry",
|
||||||
|
info: "Showing page _PAGE_ of _PAGES_",
|
||||||
|
infoEmpty: "No records available",
|
||||||
|
search: "Search:",
|
||||||
|
paginate: {
|
||||||
|
next: "►",
|
||||||
|
previous: "◄",
|
||||||
|
first: "|◄",
|
||||||
|
last: "►|"
|
||||||
|
},
|
||||||
|
infoFiltered: "(filtered from _MAX_ total records)"
|
||||||
|
},
|
||||||
|
fr_FR: {
|
||||||
|
lengthMenu: "Affiche _MENU_ par page",
|
||||||
|
zeroRecords: "Désolé - Aucune donnée trouvée",
|
||||||
|
info: "_PAGE_ sur _PAGES_ pages",
|
||||||
|
infoEmpty: "Pas d'enregistrement",
|
||||||
|
search: "Recherche:",
|
||||||
|
paginate: {
|
||||||
|
next: "►",
|
||||||
|
previous: "◄",
|
||||||
|
first: "|◄",
|
||||||
|
last: "►|"
|
||||||
|
},
|
||||||
|
infoFiltered: "(filtré de _MAX_ total enregistrements)"
|
||||||
|
}
|
||||||
|
// ➕ Tu peux ajouter d'autres langues ici (ex: es_ES, de_DE, etc.)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Options communes
|
||||||
|
const options = {
|
||||||
|
destroy: true,
|
||||||
|
responsive: true,
|
||||||
|
order: [[0, "desc"]],
|
||||||
|
lengthMenu: [50, 100, 150],
|
||||||
|
scrollX: true,
|
||||||
|
scrollY: "75vh",
|
||||||
|
pagingType: "full_numbers",
|
||||||
|
autoWidth: false,
|
||||||
|
language: translations[codeLangue] || translations.fr_FR
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialisation du DataTable
|
||||||
|
$table.DataTable(options);
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Erreur lors de l'application du DataTable :", err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function raffraichier_gabarit()
|
||||||
|
{
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: $("#racineWeb").val()+"Ajaxgabarit/",
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
$("#div_ajaxgabarit").html(data);
|
||||||
|
|
||||||
|
//codeSociete = $("#codeSociete").val();
|
||||||
|
//codeLangue = $("#codeLangue").val();
|
||||||
|
|
||||||
|
fusionConsOrd = $("#fusionConsOrd").val();
|
||||||
|
vue = $("#vue").val();
|
||||||
|
|
||||||
|
if(fusionConsOrd != "1" && vue !="Connexion"){
|
||||||
|
|
||||||
|
window.location.assign($("#racineWeb" ).val()+"Connexion/");
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
error: function(errorData)
|
||||||
|
{
|
||||||
|
},
|
||||||
|
complete: function()
|
||||||
|
{
|
||||||
|
$(".datepicker" ).datepicker();
|
||||||
|
|
||||||
|
raffraichier_messagerie();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function raffraichier_messagerie()
|
||||||
|
{
|
||||||
|
deconnexion='0';
|
||||||
|
if(navigator.onLine)
|
||||||
|
{
|
||||||
|
c_html = "";
|
||||||
|
$.ajax({
|
||||||
|
url: $("#racineWeb").val()+"Ajaxmessagerie/",
|
||||||
|
success: function(data) {
|
||||||
|
c_html = data;
|
||||||
|
},
|
||||||
|
error: function(errorData) {
|
||||||
|
},
|
||||||
|
complete: function() {
|
||||||
|
$("#nbMessagesNonLus").html(c_html);
|
||||||
|
msgNonLus=$("#msgNonLus").val();
|
||||||
|
$("#span_notification").text(msgNonLus);
|
||||||
|
// Ajout du 27/10/2024 => déconnecter si session expirée
|
||||||
|
deconnexion=$("#deconnexion").val();
|
||||||
|
|
||||||
|
// alert("deconnexion => "+deconnexion);
|
||||||
|
|
||||||
|
if(deconnexion=='1')
|
||||||
|
{
|
||||||
|
window.location.assign($("#racineWeb" ).val()+"Connexion/deconnecter/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#test_connexion").css('background-color', 'red');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -41,6 +41,17 @@ class Synthese extends Modele {
|
||||||
|
|
||||||
$resultat = $this->executerRequete($sql, array($idClient));
|
$resultat = $this->executerRequete($sql, array($idClient));
|
||||||
|
|
||||||
|
return $resultat->fetchAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClaimsMonth()
|
||||||
|
{
|
||||||
|
$idClient = $_SESSION['idClient_C'];
|
||||||
|
|
||||||
|
$sql = 'call sp_c_evolution_sinistres_mois(?)';
|
||||||
|
|
||||||
|
$resultat = $this->executerRequete($sql, array($idClient));
|
||||||
|
|
||||||
return $resultat->fetchAll();
|
return $resultat->fetchAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -160,16 +160,25 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!-- Graphiques (placeholders) -->
|
<!-- Graphiques (placeholders) -->
|
||||||
|
<div class="grid-1">
|
||||||
|
<div class="card">
|
||||||
|
<h3><?= _('Évolution des sinistres par mois') ?></h3>
|
||||||
|
<div class="chart">
|
||||||
|
<canvas id="claimsLine"></canvas>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="grid-2">
|
<div class="grid-2">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3><?= _('Sinistralité') ?></h3>
|
<h3><?= _('Sinitralité') ?></h3>
|
||||||
<div class="chart">
|
<div class="chart">
|
||||||
<canvas id="lossRatioBar"></canvas>
|
<canvas id="lossRatioBar"></canvas>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3><?= _('Répartition des sinistres')?></h3>
|
<h3><?= _('Sinistres par garantie')?></h3>
|
||||||
<div class="chart">
|
<div class="chart">
|
||||||
<canvas id="claimsPie"></canvas>
|
<canvas id="claimsPie"></canvas>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -182,7 +191,7 @@
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Répartition des sinistres
|
// Sinistres par garantie
|
||||||
const dataClaims = <?= $dataTabClaims ?>;
|
const dataClaims = <?= $dataTabClaims ?>;
|
||||||
new Chart(document.getElementById('claimsPie'), {
|
new Chart(document.getElementById('claimsPie'), {
|
||||||
type: 'doughnut',
|
type: 'doughnut',
|
||||||
|
|
@ -199,6 +208,26 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Evolution des sinistres par mois
|
||||||
|
const dataClaimsMonth = <?= $dataTabClaimsMonth ?>;
|
||||||
|
new Chart(document.getElementById('claimsLine'), {
|
||||||
|
type: 'line',
|
||||||
|
data: {
|
||||||
|
labels: dataClaimsMonth.months,
|
||||||
|
datasets: [{
|
||||||
|
label: "Sinistres",
|
||||||
|
data: dataClaimsMonth.monthlyClaims,
|
||||||
|
tension: 0.4,
|
||||||
|
fill: true
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
scales: {
|
||||||
|
y: { beginAtZero: false }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Sinistralité
|
// Sinistralité
|
||||||
new Chart(document.getElementById('lossRatioBar'), {
|
new Chart(document.getElementById('lossRatioBar'), {
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
|
|
|
||||||
|
|
@ -214,50 +214,6 @@ console.groupEnd();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- ============================================
|
|
||||||
CSS DE SECOURS INLINE (garanti de fonctionner)
|
|
||||||
============================================ -->
|
|
||||||
<style>
|
|
||||||
/* CSS DE SECOURS - S'applique immédiatement */
|
|
||||||
:root {
|
|
||||||
--office-primary: #b7472a;
|
|
||||||
--office-secondary: #2b579a;
|
|
||||||
--office-light: #f3f2f1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Styles de base garantis */
|
|
||||||
body {
|
|
||||||
font-family: 'Segoe UI', Arial, sans-serif !important;
|
|
||||||
margin: 0 !important;
|
|
||||||
padding: 0 !important;
|
|
||||||
min-height: 100vh !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Debug visuel */
|
|
||||||
.css-loaded-indicator {
|
|
||||||
position: fixed !important;
|
|
||||||
top: 10px !important;
|
|
||||||
right: 10px !important;
|
|
||||||
background: #27ae60 !important;
|
|
||||||
color: white !important;
|
|
||||||
padding: 8px 12px !important;
|
|
||||||
border-radius: 4px !important;
|
|
||||||
z-index: 99999 !important;
|
|
||||||
font-size: 12px !important;
|
|
||||||
font-weight: bold !important;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Forcer la visibilité pendant le chargement */
|
|
||||||
[class*="app-"] {
|
|
||||||
min-height: 20px !important;
|
|
||||||
min-width: 20px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.context-body {
|
|
||||||
background-color: #d0d0d0 !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- Open Graph pour le partage -->
|
<!-- Open Graph pour le partage -->
|
||||||
<meta property="og:title" content="INTER-SANTE Portail RH">
|
<meta property="og:title" content="INTER-SANTE Portail RH">
|
||||||
|
|
@ -613,6 +569,19 @@ console.groupEnd();
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
raffraichier_gabarit();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('#timer').timer({
|
||||||
|
duration: '60s',
|
||||||
|
callback: function() {
|
||||||
|
raffraichier_messagerie();
|
||||||
|
},
|
||||||
|
repeat: true
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<!-- JavaScript Libraries -->
|
<!-- JavaScript Libraries -->
|
||||||
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
|
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
|
||||||
|
|
|
||||||