src/Controller/SalesController.php line 32

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\SalesFilterType;
  5. use App\Manager\SalesManager;
  6. use App\Manager\PeriodManager;
  7. use App\Model\SalesFilterModel;
  8. use App\Manager\HierarchyManager;
  9. use App\Repository\UserRepository;
  10. use App\Repository\OrderRepository;
  11. use App\Repository\PeriodRepository;
  12. use App\Service\Export\ExportService;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use App\Repository\CommissionRepository;
  15. use App\Repository\CreditTypeRepository;
  16. use App\Manager\IncentiveStatementManager;
  17. use App\Repository\EarningGroupRepository;
  18. use Knp\Component\Pager\PaginatorInterface;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  24. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  25. #[Route('/sales'name'sales.')]
  26. class SalesController extends AbstractController
  27. {
  28.     #[Route('/{user?}/{type?}'name'index')]
  29.     public function credits(Request                $request,
  30.                             SalesManager           $salesManager,
  31.                             PaginatorInterface     $paginator,
  32.                             PeriodRepository       $periodRepository,
  33.                             EarningGroupRepository $earningGroupRepository,
  34.                             CreditTypeRepository   $creditTypeRepository,
  35.                             HierarchyManager       $hierarchyManager,
  36.                             UserRepository         $userRepository,
  37.                             PeriodManager          $periodManager,
  38.                             ExportService          $exportService,
  39.                             User                   $user null,
  40.                                                    $type null): Response
  41.     {
  42.         if(!$user){
  43.             $user $this->getUser();
  44.         }
  45.         if(!$type){
  46.             $type 'orders';
  47.         }
  48.         if($type == 'residualCredits'){
  49.             $type 'credits';
  50.         }
  51.         if ($type == 'residualCommissions') {
  52.             $type 'commissions';
  53.         }
  54.         if(!in_array($type, ['credits''commissions''orders''manualPayments'])){
  55.             throw new NotFoundHttpException();
  56.         }
  57.         $filters = new SalesFilterModel();
  58.         $filters->type $type;
  59.         $filters->user $user;
  60.         if($request->query->get('period')){
  61.             $period $periodRepository->findOneByName($request->query->get('period'));
  62.             $filters->period $period;
  63.         }
  64.         if(!$filters->period){
  65.             $filters->period $periodManager->getCurrentPeriod();
  66.         }
  67.         if($request->query->get('group')){
  68.             if($type == 'commissions'){
  69.                 // Special mapping for Residual Commission to Residual Commission Sales
  70.                 $groupName $request->query->get('group');
  71.                 if ($groupName === 'Residual Commission Sales') {
  72.                     $groupName 'Residual Commission';
  73.                 }
  74.                 $earningGroup $earningGroupRepository->findOneByName($groupName);
  75.                 $filters->earningGroup $earningGroup;
  76.             }
  77.             if($type == 'credits'){
  78.                 // Special mapping for Residual Commission to Residual Commission Sales
  79.                 $groupName $request->query->get('group');
  80.                 if ($groupName === 'Residual Commission') {
  81.                     $groupName 'Residual Commission Sales';
  82.                 }
  83.                 $creditType $creditTypeRepository->findOneByName($groupName);
  84.                 $filters->creditType $creditType;
  85.             }
  86.         }
  87.         if($request->query->get('creditType')){
  88.             $creditType $creditTypeRepository->findOneByName($request->query->get('creditType'));
  89.             $filters->creditType $creditType;
  90.         }
  91.         $form $this->createForm(SalesFilterType::class, $filters, ['method' => 'GET']);
  92.         $form->handleRequest($request);
  93.         $hierarchy $userRepository->getOrganizationHierarchy($this->getUser(), $filters->period);
  94.         if(!$user->isAdmin() && !$hierarchyManager->userInHierarchy($hierarchy$filters->user->getId())){
  95.             throw new AccessDeniedHttpException();
  96.         }
  97.         $query $salesManager->filterSales($type$filters);
  98.         if($form->isSubmitted() && $form->isValid() && $form->get("export")->isClicked('filter')){
  99.             $exportService->exportUserSales($type$query->getResult());
  100.             die();
  101.         }
  102.         $items $paginator->paginate(
  103.             $query,
  104.             $request->query->getInt('page'1),
  105.             100
  106.         );
  107.         return $this->render('sales/index.html.twig', [
  108.             'form' => $form->createView(),
  109.             'items' => $items,
  110.             'filters' => $filters,
  111.             'type' => $type,
  112.         ]);
  113.     }
  114. }