src/Controller/DefaultController.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\RigCard;
  4. use App\Enum\Currency;
  5. use App\Entity\ExchangeRate;
  6. use App\Entity\Expense;
  7. use App\Entity\Farm;
  8. use App\Entity\Location;
  9. use App\Entity\Log;
  10. use App\Entity\Payout;
  11. use App\Entity\Plug;
  12. use App\Entity\Rig;
  13. use App\Entity\User;
  14. use App\Entity\Wallet;
  15. use App\Entity\Wat;
  16. use App\Form\CardEfficiencyType;
  17. use App\Form\FilterType;
  18. use App\Form\RigCardType;
  19. use App\Model\CardEfficiencyModel;
  20. use App\Model\CurrentPowerModel;
  21. use App\Model\FilterModel;
  22. use App\Model\RigCardModel;
  23. use App\Service\ChartService;
  24. use App\Service\ExportService;
  25. use App\Service\ExpenseService;
  26. use App\Service\HelperService;
  27. use App\Service\WTMService;
  28. use DateTime;
  29. use Doctrine\ORM\EntityManagerInterface;
  30. use Doctrine\ORM\Query\Expr\Join;
  31. use Knp\Component\Pager\PaginatorInterface;
  32. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  33. use Symfony\Component\HttpFoundation\Request;
  34. use Symfony\Component\HttpFoundation\Response;
  35. use Symfony\Component\Mercure\HubInterface;
  36. use Symfony\Component\Mercure\Update;
  37. use Symfony\Component\Routing\Annotation\Route;
  38. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  39. class DefaultController extends AbstractController
  40. {
  41.     #[Route('/'name'homepage')]
  42.     public function index(Request $requestChartService $chartServiceEntityManagerInterface $emExpenseService $feeService): Response
  43.     {
  44.         /** @var User $user */
  45.         $user $this->getUser();
  46.         $filters = new FilterModel();
  47.         $form $this->createForm(FilterType::class, $filters);
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted() && $form->isValid()) {
  50.             $filters $form->getData();
  51.         }
  52.         $estimate $em->getRepository(Wallet::class)->estimates($user);
  53.         $lastDay strtotime('last day of '.$filters->getMonth()->format('F'));
  54.         return $this->renderForm('default/index.html.twig', [
  55.             'filters' => $filters,
  56.             'form' => $form,
  57.             'payoutChart' => $chartService->payouts($user$filters),
  58.             'payoutFiatChart' => $chartService->payouts($user$filterstrue),
  59.             'payoutSummary' => $em->getRepository(Payout::class)->summary($user$filters),
  60.             'lastPayouts' => $em->getRepository(Payout::class)->getLastByCurrency($user$filters),
  61.             'watsChart' => $chartService->wats($user$filters),
  62.             'watsSummary' => $em->getRepository(Wat::class)->summary($user$filters),
  63.             'exchangeRateSummary' => $em->getRepository(ExchangeRate::class)->summary($filters->getMonth()),
  64.             'tempsCharts' => $chartService->temps($user$filters),
  65.             'expenses' => $em->getRepository(Expense::class)->summary($user$filters),
  66.             'fees' => $feeService->calcFee($user$filters),
  67.             'estimateEarning' => $estimate,
  68.             'estimateEarningToEndMonth' => $estimate 24 * (date('d'$lastDay) - date('d'$filters->getMonth()->format('Y-m') === date('Y-m') ? time() : $lastDay))
  69.         ]);
  70.     }
  71.     #[Route('/farms'name'farms')]
  72.     #[Route('/farms/{farm}'name'farms_id')]
  73.     public function farms(EntityManagerInterface $em, ?Farm $farm null): Response
  74.     {
  75.         /** @var User $user */
  76.         $user $this->getUser();
  77.         return $this->renderForm('default/farms.html.twig', [
  78.             'selectedFarm' => $farm,
  79.             'farms' => $em->getRepository(Rig::class)->getFarmList($user),
  80.             'estimateEarning' => $em->getRepository(Wallet::class)->estimates($user),
  81.         ]);
  82.     }
  83.     #[Route('/locations'name'locations')]
  84.     #[Route('/locations/{location}'name'locations_id')]
  85.     public function locations(Request $requestEntityManagerInterface $emChartService $chartService, ?Location $location null): Response
  86.     {
  87.         /** @var User $user */
  88.         $user $this->getUser();
  89.         if(!$location) {
  90.             $location $user->getLocations()->first()?:null;
  91.         }
  92.         if(!$location) {
  93.             throw $this->createNotFoundException();
  94.         }
  95.         $filters = new FilterModel();
  96.         $form $this->createForm(FilterType::class, $filters);
  97.         $form->handleRequest($request);
  98.         if ($form->isSubmitted() && $form->isValid()) {
  99.             $filters $form->getData();
  100.         }
  101.         $filters->setLocation($location);
  102.         $users = [];
  103.         foreach ($em->getRepository(User::class)->findByLocation($location) as $u) {
  104.             $users[] = [
  105.                 'value' => $u,
  106.                 'watsSummary' => $em->getRepository(Wat::class)->summary($u$filters),
  107.             ];
  108.         }
  109.         return $this->renderForm('default/locations.html.twig', [
  110.             'filters' => $filters,
  111.             'form' => $form,
  112.             'location' => $location,
  113.             'watsSummary' => $em->getRepository(Wat::class)->summary($user$filterstrue),
  114.             'watsChart' => $chartService->wats($user$filterstrue),
  115.             'users' => $users,
  116.             'lastPower' => $em->getRepository(Plug::class)->lastPower((new CurrentPowerModel())->setLocation($location)),
  117.         ]);
  118.     }
  119.     #[Route('/logs'name'logs')]
  120.     #[Route('/logs/{rig}'name'logs_rig')]
  121.     public function logs(Request $requestEntityManagerInterface $emPaginatorInterface $paginator, ?Rig $rig null): Response
  122.     {
  123.         /** @var User $user */
  124.         $user $this->getUser();
  125.         $pagination $paginator->paginate(
  126.             $em->getRepository(Log::class)->getByUserAndRigQb($user$rig)->getQuery(),
  127.             $request->query->getInt('page'1),
  128.             10
  129.         );
  130.         return $this->renderForm('default/logs.html.twig', [
  131.             'selectedRig' => $rig,
  132.             'pagination' => $pagination,
  133.         ]);
  134.     }
  135.     #[Route('/users'name'users')]
  136.     #[IsGranted('ROLE_SUPER_ADMIN')]
  137.     public function users(Request $requestChartService $chartServiceEntityManagerInterface $emExpenseService $feeService): Response
  138.     {
  139.         $users $em->getRepository(User::class)->findBy([]);
  140.         $usersData = [];
  141.         $filters = new FilterModel();
  142.         $form $this->createForm(FilterType::class, $filters);
  143.         $form->handleRequest($request);
  144.         if ($form->isSubmitted() && $form->isValid()) {
  145.             $filters $form->getData();
  146.         }
  147.         foreach ($users as $user) {
  148.             $usersData[] = [
  149.                 'user' => $user,
  150.                 'expenses' => $em->getRepository(Expense::class)->summary($user$filters),
  151.                 'watsSummary' => $em->getRepository(Wat::class)->summary($user$filters),
  152.                 'payoutSummary' => $em->getRepository(Payout::class)->summary($user$filters),
  153.                 'fees' => $feeService->calcFee($user$filters),
  154.             ];
  155.         }
  156.         $exchangeRateSummary $em->getRepository(ExchangeRate::class)->summary($filters->getMonth());
  157.         $sumWatPLN 0;
  158.         $sumExpenses = ['PLN' => 0];
  159.         foreach($usersData as $user) {
  160.             $sumWatPLN += $user['watsSummary']['PLN'];
  161.             foreach($user['fees'] as $currency => $price) {
  162.                 if(!isset($sumExpenses[$currency])) {
  163.                     $sumExpenses[$currency] = 0;
  164.                 }
  165.                 $sumExpenses[$currency] += $price;
  166.                 if($currency === 'USD') {
  167.                     $sumExpenses['PLN'] += $price $exchangeRateSummary['PLN']['USD'];
  168.                 }
  169.                 else {
  170.                     $sumExpenses['PLN'] += $price $exchangeRateSummary[$currency]['PLN'];
  171.                 }
  172.             }
  173.         }
  174.         return $this->renderForm('default/users.html.twig', [
  175.             'filters' => $filters,
  176.             'form' => $form,
  177.             'users' => $usersData,
  178.             'sumWatPLN' => $sumWatPLN,
  179.             'sumExpenses' => $sumExpenses,
  180.             'exchangeRateSummary' => $exchangeRateSummary,
  181.         ]);
  182.     }
  183.     #[Route('/payouts.xls'name'payouts')]
  184.     public function payouts(Request $requestExportService $exportService): Response
  185.     {
  186.         /** @var User $user */
  187.         $user $this->getUser();
  188.         $filters = new FilterModel();
  189.         $form $this->createForm(FilterType::class, $filters);
  190.         $form->handleRequest($request);
  191.         if ($form->isSubmitted() && $form->isValid()) {
  192.             $filters $form->getData();
  193.         }
  194.         return $exportService->payouts($user$filters);
  195.     }
  196.     #[Route('/cards'name'cards')]
  197.     public function cards(Request $requestWTMService $WTMService): Response
  198.     {
  199.         /** @var User $user */
  200.         $user $this->getUser();
  201.         $filters = new CardEfficiencyModel();
  202.         $form $this->createForm(CardEfficiencyType::class, $filters);
  203.         $form->handleRequest($request);
  204.         if ($form->isSubmitted() && $form->isValid()) {
  205.             $filters $form->getData();
  206.         }
  207.         $cards $WTMService->getCards($filters);
  208.         $currencies $WTMService->getCurrencies($cards);
  209.         return $this->renderForm('default/cards.html.twig', [
  210.             'filters' => $filters,
  211.             'form' => $form,
  212.             'cards' => $cards,
  213.             'currencies' => $currencies,
  214.         ]);
  215.     }
  216.     #[Route('/rig_cards'name'rig_cards')]
  217.     public function rig_cards(Request $requestEntityManagerInterface $em): Response
  218.     {
  219.         /** @var User $user */
  220.         $user $this->getUser();
  221.         $filters = new RigCardModel();
  222.         $filters->setUser($user);
  223.         $form $this->createForm(RigCardType::class, $filters, ['user' => $user]);
  224.         $form->handleRequest($request);
  225.         if ($form->isSubmitted() && $form->isValid()) {
  226.             $filters $form->getData();
  227.         }
  228.         return $this->renderForm('default/rig_cards.html.twig', [
  229.             'filters' => $filters,
  230.             'form' => $form,
  231.             'cards' =>  $em->getRepository(RigCard::class)->getCards($filters),
  232.         ]);
  233.     }
  234.     #[Route('/test'name'test')]
  235.     public function test(Request $requestEntityManagerInterface $em): Response
  236.     {
  237.         $em->getRepository(Wat::class)->add($em->getRepository(Rig::class)->find(407), 10);
  238.         return $this->renderForm('base.html.twig');
  239.     }
  240. }