src/Controller/JobController1.php line 233

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: Ubel
  5.  * Date: 2/18/2019
  6.  * Time: 2:38 PM
  7.  */
  8. namespace App\Controller;
  9. use App\AppEvents;
  10. use App\constants;
  11. use App\Datatable\MyJobDatatable;
  12. use App\Entity\Anouncement;
  13. use App\Entity\Category;
  14. use App\Entity\Company;
  15. use App\Entity\Job;
  16. use App\Entity\Notification;
  17. use App\Entity\Payment;
  18. use App\Entity\PaymentForJobs;
  19. use App\Entity\PaymentForServices;
  20. use App\Entity\Profession;
  21. use App\Entity\User;
  22. use App\Event\AlertEvent;
  23. use App\Repository\JobRepository;
  24. use App\Service\JobService;
  25. use Exception;
  26. use Sg\DatatablesBundle\Datatable\DatatableFactory;
  27. use Sg\DatatablesBundle\Response\DatatableResponse;
  28. use Symfony\Component\Form\FormError;
  29. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  30. use Symfony\Component\HttpFoundation\JsonResponse;
  31. use Symfony\Component\HttpFoundation\RedirectResponse;
  32. use Symfony\Component\HttpFoundation\Request;
  33. use Symfony\Component\HttpFoundation\Response;
  34. use Symfony\Component\Routing\Annotation\Route;
  35. use App\Form\JobType;
  36. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  37. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  38. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  39. class JobController1 extends Controller
  40. {
  41.     /** @var JobService */
  42.     private $jobservice;
  43.     /** @var DatatableFactory  */
  44.     private $datatableFactory;
  45.     /** @var DatatableResponse  */
  46.     private $datatableResponse;
  47.     private EventDispatcherInterface $dispatcher;
  48.     private UploaderHelper $vich;
  49.     /**
  50.      * JobController1 constructor.
  51.      * @param JobService $jobservice
  52.      * @param DatatableFactory $datatableFactory
  53.      * @param DatatableResponse $datatableResponse
  54.      */
  55.     public function __construct(JobService $jobserviceDatatableFactory $datatableFactoryDatatableResponse $datatableResponseEventDispatcherInterface $eventDispatcherUploaderHelper $vich)
  56.     {
  57.         $this->jobservice $jobservice;
  58.         $this->datatableFactory $datatableFactory;
  59.         $this->datatableResponse $datatableResponse;
  60.         $this->dispatcher $eventDispatcher;
  61.         $this->vich $vich;
  62.     }
  63.     /**
  64.      * @Route("/job/new_/", name="job_new_")
  65.      * @IsGranted("ROLE_ADMIN")
  66.      * @param Request $request
  67.      * @return RedirectResponse|Response
  68.      */
  69.     public function jobNew(Request $request)
  70.     {
  71.         /** @var User $user */
  72.         $user $this->getUser();
  73.         $post = new Job();
  74.         $post->setCompany($user->getCompany());
  75.         $form $this->createForm(JobType::class, $post);
  76.         $entityManager $this->getDoctrine()->getManager();
  77.         $form->handleRequest($request);
  78.         if ($form->isSubmitted() && $form->isValid()) {
  79.             $payment $user->getPackageJobs();
  80.             $post->setExpiredDate(
  81.                 $post->getDate()->add(\DateInterval::createfromdatestring('+' $payment->getVisibleDays() . ' day'))
  82.             );
  83.             if ($form->get('date')->getData() < date("y-m-d"strtotime("today"))) {
  84.                 $form->get('date')->addError(new FormError("La fecha de debe ser mayor que la fecha acual"));
  85.                 return $this->render(
  86.                     'site/job/job.html.twig',
  87.                     [
  88.                         'form' => $form->createView(),
  89.                         'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  90.                         'expired' => $this->container->get('app.service.helper')->expired(),
  91.                         'company' => $user->getCompany()
  92.                     ]
  93.                 );
  94.             } elseif ($form->get('date')->getData() > new \DateTime("now")) {
  95.                 $post->setStatus(constants::JOB_STATUS_PENDING);
  96.             } else {
  97.                 $post->setStatus(constants::JOB_STATUS_ACTIVE);
  98.             }
  99.             $user->setNumPosts($user->getNumPosts() - 1);
  100.             $entityManager->flush();
  101.             $post->setUser($user);
  102.             $post->setDateCreated(new \DateTime("now"));
  103.             $entityManager->persist($post);
  104.             $entityManager->flush();
  105.             if ($user->getCompany() === null) {
  106.                 $user->setCompany($post->getCompany());
  107.             }
  108.             $notification = new Notification();
  109.             $notification->setDate(new \DateTime());
  110.             $notification->setType(constants::NOTIFICATION_JOB_CREATE);
  111.             $notification->setContext("Empleo creado satisfactoriamente");
  112.             $notification->setUser($this->get('security.token_storage')->getToken()->getUser());
  113.             $notification->setActive(true);
  114.             $entityManager->persist($notification);
  115.             $entityManager->flush();
  116.             $this->dispatcher->dispatch(new AlertEvent($post), AppEvents::GENERATE_ALERT);
  117.             return $this->redirectToRoute('job_manage');
  118.         }
  119.         if (null == $this->container->get('app.service.helper')->expired()) {
  120.             return $this->redirectToRoute('pricing_page');
  121.         } elseif (
  122.             $this->container->get('app.service.helper')->expired()['days'] == -1
  123.             || $this->container->get('app.service.helper')->expired()['public'] == 0
  124.         ) {
  125.             return $this->redirectToRoute('pricing_page');
  126.         }
  127.         return $this->render(
  128.             'site/job/job.html.twig',
  129.             [
  130.                 'form' => $form->createView(),
  131.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  132.                 'expired' => $this->container->get('app.service.helper')->expired(),
  133.                 'company' => $user->getCompany()
  134.             ]
  135.         );
  136.     }
  137.     /**
  138.      * @Route("/search/category/{cat}",name="search_category")
  139.      * @param Request $request
  140.      * @param $cat
  141.      * @return mixed
  142.      */
  143.     public function searchByCategory(Request $request$cat)
  144.     {
  145.         $em $this->getDoctrine()->getManager();
  146.         $category $em->getRepository(Category::class)->find($cat);
  147.         $pagination $this->get('knp_paginator');
  148.         return $this->render(
  149.             'site/job/list.html.twig',
  150.             array(
  151.                 'jobs' => $pagination->paginate(
  152.                     $em->getRepository(Job::class)->searchByCategory($category),
  153.                     $request->query->getInt('page'1),
  154.                     10
  155.                 ),
  156.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  157.                 'search' => 1,
  158.                 'categorys' => $this->container->get('app.service.helper')->loadCategorys(),
  159.                 'locations' => $this->container->get('app.service.helper')->loadLocations(),
  160.             )
  161.         );
  162.     }
  163.     /**
  164.      * @Route("/search/location/{location}",name="search_location")
  165.      */
  166.     public function searchByLocation(Request $request$location)
  167.     {
  168.         $em $this->getDoctrine()->getManager();
  169.         $pagination $this->get('knp_paginator');
  170.         return $this->render(
  171.             'site/job/list.html.twig',
  172.             array(
  173.                 'jobs' => $pagination->paginate(
  174.                     $em->getRepository(Job::class)->searchByLocation($location),
  175.                     $request->query->getInt('page'1),
  176.                     10
  177.                 ),
  178.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  179.                 'search' => 1,
  180.                 'categorys' => $this->container->get('app.service.helper')->loadCategorys(),
  181.                 'locations' => $this->container->get('app.service.helper')->loadLocations(),
  182.             )
  183.         );
  184.     }
  185.     /**
  186.      * @Route("/search/city/{city}",name="search_city")
  187.      */
  188.     public function searchByCity(Request $request$city)
  189.     {
  190.         $em $this->getDoctrine()->getManager();
  191.         $pagination $this->get('knp_paginator');
  192.         return $this->render(
  193.             'site/job/list.html.twig',
  194.             array(
  195.                 'jobs' => $pagination->paginate(
  196.                     $em->getRepository(Job::class)->searchByCity($city),
  197.                     $request->query->getInt('page'1),
  198.                     10
  199.                 ),
  200.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  201.                 'search' => 1,
  202.                 'categorys' => $this->container->get('app.service.helper')->loadCategorys(),
  203.                 'locations' => $this->container->get('app.service.helper')->loadLocations(),
  204.             )
  205.         );
  206.     }
  207.     /**
  208.      * @param Request $request
  209.      * @param Company $company
  210.      * @return Response
  211.      * @Route("/search/company/{id}",name="search_company")
  212.      */
  213.     public function searchByCompany(Request $requestCompany $company)
  214.     {
  215.         $em $this->getDoctrine()->getManager();
  216.         $pagination $this->get('knp_paginator');
  217.         return $this->render(
  218.             'site/job/list.html.twig',
  219.             array(
  220.                 'jobs' => $pagination->paginate(
  221.                     $em->getRepository(Job::class)->searchByCompany($company),
  222.                     $request->query->getInt('page'1),
  223.                     10
  224.                 ),
  225.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  226.                 'search' => 1,
  227.                 'categorys' => $this->container->get('app.service.helper')->loadCategorys(),
  228.                 'locations' => $this->container->get('app.service.helper')->loadLocations(),
  229.             )
  230.         );
  231.     }
  232.     /**
  233.      * @Route("/search",name="search")
  234.      */
  235.     public function search(Request $request)
  236.     {
  237.         $keywords $request->request->get('keywords');
  238.         $location $request->request->get('location');
  239.         $em $this->getDoctrine()->getManager();
  240.         $pagination $this->get('knp_paginator');
  241.         if (empty($keywords) && empty($location)) {
  242.             return $this->redirectToRoute('homepage');
  243.         } else {
  244.             return $this->render(
  245.                 'site/job/list.html.twig',
  246.                 array(
  247.                     'jobs' => $pagination->paginate(
  248.                         $em->getRepository(Job::class)->search($keywords$location),
  249.                         $request->query->getInt('page'1),
  250.                         10
  251.                     ),
  252.                     'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  253.                     'search' => 1,
  254.                     'categorys' => $this->container->get('app.service.helper')->loadCategorys(),
  255.                     'locations' => $this->container->get('app.service.helper')->loadLocations(),
  256.                 )
  257.             );
  258.         }
  259.     }
  260.     /**
  261.      * @Route("/job/list/", name="job_list")
  262.      */
  263.     public function jobList(Request $request)
  264.     {
  265.         $em $this->getDoctrine()->getManager();
  266.         $jobs $em->getRepository(Job::class)->findBy(
  267.             array('status' => constants::JOB_STATUS_ACTIVE),
  268.             array('dateCreated' => 'desc')
  269.         );
  270.         $em->getRepository(Job::class)->expired();
  271.         $pagination $this->get('knp_paginator')->paginate(
  272.             $jobs,
  273.             $request->query->getInt('page'1),
  274.             10
  275.         );
  276.         $pagination->setTemplate('site/pagination.html.twig');
  277.         return $this->render(
  278.             'site/job/list.html.twig',
  279.             [
  280.                 'jobs' => $pagination,
  281.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  282.                 'categorys' => $this->container->get('app.service.helper')->loadCategorys(),
  283.                 'locations' => $this->container->get('app.service.helper')->loadLocations(),
  284.             ]
  285.         );
  286.     }
  287.     /**
  288.      * @Route("/job/{id}/", name="job_show")
  289.      */
  290.     public function jobShow($id)
  291.     {
  292.         $em $this->getDoctrine()->getManager();
  293.         $job $em->getRepository(Job::class)->find($id);
  294.         $seoPage $this->container->get('sonata.seo.page');
  295.         $seoPage
  296.             ->addTitleSuffix($job->getTitle())
  297.             ->addMeta('name''description'$job->getDescription())
  298.             ->addMeta('property''og:title'$job->getTitle())
  299.             ->addMeta('property''og:image'$this->vich->asset($job'imageFile'))
  300.             ->addMeta('property''og:url',  $this->generateUrl('job_show', [
  301.                 'id' => $job->getId(),
  302.             ], true))
  303.             ->addMeta('property''og:description'$job->getDescription());
  304.         return $this->render(
  305.             'site/job/view.html.twig',
  306.             [
  307.                 'job' => $job,
  308.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  309.             ]
  310.         );
  311.     }
  312.     /**
  313.      * @param Request $request
  314.      * @param JobRepository $jobRepository
  315.      * @return Response
  316.      * @Route("/manage/job/", name="job_manage")
  317.      * @IsGranted("ROLE_ADMIN")
  318.      */
  319.     public function manage(Request $requestJobRepository $jobRepository)
  320.     {
  321.         $user $this->get('security.token_storage')->getToken()->getUser();
  322.         $jobs $jobRepository->finJobByUser($user);
  323.         $pagination $this->get('knp_paginator')->paginate(
  324.             $jobs,
  325.             $request->query->getInt('page'1),
  326.             5
  327.         );
  328.         $pagination->setTemplate('site/pagination.html.twig');
  329.         $paymentMetadata = ['jobs' => $this->jobservice->getCurrentJobPackage($user)];
  330.         return $this->render(
  331.             'user/employer/manage_job.html.twig',
  332.             [
  333.                 'jobs' => $pagination,
  334.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  335.                 'expired' => $this->container->get('app.service.helper')->expired(),
  336.                 'paymentMetadata' => $paymentMetadata
  337.             ]
  338.         );
  339.     }
  340.     /**
  341.      * @Route("/ajax/job/remove", name="ajax_job_remove")
  342.      * @param Request $request
  343.      * @return JsonResponse
  344.      */
  345.     public function removeJob(Request $request)
  346.     {
  347.         $id $request->request->get('id');
  348.         $entityManager $this->getDoctrine()->getManager();
  349.         $job $entityManager->getRepository(Job::class)->find($id);
  350.         $entityManager->remove($job);
  351.         $entityManager->flush();
  352.         $response = new JsonResponse();
  353.         $response->setStatusCode(200);
  354.         $response->setData(
  355.             array(
  356.                 'response' => 'success',
  357.                 'data' => 'done',
  358.             )
  359.         );
  360.         return $response;
  361.     }
  362.     /**
  363.      * @Route("/ajax/filters", name="ajax_filters")
  364.      * @param Request $request
  365.      * @return JsonResponse
  366.      */
  367.     public function searchWithFilters(Request $request)
  368.     {
  369.         $cat $request->request->get('category');
  370.         $location $request->request->get('location');
  371.         $gender $request->request->get('gender');
  372.         $experience $request->request->get('experience');
  373.         $post $request->request->get('post');
  374.         $time 0;
  375.         switch ($post) {
  376.             case "Última hora":
  377.                 $time 1;
  378.                 break;
  379.             case "Últimas 24 horas":
  380.                 $time 24;
  381.                 break;
  382.             case "Últimos 7 días":
  383.                 $time 24 7;
  384.                 break;
  385.             case "Últimos 14 días":
  386.                 $time 24 14;
  387.                 break;
  388.             case "Últimos 30 días":
  389.                 $time 24 30;
  390.                 break;
  391.             default:
  392.                 break;
  393.         }
  394.         $em $this->getDoctrine()->getManager();
  395.         $response = new JsonResponse();
  396.         $response->setStatusCode(200);
  397.         $category $em->getRepository(Category::class)->findOneBy(array('name' => $cat));
  398.         $jobs $em->getRepository(Job::class)->searchCatAndLocation(
  399.             $category,
  400.             $location,
  401.             $gender,
  402.             $experience,
  403.             $time
  404.         );
  405.         $t = new \DateTime();
  406.         $newTime $t->add(\DateInterval::createFromDateString('-' $time ' hours'));
  407.         if ($time 0) {
  408.             $i 0;
  409.             /** @var Job $job */
  410.             foreach ($jobs as $job) {
  411.                 if ($newTime $job->getDateCreated()) {
  412.                     unset($jobs[$i]);
  413.                 }
  414.                 $i++;
  415.             }
  416.         }
  417.         $pagination $this->get('knp_paginator')->paginate(
  418.             $jobs,
  419.             $request->query->getInt('page'1),
  420.             10
  421.         );
  422.         $pagination->setTemplate('site/pagination.html.twig');
  423.         $response->setData(
  424.             array(
  425.                 'response' => $this->render(
  426.                     'site/job/loop.html.twig',
  427.                     array(
  428.                         'jobs' => $pagination,
  429.                     )
  430.                 )->getContent(),
  431.             )
  432.         );
  433.         return $response;
  434.     }
  435.     /**
  436.      * @Route("/ajax/filters/services", name="ajax_filters_services")
  437.      */
  438.     public function searchWithFiltersServices(Request $request)
  439.     {
  440.         $profesion $request->request->get('profesion');
  441.         $location $request->request->get('location');
  442.         $gender $request->request->get('gender');
  443.         $experience $request->request->get('experience');
  444.         $post $request->request->get('post');
  445.         $time 0;
  446.         switch ($post) {
  447.             case "Última hora":
  448.                 $time 1;
  449.                 break;
  450.             case "Últimas 24 horas":
  451.                 $time 24;
  452.                 break;
  453.             case "Últimos 7 días":
  454.                 $time 24 7;
  455.                 break;
  456.             case "Últimos 14 días":
  457.                 $time 24 14;
  458.                 break;
  459.             case "Últimos 30 días":
  460.                 $time 24 30;
  461.                 break;
  462.             default:
  463.                 break;
  464.         }
  465.         $em $this->getDoctrine()->getManager();
  466.         $response = new JsonResponse();
  467.         $response->setStatusCode(200);
  468.         $p $em->getRepository(Profession::class)->findOneBy(array('name' => $profesion));
  469.         $posts $em->getRepository(Anouncement::class)->searchByFilters(
  470.             $p,
  471.             $location,
  472.             $gender,
  473.             $experience
  474.         );
  475.         $t = new \DateTime();
  476.         $newTime $t->add(\DateInterval::createFromDateString('-' $time ' hours'));
  477.         if ($time 0) {
  478.             $i 0;
  479.             foreach ($posts as $job) {
  480.                 if ($newTime $job->getDate()) {
  481.                     unset($posts[$i]);
  482.                 }
  483.                 $i++;
  484.             }
  485.         }
  486.         $pagination $this->get('knp_paginator')->paginate(
  487.             $posts,
  488.             $request->query->getInt('page'1),
  489.             10
  490.         );
  491.         $pagination->setTemplate('site/pagination.html.twig');
  492.         $response->setData(
  493.             array(
  494.                 'response' => $this->render(
  495.                     'service/loop.html.twig',
  496.                     array(
  497.                         'jobs' => $pagination,
  498.                     )
  499.                 )->getContent(),
  500.             )
  501.         );
  502.         return $response;
  503.     }
  504.     /**
  505.      * @param Request $request
  506.      * @return JsonResponse|Response
  507.      * @throws Exception
  508.      *
  509.      * @Route ("/misServicios", name="my_services_list")
  510.      */
  511.     public function misServiciosSolicitados(Request $request)
  512.     {
  513.         $datatable $this->datatableFactory->create(MyJobDatatable::class);
  514.         $datatable->buildDatatable([
  515.             'url' => $this->generateUrl('my_services_list')
  516.         ]);
  517.         if ($request->isXmlHttpRequest() && $request->isMethod('POST')) {
  518.             $this->datatableResponse->setDatatable($datatable);
  519.             $builder $this->datatableResponse->getDatatableQueryBuilder();
  520.             $builder->getQb()
  521.                 ->where('job.user=:user')
  522.                 ->setParameter('user'$this->getUser());
  523.             return $this->datatableResponse->getResponse();
  524.         }
  525.         return $this->render('site/job/myServices.html.twig', [
  526.             'datatable' => $datatable,
  527.             'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  528.         ]);
  529.     }
  530.     /**
  531.      * @param Request $request
  532.      * @param Job $post
  533.      * @return RedirectResponse|Response
  534.      *
  535.      * @Route ("/actualizar/{id}", name="actualizar_trabajo")
  536.      */
  537.     public function editJob(Request $requestJob $post)
  538.     {
  539.         /** @var User $user */
  540.         $user $this->getUser();
  541.         $form $this->createForm(JobType::class, $post);
  542.         $entityManager $this->getDoctrine()->getManager();
  543.         $form->handleRequest($request);
  544.         if ($form->isSubmitted() && $form->isValid()) {
  545.             $entityManager->flush();
  546.             $notification = new Notification();
  547.             $notification->setDate(new \DateTime());
  548.             $notification->setType(constants::NOTIFICATION_JOB_UPDATE);
  549.             $notification->setContext("Empleo modificado satisfactoriamente");
  550.             $notification->setUser($this->get('security.token_storage')->getToken()->getUser());
  551.             $notification->setActive(true);
  552.             $entityManager->persist($notification);
  553.             $entityManager->flush();
  554.             return $this->redirectToRoute('my_services_list');
  555.         }
  556.         return $this->render(
  557.             'site/job/job.html.twig',
  558.             [
  559.                 'form' => $form->createView(),
  560.                 'notifications' => $this->container->get('app.service.helper')->loadNotifications(),
  561.                 'expired' => $this->container->get('app.service.helper')->expired(),
  562.                 'company' => $user->getCompany()
  563.             ]
  564.         );
  565.     }
  566. }