<?php
namespace App\Controller;
use App\Repository\CourseOccurrenceRepository;
use App\Repository\CourseRepository;
use App\Repository\OrderRepository;
use App\Repository\PersonRepository;
use App\Repository\ProviderRepository;
use App\Repository\CourseProviderRepository;
use App\Service\StatsService;
use App\Entity\CourseProvider;
use Doctrine\ORM\EntityManagerInterface;
use Menke\UserBundle\Controller\AbstractClientableController;
use Symfony\Component\Routing\Annotation\Route;
class DashboardController extends AbstractClientableController
{
/**
* @Route("/", name="dashboard")
*/
public function index(
StatsService $statsService,
OrderRepository $orderRepo,
CourseOccurrenceRepository $courseOccurrenceRepo,
CourseRepository $courseRepo,
PersonRepository $personRepository,
EntityManagerInterface $entityManager,
CourseProviderRepository $courseProviderRepository,
ProviderRepository $providerRepository
)
{
$user = $this->getCurrentUser();
$person = $personRepository->getByUser($user);
$roles = $user->getRoles();
// $person = $personRepository->findOneBy(['user' => $user]);
if (in_array('ROLE_MANAGER', $roles) || in_array('ROLE_ADMIN', $roles) || in_array('ROLE_SUPER_USER', $roles)) {
$numberDays = 7;
$client = $this->getCurrentClient();
$statsData = [];
if ($client) {
$statsData['orderCoursesStats'] = $statsService->getCourseOrderStatsByRecentDays($numberDays, $client);
$statsData['orderStats'] = $statsService->getOrderStatsByRecentDays($numberDays, $client);
$statsData['peopleStats'] = $statsService->getCustomerStatsByRecentDays($numberDays, $client);
$statsData['courseStats'] = $statsService->getCourseStatsByRecentDays($numberDays, $client);
$statsData['salesStats'] = $statsService->getSaleStatsByRecentDays($numberDays, $client);
}
$openOrders = $orderRepo->getMappedCountOfOpenOrders($client);
$nextCourses = $courseOccurrenceRepo->getCoursesByClient($client, 15, 0, 'asc', 'start', new \Datetime(),null,null );
return $this->render('dashboard/index.html.twig', [
'client' => $client,
'person' => $person,
'statsData' => $statsData,
'openOrders' => $openOrders,
'nextCourses' => $nextCourses,
'user' => $user,
'person' => $person
]);
} elseif (in_array('ROLE_SPEAKER', $roles)) {
return $this->render('dashboard/speaker.html.twig', [
'user' => $user,
'person' => $person,
]);
} elseif (in_array('ROLE_PROVIDER', $roles)) {
$user = $this->getUser(); // Menke\UserBundle\Entity\User
// Provider direkt über die Relation user ermitteln
$provider = $providerRepository->findOneBy(['user' => $user]);
if (!$provider) {
// sauberer Hinweis statt 500
throw $this->createAccessDeniedException('Kein Provider-Konto für diesen Benutzer gefunden.');
}
$providerCourses = $courseProviderRepository->findCoursesByProviderUser($user->getId());
return $this->render('provider/course/index.html.twig', [
'provider_courses' => $providerCourses,
'provider' => $provider,
'user' => $user,
]);
} elseif (in_array('ROLE_USER', $roles)) {
return $this->render('dashboard/customer.html.twig', [
'user' => $user,
'person' => $person,
]);
}
}
}