Aller au contenu principal

Comment exécuter une tâche planifiée dans Easy2Do ?

Sur chaque projet, il est nécessaire d'exécuter des tâches planifiées. Dans ce cookbook, nous allons voir comment créer une tâche planifiée qui va générer un fichier CSV contenant les commandes.

Code source complet

Le code complet (structure de répertoires, tests, configuration) est disponible dans le repo d’exemples Doing.

➡ Easy2Do : https://bitbucket.org/doingfr/doing-cookbooks-examples/src/main/e2d-tache-planifiee/easy2do/

Easy2Do : 1h Total : 1h

TL;DR

  • Easy2Do dispose de contrôleurs de tâches planifiées qui permettent d'exécuter des actions à intervalles réguliers.
  • Pour créer une tâche planifiée, il faut créer un contrôleur préfixé par "Cron" et le placer dans le répertoire "controllers" du module concerné.

Prérequis

ÉlémentVersion / Remarque
PHP8.4
E2D - Core2.18
E2D - Bdd3.0
E2D - Auth1.8
E2D - RestFUL1.3

Exécuter une tâche planifiée

Contexte

Nous avons un projet avec des commandes. Nous voulons mettre en place une tâche planifiée permettant d'exporter toutes les commandes dans un fichier CSV.

Mise en place

Création du contrôleur de tâche planifiée dans le module "commande" :

<?php

namespace APP\Modules\Commande\Controllers;

use APP\Core\Lib\Interne\PHP\UndeadBrain as UndeadBrain;
use APP\Modules\Commande\Models\Commande;

class CronCommandeAdminCSV extends UndeadBrain
{
public function __construct(string $sAction)
{
switch ($sAction) {
case 'export_csv':
$aRetour = $this->vExportCsv();
break;
}
}

private function vExportCsv()
{
// On récupère toutes les commandes du jour présentes dans la base.
/** @var Commande $oCommande */
$oCommande = $this->oNew('Commande');
$aCommandesDuJour = $oCommande->aGetElements([], 0, '', 'sDateCommande DESC');

// Export CSV des commandes du jour.
$sNomFichier = 'commandes_du_jour_' . date('Y-m-d') . '.csv';
$sCheminFichier = __DIR__ . '/../../../data';
if (is_dir($sCheminFichier) === false) {
mkdir($sCheminFichier);
}
$sCheminFichier .= '/export';
if (is_dir($sCheminFichier) === false) {
mkdir($sCheminFichier);
}
$sCheminFichier .= '/' . $sNomFichier;
$oFichier = fopen($sCheminFichier, 'w');
if ($oFichier === false) {
throw new \Exception("Impossible d'ouvrir le fichier pour l'écriture : $sCheminFichier");
}

// Écrire les en-têtes
$aEntetes = ['ID', 'Date', 'Client', 'Montant'];
fputcsv($oFichier, $aEntetes, ';');

// Écrire les lignes des commandes
foreach ($aCommandesDuJour as $aCommande) {
$aLigne = [
$aCommande->sNumeroFacture ?? '',
$aCommande->sDateCommande ?? '',
$aCommande->sNomClient ?? '',
$aCommande->sMontant ?? ''
];
fputcsv($oFichier, $aLigne, ';');
}

fclose($oFichier);
}
}

Déclaration du contrôleur dans le fichier modules/commande/config/conf.yml :

aNamespace:
data:
Commande: APP\Modules\Commande\Models\Commande
CronCommandeAdminCSV: APP\Modules\Commande\Controllers\CronCommandeAdminCSV

Exécuter la tâche planifiée via la ligne de commande :

docker exec -t app_php php index.php --szZone=admin --szModule=commande --szController=cron --szAction=export_csv