render('default/main-screen.html.twig', [ 'controller_name' => 'DefaultController', ]); } #[Route('/accueil', name: 'app_home')] public function accueil(): Response { return $this->render('default/main-screen.html.twig', [ 'controller_name' => 'DefaultController', ]); } #[Route('/dashboard', name: 'dashboard')] public function dashboard(): Response { return $this->render('logged/dashboard.html.twig', [ 'controller_name' => 'DefaultController', ]); } #[Route('/export_all', name: 'export_all')] public function export_all(): Response { return $this->render('logged/export_all.html.twig', [ 'controller_name' => 'DefaultController', ]); } #[Route('/previsionnel', name: 'previsionnel')] public function previsionnel(): Response { return $this->render('logged/previsionnel.html.twig', [ 'controller_name' => 'DefaultController', ]); } // export_all_json #[Route('/export_all_json', name: 'export_all_json')] public function export_all_json(): Response { return $this->render('logged/export_all_json.html.twig', [ 'controller_name' => 'DefaultController', ]); } #[Route('/history', name: 'history')] public function history(): Response { $user = $this->getUser(); return $this->render('logged/history.html.twig', [ 'controller_name' => 'DefaultController', 'chiffreAffaires' => 10000, 'statisticsSoldProducts' => [ [ 'name' => 'mock 1', 'count' => 10, 'value' => 10, ], [ 'name' => 'mock 2', 'count' => 1, 'value' => 20, ], ], 'activeFestival' => [ 'fondDeCaisseAvant' => 10, 'chiffreAffaire' => 10, 'clientsCount' => 10, 'name' => 'demo festival mock dans default controller', ], 'allSellings' => 12, 'recentSellings' => [], 'recentSells' => $user->getSellings(), // [ // [ // 'id' => '1234', // 'date' => date_create('now'), // 'comment' => 'blah', // 'amount' => 52, // 'productsSold' => [ // 'name' => 'un truc de démo aussi làààà' // ], // ], // ], 'activeSelling' => [], // 'sellingComment' => [], 'statisticsFestivals' => 'todo', 'recentSells' => '' ]); } #[Route('/logged/get-my-products', name: 'get_my_products')] public function get_my_products(): JsonResponse { // TODO: replace this with actual logic to get products of the logged user // récupérer les produits de l'user connecté $user = $this->getUser(); // $products = $this->getUser()->getProducts(); return $this->json([ 'categories' => $user->getGroupOfProducts(), 'products' => $user->getProducts(), // mock land 'lastFestival' => ['id' => 1, 'name' => 'le festival de mock', 'dateCreation' => '2025-02-16', 'commentaire' => 'MOCK: hop le commentaire de festival', 'chiffreAffaire' => '1234', 'fondDeCaisseAvant' => '100', 'fondDeCaisseAprès' => '150', 'sold' => 123 ], 'history' => [], ]); } #[Route('/logged/import', name: 'import')] public function import(): Response { // prendre en compte l'ajout de nouveaux produits si on a une valeur dans le POST return $this->render('logged/import.html.twig', []); } #[Route('/logged/mass_create', name: 'mass_create')] public function mass_create(Request $request, EntityManagerInterface $entityManager): Response { // TODO prendre en compte l'ajout de nouveaux produits si on a une valeur dans le POST // $request = Request::createFromGlobals(); $data = json_decode($request->getContent(), true); $loggedUser = $this->getUser(); // les imports listent des catégories de produits et des noms de produits avec leur prix comme ceci: // catégorie: livre // les moutaines;5€ // la laine des moutons;6€ // star wars spécial noël;7€ //catégorie: poster // super bannière A2;10€ // Sébastien Chabal sexy;10€ // Vérifiez si une requête POST a été faite if ($request->isMethod('POST')) { $data = $request->getContent(); return new Response(var_dump($data)); $lines = explode("\n", $data); // Séparez les lignes $currentCategory = null; foreach ($lines as $line) { $line = trim($line); if (empty($line)) { continue; // Ignorez les lignes vides } // Vérifiez si la ligne commence par un nom de catégorie if (preg_match('/^(.*):$/', $line, $matches)) { $currentCategory = new GroupOfProducts(); $currentCategory->setName(trim($matches[1])); $currentCategory->setOwner($loggedUser); $entityManager->persist($currentCategory); continue; } // Vérifiez si la ligne contient un produit if ($currentCategory && preg_match('/^(.*); ([0-9]+(?:\.[0-9]+)?)$/', $line, $matches)) { $productName = trim($matches[1]); $productPrice = (float)trim($matches[2]); // Créez un nouvel objet Product $product = new Product(); $product->setUser($loggedUser); $product->setName($productName); $product->setPrice($productPrice); // Ajoutez le produit à la catégorie $currentCategory->addProduct($product); $entityManager->persist($product); } } // Enregistrez tous les changements dans la base de données $entityManager->flush(); // return $this->redirectToRoute('app_product_index'); return new Response('Produits importés avec succès.', Response::HTTP_CREATED); } } #[Route('/logged/add-selling', name: 'add_selling')] public function add_selling(EntityManagerInterface $entityManager): JsonResponse { // créer un nouveau Selling et retourner une réponse $loggedUser = $this->getUser(); // Prendre les informations en POST et créer une vente avec. $request = Request::createFromGlobals(); $data = json_decode($request->getContent(), true); $dataOfNewSelling = $data; $newSelling = new Selling(); // si l'utilisateur courant n'a pas de festival actuel, en créer un $currentFestival = $loggedUser->getActiveFestival(); if (!$currentFestival) { $currentFestival = new Festival(); $currentFestival ->setName('festival auto créé') ->setUser($loggedUser) ->setDateCreation(new \DateTime()) ->setDateStart(new \DateTime()) ->setDateEnd((new \DateTime())->modify('+1 year')) ->setClientsCount(1); $entityManager->persist($currentFestival); } else { $currentFestival->setClientsCount($currentFestival->getClientsCount() + 1); } $currentFestival->addSelling($newSelling); // prendre les identifiants des produits en base et les ajouter aux produits de ce Selling // Récupérer les produits à partir des identifiants $sum = 0; foreach ($dataOfNewSelling['activeSelling'] as $product) { $productFound = $entityManager->getRepository(Product::class)->findOneById($product['id']); $sum += $product['price'] * 1; if ($productFound) { $newSelling->addProduct($productFound); $productFound->addSelling($newSelling); $entityManager->persist($productFound); } } $newSelling ->setSum($sum) ->setPaidByCustomer($dataOfNewSelling['paidByClient']) ->setCustomerInfo($dataOfNewSelling['sellingComment']) ->setDate(new \DateTime()) ->setOwner($loggedUser); $entityManager->persist($newSelling); $entityManager->persist($currentFestival); $newSelling->setOwner($loggedUser); $entityManager->persist($loggedUser); $entityManager->flush(); $response = [ 'message' => 'yes', 'newChiffreAffaire' => $currentFestival->getChiffreAffaire(), 'newChiffreAffaire' => 12, 'clientsCount' => $currentFestival->getClientsCount(), // 'clientsCount' => 12, 'activeFestival' => $currentFestival, // 'activeFestival' => ['id' => 1, // 'name' => 'le festival de mock', // 'dateCreation' => '2025-02-16', // 'commentaire' => 'MOCK: hop le commentaire de festival', // 'chiffreAffaire' => '1234', // 'fondDeCaisseAvant' => '100', // 'fondDeCaisseAprès' => '150', // 'sold' => 123 // ], ]; // prendre en compte l'ajout de nouveaux produits si on a une valeur dans le POST return $this->json($response); } // TODO set_active_festival #[Route('/logged/set-active-festival/{id}', name: 'app_set_active_festival')] public function set_active_festival(EntityManagerInterface $entityManager, $id): Response { $festival = $entityManager->getRepository(Festival::class)->find($id); if ($festival && $festival->getUser() === $this->getUser()) { $this->getUser()->setActiveFestival($festival); $entityManager->persist($this->getUser()); $entityManager->flush(); } return $this->redirectToRoute('app_festival_index'); } }