699 lines
30 KiB
PHP
699 lines
30 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\DataFixtures;
|
|
|
|
use App\Entity\Client;
|
|
use App\Entity\ClientTicket;
|
|
use App\Entity\Project;
|
|
use App\Entity\Task;
|
|
use App\Entity\TaskEffort;
|
|
use App\Entity\TaskGroup;
|
|
use App\Entity\TaskPriority;
|
|
use App\Entity\TaskRecurrence;
|
|
use App\Entity\TaskStatus;
|
|
use App\Entity\TaskTag;
|
|
use App\Entity\TimeEntry;
|
|
use App\Entity\User;
|
|
use App\Entity\ZimbraConfiguration;
|
|
use App\Enum\RecurrenceType;
|
|
use DateTimeImmutable;
|
|
use DateTimeZone;
|
|
use Doctrine\Bundle\FixturesBundle\Fixture;
|
|
use Doctrine\Persistence\ObjectManager;
|
|
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
|
|
|
|
class AppFixtures extends Fixture
|
|
{
|
|
public function __construct(
|
|
private readonly UserPasswordHasherInterface $passwordHasher,
|
|
) {}
|
|
|
|
public function load(ObjectManager $manager): void
|
|
{
|
|
// Users
|
|
$admin = new User();
|
|
$admin->setUsername('admin');
|
|
$admin->setRoles(['ROLE_ADMIN']);
|
|
$admin->setPassword($this->passwordHasher->hashPassword($admin, 'admin'));
|
|
$admin->setApiToken('dev-mcp-token-for-testing-only-do-not-use-in-production');
|
|
$manager->persist($admin);
|
|
|
|
$userAlice = new User();
|
|
$userAlice->setUsername('alice');
|
|
$userAlice->setRoles(['ROLE_USER']);
|
|
$userAlice->setPassword($this->passwordHasher->hashPassword($userAlice, 'alice'));
|
|
$manager->persist($userAlice);
|
|
|
|
$userBob = new User();
|
|
$userBob->setUsername('bob');
|
|
$userBob->setRoles(['ROLE_USER']);
|
|
$userBob->setPassword($this->passwordHasher->hashPassword($userBob, 'bob'));
|
|
$manager->persist($userBob);
|
|
|
|
$userCharlie = new User();
|
|
$userCharlie->setUsername('charlie');
|
|
$userCharlie->setRoles(['ROLE_USER']);
|
|
$userCharlie->setPassword($this->passwordHasher->hashPassword($userCharlie, 'charlie'));
|
|
$manager->persist($userCharlie);
|
|
|
|
// Clients
|
|
$clientLiot = new Client();
|
|
$clientLiot->setName('LIOT');
|
|
$clientLiot->setEmail('contact@liot.fr');
|
|
$clientLiot->setPhone('05 50 50 50 50');
|
|
$clientLiot->setStreet('14 allée d\'argenson');
|
|
$clientLiot->setCity('Poitiers');
|
|
$clientLiot->setPostalCode('86100');
|
|
$manager->persist($clientLiot);
|
|
|
|
$clientAcme = new Client();
|
|
$clientAcme->setName('ACME Corp');
|
|
$clientAcme->setEmail('contact@acme.com');
|
|
$clientAcme->setPhone('01 23 45 67 89');
|
|
$clientAcme->setStreet('10 rue de la Paix');
|
|
$clientAcme->setCity('Paris');
|
|
$clientAcme->setPostalCode('75002');
|
|
$manager->persist($clientAcme);
|
|
|
|
$clientNova = new Client();
|
|
$clientNova->setName('Nova Tech');
|
|
$clientNova->setEmail('info@novatech.io');
|
|
$clientNova->setPhone('04 56 78 90 12');
|
|
$clientNova->setStreet('5 avenue Jean Jaurès');
|
|
$clientNova->setCity('Lyon');
|
|
$clientNova->setPostalCode('69007');
|
|
$manager->persist($clientNova);
|
|
|
|
// Projets
|
|
$projectSirh = new Project();
|
|
$projectSirh->setCode('SIRH');
|
|
$projectSirh->setName('SIRH');
|
|
$projectSirh->setDescription('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac blandit turpis.');
|
|
$projectSirh->setColor('#222783');
|
|
$projectSirh->setClient($clientLiot);
|
|
$manager->persist($projectSirh);
|
|
|
|
$projectCrm = new Project();
|
|
$projectCrm->setCode('CRM');
|
|
$projectCrm->setName('CRM');
|
|
$projectCrm->setDescription('Gestion de la relation client et suivi commercial.');
|
|
$projectCrm->setColor('#E91E63');
|
|
$projectCrm->setClient($clientAcme);
|
|
$manager->persist($projectCrm);
|
|
|
|
$projectErp = new Project();
|
|
$projectErp->setCode('ERP');
|
|
$projectErp->setName('ERP');
|
|
$projectErp->setDescription('Planification des ressources et gestion des stocks.');
|
|
$projectErp->setColor('#4A90D9');
|
|
$projectErp->setClient($clientNova);
|
|
$manager->persist($projectErp);
|
|
|
|
$projectInterne = new Project();
|
|
$projectInterne->setCode('SITE');
|
|
$projectInterne->setName('Site vitrine');
|
|
$projectInterne->setDescription('Refonte du site web corporate.');
|
|
$projectInterne->setColor('#26A69A');
|
|
$projectInterne->setClient(null);
|
|
$manager->persist($projectInterne);
|
|
|
|
// Task Statuses (global)
|
|
$defaultStatuses = [
|
|
['A faire', '#222783', 0],
|
|
['En cours', '#4A90D9', 1],
|
|
['Bloqué', '#C62828', 2],
|
|
['En attente de validation', '#FF8F00', 3],
|
|
['Terminé', '#26A69A', 4],
|
|
];
|
|
|
|
$statusObjects = [];
|
|
foreach ($defaultStatuses as [$label, $color, $position]) {
|
|
$status = new TaskStatus();
|
|
$status->setLabel($label);
|
|
$status->setColor($color);
|
|
$status->setPosition($position);
|
|
if ('Terminé' === $label) {
|
|
$status->setIsFinal(true);
|
|
}
|
|
$manager->persist($status);
|
|
$statusObjects[$label] = $status;
|
|
}
|
|
|
|
$statusTodo = $statusObjects['A faire'];
|
|
$statusInProgress = $statusObjects['En cours'];
|
|
$statusBlocked = $statusObjects['Bloqué'];
|
|
$statusReview = $statusObjects['En attente de validation'];
|
|
$statusDone = $statusObjects['Terminé'];
|
|
|
|
// Task Efforts
|
|
$effortS = new TaskEffort();
|
|
$effortS->setLabel('S');
|
|
$manager->persist($effortS);
|
|
|
|
$effortM = new TaskEffort();
|
|
$effortM->setLabel('M');
|
|
$manager->persist($effortM);
|
|
|
|
$effortL = new TaskEffort();
|
|
$effortL->setLabel('L');
|
|
$manager->persist($effortL);
|
|
|
|
$effortXL = new TaskEffort();
|
|
$effortXL->setLabel('XL');
|
|
$manager->persist($effortXL);
|
|
|
|
$effortXXL = new TaskEffort();
|
|
$effortXXL->setLabel('XXL');
|
|
$manager->persist($effortXXL);
|
|
|
|
// Task Priorities
|
|
$priorityLow = new TaskPriority();
|
|
$priorityLow->setLabel('Basse');
|
|
$priorityLow->setColor('#222783');
|
|
$manager->persist($priorityLow);
|
|
|
|
$priorityMedium = new TaskPriority();
|
|
$priorityMedium->setLabel('Moyen');
|
|
$priorityMedium->setColor('#FF8F00');
|
|
$manager->persist($priorityMedium);
|
|
|
|
$priorityHigh = new TaskPriority();
|
|
$priorityHigh->setLabel('Haute');
|
|
$priorityHigh->setColor('#C62828');
|
|
$manager->persist($priorityHigh);
|
|
|
|
// Task Tags
|
|
$tagPassword = new TaskTag();
|
|
$tagPassword->setLabel('Gestion mdp');
|
|
$tagPassword->setColor('#C62828');
|
|
$manager->persist($tagPassword);
|
|
|
|
$tagAuth = new TaskTag();
|
|
$tagAuth->setLabel('Connexion');
|
|
$tagAuth->setColor('#FF8F00');
|
|
$manager->persist($tagAuth);
|
|
|
|
$tagCalendar = new TaskTag();
|
|
$tagCalendar->setLabel('Calendrier');
|
|
$tagCalendar->setColor('#222783');
|
|
$manager->persist($tagCalendar);
|
|
|
|
// Task Groups — SIRH
|
|
$groupFrontend = new TaskGroup();
|
|
$groupFrontend->setTitle('Frontend');
|
|
$groupFrontend->setColor('#4A90D9');
|
|
$groupFrontend->setProject($projectSirh);
|
|
$manager->persist($groupFrontend);
|
|
|
|
$groupBackend = new TaskGroup();
|
|
$groupBackend->setTitle('Backend');
|
|
$groupBackend->setColor('#26A69A');
|
|
$groupBackend->setProject($projectSirh);
|
|
$manager->persist($groupBackend);
|
|
|
|
// Task Groups — CRM
|
|
$groupCrmUi = new TaskGroup();
|
|
$groupCrmUi->setTitle('Interface');
|
|
$groupCrmUi->setColor('#E91E63');
|
|
$groupCrmUi->setProject($projectCrm);
|
|
$manager->persist($groupCrmUi);
|
|
|
|
$groupCrmApi = new TaskGroup();
|
|
$groupCrmApi->setTitle('API');
|
|
$groupCrmApi->setColor('#9C27B0');
|
|
$groupCrmApi->setProject($projectCrm);
|
|
$manager->persist($groupCrmApi);
|
|
|
|
// Task Groups — ERP
|
|
$groupErpStock = new TaskGroup();
|
|
$groupErpStock->setTitle('Stocks');
|
|
$groupErpStock->setColor('#4A90D9');
|
|
$groupErpStock->setProject($projectErp);
|
|
$manager->persist($groupErpStock);
|
|
|
|
$groupErpFacturation = new TaskGroup();
|
|
$groupErpFacturation->setTitle('Facturation');
|
|
$groupErpFacturation->setColor('#FF8F00');
|
|
$groupErpFacturation->setProject($projectErp);
|
|
$manager->persist($groupErpFacturation);
|
|
|
|
// Task Groups — Site vitrine
|
|
$groupSiteDesign = new TaskGroup();
|
|
$groupSiteDesign->setTitle('Design');
|
|
$groupSiteDesign->setColor('#26A69A');
|
|
$groupSiteDesign->setProject($projectInterne);
|
|
$manager->persist($groupSiteDesign);
|
|
|
|
$groupSiteContenu = new TaskGroup();
|
|
$groupSiteContenu->setTitle('Contenu');
|
|
$groupSiteContenu->setColor('#795548');
|
|
$groupSiteContenu->setProject($projectInterne);
|
|
$manager->persist($groupSiteContenu);
|
|
|
|
// =============================================
|
|
// Tasks — SIRH
|
|
// =============================================
|
|
$task1 = new Task();
|
|
$task1->setNumber(1);
|
|
$task1->setTitle('Création d\'une page de login');
|
|
$task1->setStatus($statusTodo);
|
|
$task1->setEffort($effortXXL);
|
|
$task1->setPriority($priorityLow);
|
|
$task1->setAssignee($admin);
|
|
$task1->setGroup($groupFrontend);
|
|
$task1->setProject($projectSirh);
|
|
$task1->addTag($tagPassword);
|
|
$manager->persist($task1);
|
|
|
|
$task2 = new Task();
|
|
$task2->setNumber(2);
|
|
$task2->setTitle('Intégration SSO');
|
|
$task2->setStatus($statusTodo);
|
|
$task2->setEffort($effortL);
|
|
$task2->setPriority($priorityHigh);
|
|
$task2->setAssignee($userAlice);
|
|
$task2->setGroup($groupFrontend);
|
|
$task2->setProject($projectSirh);
|
|
$task2->addTag($tagAuth);
|
|
$task2->setScheduledStart(new DateTimeImmutable('next monday 09:00'));
|
|
$task2->setScheduledEnd(new DateTimeImmutable('next monday 17:00'));
|
|
$task2->setSyncToCalendar(false);
|
|
$manager->persist($task2);
|
|
|
|
$task3 = new Task();
|
|
$task3->setNumber(3);
|
|
$task3->setTitle('API d\'authentification');
|
|
$task3->setStatus($statusInProgress);
|
|
$task3->setEffort($effortXXL);
|
|
$task3->setPriority($priorityLow);
|
|
$task3->setAssignee($admin);
|
|
$task3->setGroup($groupBackend);
|
|
$task3->setProject($projectSirh);
|
|
$task3->addTag($tagPassword);
|
|
$manager->persist($task3);
|
|
|
|
$task4 = new Task();
|
|
$task4->setNumber(4);
|
|
$task4->setTitle('Gestion des tokens JWT');
|
|
$task4->setStatus($statusBlocked);
|
|
$task4->setEffort($effortXXL);
|
|
$task4->setPriority($priorityLow);
|
|
$task4->setAssignee($userBob);
|
|
$task4->setProject($projectSirh);
|
|
$task4->addTag($tagPassword);
|
|
$manager->persist($task4);
|
|
|
|
$task5 = new Task();
|
|
$task5->setNumber(5);
|
|
$task5->setTitle('Calendrier des congés');
|
|
$task5->setStatus($statusReview);
|
|
$task5->setEffort($effortXXL);
|
|
$task5->setPriority($priorityMedium);
|
|
$task5->setAssignee($userCharlie);
|
|
$task5->setProject($projectSirh);
|
|
$task5->addTag($tagCalendar);
|
|
$task5->setDeadline(new DateTimeImmutable('+2 weeks'));
|
|
$task5->setSyncToCalendar(false);
|
|
$manager->persist($task5);
|
|
|
|
$task6 = new Task();
|
|
$task6->setNumber(6);
|
|
$task6->setTitle('Page de réinitialisation mdp');
|
|
$task6->setStatus($statusDone);
|
|
$task6->setEffort($effortXXL);
|
|
$task6->setPriority($priorityHigh);
|
|
$task6->setAssignee($admin);
|
|
$task6->setProject($projectSirh);
|
|
$task6->addTag($tagAuth);
|
|
$manager->persist($task6);
|
|
|
|
// =============================================
|
|
// Tasks — CRM
|
|
// =============================================
|
|
$taskCrm1 = new Task();
|
|
$taskCrm1->setNumber(1);
|
|
$taskCrm1->setTitle('Liste des contacts');
|
|
$taskCrm1->setStatus($statusDone);
|
|
$taskCrm1->setEffort($effortL);
|
|
$taskCrm1->setPriority($priorityHigh);
|
|
$taskCrm1->setAssignee($admin);
|
|
$taskCrm1->setGroup($groupCrmUi);
|
|
$taskCrm1->setProject($projectCrm);
|
|
$manager->persist($taskCrm1);
|
|
|
|
$taskCrm2 = new Task();
|
|
$taskCrm2->setNumber(2);
|
|
$taskCrm2->setTitle('Fiche contact détaillée');
|
|
$taskCrm2->setStatus($statusInProgress);
|
|
$taskCrm2->setEffort($effortM);
|
|
$taskCrm2->setPriority($priorityMedium);
|
|
$taskCrm2->setAssignee($userAlice);
|
|
$taskCrm2->setGroup($groupCrmUi);
|
|
$taskCrm2->setProject($projectCrm);
|
|
$manager->persist($taskCrm2);
|
|
|
|
$taskCrm3 = new Task();
|
|
$taskCrm3->setNumber(3);
|
|
$taskCrm3->setTitle('Import CSV contacts');
|
|
$taskCrm3->setStatus($statusTodo);
|
|
$taskCrm3->setEffort($effortXL);
|
|
$taskCrm3->setPriority($priorityLow);
|
|
$taskCrm3->setAssignee($admin);
|
|
$taskCrm3->setGroup($groupCrmApi);
|
|
$taskCrm3->setProject($projectCrm);
|
|
$manager->persist($taskCrm3);
|
|
|
|
$taskCrm4 = new Task();
|
|
$taskCrm4->setNumber(4);
|
|
$taskCrm4->setTitle('Pipeline de vente');
|
|
$taskCrm4->setStatus($statusInProgress);
|
|
$taskCrm4->setEffort($effortXXL);
|
|
$taskCrm4->setPriority($priorityHigh);
|
|
$taskCrm4->setAssignee($userBob);
|
|
$taskCrm4->setGroup($groupCrmUi);
|
|
$taskCrm4->setProject($projectCrm);
|
|
$taskCrm4->addTag($tagCalendar);
|
|
$manager->persist($taskCrm4);
|
|
|
|
$taskCrm5 = new Task();
|
|
$taskCrm5->setNumber(5);
|
|
$taskCrm5->setTitle('API recherche contacts');
|
|
$taskCrm5->setStatus($statusReview);
|
|
$taskCrm5->setEffort($effortM);
|
|
$taskCrm5->setPriority($priorityMedium);
|
|
$taskCrm5->setAssignee($admin);
|
|
$taskCrm5->setGroup($groupCrmApi);
|
|
$taskCrm5->setProject($projectCrm);
|
|
$manager->persist($taskCrm5);
|
|
|
|
// =============================================
|
|
// Tasks — ERP
|
|
// =============================================
|
|
$taskErp1 = new Task();
|
|
$taskErp1->setNumber(1);
|
|
$taskErp1->setTitle('Tableau de bord stocks');
|
|
$taskErp1->setStatus($statusDone);
|
|
$taskErp1->setEffort($effortL);
|
|
$taskErp1->setPriority($priorityHigh);
|
|
$taskErp1->setAssignee($admin);
|
|
$taskErp1->setGroup($groupErpStock);
|
|
$taskErp1->setProject($projectErp);
|
|
$manager->persist($taskErp1);
|
|
|
|
$taskErp2 = new Task();
|
|
$taskErp2->setNumber(2);
|
|
$taskErp2->setTitle('Alertes stock bas');
|
|
$taskErp2->setStatus($statusInProgress);
|
|
$taskErp2->setEffort($effortM);
|
|
$taskErp2->setPriority($priorityHigh);
|
|
$taskErp2->setAssignee($userCharlie);
|
|
$taskErp2->setGroup($groupErpStock);
|
|
$taskErp2->setProject($projectErp);
|
|
$manager->persist($taskErp2);
|
|
|
|
$taskErp3 = new Task();
|
|
$taskErp3->setNumber(3);
|
|
$taskErp3->setTitle('Génération factures PDF');
|
|
$taskErp3->setStatus($statusTodo);
|
|
$taskErp3->setEffort($effortXXL);
|
|
$taskErp3->setPriority($priorityMedium);
|
|
$taskErp3->setAssignee($admin);
|
|
$taskErp3->setGroup($groupErpFacturation);
|
|
$taskErp3->setProject($projectErp);
|
|
$taskErp3->setDeadline(new DateTimeImmutable('+1 month'));
|
|
$taskErp3->setSyncToCalendar(false);
|
|
$manager->persist($taskErp3);
|
|
|
|
$taskErp4 = new Task();
|
|
$taskErp4->setNumber(4);
|
|
$taskErp4->setTitle('Historique mouvements stock');
|
|
$taskErp4->setStatus($statusReview);
|
|
$taskErp4->setEffort($effortL);
|
|
$taskErp4->setPriority($priorityLow);
|
|
$taskErp4->setAssignee($admin);
|
|
$taskErp4->setGroup($groupErpStock);
|
|
$taskErp4->setProject($projectErp);
|
|
$manager->persist($taskErp4);
|
|
|
|
$taskErp5 = new Task();
|
|
$taskErp5->setNumber(5);
|
|
$taskErp5->setTitle('Export comptable');
|
|
$taskErp5->setStatus($statusBlocked);
|
|
$taskErp5->setEffort($effortXL);
|
|
$taskErp5->setPriority($priorityHigh);
|
|
$taskErp5->setAssignee($admin);
|
|
$taskErp5->setGroup($groupErpFacturation);
|
|
$taskErp5->setProject($projectErp);
|
|
$manager->persist($taskErp5);
|
|
|
|
$taskErp6 = new Task();
|
|
$taskErp6->setNumber(6);
|
|
$taskErp6->setTitle('Inventaire annuel');
|
|
$taskErp6->setStatus($statusTodo);
|
|
$taskErp6->setEffort($effortS);
|
|
$taskErp6->setPriority($priorityLow);
|
|
$taskErp6->setAssignee($admin);
|
|
$taskErp6->setGroup($groupErpStock);
|
|
$taskErp6->setProject($projectErp);
|
|
$taskErp6->addTag($tagCalendar);
|
|
$manager->persist($taskErp6);
|
|
|
|
// =============================================
|
|
// Tasks — Site vitrine
|
|
// =============================================
|
|
$taskSite1 = new Task();
|
|
$taskSite1->setNumber(1);
|
|
$taskSite1->setTitle('Maquette page d\'accueil');
|
|
$taskSite1->setStatus($statusDone);
|
|
$taskSite1->setEffort($effortM);
|
|
$taskSite1->setPriority($priorityHigh);
|
|
$taskSite1->setAssignee($admin);
|
|
$taskSite1->setGroup($groupSiteDesign);
|
|
$taskSite1->setProject($projectInterne);
|
|
$manager->persist($taskSite1);
|
|
|
|
$taskSite2 = new Task();
|
|
$taskSite2->setNumber(2);
|
|
$taskSite2->setTitle('Intégration responsive');
|
|
$taskSite2->setStatus($statusInProgress);
|
|
$taskSite2->setEffort($effortL);
|
|
$taskSite2->setPriority($priorityMedium);
|
|
$taskSite2->setAssignee($userAlice);
|
|
$taskSite2->setGroup($groupSiteDesign);
|
|
$taskSite2->setProject($projectInterne);
|
|
$manager->persist($taskSite2);
|
|
|
|
$taskSite3 = new Task();
|
|
$taskSite3->setNumber(3);
|
|
$taskSite3->setTitle('Rédaction page "À propos"');
|
|
$taskSite3->setStatus($statusTodo);
|
|
$taskSite3->setEffort($effortS);
|
|
$taskSite3->setPriority($priorityLow);
|
|
$taskSite3->setAssignee($admin);
|
|
$taskSite3->setGroup($groupSiteContenu);
|
|
$taskSite3->setProject($projectInterne);
|
|
$manager->persist($taskSite3);
|
|
|
|
$taskSite4 = new Task();
|
|
$taskSite4->setNumber(4);
|
|
$taskSite4->setTitle('Formulaire de contact');
|
|
$taskSite4->setStatus($statusReview);
|
|
$taskSite4->setEffort($effortM);
|
|
$taskSite4->setPriority($priorityMedium);
|
|
$taskSite4->setAssignee($admin);
|
|
$taskSite4->setGroup($groupSiteDesign);
|
|
$taskSite4->setProject($projectInterne);
|
|
$taskSite4->addTag($tagAuth);
|
|
$manager->persist($taskSite4);
|
|
|
|
$taskSite5 = new Task();
|
|
$taskSite5->setNumber(5);
|
|
$taskSite5->setTitle('SEO et métadonnées');
|
|
$taskSite5->setStatus($statusTodo);
|
|
$taskSite5->setEffort($effortS);
|
|
$taskSite5->setPriority($priorityHigh);
|
|
$taskSite5->setAssignee($admin);
|
|
$taskSite5->setGroup($groupSiteContenu);
|
|
$taskSite5->setProject($projectInterne);
|
|
$manager->persist($taskSite5);
|
|
|
|
// =============================================
|
|
// Time Entries — tous les projets
|
|
// =============================================
|
|
$timeEntryData = [
|
|
// SIRH — lundi à vendredi
|
|
['title' => 'Réunion', 'project' => $projectSirh, 'tag' => $tagAuth, 'start' => '09:00', 'stop' => '09:45', 'day' => 1],
|
|
['title' => 'Page accueil', 'project' => $projectSirh, 'tag' => $tagPassword, 'start' => '10:00', 'stop' => '12:00', 'day' => 0],
|
|
['title' => 'Design admin', 'project' => $projectSirh, 'tag' => $tagAuth, 'start' => '09:30', 'stop' => '11:00', 'day' => 2],
|
|
['title' => 'Page accueil', 'project' => $projectSirh, 'tag' => $tagPassword, 'start' => '10:30', 'stop' => '12:15', 'day' => 1],
|
|
['title' => 'System os', 'project' => $projectSirh, 'tag' => $tagCalendar, 'start' => '13:00', 'stop' => '15:30', 'day' => 0],
|
|
['title' => 'Login', 'project' => $projectSirh, 'tag' => $tagPassword, 'start' => '13:00', 'stop' => '15:00', 'day' => 1],
|
|
['title' => 'Script vault', 'project' => $projectSirh, 'tag' => $tagCalendar, 'start' => '10:00', 'stop' => '12:00', 'day' => 3],
|
|
['title' => 'Script backup BDD', 'project' => $projectSirh, 'tag' => $tagAuth, 'start' => '13:30', 'stop' => '15:00', 'day' => 3],
|
|
['title' => 'Maquette', 'project' => $projectSirh, 'tag' => null, 'start' => '09:00', 'stop' => '11:00', 'day' => 4],
|
|
['title' => 'PC compta', 'project' => $projectSirh, 'tag' => null, 'start' => '13:30', 'stop' => '15:30', 'day' => 4],
|
|
// CRM — lundi à vendredi
|
|
['title' => 'Liste contacts UI', 'project' => $projectCrm, 'tag' => null, 'start' => '08:30', 'stop' => '10:00', 'day' => 0],
|
|
['title' => 'Fiche contact', 'project' => $projectCrm, 'tag' => null, 'start' => '15:30', 'stop' => '17:00', 'day' => 0],
|
|
['title' => 'Pipeline vente', 'project' => $projectCrm, 'tag' => $tagCalendar, 'start' => '08:30', 'stop' => '09:30', 'day' => 1],
|
|
['title' => 'Import CSV', 'project' => $projectCrm, 'tag' => null, 'start' => '15:30', 'stop' => '17:30', 'day' => 2],
|
|
['title' => 'API recherche', 'project' => $projectCrm, 'tag' => null, 'start' => '08:30', 'stop' => '10:00', 'day' => 3],
|
|
['title' => 'Tests unitaires CRM', 'project' => $projectCrm, 'tag' => null, 'start' => '15:30', 'stop' => '17:00', 'day' => 3],
|
|
['title' => 'Revue pipeline', 'project' => $projectCrm, 'tag' => $tagCalendar, 'start' => '08:00', 'stop' => '09:00', 'day' => 4],
|
|
// ERP — lundi à vendredi
|
|
['title' => 'Dashboard stocks', 'project' => $projectErp, 'tag' => null, 'start' => '16:00', 'stop' => '17:30', 'day' => 1],
|
|
['title' => 'Alertes stock bas', 'project' => $projectErp, 'tag' => null, 'start' => '11:30', 'stop' => '12:30', 'day' => 2],
|
|
['title' => 'Factures PDF', 'project' => $projectErp, 'tag' => null, 'start' => '15:30', 'stop' => '17:30', 'day' => 4],
|
|
['title' => 'Mouvement stock', 'project' => $projectErp, 'tag' => null, 'start' => '09:00', 'stop' => '10:30', 'day' => 0],
|
|
['title' => 'Export comptable', 'project' => $projectErp, 'tag' => $tagCalendar, 'start' => '13:00', 'stop' => '14:30', 'day' => 2],
|
|
['title' => 'Inventaire', 'project' => $projectErp, 'tag' => null, 'start' => '13:30', 'stop' => '15:00', 'day' => 4],
|
|
// Site vitrine — lundi à jeudi
|
|
['title' => 'Maquette accueil', 'project' => $projectInterne, 'tag' => null, 'start' => '16:00', 'stop' => '17:30', 'day' => 0],
|
|
['title' => 'Responsive mobile', 'project' => $projectInterne, 'tag' => null, 'start' => '16:00', 'stop' => '17:30', 'day' => 2],
|
|
['title' => 'Rédaction contenu', 'project' => $projectInterne, 'tag' => null, 'start' => '15:30', 'stop' => '17:00', 'day' => 1],
|
|
['title' => 'Formulaire contact', 'project' => $projectInterne, 'tag' => $tagAuth, 'start' => '16:00', 'stop' => '17:30', 'day' => 3],
|
|
['title' => 'SEO meta tags', 'project' => $projectInterne, 'tag' => null, 'start' => '11:00', 'stop' => '12:00', 'day' => 4],
|
|
];
|
|
|
|
$monday = new DateTimeImmutable('monday this week', new DateTimeZone('UTC'));
|
|
|
|
foreach ($timeEntryData as $data) {
|
|
$entry = new TimeEntry();
|
|
$entry->setTitle($data['title']);
|
|
$entry->setUser($admin);
|
|
$entry->setProject($data['project']);
|
|
$entry->setStartedAt($monday->modify("+{$data['day']} days")->modify($data['start']));
|
|
$entry->setStoppedAt($monday->modify("+{$data['day']} days")->modify($data['stop']));
|
|
if ($data['tag']) {
|
|
$entry->addTag($data['tag']);
|
|
}
|
|
$manager->persist($entry);
|
|
}
|
|
|
|
// =============================================
|
|
// Client Users
|
|
// =============================================
|
|
$clientUserLiot = new User();
|
|
$clientUserLiot->setUsername('client-liot');
|
|
$clientUserLiot->setRoles(['ROLE_CLIENT']);
|
|
$clientUserLiot->setPassword($this->passwordHasher->hashPassword($clientUserLiot, 'client'));
|
|
$clientUserLiot->setClient($clientLiot);
|
|
$clientUserLiot->addAllowedProject($projectSirh);
|
|
$manager->persist($clientUserLiot);
|
|
|
|
$clientUserAcme = new User();
|
|
$clientUserAcme->setUsername('client-acme');
|
|
$clientUserAcme->setRoles(['ROLE_CLIENT']);
|
|
$clientUserAcme->setPassword($this->passwordHasher->hashPassword($clientUserAcme, 'client'));
|
|
$clientUserAcme->setClient($clientAcme);
|
|
$clientUserAcme->addAllowedProject($projectCrm);
|
|
$manager->persist($clientUserAcme);
|
|
|
|
// =============================================
|
|
// Client Tickets
|
|
// =============================================
|
|
$ticket1 = new ClientTicket();
|
|
$ticket1->setNumber(1);
|
|
$ticket1->setType('bug');
|
|
$ticket1->setTitle('Erreur 500 sur la page de login');
|
|
$ticket1->setDescription('Quand je clique sur "Se connecter" avec un mot de passe vide, j\'obtiens une page blanche avec une erreur 500.');
|
|
$ticket1->setUrl('https://sirh.liot.fr/login');
|
|
$ticket1->setStatus('new');
|
|
$ticket1->setProject($projectSirh);
|
|
$ticket1->setSubmittedBy($clientUserLiot);
|
|
$ticket1->setCreatedAt(new DateTimeImmutable('-3 days'));
|
|
$ticket1->setUpdatedAt(new DateTimeImmutable('-3 days'));
|
|
$manager->persist($ticket1);
|
|
|
|
$ticket2 = new ClientTicket();
|
|
$ticket2->setNumber(2);
|
|
$ticket2->setType('improvement');
|
|
$ticket2->setTitle('Ajouter un export PDF des fiches employés');
|
|
$ticket2->setDescription('Il serait utile de pouvoir exporter les fiches employés au format PDF pour les archiver.');
|
|
$ticket2->setStatus('in_progress');
|
|
$ticket2->setProject($projectSirh);
|
|
$ticket2->setSubmittedBy($clientUserLiot);
|
|
$ticket2->setCreatedAt(new DateTimeImmutable('-7 days'));
|
|
$ticket2->setUpdatedAt(new DateTimeImmutable('-2 days'));
|
|
$manager->persist($ticket2);
|
|
|
|
$ticket3 = new ClientTicket();
|
|
$ticket3->setNumber(3);
|
|
$ticket3->setType('other');
|
|
$ticket3->setTitle('Demande de formation sur le module congés');
|
|
$ticket3->setDescription('Notre équipe RH souhaiterait une formation sur le nouveau module de gestion des congés.');
|
|
$ticket3->setStatus('done');
|
|
$ticket3->setStatusComment('Formation planifiée le 20/03. Ticket clos.');
|
|
$ticket3->setProject($projectSirh);
|
|
$ticket3->setSubmittedBy($clientUserLiot);
|
|
$ticket3->setCreatedAt(new DateTimeImmutable('-14 days'));
|
|
$ticket3->setUpdatedAt(new DateTimeImmutable('-5 days'));
|
|
$manager->persist($ticket3);
|
|
|
|
$ticket4 = new ClientTicket();
|
|
$ticket4->setNumber(1);
|
|
$ticket4->setType('bug');
|
|
$ticket4->setTitle('Doublons dans la liste des contacts');
|
|
$ticket4->setDescription('Certains contacts apparaissent en double après l\'import CSV. Le problème semble lié aux accents dans les noms.');
|
|
$ticket4->setStatus('new');
|
|
$ticket4->setProject($projectCrm);
|
|
$ticket4->setSubmittedBy($clientUserAcme);
|
|
$ticket4->setCreatedAt(new DateTimeImmutable('-1 day'));
|
|
$ticket4->setUpdatedAt(new DateTimeImmutable('-1 day'));
|
|
$manager->persist($ticket4);
|
|
|
|
$ticket5 = new ClientTicket();
|
|
$ticket5->setNumber(2);
|
|
$ticket5->setType('improvement');
|
|
$ticket5->setTitle('Filtre par date sur le pipeline de vente');
|
|
$ticket5->setDescription('Pouvoir filtrer le pipeline de vente par période (mois, trimestre, année).');
|
|
$ticket5->setStatus('rejected');
|
|
$ticket5->setStatusComment('Cette fonctionnalité est déjà prévue dans la prochaine version. Pas besoin de ticket spécifique.');
|
|
$ticket5->setProject($projectCrm);
|
|
$ticket5->setSubmittedBy($clientUserAcme);
|
|
$ticket5->setCreatedAt(new DateTimeImmutable('-10 days'));
|
|
$ticket5->setUpdatedAt(new DateTimeImmutable('-8 days'));
|
|
$manager->persist($ticket5);
|
|
|
|
// Link a task to a client ticket
|
|
$task3->setClientTicket($ticket1);
|
|
|
|
// =============================================
|
|
// Zimbra Configuration
|
|
// =============================================
|
|
$zimbraConfig = new ZimbraConfiguration();
|
|
$zimbraConfig->setServerUrl('https://mail.ovh.com');
|
|
$zimbraConfig->setUsername('lesstime@ovh.fr');
|
|
$zimbraConfig->setCalendarPath('/dav/lesstime@ovh.fr/Calendar/');
|
|
$zimbraConfig->setEnabled(false);
|
|
$manager->persist($zimbraConfig);
|
|
|
|
// =============================================
|
|
// Task Recurrence — exemple hebdomadaire
|
|
// =============================================
|
|
$recurrence = new TaskRecurrence();
|
|
$recurrence->setType(RecurrenceType::Weekly);
|
|
$recurrence->setInterval(1);
|
|
$recurrence->setDaysOfWeek(['monday', 'wednesday', 'friday']);
|
|
$manager->persist($recurrence);
|
|
|
|
$taskRecurring = new Task();
|
|
$taskRecurring->setNumber(7);
|
|
$taskRecurring->setTitle('Réunion de suivi hebdomadaire');
|
|
$taskRecurring->setStatus($statusTodo);
|
|
$taskRecurring->setEffort($effortS);
|
|
$taskRecurring->setPriority($priorityMedium);
|
|
$taskRecurring->setAssignee($admin);
|
|
$taskRecurring->setProject($projectSirh);
|
|
$taskRecurring->setScheduledStart(new DateTimeImmutable('next monday 10:00'));
|
|
$taskRecurring->setScheduledEnd(new DateTimeImmutable('next monday 10:30'));
|
|
$taskRecurring->setSyncToCalendar(false);
|
|
$taskRecurring->setRecurrence($recurrence);
|
|
$manager->persist($taskRecurring);
|
|
|
|
$manager->flush();
|
|
}
|
|
}
|