<?php
namespace App\Controller;
use App\Entity\App\Payments;
use App\Entity\App\Travel;
use App\Entity\App\TravelMembers;
use App\Entity\App\TravelMembersParticipant;
use App\Repository\Tools\AppSettingsRepository;
use App\Repository\Tools\PtoolsRepository;
use App\Services\TpayService;
use App\Entity\App\Users;
use Doctrine\ORM\Query\Expr\Join;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Asset\Packages;
use Doctrine\ORM\EntityManagerInterface;
use App\Services\MailerService;
use App\Entity\App\SystemError;
use App\Entity\App\Logs;
class MainController extends AbstractController
{
private $_AppSettings;
public function _getAppSettings($apRepository){
$this->_AppSettings = $apRepository->getAppSettings();
}
public function __construct(
AppSettingsRepository $apRepository,
EntityManagerInterface $entityManager,
MailerService $mailerService,
) {
$this->entityManager = $entityManager;
$this->mailerService = $mailerService;
$this->_getAppSettings($apRepository);
}
// TEST
#[Route('/run-reminder', name: 'run_reminder', methods: ['GET'])]
public function runReminderCommand(KernelInterface $kernel): Response
{
$application = new Application($kernel);
$application->setAutoExit(false);
$input = new ArrayInput(['command' => 'app:reminderOrderPreview']);
$output = new BufferedOutput();
$application->run($input, $output);
return new Response('<pre>' . $output->fetch() . '</pre>');
}
/**
* @Route("/", name="main")
*/
public function index(): Response
{
$user = $this->getUser();
if(!$user) return $this->redirectToRoute('app_login');
if(in_array('ROLE_ADMIN',$user->getRoles())){
return $this->redirectToRoute('web.admin.trip');
}
if(in_array('ROLE_EMPLOYEE',$user->getRoles())){
return $this->redirectToRoute('web.admin.trip');
}
if(in_array('ROLE_ACCOUNTANT',$user->getRoles())){
return $this->redirectToRoute('web.admin.trip');
}
if(in_array('ROLE_COORDINATOR',$user->getRoles())){
return $this->redirectToRoute('web.coordinator.trip.list');
}
if(in_array('ROLE_AGENT',$user->getRoles())){
return $this->redirectToRoute('admin_agent_travel_grid');
}
}
private function create_file_response($filePath){
if (!is_file($filePath)) {
return new Response('', Response::HTTP_NOT_FOUND);
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $filePath);
finfo_close($finfo);
$response = new BinaryFileResponse($filePath);
$response->headers->set('Content-Type', $mimeType);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_INLINE,
basename($filePath)
);
return $response;
}
/**
* @Route("wycieczka/pobierz/zalacznik-do-umowy/{_travel_focus_id}/{_travel_id}",
* name="travel_download_course",
* methods={"GET"},
* requirements={"_travel_focus_id"="\d+","_travel_id"="\d+"})
* @param integer $_travel_focus_id id wycieczki focus
* @param integer $_travel_id id wycieczki
*/
public function travel_download_course(int $_travel_focus_id, int $_travel_id, PtoolsRepository $ptoolsRepository)
{
$data = $ptoolsRepository->getTravelFile($_travel_focus_id, $_travel_id, 3);
if(!empty($data['travel_file_name'])){
$filePath = $this->getParameter('kernel.project_dir').'/public/userfiles/'.$_travel_focus_id.'/'.$data['travel_file_name'];
return $this->create_file_response($filePath);
} else {
return new Response('', Response::HTTP_NOT_FOUND);
}
}
/**
* @Route("wycieczka/pobierz/program/{_travel_focus_id}/{_travel_id}",
* name="travel_download_program",
* methods={"GET"},
* requirements={"_travel_focus_id"="\d+","_travel_id"="\d+"})
* @param integer $_travel_focus_id id wycieczki focus
* @param integer $_travel_id id wycieczki
*/
public function travel_download_program(int $_travel_focus_id, int $_travel_id, PtoolsRepository $ptoolsRepository)
{
$data = $ptoolsRepository->getTravelFile($_travel_focus_id, $_travel_id, 2);
if(!empty($data['travel_file_name'])){
$filePath = $this->getParameter('kernel.project_dir').'/public/userfiles/'.$_travel_focus_id.'/'.$data['travel_file_name'];
return $this->create_file_response($filePath);
} else {
return new Response('', Response::HTTP_NOT_FOUND);
}
}
/**
* @Route("wycieczka/pobierz/zalacznik-do-umowy-dodatkowy/{_travel_focus_id}/{_travel_id}",
* name="travel_download_the_annex_to_the_contract",
* methods={"GET"},
* requirements={"_travel_focus_id"="\d+","_travel_id"="\d+"})
* @param integer $_travel_focus_id id wycieczki focus
* @param integer $_travel_id id wycieczki
*/
public function travel_download_the_annex_to_the_contract(int $_travel_focus_id, int $_travel_id, PtoolsRepository $ptoolsRepository)
{
$data = $ptoolsRepository->getTravelFile($_travel_focus_id, $_travel_id, 4);
if(!empty($data['travel_file_name'])){
$filePath = $this->getParameter('kernel.project_dir').'/public/userfiles/'.$_travel_focus_id.'/'.$data['travel_file_name'];
return $this->create_file_response($filePath);
} else {
return new Response('', Response::HTTP_NOT_FOUND);
}
}
/**
* @Route("pobierz/zgoda-marketingowa",
* name="public_download_marketing_consent",
* methods={"GET"})
*/
public function public_download_marketing_consent(PtoolsRepository $ptoolsRepository)
{
$_data = $ptoolsRepository->getAppFile('marketing');
$filePath = $this->getParameter('kernel.project_dir').'/public'.$_data[0]['file_ff'];
return $this->create_file_response($filePath);
}
/**
* @Route("pobierz/regulamin-serwisu",
* name="public_download_statute",
* methods={"GET"})
*/
public function public_download_statute(PtoolsRepository $ptoolsRepository)
{
$_data = $ptoolsRepository->getAppFile('statute');
$filePath = $this->getParameter('kernel.project_dir').'/public'.$_data[0]['file_ff'];
return $this->create_file_response($filePath);
}
/**
* @Route("pobierz/warunki-uczestnictwa",
* name="public_download_conditions_of_participation",
* methods={"GET"})
*/
public function public_download_conditions_of_participation(PtoolsRepository $ptoolsRepository)
{
$_data = $ptoolsRepository->getAppFile('warunki');
$filePath = $this->getParameter('kernel.project_dir').'/public'.$_data[0]['file_ff'];
return $this->create_file_response($filePath);
}
/**
* @Route("pobierz/rodo",
* name="public_download_rodo",
* methods={"GET"})
*/
public function public_download_rodo(PtoolsRepository $ptoolsRepository)
{
$_data = $ptoolsRepository->getAppFile('rodo');
$filePath = $this->getParameter('kernel.project_dir').'/public'.$_data[0]['file_ff'];
return $this->create_file_response($filePath);
}
#[Route(
'manager/{key}/t/{id}/sum-payments',
name: 'manager.travel.sumpayments',
methods: ['GET'],
requirements: [ "id" => "\d+"]
)]
public function managerTravelSumpayments(string $key, int $id, PtoolsRepository $ptoolsRepository) {
if ($key == $_ENV['TRAVEL_CREDITS_CODE']) {
if ($id > 2147483647) return $this->redirectToRoute('app_login', []);
$result = $ptoolsRepository->getManagerSmartTravelData($id);
return new JsonResponse([
'data' => $result,
]);
}
return $this->redirectToRoute('app_login', []);
}
#[Route(
'test-tpay',
name: 'test-tpay',
methods: ['GET'],
requirements: [ "id" => "\d+"]
)]
public function testTpay(TpayService $tpayService) {
$test = [
'travel_member_id' => 987,
'amount' => 123.45,
'description' => 'Testowa płatność',
'continueUrl' => '',
'email' => 'pawel@travelpay.online',
'firstName' => 'Jan',
'lastName' => 'Kowalski',
];
$result = $tpayService->createTransaction($test);
dd($result);
}
}