<?php
namespace App\Controller;
use App\Entity\Affaire;
use App\Entity\Attribution;
use App\Entity\CommandeFournisseur;
use App\Entity\CommandePrestataire;
use App\Entity\Devis;
use App\Form\CreateAffaireType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
/**
* Méthode permettant de trier les devis par date
* @param $devis
*/
private function sortDateDevis(&$devis)
{
usort($devis, function ($a, $b) {
if (strtotime($a->getDateDevis()->format('Y-m-d H:i:s')) === strtotime($b->getDateDevis()->format('Y-m-d H:i:s'))) {
return 0;
}
return (strtotime($a->getDateDevis()->format('Y-m-d H:i:s')) < strtotime($b->getDateDevis()->format('Y-m-d H:i:s'))) ? +1 : -1;
});
}
/**
* Méthode pour récupérer la liste des affaires
* @param $args
* @return array|void
*/
private function getAffaireList($args, $affaireList = [])
{
if (is_array($args)) {
foreach ($args as $key => $arg) {
$affaire = $arg->getAffaire();
if (!in_array($affaire, $affaireList)) {
array_push($affaireList, $affaire);
}
}
return $affaireList;
} else {
$affaire = $args->getFacture()->getAffaire();
if (!in_array($affaire, $affaireList)) {
return $args->getFacture()->getAffaire();
}
}
}
private function countDevisToValidate()
{
$em = $this->getDoctrine()->getManager();
$sql = 'SELECT COUNT(*) FROM devis where affaire_id IS NULL and validation = 0';
$result = $em->getConnection()->FetchAll($sql);
return $result[0]['count'];
}
private function countCommandeToValidate()
{
$em = $this->getDoctrine()->getManager();
$sql = 'SELECT COUNT(*) FROM commande_fournisseur where affaire_id IS NULL and validation = 0';
$result = $em->getConnection()->FetchAll($sql);
return $result[0]['count'];
}
/**
* v2 - Page index des devis
*
* @param Request $request
* @return Response
* @Route("/", name="app_index", methods={"GET"})
*/
public function appIndex(Request $request)
{
return $this->redirectToRoute('sudalys_dashboard_user');
}
/**
* Méthode de base qui permet de gérer le tableau de bord
* @Route("/affaire", name="sudalys_gestion_home", methods={"GET"})
* @return Response
*/
public function indexAction()
{
// on liste toutes les affaires
$listeAffaire = $this->getDoctrine()->getRepository(Affaire::class)->findAll();
// on récupère l'objet user via l'id de l'utilisateur connecté
$userId = $this->getUser()->getId();
$devisToValidate = $this->countDevisToValidate();
$commandeToValidate = $this->countCommandeToValidate();
// on récupère les attributions de l'user connecté
$userAttribution = $this->getDoctrine()->getRepository(Attribution::class)->findBy([
'user' => $userId
]);
$commandeFournisseur = null;
$commandePrestataire = null;
// on récupère tous les devis n'appartenenant pas à une affaire
if ($this->getUser()->getRoles()[0] === 'ROLE_SUPER_SUDALYS' || $this->getUser()->getRoles()[0] === 'ROLE_SUDALYS_ADMINISTRATIF') {
$orphanDevisAll = [];
if ($this->getUser()->getRoles()[0] === 'ROLE_SUPER_SUDALYS') {
$orphanDevisAll = $this->getDoctrine()->getRepository(Devis::class)->findBy([
'affaire' => null
]);
}
$commandeFournisseur = $this->getDoctrine()->getRepository(CommandeFournisseur::class)->findBy(['affaire' => null]);
$commandePrestataire = $this->getDoctrine()->getRepository(CommandePrestataire::class)->findBy(['affaire' => null]);
} else {
// on récupère les auteurs des devis orphelins
$orphanDevisAll = $this->getDoctrine()->getRepository(Devis::class)->findBy([
'affaire' => null,
'user' => $userId
]);
}
$this->sortDateDevis($orphanDevisAll);
return $this->render('affaire/index.html.twig', [
"listeAffaire" => $listeAffaire,
"userAttribution" => $userAttribution,
"orphanDevisAll" => $orphanDevisAll,
"commandeFournisseur" => $commandeFournisseur,
'devisToValidate' => $devisToValidate,
'commandeToValidate' => $commandeToValidate,
'commandePrestataire' => $commandePrestataire
]);
}
/**
* Méthode de base qui permet de gérer le tableau de bord
* @return Response
*/
public function indexActionOld()
{
// on liste toutes les affaires
$listeAffaire = $this->getDoctrine()->getRepository(Affaire::class)->findAll();
// on récupère l'objet user via l'id de l'utilisateur connecté
$userId = $this->getUser()->getId();
$devisToValidate = $this->countDevisToValidate();
$commandeToValidate = $this->countCommandeToValidate();
// on récupère les attributions de l'user connecté
$userAttribution = $this->getDoctrine()->getRepository(Attribution::class)->findBy([
'user' => $userId
]);
$commandeFournisseur = null;
$commandePrestataire = null;
// on récupère tous les devis n'appartenenant pas à une affaire
if ($this->getUser()->getRoles()[0] === 'ROLE_SUPER_SUDALYS' || $this->getUser()->getRoles()[0] === 'ROLE_SUDALYS_ADMINISTRATIF') {
$orphanDevisAll = [];
if ($this->getUser()->getRoles()[0] === 'ROLE_SUPER_SUDALYS') {
$orphanDevisAll = $this->getDoctrine()->getRepository(Devis::class)->findBy([
'affaire' => null
]);
}
$commandeFournisseur = $this->getDoctrine()->getRepository(CommandeFournisseur::class)->findBy(['affaire' => null]);
$commandePrestataire = $this->getDoctrine()->getRepository(CommandePrestataire::class)->findBy(['affaire' => null]);
} else {
// on récupère les auteurs des devis orphelins
$orphanDevisAll = $this->getDoctrine()->getRepository(Devis::class)->findBy([
'affaire' => null,
'user' => $userId
]);
}
$this->sortDateDevis($orphanDevisAll);
return $this->render('affaire/index.html.twig', [
"listeAffaire" => $listeAffaire,
"userAttribution" => $userAttribution,
"orphanDevisAll" => $orphanDevisAll,
"commandeFournisseur" => $commandeFournisseur,
'devisToValidate' => $devisToValidate,
'commandeToValidate' => $commandeToValidate,
'commandePrestataire' => $commandePrestataire
]);
}
}