Agenda : numéro de semaine

Bonjour,

J’ai effectué plusieurs recherches dans les options de Dolibarr, sur le forum français et anglais, ainsi que sur le GitHub, mais je n’ai rien trouvé concernant l’affichage des numéros de semaines dans l’agenda pour la « vue mois », à part ce post sans réponse datant de décembre 2013 (je n’ai pas contacté l’auteur car mon intérêt n’est pas là).

Est-ce que l’option existe et l’aurais-je loupé ? (v12.0.1)
La question a-t-elle déjà été posée ?

Dans le cas contraire, j’ai modifié un fichier source pour les afficher, mais je voulais être sûr qu’il n’existe rien avant de proposer quelque chose.

Merci d’avance.

Kevin

Bonjour,

Je n’ai rien trouvé dans les forum non plus.
J’ai également un code pour mettre en place le N° de semaine.

Merci
Stéphane

Bonjour @stephprox @Kev ,

Pourquoi ne pas proposer votre code sur github ?

Bonjour,

@stephprox, merci pour ton retour.

@RomainDeschamps, j’avoue ne pas très bien connaître le fonctionnement de GitHub concernant les pull requests, il faut que je me documente dessus.

Dans un premier temps, je vais partager mon code ici pour ceux qui souhaitent le tester.

Procédure pour ajouter les numéros de semaines dans l’agenda, pour l’affichage « Vue mois »

Cette procédure est vérifiée et testée pour la version 12.0.1, sous WIndows 10 version 2004 (installation manuelle, pas par DoliWamp), sur FireFox et Chrome à jour.
Après comparaison, le fichier concerné par les modifications étant identique pour les versions 12.0.1 et 12.0.2, il est tout à fait probable que cette procédure fonctionne également pour la version 12.0.2 (à vous de vérifier pour les versions antérieures).

N’oubliez pas qu’en modifiant les fichiers sources de Dolibarr, vous êtes seul responsable des résultats occasionnés, prenez donc vos précautions en sauvegardant vos données avant, et soyez sûr d’avoir les moyens d’annuler complètement vos modifications.

1/ Dans le dossier de Dolibarr, faire une copie du fichier « …\comm\action\index.php ».

2/ Éditer le fichier « …\comm\action\index.php » (numéros de ligne valables pour la version d’origine jamais modifiée).

3/ Ligne 1163, ajouter la ligne suivante (entre la ligne 1162 print ' <tr class="liste_titre">';, et la ligne 1163 $i = 0;) :

// Ajout du titre de la colonne des numéros de semaines, colonne à gauche du tableau
echo '  <td align="center">#</td>';

4/ Ligne 1187, ajouter les lignes suivantes (entre la ligne 1186 echo " <tr>\n"; et la ligne 1187 for ($iter_day = 0; $iter_day < 7; $iter_day++) ) :

// Création de la date du jour en cours au format 'yyyy-mm-dd'
if ($tmpday <= 0) // Si le jour en cours appartient au mois précédent
{
	// Création de la date du jour en cours (arguments repris depuis la fonction 'show_day_events' de la boucle FOR ci-dessous, pour la même condition IF)
	$currdate0 = sprintf("%04d", $prev_year).sprintf("%02d", $prev_month).sprintf("%02d", $max_day_in_prev_month + $tmpday);
}
elseif ($tmpday <= $max_day_in_month) // Si le jour en cours appartient au mois en cours
{
	// Création de la date du jour en cours (arguments repris depuis la fonction 'show_day_events' de la boucle FOR ci-dessous, pour la même condition IF)
	$currdate0 = sprintf("%04d", $year).sprintf("%02d", $month).sprintf("%02d", $tmpday);
}
else // Si le jour en cours appartient au mois suivant
{
	// Création de la date du jour en cours (arguments repris depuis la fonction 'show_day_events' de la boucle FOR ci-dessous, pour la même condition IF)
	$currdate0 = sprintf("%04d", $next_year).sprintf("%02d", $next_month).sprintf("%02d", $tmpday - $max_day_in_month);
}
// Récupération du numéro de la semaine correspondant à la date spécifiée '$currdate0'
$numweek0 = date("W", strtotime(date($currdate0)));
// Écriture dans le code HTML du numéro de la semaine, avec largeur de la colonne
echo ' <td align="center" width="2.0%">'.$numweek0.'</td>';

5/ Les deux variables currdate0 et numweek0 sont créées seulement pour cette procédure, donc leur nom est personnalisable. Les autres ne doivent pas être modifiées.

6/ Le titre de la colonne des numéros de semaines est modifiable dans la ligne ajoutée à l’étape 2/ (ici, le titre définit est « # », entre les caractères > et <).

7/ La largeur de la colonne des numéros de semaines est modifiable, en pourcentage, dans la dernière ligne ajoutée à l’étape 3/ (ici, la largeur est définit à « 2.0% »)
La largeur du tableau utilisée pour afficher l’agenda étant définit en pourcentage, il se peut que l’ajout de la colonne modifie la taille des colonnes des jours de la semaines, et notamment la colonne de droite en la réduisant (mais en théorie les colonnes des jours ne devraient pas se déformer).
En cas de besoin, la largeur des colonnes des jours de la semaine et relativement facile à ajuster, dans le code contenu dans la boucle FOR citée à l’étape 3/ (ligne 1187 avant l’ajout du code supplémentaire),
il y a 3 lignes de codes commençant par echo ' <td class="', et contenant la propriété width, définit par défaut avec la valeur 14%. Ajuster cette valeur en fonction de celle attribuée à la colonne des numéros de semaines (de base, 14*7=98, donc les 2% de largeur affecté à la colonne ajoutée sont en fait déjà disponibles).
Les valeurs décimales sous forme 14.0% sont apparemment prise en compte, pour une meilleure finesse d’ajustement.
Attention, il faut modifier les valeurs de ces 3 lignes en même temps, pas seulement une ou deux.

8/ Enregistrer le fichier.

9/ Actualiser la page.

Voici le resultat escompté en image :

Je prèfère essayer d’expliquer au mieux les modifications à effectuer, qui sont ici relativement faciles, plutôt que de simplement donner un fichier à télécharger. Cela permet aux néophites de la programmation de se rendre compte qu’un code inconnu peut vite être complexe et qu’il faut toujours faire attention quand on décide de le modifier, en restant bien conscient de ce que l’on fait.

Je ne suis pas dév en PHP, alors j’espère avoir respecté au mieux les « règles de codage » de ce langage.

N’hésitez pas à apporter vos remarques.

1 « J'aime »

Bonjour,

Même réponse que Kevin

Bonjour,

Pull request créé sur le github…

2 « J'aime »

Bonjour,

La numérotation des semaines n’est pas identique dans chaque pays : la semaine n°1 de 2021 pouvant désigner le 1er et 2 janvier, le 1er, 2 et 3 janvier, ou la semaine suivante complète, pour 2020 c’était plus simple car le 2 janvier était un jeudi.
Si la numérotation des semaines est incluse dans le code standard de Dolibarr il faudrait que cela soit paramétrable et qu’on puisse choisir le système de numérotation des semaines adéquat.

Cdlt

@Kev,

Pull request accepté ! :+1:

1 « J'aime »

Bonjour @pascal_z,

C’est vrai que dans certains logiciels il y a un paramètre pour définir quand commence la 1ère semaine de l’année.
Cela m’a bien traversé l’esprit quand j’ai fais la modification, mais sachant que j’utilise la fonction « date » du langage PHP (fonction apparemment basée sur la norme ISO-8601 pour le numéro de semaine), j’avoue ne pas avoir cherché à gérer ce paramétrage, et en même temps, je n’ai pas les compétences en PHP pour le faire…
Je laisse donc le soins aux dèv de compléter tout ça s’ils le souhaitent, mais j’entends bien que c’est un peu facile comme réflexion :slight_smile:

En tous cas, content de pouvoir contribuer au projet, et que la solution puisse servir à d’autres, même si @stephprox avait eu l’idée depuis plusieurs années déjà :wink: