mirror of
https://forge.chapril.org/tykayn/caisse-bliss
synced 2025-10-09 17:02:47 +02:00
334 lines
12 KiB
PHP
334 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Entity\Festival;
|
|
use App\Entity\GroupOfProducts;
|
|
use App\Entity\Product;
|
|
use App\Entity\Selling;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
|
|
final class DefaultController extends AbstractController
|
|
{
|
|
#[Route('/', name: 'app_default')]
|
|
public function index(): Response
|
|
{
|
|
return $this->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');
|
|
|
|
}
|
|
|
|
|
|
}
|