Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@
- Ajout du script de mise à jour SQL (`sql/update_all.sql`) pour créer les compteurs hebdomadaires sur les données existantes.
- Redirection automatique vers la feuille existante en cas de création en doublon / Automatic redirect to the existing sheet when attempting a duplicate creation.
- Ajout d'un accès rapide à la création de feuille d'heures via le menu supérieur.
- Compatibilité Multicompany pour partager les feuilles de temps et leur numérotation / Multicompany compatibility to share weekly timesheets and numbering sequences.
- Inscription et retrait automatiques de la configuration Multicompany lors de l'activation/désactivation du module / Automatic registration and cleanup of the Multicompany configuration on module enable/disable.
- Affichage de l'entité dans la liste et la fiche lorsqu'on utilise Multicompany, avec badge natif sous la référence en cas d'entité différente / Display entity details on list and card when Multicompany is active, with a native badge under the reference when the entity differs.
- Harmonisation du filtre de semaine avec celui de la fiche via le sélecteur ISO / Harmonized week filter with the card using the ISO selector.
- Passage du filtre de semaine en multi-sélection pour regrouper plusieurs périodes dans la liste / Week filter upgraded to multi-select to group several periods in the list.
- Sécurisation des requêtes SQL sur les feuilles et lignes par entité pour Multicompany / Secured timesheet and line SQL queries with entity scoping for Multicompany.
- Filtre Multicompany de l'environnement aligné sur le multiselect natif dans la liste / Multicompany environment filter aligned with the native multiselect in the list.
- Réorganisation des options de partage Multicompany pour séparer les feuilles et la numérotation avec les pictogrammes adaptés / Reorganised Multicompany sharing options to separate sheets and numbering with suitable pictograms.
- Inversion des couleurs des statuts "Scellée" et "Refusée" pour reprendre les repères Dolibarr / Swapped colors of "Sealed" and "Refused" statuses to match Dolibarr visual cues.

## 1.0

Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ Description of the module...
- Recalcul automatique des compteurs de zones et de paniers lors de chaque enregistrement.
- Affichage des compteurs de zones et de paniers dans la liste des feuilles hebdomadaires.
- Création rapide d'une feuille d'heures depuis le raccourci "Ajouter" du menu supérieur.
- Compatibilité Multicompany pour partager les feuilles de temps et leur numérotation / Multicompany compatibility to share weekly timesheets and their numbering.
- Inscription automatique de la configuration Multicompany lors de l'activation et nettoyage lors de la désactivation / Automatic registration of the Multicompany configuration on activation and cleanup on deactivation.
- Affichage de l'entité dans la liste et la fiche lorsqu'on utilise Multicompany, avec badge natif sous la référence lorsque l'entité diffère / Display entity information in list and card when using Multicompany, with a native badge under the reference when the entity differs.
- Sécurisation des requêtes SQL sur les feuilles et lignes par entité pour Multicompany / Secured SQL queries on sheets and lines with entity scoping for Multicompany.
- Filtre multisélection de l'environnement respectant l'interface native de Dolibarr en Multicompany / Multiselect environment filter following Dolibarr native Multicompany interface.
- Réorganisation des options Multicompany pour distinguer partage et numérotation avec les pictogrammes natifs / Reorganised Multicompany sharing options to split sharing and numbering with native pictograms.
- Inversion des couleurs des statuts "Scellée" et "Refusée" pour correspondre au code couleur Dolibarr / Swapped colors of "Sealed" and "Refused" statuses to follow Dolibarr color codes.
- Harmonisation du filtre de semaine de la liste avec la fiche via le sélecteur ISO / Harmonized week filter between list and card using the ISO selector.
- Filtre de semaine en multi-sélection pour combiner plusieurs périodes directement depuis la liste / Multi-select week filter to combine several periods directly from the list.

<!--
![Screenshot timesheetweek](img/screenshot_timesheetweek.png?raw=true "TimesheetWeek"){imgmd}
Expand Down
122 changes: 122 additions & 0 deletions class/actions_timesheetweek.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
*/
class ActionsTimesheetweek
{
// EN: Identifier used by the Multicompany sharing payload.
// FR: Identifiant utilisé par la charge utile de partage Multicompany.
public const MULTICOMPANY_SHARING_ROOT_KEY = 'timesheetweek';

/** @var DoliDB */
public $db;

Expand Down Expand Up @@ -84,4 +88,122 @@ public function menuDropdownQuickaddItems($parameters, &$object, &$action, $hook

return 0;
}

/**
* Build the Multicompany sharing payload for the module.
* Construire la charge utile de partage Multicompany pour le module.
*
* @return array
*/
public static function getMulticompanySharingDefinition()
{
global $conf;

// EN: Prepare the payload describing both the element and numbering sharing options.
// FR: Préparer la charge utile décrivant les options de partage des éléments et de la numérotation.
return array(
self::MULTICOMPANY_SHARING_ROOT_KEY => array(
'sharingelements' => array(
'timesheetweek' => array(
'type' => 'element',
'icon' => 'bookcal',
'lang' => 'timesheetweek@timesheetweek',
'tooltip' => 'ShareTimesheetWeekTooltip',
'enable' => '! empty($conf->timesheetweek->enabled)',
),
),
// EN: Expose the numbering share inside the dedicated document numbering section.
// FR: Exposer le partage de numérotation dans la section dédiée aux numérotations de documents.
'sharingdocumentnumbering' => array(
'timesheetweeknumbering' => array(
'type' => 'object',
'icon' => 'fa fa-cogs',
'lang' => 'timesheetweek@timesheetweek',
'tooltip' => 'ShareTimesheetWeekNumberingTooltip',
'mandatory' => 'timesheetweek',
'enable' => '! empty($conf->timesheetweek->enabled)',
'display' => '! empty($conf->global->MULTICOMPANY_TIMESHEETWEEK_SHARING_ENABLED)',
'input' => array(
'global' => array(
'hide' => true,
'del' => true,
),
'timesheetweek' => array(
'showhide' => true,
'del' => true,
),
),
),
),
'sharingmodulename' => array(
'timesheetweek' => 'timesheetweek',
'timesheetweeknumbering' => 'timesheetweek',
),
),
);
}

/**
* Prepare and store multicompany sharing configuration.
* Préparer et stocker la configuration de partage multicompany.
*
* @return void
*/
private function registerMulticompanySharingDefinition()
{
global $langs;

// EN: Safeguard the results container to merge data without overwriting existing hooks.
// FR: Sécuriser le conteneur de résultats pour fusionner les données sans écraser les hooks existants.
if (!is_array($this->results)) {
$this->results = array();
}

// EN: Ensure translations are available for the multicompany labels.
// FR: S'assurer que les traductions sont disponibles pour les libellés multicompany.
$langs->loadLangs(array('timesheetweek@timesheetweek'));

// EN: Merge the static definition with any pre-existing sharing data.
// FR: Fusionner la définition statique avec les données de partage déjà présentes.
$this->results = array_replace_recursive($this->results, self::getMulticompanySharingDefinition());
}

/**
* Provide multicompany sharing options through the dedicated hook.
* Fournir les options de partage multicompany via le hook dédié.
*/
public function multicompanyExternalModulesSharing($parameters, &$object, &$action, $hookmanager)
{
// EN: Register the sharing definition for the multicompany extension.
// FR: Enregistrer la définition de partage pour l'extension multicompany.
$this->registerMulticompanySharingDefinition();

return 0;
}

/**
* Alias hook to support alternate multicompany triggers.
* Hook alias pour supporter des déclencheurs multicompany alternatifs.
*/
public function multicompanyExternalModuleSharing($parameters, &$object, &$action, $hookmanager)
{
// EN: Delegate to the primary multicompany sharing registration.
// FR: Déléguer à l'enregistrement principal du partage multicompany.
$this->registerMulticompanySharingDefinition();

return 0;
}

/**
* Additional alias covering broader multicompany sharing requests.
* Alias supplémentaire couvrant les requêtes de partage multicompany plus larges.
*/
public function multicompanySharingOptions($parameters, &$object, &$action, $hookmanager)
{
// EN: Reuse the shared definition to keep behaviour consistent across hooks.
// FR: Réutiliser la définition partagée pour conserver un comportement cohérent entre les hooks.
$this->registerMulticompanySharingDefinition();

return 0;
}
}
Loading