bundles/KVBundle/Controller/DefaultController.php line 118

Open in your IDE?
  1. <?php
  2. namespace KVBundle\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Pimcore\Model\DataObject\LadeeinheitArt;
  7. use Pimcore\Model\DataObject\AuftragStatus;
  8. use Pimcore\Model\DataObject\TransportlaufStatus;
  9. use Pimcore\Model\DataObject\Bahnhof;
  10. use Pimcore\Model\DataObject\SavedFilter;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. use Pimcore\Model\DataObject\SavedFilterZuege;
  13. use Carbon\Carbon;
  14. class DefaultController extends KombiVerkehrController
  15. {
  16.     public function mobileAction(Request $requestTranslatorInterface $translator): Response
  17.     {
  18.         $appMode 'mobile';
  19.         $userLoggedIn $this->checkUserLoggedIn($request);
  20.         if ($userLoggedIn)
  21.         {
  22.             $userSessionData $this->getUserSessionData();
  23.             $viewModel = [
  24.                 'auftragStatusArray'        => $this->getAuftragStatusArray($translator),
  25.                 'transportlaufStatusArray'  => $this->getTransportlaufStatusArray($translator),
  26.                 'ladeeinheitArray'          => $this->getLadeeinheitArray(),
  27.                 'bahnhoefe'                 => $this->getBahnhofArray(),
  28.                 'savedFilter'               => $this->getSavedFilter(),
  29.                 'savedFilterZuege'          => $this->getSavedFilterZuege(),
  30.                 'userPermissions'           => json_encode($userSessionData['data']['PERMISSIONS']),
  31.                 'geschaeftspartnerId'       => $this->getGeschaeftspartnerId(),
  32.                 'ansprechpartnerId'         => $this->getLoginUserId(),
  33.                 'email'                     => $userSessionData['catData']['email'],
  34.                 'name'                      => $userSessionData['catData']['name'],
  35.                 'appMode'                   => $appMode,
  36.             ];
  37.             return $this->render("bundles/KVBundle/layouts/mobile/default-mobile.html.twig"$viewModel);
  38.         }
  39.         $redirect_suffix '';
  40.         if ($request->getLocale() == 'en') {
  41.             $redirect_suffix '_en';
  42.         }
  43.         return $this->login($request$this->getParameter('kv_mobile_url') . $redirect_suffix"Mobile" $redirect_suffix$appMode);
  44.     }
  45.     public function desktopAction(Request $requestTranslatorInterface $translator): Response
  46.     {
  47.         $appMode 'desktop';
  48.         $userLoggedIn $this->checkUserLoggedIn($request);
  49.         if ($userLoggedIn) {
  50.             // $translator->setlocale("en");
  51.             $userSessionData $this->getUserSessionData();
  52.             $viewModel = [
  53.                 'auftragStatusArray'        => $this->getAuftragStatusArray($translator),
  54.                 'transportlaufStatusArray'  => $this->getTransportlaufStatusArray($translator),
  55.                 'ladeeinheitArray'          => $this->getLadeeinheitArray(),
  56.                 'bahnhoefe'                 => $this->getBahnhofArray(),
  57.                 'savedFilter'               => $this->getSavedFilter(),
  58.                 'savedFilterZuege'          => $this->getSavedFilterZuege(),
  59.                 'userPermissions'           => json_encode($userSessionData['data']['PERMISSIONS']),
  60.                 'geschaeftspartnerId'       => $this->getGeschaeftspartnerId(),
  61.                 'ansprechpartnerId'         => $this->getLoginUserId(),
  62.                 'email'                     => $userSessionData['catData']['email'],
  63.                 'name'                      => $userSessionData['catData']['name'],
  64.                 'appMode'                   => $appMode,
  65.             ];
  66.             return $this->render("bundles/KVBundle/layouts/default.html.twig"$viewModel);
  67.         }
  68.         $redirect_suffix '';
  69.         if ($request->getLocale() == 'en') {
  70.             $redirect_suffix '_en';
  71.         }
  72.         return $this->login($request$this->getParameter('kv_desktop_url') . $redirect_suffix'Desktop' $redirect_suffix$appMode);
  73.     }
  74.     public function login(Request $request$redirect_uri$redirect_name$appMode): Response
  75.     {
  76.         if ($request->query->get('code'))
  77.         {
  78.             $content $this->hwi->getAccessToken($request$redirect_uri);
  79.             if(isset($content["access_token"]))
  80.             {
  81.                 $access_token = array("access_token" =>$content["access_token"]);
  82.                 $info $this->hwi->getUserInformation($access_token);
  83.                 $this->setLoggedInSessionKey($info);
  84.             }
  85.             else
  86.             {
  87.                 //TODO think about a useful response/error when no token is received
  88.                 return new Response('did not receive user auth token');
  89.             }
  90.             return $this->redirectToRoute($redirect_name);
  91.         }
  92.         else
  93.         {
  94.             $redirect_suffix '';
  95.             if ($request->getLocale() == 'en') {
  96.                 $redirect_suffix '_en';
  97.             }
  98.             return $this->redirectToRoute("hwi_oauth_service_redirect", array("service" => "next_tuesday_" $appMode $redirect_suffix));
  99.         }
  100.     }
  101.     /**
  102.      * @Route("/logout", name="Logout")
  103.      */
  104.     public function logoutAction(Request $request): Response
  105.     {
  106.         if ($request->getMethod() == "POST")
  107.         {
  108.             $userLoggedIn $this->checkUserLoggedIn($request);
  109.             if ($userLoggedIn)
  110.             {
  111.                 $this->removeUserSessionData();
  112.                 return new Response(''Response::HTTP_OK);
  113.             }
  114.             return new Response(''Response::HTTP_NO_CONTENT);
  115.         }
  116.         return new Response(''Response::HTTP_METHOD_NOT_ALLOWED);
  117.     }
  118.     private function getAuftragStatusArray(TranslatorInterface $translator): array
  119.     {
  120.         $auftragStatusListing = new AuftragStatus\Listing();
  121.         $auftragStatusArray = [];
  122.         foreach ($auftragStatusListing as $auftrag) {
  123.             $auftragStatusArray[$auftrag->getkv_id()]['auftragNameFormated'] = $translator->trans($auftrag->getName());
  124.             $auftragStatusArray[$auftrag->getkv_id()]['kv_id'] = $auftrag->getkv_id();
  125.         }
  126.         return $auftragStatusArray;
  127.     }
  128.     private function getTransportlaufStatusArray(TranslatorInterface $translator): array
  129.     {
  130.         $transportlaufStatusListing = new TransportlaufStatus\Listing();
  131.         $transportlaufStatusArray = [];
  132.         foreach ($transportlaufStatusListing as $transportlauf) {
  133.             // Folgende Transportlaufstatus werden nicht genutzt als Filter: ABBESTELLT (6), AUSFALL_FTR (7), DEAKTIVIERT (8), ZWISCHENHALT (9)
  134.             if (in_array($transportlauf->getkv_id(), array(6789))) {
  135.                 continue;
  136.             }
  137.             $transportlaufStatusArray[$transportlauf->getkv_id()]['auftragNameFormated'] = $translator->trans($transportlauf->getName());
  138.             $transportlaufStatusArray[$transportlauf->getkv_id()]['kv_id'] = $transportlauf->getkv_id();
  139.         }
  140.         return $transportlaufStatusArray;
  141.     }
  142.     private function getLadeeinheitArray(): array
  143.     {
  144.         $ladeeinheitListing = new LadeeinheitArt\Listing();
  145.         $ladeeinheitArray = [];
  146.         foreach ($ladeeinheitListing as $ladeeinheit) {
  147.             $ladeeinheitArray[$ladeeinheit->getCode()]['Code'] =  $ladeeinheit->getCode();
  148.             $ladeeinheitArray[$ladeeinheit->getCode()]['kv_id'] = $ladeeinheit->getkv_id();
  149.         }
  150.         ksort($ladeeinheitArray);
  151.         return $ladeeinheitArray;
  152.     }
  153.     private function getBahnhofArray(): string
  154.     {
  155.         $bahnhofsListing = new Bahnhof\Listing();
  156.         $bahnhofsListing->setOrderKey("Langname");
  157.         $bahnhofsListing->setOrder("asc");
  158.         $bahnhofContainer   = [];
  159.         foreach ($bahnhofsListing as $b) {
  160.             array_push($bahnhofContainer, array( "kv_id" => $b->getkv_id(), "label" =>  $b->getLangname() ));
  161.         }
  162.         $bahnhoefe json_encode($bahnhofContainerJSON_THROW_ON_ERROR512);
  163.         return $bahnhoefe;
  164.     }
  165.     private function getSavedFilter(): string
  166.     {
  167.         $loginUserId $this->getLoginUserId();
  168.         $savedFilterListing = new SavedFilter\Listing();
  169.         $savedFilterListing->setCondition("user_id = $loginUserId");
  170.         $savedFilterListing->setOrderKey("Name");
  171.         $savedFilterListing->setOrder("asc");
  172.         $savedFilterContainer   = [];
  173.         foreach ($savedFilterListing as $filter) {
  174.             $startdate substr($filter->getStartdate(),0,10);
  175.             $enddate substr($filter->getEnddate(),0,10);
  176.             $startdate_indikator false;
  177.             $enddate_indikator false;
  178.             // KV-129:
  179.             $creationDate Carbon::createFromTimestamp($filter->getModificationDate(), 'Europe/Berlin')->format('Y-m-d');
  180.             if (!empty($startdate)) {
  181.                 $startdate_indikator $this->daysDiff($startdate$creationDate);
  182.                 $startdate Carbon::createFromTimestamp(time(), 'Europe/Berlin') ->addDays($startdate_indikator)->format('Y-m-d');
  183.             }
  184.             if (!empty($enddate)) {
  185.                 $enddate_indikator $this->daysDiff($enddate$creationDate);
  186.                 $enddate Carbon::createFromTimestamp(time(), 'Europe/Berlin')->addDays($enddate_indikator)->format('Y-m-d');
  187.             }
  188.             array_push($savedFilterContainer, array(
  189.                 "id" => $filter->getId(),
  190.                 "name" => $filter->getName(),
  191.                 "uid" => $filter->getUser_id(),
  192.                 "startdate" => $startdate,
  193.                 "enddate" =>  $enddate,
  194.                 "auftragStatus" =>  $filter->getAuftragStatus(),
  195.                 "laufende" =>  $filter->getLaufende(),
  196.                 "verspaetete" =>  $filter->getVerspaetete(),
  197.                 "startterminalterm" =>  $filter->getStartterminalterm(),
  198.                 "zielterminalterm" =>  $filter->getZielterminalterm(),
  199.                 "startterminals" =>  $filter->getStartterminals(),
  200.                 "zielterminals" =>  $filter->getZielterminals(),
  201.                 "abholbereitSeit" =>  $filter->getAbholbereitSeit(),
  202.                 "leArt" =>  $filter->getLeArt(),
  203.                 "gefahrgut" =>  $filter->getGefahrgut(),
  204.                 "abfall" =>  $filter->getAbfall(),
  205.                 "zollpflicht" =>  $filter->getZollpflicht(),
  206.                 "temperaturgefuehrt" =>  $filter->getTemperaturgefuehrt(),
  207.                 "meineAuftraege" =>  $filter->getMeineAuftraege(),
  208.                 "favorit" =>  $filter->getFavorit(),
  209.                 "startdate_indikator" => $startdate_indikator,
  210.                 "enddate_indikator" => $enddate_indikator
  211.             ));
  212.         }
  213.         $savedFilter json_encode($savedFilterContainerJSON_THROW_ON_ERROR512);
  214.         return $savedFilter;
  215.     }
  216.     public function daysDiffToNow($date): int
  217.     {
  218.         $now time();
  219.         $then strtotime($date);
  220.         $datediff $now $then;
  221.         return round($datediff / (60 60 24));
  222.     }
  223.     public function daysDiff($date1$date2): int
  224.     {
  225.         $date1 strtotime($date1);
  226.         $date2 strtotime($date2);
  227.         $datediff $date1 $date2;
  228.         return round($datediff / (60 60 24));
  229.     }
  230.     private function getSavedFilterZuege(): string
  231.     {
  232.         $loginUserId $this->getLoginUserId();
  233.         $savedFilterZuegeListing = new SavedFilterZuege\Listing();
  234.         $savedFilterZuegeListing->setCondition("user_id = $loginUserId");
  235.         $savedFilterZuegeListing->setOrderKey("Name");
  236.         $savedFilterZuegeListing->setOrder("asc");
  237.         $savedFilterZuegeContainer   = [];
  238.         foreach ($savedFilterZuegeListing as $filter) {
  239.             array_push($savedFilterZuegeContainer, array(
  240.                 "id" => $filter->getId(),
  241.                 "name" => $filter->getName(),
  242.                 "uid" => $filter->getUser_id(),
  243.                 "startdate" => substr($filter->getStartdate(),0,10),
  244.                 "enddate" =>  substr($filter->getEnddate(),0,10) ,
  245.                 "startterminalterm" =>  $filter->getStartterminalterm(),
  246.                 "zielterminalterm" =>  $filter->getZielterminalterm(),
  247.                 "startterminals" =>  $filter->getStartterminals(),
  248.                 "zielterminals" =>  $filter->getZielterminals(),
  249.                 "transportlaufStatus" =>  $filter->getTransportlaufStatus(),
  250.                 "favorit" =>  $filter->getFavorit()
  251.             ));
  252.             }
  253.         $savedFilterZuege json_encode($savedFilterZuegeContainerJSON_THROW_ON_ERROR512);
  254.         return $savedFilterZuege;
  255.     }
  256.     public function statisticAction(Request $requestTranslatorInterface $translator): Response
  257.     {
  258.         $userSessionData $this->getUserSessionData();
  259.         $userLoggedIn $this->checkUserLoggedIn($request);
  260.         if (empty($userLoggedIn)) {
  261.             http_response_code(401);
  262.             die;
  263.         }
  264.         $emailAddress $userSessionData['data']['LOGIN'];
  265.         if ($userLoggedIn && strstr($emailAddress'krankikom.de') !== false)
  266.         {
  267.             $userSessionData $this->getUserSessionData();
  268.             $viewModel = [
  269.             ];
  270.             return $this->render("bundles/KVBundle/layouts/statistic.html.twig"$viewModel);
  271.         }
  272.         http_response_code(404);
  273.         die;
  274.     }
  275.     public function helpdeskAction(Request $request): Response
  276.     {
  277.         $userSessionData $this->getUserSessionData();
  278.         $userLoggedIn $this->checkUserLoggedIn($request);
  279.         if (empty($userLoggedIn) || ($userSessionData['data']['PERMISSIONS']['krankikom-orders-view-customers-orders'] !== true && $userSessionData['data']['LOGIN'] !== 'service.kombiverkehr@krankikom.de')) {
  280.             http_response_code(401);
  281.             die('Not authorized...');
  282.         }
  283.         $locale 'de';
  284.         if ($request->getPathInfo() == '/helpdesk_en') {
  285.             $locale 'en';
  286.         }
  287.         if ($userLoggedIn) {
  288.             $userSessionData $this->getUserSessionData();
  289.             $this->catJsonWebservice->fetchGeschaeftspartnerCsvFromCat();
  290.             $sessionId sha1(session_id());
  291.             $helpdeskData = [];
  292.             if (($handle fopen("/tmp/gp.csv""r")) !== FALSE) {
  293.                 while (($data fgetcsv($handle1000",")) !== FALSE) {
  294.                     $urlString '#'.$data[0].'#'.$data[1]; //  # + geschaeftspartnerId + # + loginUserId
  295.                     $randomString $this->getRandomString(20);
  296.                     $urlString $randomString base64_encode($sessionId $urlString);
  297.                     $helpdeskData[$data[3].' - '.$data[2].' - '.$data[4].' ('.$data[0].' / '.$data[1].') '] = $urlString;
  298.                 }
  299.                 fclose($handle);
  300.             }
  301.             $viewModel = [
  302.                 'users' => $helpdeskData,
  303.                 'locale' => $locale
  304.             ];
  305.             return $this->render("bundles/KVBundle/layouts/helpdesk.html.twig"$viewModel);
  306.         }
  307.         http_response_code(404);
  308.         die('Not found...');
  309.     }
  310.     public function getRandomString($random_string_length 10): string
  311.     {
  312.         $characters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  313.         $string '';
  314.         $max strlen($characters) - 1;
  315.         for ($i 0$i $random_string_length$i++) {
  316.             $string .= $characters[mt_rand(0$max)];
  317.         }
  318.         return $string;
  319.     }
  320. }