src/Controller/UserDashboardController.php line 31
<?phpnamespace App\Controller;use App\Entity\User;use App\Model\FiltersModel;use App\Manager\UserManager;use App\Manager\PeriodManager;use App\Manager\HierarchyManager;use App\Repository\UserRepository;use App\Repository\OrderRepository;use App\Repository\PeriodRepository;use App\Repository\CreditRepository;use App\Repository\ManualPaymentRepository;use Doctrine\ORM\EntityManagerInterface;use App\Repository\CommissionRepository;use App\Model\MultiplePaymentPeriodsModel;use App\Manager\IncentiveStatementManager;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;use Symfony\Contracts\Cache\CacheInterface;#[Route('/dashboard', name: 'dashboard.')]class UserDashboardController extends AbstractController{#[Route('/home', name: 'index')]public function index(UserManager $userManager, CommissionRepository $commissionRepository, PeriodManager $periodManager): Response{$user = $this->getUser();if (!$user) {throw new AccessDeniedHttpException();}$manager = $userManager->getManager($user);$plan = $userManager->getPlan($user);$title = $user->getTitle();$team = $userManager->getUserTeam($user);$messages = $userManager->getUserMessages($user);$filters = new FiltersModel();$ytdPeriod = $periodManager->getYtdPeriod();$currentPeriod = $periodManager->getCurrentPeriod();$filters->user = $this->getUser();$filters->startDate = $ytdPeriod->getStartDate();$filters->endDate = $currentPeriod->getEndDate();$filters->groupByMonth = true;$commissions = $commissionRepository->findByPeriod($filters, '%b-%Y');// Prepare arrays for chart$chartLabels = [];$chartAmounts = [];$chartTotalAmount = 0;foreach($commissions as $commission){$chartLabels[] = $commission['monthYear'];$chartAmounts[] = $commission['totalAmount'];$chartTotalAmount += $commission['totalAmount'];}return $this->render('user_dashboard/home/index.html.twig', ['manager' => $manager,'plan' => $plan,'title' => $title,'team' => $team,'messages' => $messages,'chartLabels' => json_encode($chartLabels),'chartAmounts' => json_encode($chartAmounts),'chartTotalAmount' => $chartTotalAmount,]);}#[Route('/my_incentives/{currentPeriodName?}', name: 'my_incentives')]public function myIncentives(IncentiveStatementManager $incentiveStatementManager, $currentPeriodName = null): Response{set_time_limit(0);$incentiveStatementManager->setCurrentPeriodName($currentPeriodName);$incentiveStatementManager->loggedUser = $this->getUser();$incentiveStatementManager->user = $this->getUser();$incentiveStatementManager->init();return $this->render('user_dashboard/my_incentives/index.html.twig', ['currentPeriodName' => $incentiveStatementManager->currentPeriodName,'hierarchy' => $incentiveStatementManager->hierarchy,'tree' => $incentiveStatementManager->finalTree,'incentiveStatementManager' => $incentiveStatementManager,]);}#[Route('/my_incentives/print/{currentPeriodName?}', name: 'my_incentives_print')]public function myIncentivesPrint(IncentiveStatementManager $incentiveStatementManager,UserRepository $userRepository,PeriodRepository $periodRepository,CommissionRepository $commissionRepository,CreditRepository $creditRepository,ManualPaymentRepository $manualPaymentRepository,HierarchyManager $hierarchyManager,RequestStack $requestStack,CacheInterface $cache,Request $request,$currentPeriodName = null): Response{set_time_limit(0);$loggedUser = $this->getUser();// Get the filtered user ID from request (if viewing specific user's hierarchy)$filteredUserId = $request->query->get('user');// Determine which user to use as the base for hierarchy$baseUser = $loggedUser;if ($filteredUserId) {$requestedUser = $userRepository->find($filteredUserId);if ($requestedUser) {// Verify the logged user has access to this user's hierarchy$tempManager = new IncentiveStatementManager($periodRepository,$commissionRepository,$creditRepository,$manualPaymentRepository,$userRepository,$hierarchyManager,$requestStack,$cache);$tempManager->setCurrentPeriodName($currentPeriodName);$tempManager->loggedUser = $loggedUser;$tempManager->user = $loggedUser;$tempManager->setPeriods();$tempManager->getHierarchy();// Check if the requested user is in the logged user's accessible hierarchyif ($tempManager->userInHierarchy($requestedUser->getId())) {$baseUser = $requestedUser;}}}// Initialize the base manager to get hierarchy starting from the base user$incentiveStatementManager->setCurrentPeriodName($currentPeriodName);// For building hierarchy: use baseUser as loggedUser so hierarchy starts from them$incentiveStatementManager->loggedUser = $baseUser;$incentiveStatementManager->user = $baseUser;$incentiveStatementManager->init();// Collect all users in the hierarchy that the logged user has access to$printableUsers = [];// Add users from hierarchy (the hierarchy already includes access control)foreach ($incentiveStatementManager->hierarchy as $hierarchyNode) {$userId = $hierarchyNode['user_id'];$user = $userRepository->find($userId);if ($user) {// Create a new IncentiveStatementManager for each user$userManager = new IncentiveStatementManager($periodRepository,$commissionRepository,$creditRepository,$manualPaymentRepository,$userRepository,$hierarchyManager,$requestStack,$cache);// Set the current period name first$userManager->setCurrentPeriodName($currentPeriodName);// Set the logged user and the user we're generating the statement for$userManager->loggedUser = $loggedUser;$userManager->user = $user;// Initialize periods first - this is critical$userManager->setPeriods();// Check if periods were initialized successfullyif ($userManager->currentPeriod === null) {continue; // Skip this user if period initialization failed}// Now initialize data structures and get incentive data (with caching)$userManager->initializeData();$userManager->getIncentiveData();$userManager->getGuaranteeRollover();$printableUsers[] = ['user' => $user,'manager' => $userManager];}}return $this->render('user_dashboard/my_incentives/print.html.twig', ['currentPeriodName' => $incentiveStatementManager->currentPeriodName,'printableUsers' => $printableUsers,]);}}