je ne veux pas utiliser n8n, je veux un maximum de niveaux : quand je vais devoir gérer les droits au 6ième ou 10ième niveau, je dois pouvoir le faire. je ne veux rien lancer manuellement autrement je n'ai pas besoin de cette application on peut faire la même chose pour "Fichier Partages" intégration de keycloac Gérer le temps de travail des agents OK - dans la page Recup, la saisie des "Heures consommées (HH:mm)" doit se présenter comment "Heure Début" et "Heure Fin" de la page declarations OK - quand un scan est en cours, je ne dois pas pouvoir en lancer un autre et je dois pouvoir stopper le scan en cours et voir le résultat OK - dans la page /IHTS/public/admin/agents/nn/edit, quand je veux juste cocher "Chef de service" et que je clique sur le bouton "Enregistrer les modifications", j'ai une erreur "Le champ de confirmation mot de passe ne correspond pas." alors que je n'ai pas touché au mot de passe, ni à la section "Affectation & Délégation". il faut revoir cette partie qui va me créer des non sens et modifier des données qu'il ne faut pas ! OK - l'application est basée sur le principe qu'un service est rattaché à une filière. Il faut changer ça car c'est un agent qui est rattaché à une filière quelque soit le service dans lequel il travail. réfléchi à la au changement que celà entraine et fais moi un plan d'implentation OK - gestion mot de passe envoyé par mail par breeze (Microsoft Graph) OK - dans la page /IHTS/public/declarations cache la ligne avec les taux de majoration et change la couleurs des dimanche en rouge léger Ok - sur les pages IHTS/public/admin/stats/recup et /IHTS/public/admin/stats/paie mets le sablier dans le bouton "Afficher". sur la page /IHTS/public/admin/stats/keyword, mets le sablier dans le bouton "Rechercher" OK - dans la page /IHTS/public/admin/stats/paie, lors de la saisie dans le champs nom/prénom, il faut faire une recherche dynamique par rapport aux services sélectionnés (qui sont dans la liste déroulante) >> filtre sur la liste d'agent des services de la filière. et quand je clique sur "Afficher", fais apparaître un sablier que je sache que l'application tourne. quand je coche une filière, la liste des services se met à jour. mais après avoir cliquer sur le bouton "Afficher", quand je décoche des filières, la liste ne se met pas à jour. OK - Stats : tableau des heures mois/mois pour 1 ou plusieurs services (qui, combien, quand, sommes...) autre statistique réservée aux RH et Admins : sélection d'une ou plusieurs filières, sélection d'un service (dans les filières choisies) ou tous les services (des filières ou tous si par de filière choisie) si pas de sélection, sélection d'un nom ou tout le monde si pas de sélection, sélection d'une année par défaut l'année en cours, sélection d'un mois par défaut le mois en cours. Pour chaque ligne dont il y a une demande de paie, faire un tableau par agent avec en colonne la date, le total d'heures en paie, le nombre d'heures nomale <= n 1ières heures, le nombre d'heures nomale > n 1ières heures, le nombre d'heures de dimanche et jours fériés <= n 1ières heures, le nombre d'heures de dimanche et jours fériés > n 1ières heures, le nombre d'heures de nuit <= n 1ières heures, le nombre d'heures de nuit > n 1ières heures. en ligne, que les dates avec demande de paie. les dimanches et jours fériés de couleur imprimées avec les codes couleur d'affichage et d'impression des déclarations, et une ligne total pour l'agent. Si aucune ligne trouvée pour l'agent, juste une ligne rappelant qu'il n'a rien demandé en paye. Les n 1ières heures ne tiennent pas compte des heures en récup mais elles sont globales, quelque soit leur groupe (normale, dimanche, nuit). les lignes doivent être prises dans l'ordre chronologique. 1 - la valeur est en base de données dans la table filières à laquelle l'agent est rattachée à la date demandée (en général un mois en particulier) Si l'agent a changé de filières en cours de mois, et que la valeur de n 1ières heures et différente, faire 2 tableaux pour l'agent (cas très très rare) 2 - regarde le code qui imprime les feuilles de déclaration de heures et astreintes 3 - les tableaux de sortie devront être affichés et imprimables. je n'ai rien pour les PDF ; dans un premier temps, un simple "print to PDF" fera l'affaire 4 - ajoute un onglet pour les RH et Admin dans /IHTS/public/admin/stats. Il y a déjà 2 onglets : /IHTS/public/admin/stats/mot-cle et /IHTS/public/admin/stats/recup OK - les filières n'apparaissent pas ; il faut les afficher avec des cases à cocher pour celles qu'on veut. le mois doit être sous la forme :"Janvier" "février",... quand je tape les premières lettre du nom ou du prénom de l'agent, il faut me proposer la liste correspondante pour que je puisse le cliquer OK - Stats : tableau des heures avec recherche sur travail effectué sur une période pour 1 ou plusieurs services (qui, combien, quand, sommes...) OK - le bouton "Créer les comptes" doit être gérer comme le bouton "Lancer l'importation" en taille avec le sablier en cours de fonctionnement. OK - PopUp ; "Attention : Les fichiers en conflit marqués comme 'Ignorer' ne seront pas importés. Voulez-vous continuer ?" ok - sur la page "IHTS/public/admin/declarations/import", le bouton "Lancer l'importation" devrait être grisé sans disparaitre avec le sablier quand l'application travaille. Dans les cas complexes, l'application doit gérer l'enchainement des actions à mener comme demandé (dans le désordre) : - ignorer ou écraser les fichiers déjà importés - rafraichir la liste des fichiers à traiter - gérer en fonction de ce qu'il reste à traiter à tout moment - stopper tout - création de tous les comptes qui n'existent pas puis continuer l'importation s'il y en a encore à importer... - etc ok - Idée d'amélioration sans fenêtre modale : Gestion des cas complexes & Enchaînement des actions Performance accélérée (x5 à x10) : Utilisation de $reader->setReadDataOnly(true); pour l'analyse et l'importation. Le serveur n'a plus à charger les styles, polices et dessins des fichiers Excel, ce qui réduit drastiquement le temps de traitement et la consommation de mémoire. Badges de statut dynamiques : Chaque fichier en attente affiche désormais en temps réel ses informations et son statut via des badges colorés très clairs : ?? Agent non identifié (Rouge) ?? Déjà importé (mois...) (Orange) ? Prêt pour import (Vert) Conservation de la liste d'attente : Les fichiers ne sont plus effacés du dossier temporaire lors d'un nouvel upload. La liste se met à jour en ajoutant les nouveaux fichiers à ceux déjà en attente. Création / Association groupée : Le bloc des agents non identifiés a été remplacé par un formulaire groupé unique. Vous pouvez y configurer en une seule fois l'action à mener pour chaque agent (Créer un nouveau compte ou l'associer à un compte existant), et lancer la création bulk. Enchaînement immédiat : En cochant la case « Lancer immédiatement l'importation des fichiers après la création des comptes », l'application crée les comptes nécessaires et enchaîne directement l'importation en une seule et unique opération transparente. OK - les boutons "créer le compte" doit être grisés tant que les conditions de créations ne sont pas réunis OK - quand un compte est créé, il faut griser toute la ligne le concernant ne pas effacer la liste des autres à créer OK - le bouton d'annulation doit ressembler au bouton de confirmation de suppression OK - Sur l'import de fichiers xlsx pour l'historique. affiche tous les agents pour lesquels il y a un problème pour chaque fichier sélectionnés. enlève la partie "Associer à l'agent existant". propose d'ajouté un délégué si le service est sélectionné. et permet la création du compte si le mail est correct, le service est sélectionné. permet la création du compte si le service est sélectionné et qu'un délégué est désigné et dans ce case, crée une fausse adresse "@import.fr". Si un jour l'agent crée son compte, il faut le retrouver par le nom et le prénom et lui proposer de corriger son adresse mail. Tant qu'il ne le fait pas, son compte doit être considéré comme incomplet : champs "profil_complete" = 0. As-tu des questions ? propose un plan d'action OK - dans les imports, les saisies, je veux que les prénoms soient formatés tous de la même façon : le NOM et l'initiale du Prénom en Majuscules, le reste du prénom en minuscules et SANS aucune Majuscule accentuée OK - dans "Gestion des Agents" je veux un onglet pour les comptes actifs et un autre onglet pour les comptes existant mais désactivés avec la seule action par lot possible de "réactiver" la sélection OK - Dans la gestion des agents (en base) je doit pouvoir affecté un délégué à plusieurs agents en même temps à condition que les sélections répondent aux exigences de l'attribution d'un délégué (même service, pas délégué de lui-même,...) OK - l'import doit accepter AUSSI les fichier sql comme c'était déjà le cas, je n'ai pas demandé à le supprimer OK - la page "/IHTS/public/admin/agents/import", doit me présenter les utilisateurs prêts à être importés et les lignes du fichier d'import qui ne seront pas prises en compte. Avant l'écriture en base. il faut que l'admin puisse sélectioner ceux qu'il veut réellement importer. il faut qu'il puisse leur affecter un service, dire qui est chef via "Affectation par lots (Batch Actions)". tout ça avant de pouvoir les importer réellement. ceux qui ne sont pas importables, il faut donner la raison pour chacun. dans "Actions par lots " je veux pouvoir rejeter un groupe de lignes sélectionnées. du coup elles changent d'onglet. je veux aussi pouvoir trier la liste par nom et/ou par mail OK - sur l'import de fichiers xls, il faut mettre pour chaque ligne, une date d'impression au 5 du mois suivant la date de déclaration sauf s'il y a déjà une date et sauf les lignes sont sur le mois en cours OK - Chaque service doit avoir un chef !? OK - Maintenant que le moteur de l'application est stable, vérifie toutes les cohérence des champs, des tables, supprimes toutes les tables inutiles et tous les champs inutiles dans le tables utilisées. ensuite commentes tout le code comme pour expliquer à un néophyte ce que fait ton code. Ensuite, nous ajouterons d'autres fonctionnalités mineures ok - Import users de GestUP OK - Import Excel OK - Sur les impressions, pour chaque ligne avec motif, si le nombre de caractères du motif est supérieur à 16 compte 2 lignes logique, même si (nombre de caractères(travail effectué)/$detailcols) = 1 pour la ligne. je suggère $l->logical_weight = floor(strlen($l->travail_effectue) / $divisor) + floor(strlen($l->motif) / 16) + 1; OK - les lignes imprimées doivent disparaître de tous les tableaux après la date RH, après impression. J'en trouve encore OK - dans l'impression, agrandit un peu la colonne motif avec une valeur fixe OK - à la place de "10/05/2026", écrit les dates au format "Dim 10 mai". autre exemple "11/11/2026" devient "mer 11 nov" OK - rien ne doit disparaître tant que ce n'est pas imprimé : chaque heures, astreintes et récup doivent rester modifiables s'il n'ont jamais été imprimés ou si un admin les réactive !!!! Un bandeau d'alerte s'affiche sur toutes les pages de saisie et devrait aussi s'afficher sur la synthèse pour rappeler à l'agent qu'il a dépasser la date. C'est ce qui fonctionnait hier et j'espère que ça fonctionne toujours. OK - Sur la synthèse, seulement si l'agent est connecté sur son compte, mets un bouton validation dans la synthèse, à côté du bouton impression. si l'agent appuye sur le bouton il faut demander confirmation à l'agent (avec une fenêtre module calquée sur celle de la suppression) et imprimer les lignes déclarées en ajoutant "Validé le __/__/____" (date du jour) avec le nom et le prénom de l'agent dans la signature agent. et dans ce cas, les lignes imprimées ne doivent plus être modifiables même si le mois n'est pas fini. un délégué ne peut pas le faire pour ses délégataires. tu n'as de modification de base de données à faire. OK - Séjour : dispatcher les heures en nuit et dimache comme une déclaration hors séjour OK - on va ajouter une fonctionnalité : un chef de service peut être chef de plusieurs services. il peut y avoir jusqu'à 2 chefs par service (pas plus). un service qui n'a pas de chef doit apparaitre d'une couleur différente dans le paramétrage des services. il va faloir ajouter une table qui va faire la liaison entre le profile et les services surtout qu'un serrvice peut avoir 2 chefs. les administrateurs devront pouvoir affecter des services aux chefs : sélection des chefs parmi ceux identifiés comme chef et case à cocher sur les services à lui attibuer. as-tu des questions ? OK - Dans la synthése, ajoute les heures de début et fin. pour tous les tableaux (synthése, impresion,...) mets les colonnes nuit à gauche des dimanche (recup et paie) sans oublié les entêtes et les lignes de totaux, de majoration et totaux majorés OK - Synthèse et impression : férié en rouge, samedi et dimanche en orange (comme tableau de déclaration) OK - je reviens sur ce qui marchait et ne fonctionne plus : tu as cassé la répartition des heures pour les séjours. et en supprimant les colonnes détail des 18ier dimanche (récup et paie), tu n'as pas enlevé les entêtes de ces colonnes et tu n'a plus la flexibilité de la colonne "travaille effectué" avec la valeur fixe que nous avions mise pour chaque colonne des heures réparties. par contre, des colonnes existent encore dans les lignes de totaux OK - on sait combien de lignes de détail d'heures supp. il faut imprimé. on sait que pour un texte de 50 caractères dans le champs "Travail effectué", c'est 1 ligne. donc on peut compter exactement le nombre de lignes à imprimer : nombre de caractères par ligne divisé par 60 (pour avoir une marge) nous confirme si une ligne tient sur 1 ligne d'impression ou plus (nb carctères /60). une page c'est 20 lignes de détail avec titre, entete, astreintes, signature donc, s'il y a plus de 20 lignes à imprimer on peut gérer les saut de pages comme on veut. on va appeler nblignes, le nombre de "lignes" d'impression. nblignes = somme(partie entière (nombre de caractères (travail effectué)/60)+1) de chaque detail dheuures supp. si nblignes < 24 alors tout doit être imprimé sur 1 page. sinon, si nblignes <= 27 et nblignes > 24 alors fait un saut de page après la ligne Recup. sinon si nblignes > 27 alors on va appeler nbpages, le nombre de pages à imprimer nbpages = partie entière (nblignes/24). ensuite, de 1 à nbpages, on imprime 24 "lignes" soit n lignes detail .sur la dernière page, il reste nblignes - (partie entière (nblignes / 24) x 24).. si reste <= 24 alors tout ce qui reste avec astreintes et signature simprimentt sur 1 page. sinon, impression des lignes detail qu'il reste avec saut de page après impression de Récup et impression des astreintes et signature OK - champs "total raw" stocké en négatif ok - sur l'impression, le pdf ne respect pas vraiment la synthèse. Les heures imprimées sont des heures majoréss et non les heures brutes. Il faut imprimer les heures brutes sauf le report du mois précédent et le solde à reporter qui doivent correspondre aux caulculs des heures majorées. OK - un délégué ne peut pas faire de saisie sur le compte du délégataire si le délégataire est connecté OK - Chevauchement séjour avec heures OK - Connexion simultannée ok - Liste des délégataires sur le côté OK - Synthèse avec détail travail et motif OK - Ajout, Modification, suppression lignes Séjours ok - quand un admin clique sur la visu du dashboard d'un agent, il revient sur son propre dashboard et non sur le dashboard de l'agent. s'il a délégation, il est bien sur le bon dashboard. ok- Il ne faut pas que le "super admin" puisse être désactivé dans la gestion des utilisateurs. ok - Dans la gestion des utilisateurs, un admin doit pouvoir forcer le mot de passe d'un agent avec la possibilité (par défaut) de demander à ce que l'agent change le mot de passe après connexion avec ce nouveau mot de passe. OK - quand un admin est sur le tableau de bord d'un agent, si il clique sur "Mes Heures (IHTS)" il doit passer sur la page de l'agent et non sur sa page...tout en gardant la possibilité d'aller directement sur son propre dashboard OK - dans la table astreintes_types, les champs id_filiere et nb_heures_paye_forfait sont inutiles ok - on revient sur la saisie d'une nouvelle astreinte : l'utilisateur doit d'abord saisir la date de début de l'astreinte, avant le type car s'il a changé de service en cours de mois, il faut que les types d'astreintes proposés correspoindent au service auquel il était rattaché au début de l'astreinte. Une partie est déjà commencé ok - sur le contrôle du chevauchement des déclarations d'astreinte, quand une astreinte se termine le 15, est-ce qu'une autre peut commencer le 15 ? rend le exclusif. la règle devra être la même pour les déclarations d'heures supplémentaires. peut-être faut-il l'externaliser !???? Pour répondre à ta question : techniquement, le reste de la logique mathématique tourne correctement (le découpage minute par minute, la gestion des jours fériés, etc.). Cependant, en relisant le moteur de calcul (OvertimeCalculator.php), j'ai repéré 3 points de règles de gestion (RH) qui méritent ton attention pour confirmer que le système calcule bien comme vous le souhaitez. Voici les 3 points à vérifier ensemble : 1. Le quota des "14 premières heures" est-il commun ou séparé ? Actuellement, le système maintient deux quotas séparés (un pour la paye, un pour la récup). Exemple : Si la limite de la filière est de 14h "premières heures". Qu'un agent fait 10h à payer et 10h à récupérer en journée. Ce que fait le code actuel : Il va majorer 10h de paye au taux "premières heures" ET 10h de récup au taux "premières heures" (soit 20h au total bénéficiant du premier palier). Question : Est-ce que ce quota de 14h devrait plutôt être global ? (Exemple: on prend d'abord 10h de paye et 4h de récup dans les "14 premières", et les 6h restantes basculent en "heures suivantes"). 2. Dimanche de Nuit (Règle d'exclusion) Lorsqu'un agent travaille un dimanche pendant des heures de nuit (ex: Dimanche à 23h) : Ce que fait le code : La catégorie "Nuit" est prioritaire sur "Dimanche". L'heure est donc comptabilisée uniquement comme heure de nuit (elle ne reçoit pas la majoration du dimanche). Question : Est-ce bien la règle attendue (non-cumul des majorations, en prenant la nuit plutôt que le dimanche) ? 3. Férié de Nuit (Règle d'exclusion) De la même manière, si un agent travaille une nuit pendant un jour férié (ex: 1er Janvier à 02h00) : Ce que fait le code : La catégorie "Férié" gagne sur la "Nuit". L'heure est comptabilisée uniquement comme jour férié (elle perd son statut d'heure de nuit). Question : Est-ce correct de privilégier le statut Férié et de ne pas cumuler avec la Nuit ? Si ces règles RH correspondent aux accords de ton établissement, alors oui, tous les calculs sont bons. Si l'un de ces points doit être ajusté (comme regrouper le quota des premières heures), dis-le moi et j'adapterai le calculateur !