bundles/KVBundle/Controller/AjaxController.php line 39

Open in your IDE?
  1. <?php
  2. namespace KVBundle\Controller;
  3. use DateInterval;
  4. use DatePeriod;
  5. use DateTime;
  6. use DateTimeImmutable;
  7. use DateTimeZone;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Pimcore\Model\DataObject\Auftrag;
  13. use Pimcore\Model\DataObject\AuftragJson;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use Pimcore\Model\DataObject\Bahnhof;
  16. use Pimcore\Model\DataObject\AuftragStatus;
  17. use Pimcore\Model\DataObject\TransportlaufStatus;
  18. use Pimcore\Model\DataObject\LadeeinheitArt;
  19. use Carbon\Carbon;
  20. use Pimcore\Model\DataObject\Folder as DataObjectFolder;
  21. use Pimcore\Model\DataObject\SavedFilter;
  22. use Pimcore\Model\DataObject\SavedFilterZuege;
  23. use Pimcore\Model\DataObject\Teilstrecke;
  24. use Pimcore\Model\DataObject\TeilstreckeJson;
  25. use \Psr\Log\LoggerInterface;
  26. class AjaxController extends KombiVerkehrController
  27. {
  28.     /**
  29.      * @param Request $request
  30.      * @param TranslatorInterface $translator
  31.      *
  32.      * @Route("/data/auftraege")
  33.      *
  34.      * return Response
  35.      */
  36.     public function getAuftraegeFromLocalOrCat(Request $requestTranslatorInterface $translatorLoggerInterface $kvUsageLogLogger): JsonResponse
  37.     {
  38.         if ($this->getHelpdeskMode() === false) {
  39.             if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  40.                 return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  41.             }
  42.         }
  43.         $loginUserId $this->getLoginUserId();
  44.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  45.         // handle params
  46.         $limit = (int) $request->request->get('limit'50);
  47.         $offset = (int) $request->request->get('offset'0);
  48.         $loadFromKkDatabase $request->request->get('loadFromKkDatabase'false);
  49.         $abfall $request->request->get('abfall');
  50.         $abholbereitSeit $request->request->get('abholbereitSeit');
  51.         $auftragStatus $request->request->get('auftragStatus');
  52.         $endDate $request->request->get('endDate');
  53.         $gefahrgut $request->request->get('gefahrgut');
  54.         $laufende $request->request->get('laufende');
  55.         $leArt $request->request->get('leArt');
  56.         $meineAuftraege $request->request->get('meineAuftraege');
  57.         $startDate $request->request->get('startDate');
  58.         $startterminals $request->request->get('startterminals');
  59.         $temperaturgefuehrt $request->request->get('temperaturgefuehrt');
  60.         $verspaetete $request->request->get('verspaetete');
  61.         $zielterminals $request->request->get('zielterminals');
  62.         $zollpflicht $request->request->get('zollpflicht');
  63.         $columnFilters = (array) $request->request->get('columnFilters');
  64.         $loadingTriggeredBy $request->request->get('loadingTriggeredBy');
  65.         $unvollstaendig $request->request->get('unvollstaendig');
  66.         $geaenderterAnnahmeschluss $request->request->get('geaenderterAnnahmeschluss');
  67.         $abweichenderAbholbeginn $request->request->get('abweichenderAbholbeginn');
  68.         $abholbereit $request->request->get('abholbereit');
  69.         $schnellsuche $request->request->get('schnellsuche');
  70.         $auftragIds $request->request->get('auftragIds');
  71.         $debugString 'limit='.$limit.'---offset='.$offset.'---loadFromKkDatabase='.$loadFromKkDatabase.'---abfall='.$abfall.'---abholbereitSeit='.$abholbereitSeit.'---auftragStatus='.$auftragStatus.'---endDate='.$endDate.'---gefahrgut='.$gefahrgut.'---laufende='.$laufende.'---leArt='.$leArt.'---meineAuftraege='.$meineAuftraege.'---startDate='.$startDate.'---startterminals='.$startterminals.'---temperaturgefuehrt='.$temperaturgefuehrt.'---verspaetete='.$verspaetete.'---zielterminals='.$zielterminals.'---zollpflicht='.$zollpflicht.'---columnFilters='.count($columnFilters).'---loadingTriggeredBy='.$loadingTriggeredBy.'---unvollstaendig='.$unvollstaendig.'---geaenderterAnnahmeschluss='.$geaenderterAnnahmeschluss.'---abweichenderAbholbeginn='.$abweichenderAbholbeginn.'---abholbereit='.$abholbereit.'---schnellsuche='.$schnellsuche.'---auftragIds='.$auftragIds;
  72.         // read Auftraege (from CAT or KK)
  73.         if ($loadFromKkDatabase === false || $loadFromKkDatabase === 'false') {
  74.             $sortParams '';
  75.             $searchString 'geschaeftspartnerId:' $geschaeftspartnerId;
  76.             if (!empty($abholbereitSeit)) {
  77.                 $searchString .= ',abholbereitSeit<' $abholbereitSeit;
  78.             }
  79.             if ($meineAuftraege === 'true') {
  80.                 $searchString .= ',erfasserKunde:' $loginUserId;
  81.             }
  82.             if ($gefahrgut === 'true') {
  83.                 $searchString .= ',gefahrgut:true';
  84.             }
  85.             // echo $auftragStatus;
  86.             if (isset($auftragStatus) && $auftragStatus != "") {
  87.                 $s explode(','$auftragStatus);
  88.                 foreach ($s as $status) {
  89.                     $searchString .= ',auftragStatus:' intval($status);
  90.                 }
  91.             }
  92.             if ($abfall === 'true') {
  93.                 $searchString .= ',abfall:true';
  94.             }
  95.             if (!empty($leArt)) {
  96.                 $arten explode(','$leArt);
  97.                 foreach ($arten as $art) {
  98.                     $searchString .= ',leArtId:' intval($art);
  99.                 }
  100.             }
  101.             if (!empty($startDate)) {
  102.                 $searchString .= ',datum>' $startDate;
  103.             }
  104.             if (!empty($endDate)) {
  105.                 $searchString .= ',datum<' $endDate;
  106.             }
  107.             if (!empty($startterminals)) {
  108.                 $terminals explode(','$startterminals);
  109.                 foreach ($terminals as $t) {
  110.                     $searchString .= ',versandTerminal:' intval($t);
  111.                 }
  112.             }
  113.             if (!empty($zielterminals)) {
  114.                 $terminals explode(','$zielterminals);
  115.                 foreach ($terminals as $t) {
  116.                     $searchString .= ',empfangsTerminal:' intval($t);
  117.                 }
  118.             }
  119.             if ($temperaturgefuehrt === 'true') {
  120.                 $searchString .= ',temperaturgefuehrt:true';
  121.             }
  122.             if ($zollpflicht === 'true') {
  123.                 $searchString .= ',zollpflicht:true';
  124.             }
  125.             if (!empty($schnellsuche)) {
  126.                 $time strtotime("-1 year"time());
  127.                 $datumMinusEinJahr date("Ymd"$time);
  128.                 $searchString .= ',schnellsucheAuftraege:' $schnellsuche ',datum>' $datumMinusEinJahr '-000000';
  129.             }
  130.             if (!empty($auftragIds)) {
  131.                 $auftragIdsArray explode(','$auftragIds);
  132.                 foreach ($auftragIdsArray as $a) {
  133.                     $searchString .= ',auftragId:'.(int)$a;
  134.                 }
  135.             }
  136.             $this->log('Reading Auftraege for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' from CAT'3);
  137.             $auftragFolderId DataObjectFolder::getByPath('/Aufträge/')->getId();
  138.             $oldAuftragJson AuftragJson::getByLoginUserId($loginUserId);
  139.             foreach ($oldAuftragJson as $o) {
  140.                 $o->delete();
  141.             }
  142.             $auftraegeArray $this->catJsonWebservice->fetchAuftraegeByGeschaeftspartnerId($searchString$sortParams);
  143.             $auftraege json_encode($auftraegeArray);
  144.             \Pimcore\Cache::save($auftraege'auftrag-JSON-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true); // 30 Tage
  145.             $this->log('Done reading ' count($auftraegeArray['auftraege']) . ' Auftraege for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' from CAT'2);
  146.             // create cache
  147.             $unvollstaendigeAuftraegeArray = [];
  148.             $geaenderterAnnahmeschlussArray = [];
  149.             $abweichenderAbholbeginnArray = [];
  150.             $abholbereitArray = [];
  151.             $unvollstaendigeAuftraegeCounter 0;
  152.             $geaenderterAnnahmeschlussCounter 0;
  153.             $abweichenderAbholbeginnCounter 0;
  154.             $abholbereitCounter 0;
  155.             $this->log('Creating Auftrag Items-Object-Cache for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId.' - triggered by CAT DATA LOAD'3);
  156.             foreach ($auftraegeArray['auftraege'] as $key => $a) {
  157.                 \Pimcore\Cache::save($a'auftrag-' $a['auftragId'] . '-' $geschaeftspartnerId '-' $loginUserId, [], 3000true);
  158.                 if ($a['datenVollstaendig'] === false) {
  159.                     array_push($unvollstaendigeAuftraegeArray$a);
  160.                     $unvollstaendigeAuftraegeCounter++;
  161.                 }
  162.                 if ($a['abweichungGeplanteAnlieferungAnnahmeschluss'] || $a['abweichungAnnahmeschlussGelesen'] === false) {
  163.                     array_push($geaenderterAnnahmeschlussArray$a);
  164.                     $geaenderterAnnahmeschlussCounter++;
  165.                 }
  166.                 if ($a['abweichungAbholbeginn']) {
  167.                     array_push($abweichenderAbholbeginnArray$a);
  168.                     $abweichenderAbholbeginnCounter++;
  169.                 }
  170.                 if ($a['auftragStatus'] == 7) {
  171.                     array_push($abholbereitArray$a);
  172.                     $abholbereitCounter++;
  173.                 }
  174.             }
  175.             \Pimcore\Cache::save($unvollstaendigeAuftraegeArray'auftrag-unvollstaendig-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  176.             \Pimcore\Cache::save($geaenderterAnnahmeschlussArray'auftrag-geaenderter-annahmeschluss-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  177.             \Pimcore\Cache::save($abweichenderAbholbeginnArray'auftrag-abweichung-abholbeginn-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  178.             \Pimcore\Cache::save($abholbereitArray'auftrag-abholbereit-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  179.             \Pimcore\Cache::save($unvollstaendigeAuftraegeCounter'auftrag-unvollstaendig-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  180.             \Pimcore\Cache::save($geaenderterAnnahmeschlussCounter'auftrag-geaenderter-annahmeschluss-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  181.             \Pimcore\Cache::save($abweichenderAbholbeginnCounter'auftrag-abweichung-abholbeginn-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  182.             \Pimcore\Cache::save($abholbereitCounter'auftrag-abholbereit-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true);
  183.             // for statistics only
  184.             $userSessionData $this->getUserSessionData();
  185.             $kvUsageLogLogger->info('auftrag-data-load', array('loginUserId' => $loginUserId'email' => $userSessionData['data']['LOGIN'], 'count_auftraege' => count($auftraegeArray['auftraege'])));
  186.         } else {
  187.             $auftraegeArray $this->getAuftrageArrayByLoginUser();
  188.             $unvollstaendigeAuftraegeCounter \Pimcore\Cache::load('auftrag-unvollstaendig-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  189.             $geaenderterAnnahmeschlussCounter \Pimcore\Cache::load('auftrag-geaenderter-annahmeschluss-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  190.             $abweichenderAbholbeginnCounter \Pimcore\Cache::load('auftrag-abweichung-abholbeginn-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  191.             $abholbereitCounter \Pimcore\Cache::load('auftrag-abholbereit-counter-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  192.         }
  193.         $countAllAuftraegeInDb count($auftraegeArray['auftraege']);
  194.         if ($columnFilters) {
  195.             $countAllAuftraegeInDb 0;
  196.             $unvollstaendigeAuftraegeCounter 0;
  197.             $geaenderterAnnahmeschlussCounter 0;
  198.             $abweichenderAbholbeginnCounter 0;
  199.             $abholbereitCounter 0;
  200.         } else {
  201.             if ($unvollstaendig) {
  202.                 $auftraegeArray['auftraege'] = \Pimcore\Cache::load('auftrag-unvollstaendig-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  203.             } else if ($geaenderterAnnahmeschluss) {
  204.                 $auftraegeArray['auftraege'] = \Pimcore\Cache::load('auftrag-geaenderter-annahmeschluss-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  205.             } else if ($abweichenderAbholbeginn) {
  206.                 $auftraegeArray['auftraege'] = \Pimcore\Cache::load('auftrag-abweichung-abholbeginn-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  207.             } else if ($abholbereit) {
  208.                 $auftraegeArray['auftraege'] = \Pimcore\Cache::load('auftrag-abholbereit-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  209.             }
  210.             $auftraegeArray['auftraege'] = array_slice($auftraegeArray['auftraege'], $offset$limit);
  211.         }
  212.         $timingBegin                  microtime(true);
  213.         $returnAuftraege              = [];
  214.         $returnAuftraege['auftraege'] = [];
  215.         $offsetCounter                0;
  216.         $addedAuftraegeCounter        0;
  217.         if (isset($auftraegeArray['auftraege'])) {
  218.             $this->log('Creating Auftraege for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId3);
  219.             foreach ($auftraegeArray['auftraege'] as $index => $a) {
  220.                 $a = (array) $a;
  221.                 $auftrag $this->createAuftragObjectFromArrayData($a);
  222.                 $unvollstaendigFlag false;
  223.                 $geaenderterAnnahmeschlussFlag false;
  224.                 $abweichenderAbholbeginnFlag false;
  225.                 $abholbereitFlag false;
  226.                 $addAuftrag true;
  227.                 if ($columnFilters) {
  228.                     $addAuftrag $this->checkColumnFilters($auftrag$columnFilters);
  229.                     if ($addAuftrag) {
  230.                         $countAllAuftraegeInDb++;
  231.                         // UNVOLLSTĂ„NDIG JA/NEIN
  232.                         if ($auftrag->getDatenVollstaendig() == false) {
  233.                             $unvollstaendigFlag true;
  234.                             $unvollstaendigeAuftraegeCounter++;
  235.                             if ($unvollstaendig) {
  236.                                 if (!$unvollstaendigFlag) {
  237.                                     $addAuftrag false;
  238.                                 }
  239.                             }
  240.                         }
  241.                         // geaenderterAnnahmeschluss JA/NEIN
  242.                         if ($auftrag->getAbweichungGeplanteAnlieferungAnnahmeschluss() || !$auftrag->getAbweichungAnnahmeschlussGelesen()) {
  243.                             $geaenderterAnnahmeschlussFlag true;
  244.                             $geaenderterAnnahmeschlussCounter++;
  245.                             if ($geaenderterAnnahmeschluss) {
  246.                                 if (!$geaenderterAnnahmeschlussFlag) {
  247.                                     $addAuftrag false;
  248.                                 }
  249.                             }
  250.                         }
  251.                         // abweichenderAbholbeginnFlag JA/NEIN
  252.                         if ($auftrag->getAbweichungAbholbeginn()) {
  253.                             $abweichenderAbholbeginnFlag true;
  254.                             $abweichenderAbholbeginnCounter++;
  255.                             if ($abweichenderAbholbeginn) {
  256.                                 if (!$abweichenderAbholbeginnFlag) {
  257.                                     $addAuftrag false;
  258.                                 }
  259.                             }
  260.                         }
  261.                         // abholbereitFlag JA/NEIN
  262.                         if ($auftrag->getAuftragStatus() == 7) {
  263.                             $abholbereitFlag true;
  264.                             $abholbereitCounter++;
  265.                             if ($abholbereit) {
  266.                                 if (!$abholbereitFlag) {
  267.                                     $addAuftrag false;
  268.                                 }
  269.                             }
  270.                         }
  271.                     }
  272.                     if ($addAuftrag == true && $offset $offsetCounter) {
  273.                         $offsetCounter++;
  274.                         $addAuftrag false;
  275.                         continue; // offset to small --> go to next one...
  276.                     }
  277.                     if ($addedAuftraegeCounter >= $limit) {
  278.                         $addAuftrag false;
  279.                         continue; // we're already above the limit --> but we have to loop until the end, because we need the total count for $countAllAuftraegeInDb
  280.                     }
  281.                 }
  282.                 if ($addAuftrag) {
  283.                     $returnAuftraege['auftraege'][$auftrag->getAuftragId()] = array(
  284.                         // 'maxAnzahlErreicht' => $auftrag->getMaxAnzahlErreicht(),
  285.                         'geschaeftspartnerId' => $auftrag->getGeschaeftspartnerId(),
  286.                         'auftragId' => $auftrag->getAuftragId(),
  287.                         'abfall' => $auftrag->getAbfall(),
  288.                         'abholbeginn' => $auftrag->getAbholbeginn(),
  289.                         'abholbereitSeit' => $auftrag->getAbholbereitSeit(),
  290.                         'aktuellerTerminal' => $auftrag->getAktuellerTerminal(),
  291.                         'anlieferArt' => $auftrag->getAnlieferArt(),
  292.                         'anlieferArtText' => $this->getLieferartById($auftrag->getAnlieferArt(), $translator),
  293.                         'anlieferCode' => $auftrag->getAnlieferCode(),
  294.                         'anlieferung' => $auftrag->getAnlieferung(),
  295.                         'annahmeschluss' => $auftrag->getAnnahmeschluss(),
  296.                         'auftragStatus' => $auftrag->getAuftragStatus(),
  297.                         'auslieferArt' => $auftrag->getAuslieferart(),
  298.                         'auslieferArtText' => $this->getLieferartById($auftrag->getAuslieferart(), $translator),
  299.                         'beladezustand' => $auftrag->getBeladezustand(),
  300.                         'bereitstellung' => $auftrag->getBereitstellung(),
  301.                         'bruttogewicht' => $auftrag->getBruttogewicht(),
  302.                         'buchenderKunde' => $auftrag->getBuchenderKunde(),
  303.                         'nameBuchenderKunde' => $auftrag->getNameBuchenderKunde(),
  304.                         'daten_vollständig' => $auftrag->getDatenVollstaendig(),
  305.                         'empfaenger' => $auftrag->getEmpfaenger(),
  306.                         'nameEmpfaenger' => $auftrag->getNameEmpfaenger(),
  307.                         'empfangsLadestelle' => $auftrag->getEmpfangsLadestelle(),
  308.                         'empfangsTerminal' => $auftrag->getEmpfangsTerminal(),
  309.                         'nameErfasserKunde' => $auftrag->getNameErfasserKunde(),
  310.                         'erfasserKunde' => $auftrag->getErfasserKunde(),
  311.                         'freistellCode' => $auftrag->getFreistellCode(),
  312.                         'freigestellt' => $auftrag->getFreigestellt(),
  313.                         'gefahrgut' => $auftrag->getGefahrgut(),
  314.                         'gelesen' => $auftrag->getGelesen(),
  315.                         'gelesenVon' => $auftrag->getGelesenVon(),
  316.                         // 'abweichungAnnahmeschlussGelesen' => $auftrag->getAbweichungAnnahmeschlussGelesen(),
  317.                         'abweichungAnnahmeschlussGelesen' => true// KV-121
  318.                         'kundenreferenz' => $auftrag->getKundenreferenz(),
  319.                         'ladegut' => $auftrag->getLadegut(),
  320.                         'leArt' => $auftrag->getLeArt(),
  321.                         'leBauart' => $auftrag->getLeBauart(),
  322.                         'leNummer' => $auftrag->getLeNummer(),
  323.                         'nettogewicht' => $auftrag->getNettogewicht(),
  324.                         'rechnungsEmpfaenger' => $auftrag->getRechnungsEmpfaenger(),
  325.                         'nameRechnungsEmpfaenger' => $auftrag->getNameRechnungsEmpfaenger(),
  326.                         'taragewicht' => $auftrag->getTaragewicht(),
  327.                         'temperaturgefuehrt' => $auftrag->getTemperaturgefuehrt(),
  328.                         'versandLadestelle' => $auftrag->getVersandLadestelle(),
  329.                         'versandTerminal' => $auftrag->getVersandTerminal(),
  330.                         'versender' => $auftrag->getVersender(),
  331.                         'nameVersender' => $auftrag->getNameVersender(),
  332.                         'zollpflicht' => $auftrag->getZollpflicht(),
  333.                         'aktuelleTeilstrecke' => $auftrag->getAktuelleTeilstrecke(),
  334.                         'erwarteteAbweichungSeconds' => $auftrag->getErwarteteAbweichungSeconds(),
  335.                         'anzAuftraegeAufZug' => $auftrag->getAnzAuftraegeAufZug(),
  336.                         'startterminal' => $auftrag->getStartterminal(),
  337.                         'zielterminal' => $auftrag->getZielterminal(),
  338.                         'status' => $auftrag->getStatus(),
  339.                         'abweichungGeplanteAnlieferungAnnahmeschluss' => $auftrag->getAbweichungGeplanteAnlieferungAnnahmeschluss(),
  340.                         'abweichungAbholbeginn' => $auftrag->getAbweichungAbholbeginn(),
  341.                         'transportUnterbrochen' => $auftrag->getTransportUnterbrochen(),
  342.                     );
  343.                     $addedAuftraegeCounter++;
  344.                 }
  345.             }
  346.         }
  347.         $returnAuftraege['countAllAuftraegeInDb'] = $countAllAuftraegeInDb;
  348.         $returnAuftraege['maxAnzahlErreicht'] = $auftraegeArray['maxAnzahlErreicht'];
  349.         $returnAuftraege['unvollstaendigeAuftraegeCounter'] = $unvollstaendigeAuftraegeCounter;
  350.         $returnAuftraege['geaenderterAnnahmeschlussCounter'] = $geaenderterAnnahmeschlussCounter;
  351.         $returnAuftraege['abweichenderAbholbeginnCounter'] = $abweichenderAbholbeginnCounter;
  352.         $returnAuftraege['abholbereitCounter'] = $abholbereitCounter;
  353.         $returnAuftraege['isAbweichenderAbholbeginn'] = $abweichenderAbholbeginn;
  354.         $returnAuftraege['isGeaenderterAnnahmeschluss'] = $geaenderterAnnahmeschluss;
  355.         $returnAuftraege['isUnvollstaendigeAuftraege'] = $unvollstaendig;
  356.         $returnAuftraege['isAbholbereit'] = $abholbereit;
  357.         $timingEnd microtime(true);
  358.         $this->log('Done creating ' $addedAuftraegeCounter ' Auftraege for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' (' number_format(($timingEnd $timingBegin), 3) . 's) '.$debugString1);
  359.         return $this->json([
  360.             "success" => true,
  361.             "data" => $returnAuftraege
  362.         ]);
  363.     }
  364.     /**
  365.      * @return array
  366.      */
  367.     public function getAuftrageArrayByLoginUser(): array
  368.     {
  369.         $loginUserId $this->getLoginUserId();
  370.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  371.         $timingBegin microtime(true);
  372.         $this->log('Reading Auftraege for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' from KK DB'3);
  373.         // $auftragJson = new AuftragJson\Listing();
  374.         // $auftragJson->setCondition('loginUserId = ? ', [$loginUserId]);
  375.         // foreach ($auftragJson as $key => $auftrag) {
  376.         //     $auftraegeArray =   $auftrag->getJson();
  377.         //     $auftraegeArray = (array) json_decode($auftraegeArray, true);
  378.         // }
  379.         $auftragJson \Pimcore\Cache::load('auftrag-JSON-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  380.         $auftraegeArray = (array) json_decode($auftragJsontrue);
  381.         $timingEnd microtime(true);
  382.         $this->log('Done reading ' count($auftraegeArray['auftraege']) . ' Auftraege for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' from KK DB (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  383.         return $auftraegeArray;
  384.     }
  385.     /**
  386.      * @param array $a
  387.      *
  388.      * @return Auftrag
  389.      */
  390.     public function createAuftragObjectFromArrayData(array $a)
  391.     {
  392.         $loginUserId $this->getLoginUserId();
  393.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  394.         $auftragFolderId DataObjectFolder::getByPath('/Aufträge/')->getId();
  395.         $auftrag = new Auftrag();
  396.         // general system info
  397.         $auftrag->setLoginUserId($loginUserId);
  398.         $auftrag->setKey($geschaeftspartnerId '-' $loginUserId  '-' $a['auftragId']); // anzeigename im pimcore cms listing
  399.         $auftrag->setParentId($auftragFolderId);
  400.         // KV data
  401.         // $auftrag->setMaxAnzahlErreicht($auftraegeArray['maxAnzahlErreicht']);
  402.         $auftrag->setGeschaeftspartnerId($geschaeftspartnerId);
  403.         $auftrag->setAuftragId($a['auftragId']);
  404.         $auftrag->setAbfall($a['abfall']);
  405.         // $auftrag->setAbholbeginn(!empty($a['abholbeginn']) ? Carbon::createFromTimeString($a['abholbeginn'], 'Europe/Berlin') : null);
  406.         $auftrag->setAbholbeginn(!empty($a['abholbeginnETP']) ? Carbon::createFromTimeString($a['abholbeginnETP'], 'Europe/Berlin') : null);
  407.         $auftrag->setAbholbereitSeit(!empty($a['abholbereitSeit']) ? Carbon::createFromTimeString($a['abholbereitSeit'], 'Europe/Berlin') : null);
  408.         $auftrag->setAktuellerTerminal($a['aktuellerTerminal']);
  409.         $auftrag->setAnlieferArt($a['anlieferArt']);
  410.         $auftrag->setAnlieferCode($a['anlieferCode']);
  411.         $auftrag->setAnlieferung(!empty($a['anlieferung']) ? Carbon::createFromTimeString($a['anlieferung'], 'Europe/Berlin') : null);
  412.         $auftrag->setAnnahmeschluss(!empty($a['annahmeschluss']) ? Carbon::createFromTimeString($a['annahmeschluss'], 'Europe/Berlin') : null);
  413.         $auftrag->setAuftragStatus($a['auftragStatus']);
  414.         $auftrag->setAuslieferart($a['auslieferart']);
  415.         $auftrag->setBeladezustand($a['beladezustand']);
  416.         $auftrag->setBereitstellung(!empty($a['bereitstellung']) ? Carbon::createFromTimeString($a['bereitstellung'], 'Europe/Berlin') : null);
  417.         $auftrag->setBruttogewicht($a['bruttogewicht']);
  418.         $auftrag->setBuchenderKunde($a['buchenderKunde']);
  419.         $auftrag->setNameBuchenderKunde($a['nameBuchenderKunde']);
  420.         $auftrag->setDatenVollstaendig($a['datenVollstaendig']);
  421.         $auftrag->setEmpfaenger($a['empfaenger']);
  422.         $auftrag->setNameEmpfaenger($a['nameEmpfaenger']);
  423.         $auftrag->setEmpfangsLadestelle($a['empfangsLadestelle']);
  424.         $auftrag->setEmpfangsTerminal($a['empfangsTerminal']);
  425.         $auftrag->setNameErfasserKunde($a['nameErfasserKunde']);
  426.         $auftrag->setErfasserKunde($a['erfasserKunde']);
  427.         $auftrag->setFreistellCode($a['freistellCode']);
  428.         $auftrag->setFreigestellt(!empty($a['freigestellt']) ? Carbon::createFromTimeString($a['freigestellt'], 'Europe/Berlin') : null);
  429.         $auftrag->setGefahrgut($a['gefahrgut']);
  430.         $auftrag->setGelesen($a['gelesen']);
  431.         $auftrag->setGelesenVon($a['gelesenVon']);
  432.         $auftrag->setAbweichungAnnahmeschlussGelesen($a['abweichungAnnahmeschlussGelesen']);
  433.         $auftrag->setKundenreferenz($a['kundenreferenz']);
  434.         $auftrag->setLadegut($a['ladegut']);
  435.         $auftrag->setLeArt($this->getLadeeinheitById($a['leArtId']));
  436.         $auftrag->setLeBauart($a['leBauart']);
  437.         $auftrag->setLeNummer($a['leNummer']);
  438.         $auftrag->setNettogewicht($a['nettogewicht']);
  439.         $auftrag->setRechnungsEmpfaenger($a['rechnungsEmpfaenger']);
  440.         $auftrag->setNameRechnungsEmpfaenger($a['nameRechnungsEmpfaenger']);
  441.         $auftrag->setTaragewicht($a['taragewicht']);
  442.         $auftrag->setTemperaturgefuehrt($a['temperaturgefuehrt']);
  443.         $auftrag->setVersandLadestelle($a['versandLadestelle']);
  444.         $auftrag->setVersandTerminal($a['versandTerminal']);
  445.         $auftrag->setVersender($a['versender']);
  446.         $auftrag->setNameVersender($a['nameVersender']);
  447.         $auftrag->setZollpflicht($a['zollpflicht']);
  448.         $auftrag->setAktuelleTeilstrecke($a['aktuelleTeilstrecke']);
  449.         $auftrag->setErwarteteAbweichungSeconds($a['erwarteteAbweichungSeconds']);
  450.         // $auftrag->setAnzAuftraegeAufZug($a['anzAuftraegeAufZug']);
  451.         $auftrag->setAbweichungGeplanteAnlieferungAnnahmeschluss($a['abweichungGeplanteAnlieferungAnnahmeschluss']);
  452.         $auftrag->setAbweichungAbholbeginn($a['abweichungAbholbeginn']);
  453.         $auftrag->setTransportUnterbrochen($a['transportUnterbrochen']);
  454.         // add/map some data
  455.         $auftrag->setStartterminal($this->getStartterminalNameById($auftrag->getVersandTerminal()));
  456.         $auftrag->setZielterminal($this->getZielterminalNameById($auftrag->getEmpfangsTerminal()));
  457.         $auftrag->setStatus($this->getAuftragStatusById($auftrag->getAuftragStatus()));
  458.         $auftrag->setPublished(true);
  459.         return $auftrag;
  460.     }
  461.     public function checkColumnFilters($object, array $columnFilters)
  462.     {
  463.         $ok true;
  464.         foreach ($columnFilters as $filter) {
  465.             $ok $this->checkFilters($object$filter["identifier"],  $filter["value"],  $filter["filtertype"],  $filter["callfunction"]);
  466.             if (!$ok) {
  467.                 return false;
  468.             };
  469.         }
  470.         return $ok;
  471.     }
  472.     public function checkFilters($object$field$searchValue$filtertype$callfunction)
  473.     {
  474.         $ok false;
  475.         $value strtolower($object->$callfunction());
  476.         switch ($field) {
  477.             case 'annahmeschluss':
  478.             case 'anlieferung':
  479.             case 'bereitstellung':
  480.             case 'abholbereitSeit':
  481.             case 'freigestellt':
  482.             case 'abholbeginn':
  483.                 // $searchValue = str_replace('.', '-', $searchValue);
  484.                 $arr explode('.'$searchValue);
  485.                 $searchValue implode('-'array_reverse($arr));
  486.                 break;
  487.         }
  488.         switch ($filtertype) {
  489.             case 'text':
  490.                 if (str_contains($valuestrtolower($searchValue))) {
  491.                     $ok true;
  492.                 }
  493.                 break;
  494.         }
  495.         return $ok;
  496.     }
  497.     /**
  498.      * @param Request $request
  499.      *
  500.      * @Route("/data/auftraege-meta")
  501.      *
  502.      * return Response
  503.      */
  504.     public function getAuftragTransportlaufData(Request $request): JsonResponse
  505.     {
  506.         if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  507.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  508.         }
  509.         $loginUserId $this->getLoginUserId();
  510.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  511.         $timingBegin microtime(true);
  512.         $this->log('Creating TransportlaufData (Aufträge) for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId3);
  513.         $returnData = [];
  514.         $success false;
  515.         $auftragIdsString $request->request->get('auftragIds');
  516.         $auftragIdsString trim($auftragIdsString',');
  517.         $auftragIdsArray explode(','$auftragIdsString);
  518.         if ($auftragIdsString && strlen($auftragIdsString) > 0) {
  519.             $success true;
  520.             $transportlaufDataArray $this->catJsonWebservice->fetchTransportlaufDataFromCat();
  521.             foreach ($auftragIdsArray as $key => $auftragId) {
  522.                 $auftrag $this->getAuftragById($auftragId);
  523.                 $transportlaufIndex array_search($auftrag->getAktuelleTeilstrecke(), array_column($transportlaufDataArray'teilstrecke'));
  524.                 if ($transportlaufIndex !== false) {
  525.                     $transportlaufData $transportlaufDataArray[$transportlaufIndex];
  526.                     $transportlaufData['success'] = true;
  527.                     $returnData[$auftrag->getAuftragId()] = $transportlaufData;
  528.                 } else {
  529.                     $returnData[$auftrag->getAuftragId()] = ['success' => false];
  530.                 }
  531.             }
  532.         }
  533.         $timingEnd microtime(true);
  534.         $this->log('Done creating TransportlaufData (Aufträge) (' count($auftragIdsArray) . ' Auftraege) for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  535.         // for statistics only
  536.         \Pimcore\Cache::save($loginUserId'idle-user-count-' $geschaeftspartnerId '-' $loginUserId, ['idle-user-count'], 6000false);
  537.         return $this->json([
  538.             "success" => $success,
  539.             "data" => $returnData
  540.         ]);
  541.     }
  542.     /**
  543.      * @param Request $request
  544.      *
  545.      * @Route("/data/zuege-meta")
  546.      *
  547.      * return Response
  548.      */
  549.     public function getZuegeTransportlaufData(Request $request): JsonResponse
  550.     {
  551.         if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  552.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  553.         }
  554.         $loginUserId $this->getLoginUserId();
  555.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  556.         $timingBegin microtime(true);
  557.         $this->log('Creating TransportlaufData (ZĂĽge) for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId3);
  558.         $returnData = [];
  559.         $success false;
  560.         $teilstreckeIdsString $request->request->get('teilstreckeIds');
  561.         $teilstreckeIdsString trim($teilstreckeIdsString',');
  562.         $teilstreckeIdsArray explode(','$teilstreckeIdsString);
  563.         if ($teilstreckeIdsString && strlen($teilstreckeIdsString) > 0) {
  564.             $success true;
  565.             $transportlaufDataArray $this->catJsonWebservice->fetchTransportlaufDataFromCat();
  566.             foreach ($teilstreckeIdsArray as $key => $teilstreckeId) {
  567.                 //$auftrag = $this->getAuftragById($auftragId);
  568.                 $transportlaufIndex array_search($teilstreckeIdarray_column($transportlaufDataArray'teilstrecke'));
  569.                 if ($transportlaufIndex !== false) {
  570.                     $transportlaufData $transportlaufDataArray[$transportlaufIndex];
  571.                     $transportlaufData['success'] = true;
  572.                     $returnData[$teilstreckeId] = $transportlaufData;
  573.                 } else {
  574.                     $returnData[$teilstreckeId] = ['success' => false];
  575.                 }
  576.             }
  577.         }
  578.         $timingEnd microtime(true);
  579.         $this->log('Done creating TransportlaufData (ZĂĽge) (' count($teilstreckeIdsArray) . ' ZĂĽge) for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  580.         return $this->json([
  581.             "success" => $success,
  582.             "data" => $returnData
  583.         ]);
  584.     }
  585.     /**
  586.      * @param Request $request
  587.      *
  588.      * @Route("/data/auftrag-detail")
  589.      *
  590.      * return Response
  591.      */
  592.     public function getAuftragDetailData(Request $request): JsonResponse
  593.     {
  594.         if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  595.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  596.         }
  597.         $loginUserId $this->getLoginUserId();
  598.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  599.         $auftragId $request->request->get('auftragId');
  600.         $auftragDetailData = [];
  601.         $timingBegin microtime(true);
  602.         $this->log('Creating AuftragDetail for Auftrag ' $auftragId ' for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId3);
  603.         $success false;
  604.         if (!empty($auftragId)) {
  605.             $auftrag $this->getAuftragById($auftragId);
  606.             if ($auftrag) {
  607.                 $success true;
  608.                 $auftragDetailData $this->catJsonWebservice->fetchAuftragDetailDataFromCat($auftragId);
  609.             }
  610.         }
  611.         $timingEnd microtime(true);
  612.         $this->log('Done creating AuftragDetail for Auftrag ' $auftragId ' (success = ' $success ') for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  613.         return $this->json([
  614.             "success" => $success,
  615.             "data" => $auftragDetailData
  616.         ]);
  617.     }
  618.     /**
  619.      * @param int $auftragId
  620.      *
  621.      * @return Auftrag $auftrag
  622.      */
  623.     public function getAuftragById(int $auftragId): Auftrag|bool
  624.     {
  625.         $loginUserId $this->getLoginUserId();
  626.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  627.         $cacheKey 'auftrag-' $auftragId '-' $geschaeftspartnerId '-' $loginUserId;
  628.         $auftrag \Pimcore\Cache::load($cacheKey);
  629.         if (!$auftrag) {
  630.             $this->log('Creating Auftrag Items-Object-Cache for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId.' - triggered by auftragID = '.$auftragId2);
  631.             $auftraegeArray $this->getAuftrageArrayByLoginUser();
  632.             foreach ($auftraegeArray['auftraege'] as $key => $a) {
  633.                 \Pimcore\Cache::save($a'auftrag-' $a['auftragId'] . '-' $geschaeftspartnerId '-' $loginUserId, [], 300);
  634.                 if ($auftragId == $a['auftragId']) {
  635.                     $auftrag $a;
  636.                 }
  637.             }
  638.         }
  639.         if ($auftrag) {
  640.             return $this->createAuftragObjectFromArrayData($auftrag);
  641.         } else {
  642.             return false;
  643.         }
  644.     }
  645.     /**
  646.      * @param Request $request
  647.      *
  648.      * @Route("/data/savedfilter-delete")
  649.      *
  650.      * return Response
  651.      */
  652.     public function deleteSavedfilter(Request $request): JsonResponse
  653.     {
  654.         $loginUserId $this->getLoginUserId();
  655.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  656.         $savedId $request->request->get('id');
  657.         if (is_numeric($savedId)) {
  658.             $savedFilter =  \Pimcore\Model\DataObject::getById($savedId);
  659.             if ($savedFilter->getUser_id() == $loginUserId) {
  660.                 $savedFilter->delete();
  661.             }
  662.         }
  663.         return $this->json([
  664.             "success" => true
  665.         ]);
  666.     }
  667.     /**
  668.      * @param Request $request
  669.      *
  670.      * @Route("/data/savedfilter-favorite")
  671.      *
  672.      * return Response
  673.      */
  674.     public function setFavoritefilter(Request $request): JsonResponse
  675.     {
  676.         if ($this->getHelpdeskMode() === true) {
  677.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  678.         }
  679.         $loginUserId $this->getLoginUserId();
  680.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  681.         $savedId $request->request->get('id');
  682.         $type $request->request->get('type');
  683.         if (is_numeric($savedId)) {
  684.             if ($type == "Zuege") {
  685.                 $savedFilterListing = new SavedFilterZuege\Listing();
  686.             } else {
  687.                 $savedFilterListing = new SavedFilter\Listing();
  688.             }
  689.             $savedFilterListing->setCondition("user_id = $loginUserId");
  690.             $savedFilterListing->setCondition("favorit = 1");
  691.             foreach ($savedFilterListing as $filter) {
  692.                 $filter->setFavorit(0);
  693.                 $filter->save();
  694.             }
  695.             $savedFilter =  \Pimcore\Model\DataObject::getById($savedId);
  696.             if ($savedFilter->getUser_id() == $loginUserId) {
  697.                 $savedFilter->setFavorit(1);
  698.                 $savedFilter->save();
  699.             }
  700.         }
  701.         return $this->json([
  702.             "success" => true
  703.         ]);
  704.     }
  705.     /**
  706.      * @param Request $request
  707.      *
  708.      * @Route("/data/savedfilter-deletefavorite")
  709.      *
  710.      * return Response
  711.      */
  712.     public function deleteFavoritefilter(Request $request): JsonResponse
  713.     {
  714.         if ($this->getHelpdeskMode() === true) {
  715.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  716.         }
  717.         $loginUserId $this->getLoginUserId();
  718.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  719.         $savedId $request->request->get('id');
  720.         if (is_numeric($savedId)) {
  721.             $savedFilter =  \Pimcore\Model\DataObject::getById($savedId);
  722.             if ($savedFilter->getUser_id() == $loginUserId) {
  723.                 $savedFilter->setFavorit(1);
  724.                 $savedFilter->save();
  725.             }
  726.             $savedFilter->setFavorit(0);
  727.             $savedFilter->save();
  728.         }
  729.         return $this->json([
  730.             "success" => true
  731.         ]);
  732.     }
  733.     /**
  734.      * @param Request $request
  735.      *
  736.      * @Route("/data/vorlage-save")
  737.      *
  738.      * return Response
  739.      */
  740.     public function saveVorlage(Request $request): JsonResponse
  741.     {
  742.         if ($request->getMethod() !== "POST" || $this->getHelpdeskMode() === true) {
  743.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  744.         }
  745.         $loginUserId $this->getLoginUserId();
  746.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  747.         $token bin2hex(random_bytes(16));
  748.         $now Carbon::now();
  749.         $start $request->request->get('startdate');
  750.         if ($start && $start != "") {
  751.             $start substr($start04) . "-" substr($start42) . "-" substr($start62);
  752.         }
  753.         $end $request->request->get('enddate');
  754.         if ($end && $end != "") {
  755.             $end substr($end04) . "-" substr($end42) . "-" substr($end62);
  756.         }
  757.         if ($request->request->get('type') == "Auftrag") {
  758.             if (is_numeric($request->request->get('update'))) {
  759.                 $filter =  \Pimcore\Model\DataObject::getById($request->request->get('update'));
  760.                 $isFavorit $filter->getFavorit();
  761.             } else {
  762.                 $filter = new SavedFilter;
  763.                 $isFavorit 0;
  764.             }
  765.             $parentFolderId DataObjectFolder::getByPath('/Saved Filter Auftrag/')->getId();
  766.             $filter->setParentId($parentFolderId);
  767.             $filter->setPublished(1);
  768.             $filter->setCreated($now);
  769.             $filter->setKey(\Pimcore\Model\Element\Service::getValidKey($token'object'));
  770.             $filter->setName($request->request->get('name'));
  771.             $filter->setUser_id($loginUserId);
  772.             $filter->setStartdate($start);
  773.             $filter->setEnddate($end);
  774.             $filter->setAuftragStatus($request->request->get('auftragStatus'));
  775.             $filter->setLaufende(($request->request->get('laufende') == 'true') ? 0);
  776.             $filter->setVerspaetete(($request->request->get('verspaetete') == 'true') ? 0);
  777.             $filter->setStartterminalterm($request->request->get('startterminalterm'));
  778.             $filter->setZielterminalterm($request->request->get('zielterminalterm'));
  779.             $filter->setStartterminals($request->request->get('startterminals'));
  780.             $filter->setZielterminals($request->request->get('zielterminals'));
  781.             $filter->setAbholbereitSeit($request->request->get('abholbereitSeitInt'));
  782.             $filter->setLeArt($request->request->get('leArt'));
  783.             $filter->setGefahrgut(($request->request->get('gefahrgut') == 'true') ? 0);
  784.             $filter->setAbfall(($request->request->get('abfall') == 'true') ? 0);
  785.             $filter->setZollpflicht(($request->request->get('zollpflicht') == 'true') ? 0);
  786.             $filter->setTemperaturgefuehrt(($request->request->get('temperaturgefuehrt') == 'true') ? 0);
  787.             $filter->setMeineAuftraege(($request->request->get('meineAuftraege') == 'true') ? 0);
  788.             $filter->setFavorit($isFavorit);
  789.             $filter->save();
  790.             $savedFilterListing = new SavedFilter\Listing();
  791.             $savedFilterListing->setCondition("user_id = $loginUserId");
  792.             $savedFilterListing->setOrderKey("Name");
  793.             $savedFilterListing->setOrder("asc");
  794.             $savedFilterContainer   = [];
  795.             foreach ($savedFilterListing as $filter) {
  796.                 array_push($savedFilterContainer, array(
  797.                     "id" => $filter->getId(),
  798.                     "name" => $filter->getName(),
  799.                     "startdate" => substr($filter->getStartdate(), 010),
  800.                     "enddate" =>  substr($filter->getEnddate(), 010),
  801.                     "auftragStatus" =>  $filter->getAuftragStatus(),
  802.                     "laufende" =>  $filter->getLaufende(),
  803.                     "verspaetete" =>  $filter->getVerspaetete(),
  804.                     "startterminalterm" =>  $filter->getStartterminalterm(),
  805.                     "zielterminalterm" =>  $filter->getZielterminalterm(),
  806.                     "startterminals" =>  $filter->getStartterminals(),
  807.                     "zielterminals" =>  $filter->getZielterminals(),
  808.                     "abholbereitSeit" =>  $filter->getAbholbereitSeit(),
  809.                     "leArt" =>  $filter->getLeArt(),
  810.                     "gefahrgut" =>  $filter->getGefahrgut(),
  811.                     "abfall" =>  $filter->getAbfall(),
  812.                     "zollpflicht" =>  $filter->getZollpflicht(),
  813.                     "temperaturgefuehrt" =>  $filter->getTemperaturgefuehrt(),
  814.                     "meineAuftraege" =>  $filter->getMeineAuftraege(),
  815.                     "favorit" =>  $filter->getFavorit()
  816.                 ));
  817.             }
  818.             $savedFilter json_encode($savedFilterContainerJSON_THROW_ON_ERROR512);
  819.             return $this->json([
  820.                 "success" => true,
  821.                 "data" => $savedFilter
  822.             ]);
  823.         } else { // if ($request->request->get('type') == "Zuege") {
  824.             if (is_numeric($request->request->get('update'))) {
  825.                 $filter =  \Pimcore\Model\DataObject::getById($request->request->get('update'));
  826.                 $isFavorit $filter->getFavorit();
  827.             } else {
  828.                 $filter = new SavedFilterZuege;
  829.                 $isFavorit 0;
  830.             }
  831.             $parentFolderId DataObjectFolder::getByPath('/Saved Filter ZĂĽge/')->getId();
  832.             $filter->setParentId($parentFolderId);
  833.             $filter->setPublished(1);
  834.             $filter->setCreated($now);
  835.             $filter->setKey(\Pimcore\Model\Element\Service::getValidKey($token'object'));
  836.             $filter->setName($request->request->get('name'));
  837.             $filter->setUser_id($loginUserId);
  838.             $filter->setStartdate($start);
  839.             $filter->setEnddate($end);
  840.             $filter->setStartterminalterm($request->request->get('startterminalterm'));
  841.             $filter->setZielterminalterm($request->request->get('zielterminalterm'));
  842.             $filter->setStartterminals($request->request->get('startterminals'));
  843.             $filter->setZielterminals($request->request->get('zielterminals'));
  844.             $filter->setTransportlaufStatus($request->request->get('transportlaufStatus'));
  845.             $filter->setFavorit($isFavorit);
  846.             $filter->save();
  847.             $savedFilterZuegeListing = new SavedFilterZuege\Listing();
  848.             $savedFilterZuegeListing->setCondition("user_id = $loginUserId");
  849.             $savedFilterZuegeListing->setOrderKey("Name");
  850.             $savedFilterZuegeListing->setOrder("asc");
  851.             $savedFilterZuegeContainer   = [];
  852.             foreach ($savedFilterZuegeListing as $filter) {
  853.                 array_push($savedFilterZuegeContainer, array(
  854.                     "id" => $filter->getId(),
  855.                     "name" => $filter->getName(),
  856.                     "uid" => $filter->getUser_id(),
  857.                     "startdate" => substr($filter->getStartdate(), 010),
  858.                     "enddate" =>  substr($filter->getEnddate(), 010),
  859.                     "startterminalterm" =>  $filter->getStartterminalterm(),
  860.                     "zielterminalterm" =>  $filter->getZielterminalterm(),
  861.                     "startterminals" =>  $filter->getStartterminals(),
  862.                     "zielterminals" =>  $filter->getZielterminals(),
  863.                     "transportlaufStatus" =>  $filter->getTransportlaufStatus(),
  864.                     "favorit" =>  $filter->getFavorit()
  865.                 ));
  866.             }
  867.             $savedFilterZuege json_encode($savedFilterZuegeContainerJSON_THROW_ON_ERROR512);
  868.             return $this->json([
  869.                 "success" => true,
  870.                 "data" => $savedFilterZuege
  871.             ]);
  872.         }
  873.     }
  874.     /**
  875.      * @param Request $request
  876.      *
  877.      * @Route("/data/zuege")
  878.      *
  879.      * return Response
  880.      */
  881.     public function getAuftragTeilstreckenData(Request $request): JsonResponse
  882.     {
  883.         if ($this->getHelpdeskMode() === false) {
  884.             if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  885.                 return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  886.             }
  887.         }
  888.         $limit = (int) $request->request->get('limit'50);
  889.         $offset = (int) $request->request->get('offset'0);
  890.         $loadFromKkDatabase $request->request->get('loadFromKkDatabase'false);
  891.         $transportlaufStatus $request->request->get('transportlaufStatus');
  892.         $startDate $request->request->get('startdate');
  893.         $endDate $request->request->get('enddate');
  894.         $startterminals $request->request->get('startterminals');
  895.         $zielterminals $request->request->get('zielterminals');
  896.         $columnFilters = (array) $request->request->get('columnFilters');
  897.         $laufendeZuege $request->request->get('laufendeZuege');
  898.         $verspaeteteZuege $request->request->get('verspaeteteZuege');
  899.         $loginUserId $this->getLoginUserId();
  900.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  901.         if ($loadFromKkDatabase === false || $loadFromKkDatabase === 'false') {
  902.             // fetch new Teilstrecken (Zuege)
  903.             $searchString 'geschaeftspartnerId:' $geschaeftspartnerId;
  904.             if (isset($transportlaufStatus) && $transportlaufStatus != "") {
  905.                 $s explode(','$transportlaufStatus);
  906.                 foreach ($s as $status) {
  907.                     $searchString .= ',transportlaufStatus:' intval($status);
  908.                 }
  909.             }
  910.             if (!empty($startDate)) {
  911.                 $searchString .= ',annahmeschluss>' $startDate;
  912.             }
  913.             if (!empty($endDate)) {
  914.                 $searchString .= ',annahmeschluss<' $endDate;
  915.             }
  916.             if (!empty($startterminals)) {
  917.                 $terminals explode(','$startterminals);
  918.                 foreach ($terminals as $t) {
  919.                     $searchString .= ',startTerminal:' intval($t);
  920.                 }
  921.             }
  922.             if (!empty($zielterminals)) {
  923.                 $terminals explode(','$zielterminals);
  924.                 foreach ($terminals as $t) {
  925.                     $searchString .= ',zielTerminal:' intval($t);
  926.                 }
  927.             }
  928.             $teilstreckenDataArray $this->catJsonWebservice->fetchTeilstreckeDataFromCat($searchString);
  929.             $oldZuege TeilstreckeJson::getByLoginUserId($loginUserId);
  930.             foreach ($oldZuege as $o) {
  931.                 $o->delete();
  932.             }
  933.             $teilstreckenDataFolder DataObjectFolder::getByPath('/zuege-teilstrecken/');
  934.             // $teilstreckeObject = new TeilstreckeJson();
  935.             // $teilstreckeObject->setParentId($teilstreckenDataFolder->getId());
  936.             // $teilstreckeObject->setKey('teilstreckeJson-' . $geschaeftspartnerId . '-' . $loginUserId);
  937.             // $teilstreckeObject->setLoginUserId($loginUserId);
  938.             // $teilstreckeObject->setGeschaeftspartnerId($geschaeftspartnerId);
  939.             // $teilstreckeObject->setJson(json_encode($teilstreckenDataArray));
  940.             // $teilstreckeObject->setPublished(true);
  941.             // $teilstreckeObject->save();
  942.             \Pimcore\Cache::save(json_encode($teilstreckenDataArray), 'teilstrecke-JSON-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix(), [], 25920000true); // 30 Tage
  943.         } else {
  944.             $teilstreckenDataArray $this->getTeilstreckenArrayByLoginUser();
  945.         }
  946.         // slice big Auftraege array into the chunk we need (--> offset / limit)
  947.         $countAllzuegeInDb count($teilstreckenDataArray['teilstrecken']);
  948.         $laufendeZuegeCounter 0;
  949.         $verspaeteteZuegeCounter 0;
  950.         if (isset($teilstreckenDataArray['teilstrecken'])) {
  951.             foreach ($teilstreckenDataArray['teilstrecken'] as $index => $t) {
  952.                 $teilstrecke $this->createTeilstreckeObjectFromArrayData($t);
  953.                 //am_versandbahnhof (0), fährt (1), angekommen (4) oder zwischenhalt (9)
  954.                 if ($teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == 9) {
  955.                     $laufendeZuegeCounter++;
  956.                 }
  957.                 //fährt_verspätet (2) oder steht (3)
  958.                 if ($teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == 3) {
  959.                     $verspaeteteZuegeCounter++;
  960.                 }
  961.             }
  962.         }
  963.         if ($columnFilters) {
  964.             $countAllzuegeInDb 0;
  965.             $laufendeZuegeCounter 0;
  966.             $verspaeteteZuegeCounter 0;
  967.         } else {
  968.             if (!$laufendeZuege && !$verspaeteteZuege) {
  969.                 $teilstreckenDataArray['teilstrecken'] = array_slice($teilstreckenDataArray['teilstrecken'], $offset$limit);
  970.             }
  971.         }
  972.         $timingBegin microtime(true);
  973.         $returnData                 = [];
  974.         $returnData['teilstrecken'] = [];
  975.         $createTeilstreckenCounter 0;
  976.         $offsetCounter 0;
  977.         if (isset($teilstreckenDataArray['teilstrecken'])) {
  978.             $this->log('Creating Teilstrecken for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId3);
  979.             foreach ($teilstreckenDataArray['teilstrecken'] as $key => $t) {
  980.                 $teilstrecke $this->createTeilstreckeObjectFromArrayData($t);
  981.                 $laufendeZuegeFlag false;
  982.                 $verspaeteteZuegeFlag false;
  983.                 $ok true;
  984.                 //am_versandbahnhof (0), fährt (1), angekommen (4) oder zwischenhalt (9)
  985.                 if ($teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == 9) {
  986.                     $laufendeZuegeFlag true;
  987.                 }
  988.                 if ($laufendeZuege) {
  989.                     if (!$laufendeZuegeFlag) {
  990.                         $ok false;
  991.                     }
  992.                 }
  993.                 //fährt_verspätet (2) oder steht (3)
  994.                 if ($teilstrecke->getTransportlaufStatus() == || $teilstrecke->getTransportlaufStatus() == 3) {
  995.                     $verspaeteteZuegeFlag true;
  996.                 }
  997.                 if ($verspaeteteZuege) {
  998.                     if (!$verspaeteteZuegeFlag) {
  999.                         $ok false;
  1000.                     }
  1001.                 }
  1002.                 if ($columnFilters) {
  1003.                     $ok $this->checkColumnFilters($teilstrecke$columnFilters);
  1004.                     if ($ok) {
  1005.                         $countAllzuegeInDb++;
  1006.                         if ($laufendeZuegeFlag) {
  1007.                             $laufendeZuegeCounter++;
  1008.                         }
  1009.                         if ($laufendeZuege) {
  1010.                             if (!$laufendeZuegeFlag) {
  1011.                                 $addAuftrag false;
  1012.                             }
  1013.                         }
  1014.                         if ($verspaeteteZuegeFlag) {
  1015.                             $verspaeteteZuegeCounter++;
  1016.                         }
  1017.                         if ($verspaeteteZuege) {
  1018.                             if (!$verspaeteteZuegeFlag) {
  1019.                                 $addAuftrag false;
  1020.                             }
  1021.                         }
  1022.                     }
  1023.                     if ($ok == true && $offset $offsetCounter) {
  1024.                         $offsetCounter++;
  1025.                         $ok false;
  1026.                         continue; // offset to small --> go to next one...
  1027.                     }
  1028.                     if ($createTeilstreckenCounter >= $limit) {
  1029.                         $ok false;
  1030.                         continue; // we're already above the limit --> but we have to loop until the end, because we need the total count for $countAllAuftraegeInDb
  1031.                     }
  1032.                 }
  1033.                 if ($ok) {
  1034.                     $returnData['teilstrecken'][$teilstrecke->getTeilstreckeId()] = array(
  1035.                         'maxAnzahlErreicht' => $teilstrecke->getMaxAnzahlErreicht(),
  1036.                         'geschaeftspartnerId' => $teilstrecke->getGeschaeftspartnerId(),
  1037.                         'annahmeschluss' => $teilstrecke->getAnnahmeschluss(),
  1038.                         'abholbeginn' => $teilstrecke->getAbholbeginn(),
  1039.                         'versandterminal_code' => $teilstrecke->getStartTerminal(),
  1040.                         'empfangsterminal_code' => $teilstrecke->getZielTerminal(),
  1041.                         'zugnummer' => $teilstrecke->getZugnummer(),
  1042.                         'erwarteteAbweichung' => $teilstrecke->getErwarteteAbweichung(),
  1043.                         'transportlaufstatus_code' => $teilstrecke->getTransportlaufStatus(),
  1044.                         'anzAuftraegeAufZug' => $teilstrecke->getAnzAuftraegeAufZug(),
  1045.                         'auftraegeAufZug' => $teilstrecke->getAuftraegeAufZug(),
  1046.                         'sondertransportZoll' => $teilstrecke->getSondertransportZoll(),
  1047.                         'sondertransportGefahrgut' => $teilstrecke->getSondertransportGefahrgut(),
  1048.                         'sondertransportAbfall' => $teilstrecke->getSondertransportAbfall(),
  1049.                         'sondertransportTemperaturgefuehrt' => $teilstrecke->getSondertransportTemperaturgefuehrt(),
  1050.                         // KK only data
  1051.                         'versandterminal' => $teilstrecke->getStartTerminalString(),
  1052.                         'empfangsterminal' => $teilstrecke->getZielTerminalString(),
  1053.                         'transportlaufstatus' => $teilstrecke->getTransportlaufStatusString(),
  1054.                         'baustellen' => unserialize($teilstrecke->getBaustellen())
  1055.                     );
  1056.                     $createTeilstreckenCounter++;
  1057.                 }
  1058.             }
  1059.         }
  1060.         $returnData['countAllZuegeInDb']            = $countAllzuegeInDb;
  1061.         $returnData['laufendeZuegeCounter']         = $laufendeZuegeCounter;
  1062.         $returnData['verspaeteteZuegeCounter']      = $verspaeteteZuegeCounter;
  1063.         $returnData['isLaufendeZuege']              = $laufendeZuege;
  1064.         $returnData['isVerspaeteteZuege']           = $verspaeteteZuege;
  1065.         $returnData['maxAnzahlErreicht']            = $teilstreckenDataArray['maxAnzahlErreicht'];
  1066.         $timingEnd microtime(true);
  1067.         $this->log('Done creating ' $createTeilstreckenCounter ' Teilstrecken for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  1068.         return $this->json([
  1069.             "success" => true,
  1070.             "data" => $returnData
  1071.         ]);
  1072.     }
  1073.     /**
  1074.      * @return array
  1075.      */
  1076.     public function getTeilstreckenArrayByLoginUser()
  1077.     {
  1078.         $loginUserId $this->getLoginUserId();
  1079.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  1080.         $timingBegin microtime(true);
  1081.         $this->log('Reading Teilstrecken for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' from KK DB'3);
  1082.         // $teilstreckeJson = new TeilstreckeJson\Listing();
  1083.         // $teilstreckeJson->setCondition('loginUserId = ? ', [$loginUserId]);
  1084.         // foreach ($teilstreckeJson as $key => $teilstrecke) {
  1085.         //     $teilstreckenArray =   $teilstrecke->getJson();
  1086.         //     $teilstreckenArray = (array) json_decode($teilstreckenArray, true);
  1087.         // }
  1088.         $teilstreckeJson \Pimcore\Cache::load('teilstrecke-JSON-' $geschaeftspartnerId '-' $loginUserId $this->getHelpdeskSuffix());
  1089.         $teilstreckenArray = (array) json_decode($teilstreckeJsontrue);
  1090.         $timingEnd microtime(true);
  1091.         $this->log('Done reading ' count($teilstreckenArray['teilstrecken']) . ' Teilstrecken for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' from KK DB (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  1092.         return $teilstreckenArray;
  1093.     }
  1094.     /**
  1095.      * @param array $t
  1096.      *
  1097.      * @return Teilstrecke
  1098.      */
  1099.     public function createTeilstreckeObjectFromArrayData(array $t)
  1100.     {
  1101.         $teilstrecke = new Teilstrecke();
  1102.         $teilstrecke->setTeilstreckeId($t['teilstreckeId']);
  1103.         $teilstrecke->setAnnahmeschluss(!empty($t['annahmeschluss']) ? Carbon::createFromTimeString($t['annahmeschluss'], 'Europe/Berlin') : null);
  1104.         $teilstrecke->setAbholbeginn(!empty($t['abholbeginn']) ? Carbon::createFromTimeString($t['abholbeginn'], 'Europe/Berlin') : null);
  1105.         $teilstrecke->setStartTerminal($t['startTerminal']);
  1106.         $teilstrecke->setZielTerminal($t['zielTerminal']);
  1107.         $teilstrecke->setZugnummer($t['zugnummer']);
  1108.         $teilstrecke->setErwarteteAbweichung($t['erwarteteAbweichung']);
  1109.         $teilstrecke->setTransportlaufStatus($t['transportlaufStatus']);
  1110.         // $teilstrecke->setAnzAuftraegeAufZug($t['anzAuftraegeAufZug']);
  1111.         if (!empty($t['anzAuftraegeAufZug'])) {
  1112.             $teilstrecke->setAnzAuftraegeAufZug($t['anzAuftraegeAufZug']);
  1113.         } else if (!empty($t['auftraegeAufZug'])) {
  1114.             $teilstrecke->setAnzAuftraegeAufZug(count($t['auftraegeAufZug']));
  1115.         $teilstrecke->setAuftraegeAufZug(implode(','$t['auftraegeAufZug']));
  1116.         } else {
  1117.             $teilstrecke->setAnzAuftraegeAufZug(0);
  1118.         }
  1119.         $teilstrecke->setAuftraegeAufZug(implode(','$t['auftraegeAufZug']));
  1120.         $teilstrecke->setSondertransportZoll($t['sondertransportZoll']);
  1121.         $teilstrecke->setSondertransportGefahrgut($t['sondertransportGefahrgut']);
  1122.         $teilstrecke->setSondertransportAbfall($t['sondertransportAbfall']);
  1123.         $teilstrecke->setSondertransportTemperaturgefuehrt($t['sondertransportTemperaturgefuehrt']);
  1124.         // KK only data
  1125.         $teilstrecke->setStartTerminalString($this->getStartterminalNameById($t['startTerminal']));
  1126.         $teilstrecke->setZielTerminalString($this->getZielterminalNameById($t['zielTerminal']));
  1127.         $teilstrecke->setTransportlaufStatusString($this->getTransportlaufStatusById($t['transportlaufStatus']));
  1128.         $teilstrecke->setBaustellen(serialize($t['baustellen']));
  1129.         $teilstrecke->setPublished(true);
  1130.         return $teilstrecke;
  1131.     }
  1132.     /**
  1133.      * @param int $id
  1134.      *
  1135.      * @return string
  1136.      */
  1137.     public function getStartterminalNameById($id)
  1138.     {
  1139.         if ($id === null) {
  1140.             return null;
  1141.         }
  1142.         $startterminal '';
  1143.         try {
  1144.             $terminal Bahnhof::getByKv_id($id10);
  1145.             if ($terminal) {
  1146.                 $startterminal $terminal->getLangname();
  1147.             } else {
  1148.                 $startterminal 'n/a ('.$id.')';
  1149.             }
  1150.         } catch (\Exception $e) {
  1151.             $startterminal 'n/a ('.$id.')';
  1152.         }
  1153.         return $startterminal;
  1154.     }
  1155.     /**
  1156.      * @param int $id
  1157.      *
  1158.      * @return string
  1159.      */
  1160.     public function getZielterminalNameById($id)
  1161.     {
  1162.         if ($id === null) {
  1163.             return null;
  1164.         }
  1165.         $zielterminal '';
  1166.         try {
  1167.             $terminal Bahnhof::getByKv_id($id10);
  1168.             if ($terminal) {
  1169.                 $zielterminal $terminal->getLangname();
  1170.             } else {
  1171.                 $zielterminal 'n/a ('.$id.')';
  1172.             }
  1173.         } catch (\Exception $e) {
  1174.             $zielterminal 'n/a ('.$id.')';
  1175.         }
  1176.         return $zielterminal;
  1177.     }
  1178.     /**
  1179.      * @param int $id
  1180.      *
  1181.      * @return string
  1182.      */
  1183.     public function getLadeeinheitById($id)
  1184.     {
  1185.         if ($id === null) {
  1186.             return null;
  1187.         }
  1188.         $ladeeinheit '';
  1189.         try {
  1190.             $le LadeeinheitArt::getByKv_id($id10);
  1191.             if ($le) {
  1192.                 $ladeeinheit $le->getCode();
  1193.             } else {
  1194.                 $ladeeinheit 'n/a ('.$id.')';
  1195.             }
  1196.         } catch (\Exception $e) {
  1197.             $ladeeinheit 'n/a ('.$id.')';
  1198.         }
  1199.         return $ladeeinheit;
  1200.     }
  1201.     /**
  1202.      * @param int $id
  1203.      *
  1204.      * @return string
  1205.      */
  1206.     public function getAuftragStatusById($id)
  1207.     {
  1208.         if ($id === null) {
  1209.             return null;
  1210.         }
  1211.         $status '';
  1212.         try {
  1213.             $s AuftragStatus::getByKv_id($id10);
  1214.             if ($s) {
  1215.                 $status $s->getName();
  1216.             } else {
  1217.                 $status 'n/a ('.$id.')';
  1218.             }
  1219.         } catch (\Exception $e) {
  1220.             $status 'n/a ('.$id.')';
  1221.         }
  1222.         return $status;
  1223.     }
  1224.     /**
  1225.      * @param int $id
  1226.      *
  1227.      * @return string
  1228.      */
  1229.     public function getTransportlaufStatusById($id)
  1230.     {
  1231.         if ($id === null) {
  1232.             return null;
  1233.         }
  1234.         $status '';
  1235.         try {
  1236.             $s TransportlaufStatus::getByKv_id($id10);
  1237.             if ($s) {
  1238.                 $status $s->getName();
  1239.             } else {
  1240.                 $status 'n/a ('.$id.')';
  1241.             }
  1242.         } catch (\Exception $e) {
  1243.             $status 'n/a ('.$id.')';
  1244.         }
  1245.         return $status;
  1246.     }
  1247.     /**
  1248.      * @param Request $request
  1249.      *
  1250.      * @Route("/data/annahmeschluss-confirm")
  1251.      *
  1252.      * return Response
  1253.      */
  1254.     public function confirmAnnahmeschlussGelesen(Request $request): JsonResponse
  1255.     {
  1256.         $loginUserId $this->getLoginUserId();
  1257.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  1258.         $auftragId $request->request->get('auftragId');
  1259.         $auftrag $this->getAuftragById($auftragId);
  1260.         $this->log('confirmAnnahmeschlussGelesen for Auftrag ' $auftragId ' for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId2);
  1261.         $success false;
  1262.         if ($auftrag) {
  1263.             $success $this->catJsonWebservice->confirmAnnahmeschlussGelesen($auftragId$geschaeftspartnerId$loginUserId);
  1264.         }
  1265.         return $this->json([
  1266.             "success" => $success
  1267.         ]);
  1268.     }
  1269.     /**
  1270.      * @param int $id
  1271.      *
  1272.      * @return string
  1273.      */
  1274.     public function getLieferartById($id$translator)
  1275.     {
  1276.         $string "";
  1277.         switch ($id) {
  1278.             case 0:
  1279.                 $string  $translator->trans("STRASSE");
  1280.                 break;
  1281.             case 1:
  1282.                 $string  $translator->trans("SCHIENE");
  1283.                 break;
  1284.             case 2:
  1285.                 $string  $translator->trans("FAEHRE");
  1286.                 break;
  1287.             case 3:
  1288.                 $string  $translator->trans("SCHIFF");
  1289.                 break;
  1290.             case 4:
  1291.                 $string  $translator->trans("DEPOT");
  1292.                 break;
  1293.             case 5:
  1294.                 $string  $translator->trans("KEINE_LIEFERANGABEN");
  1295.                 break;
  1296.             case 6:
  1297.                 $string  $translator->trans("VONAUFPLATZ");
  1298.                 break;
  1299.             case 7:
  1300.                 $string  $translator->trans("UNKNOWN");
  1301.                 break;
  1302.             default:
  1303.                 $string  $translator->trans("UNKNOWN");
  1304.                 break;
  1305.         }
  1306.         return $string;
  1307.     }
  1308.     /**
  1309.      * @param Request $request
  1310.      *
  1311.      * @Route("/data/auftrag-detail-validation")
  1312.      *
  1313.      * return Response
  1314.      */
  1315.     public function getAuftragDetailValidationData(Request $request): JsonResponse
  1316.     {
  1317.         if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  1318.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  1319.         }
  1320.         $loginUserId $this->getLoginUserId();
  1321.         $geschaeftspartnerId $this->getGeschaeftspartnerId();
  1322.         $auftragId $request->request->get('auftragId');
  1323.         $auftragDetailData = [];
  1324.         $timingBegin microtime(true);
  1325.         $this->log('Creating AuftragDetailValidation for Auftrag ' $auftragId ' for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId3);
  1326.         if (!empty($auftragId)) {
  1327.             $success false;
  1328.             $auftrag $this->getAuftragById($auftragId);
  1329.             if ($auftrag) {
  1330.                 $success true;
  1331.                 $auftragDetailData $this->catJsonWebservice->fetchAuftragDetailValidationDataFromCat($auftragId);
  1332.             }
  1333.         }
  1334.         $timingEnd microtime(true);
  1335.         $this->log('Done creating AuftragDetailValidation for Auftrag ' $auftragId ' (success = ' $success ') for geschaeftspartnerId ' $geschaeftspartnerId ', loginUserId ' $loginUserId ' (' number_format(($timingEnd $timingBegin), 3) . 's)'2);
  1336.         return $this->json([
  1337.             "success" => $success,
  1338.             "data" => $auftragDetailData
  1339.         ]);
  1340.     }
  1341.     /**
  1342.      * @param Request $request
  1343.      *
  1344.      * @Route("/data/statistic")
  1345.      *
  1346.      * return Response
  1347.      */
  1348.     public function getStatistic(Request $request): JsonResponse
  1349.     {
  1350.         $userSessionData $this->getUserSessionData();
  1351.         $emailAddress $userSessionData['data']['LOGIN'];
  1352.         if (strstr($emailAddress'krankikom.de') === false) {
  1353.             die();
  1354.         }
  1355.         $start DateTime::createFromImmutable(new DateTimeImmutable($request->get('start') ?? '-6 hour'));
  1356.         $end DateTime::createFromImmutable(new DateTimeImmutable($request->get('end') ?? 'now'));
  1357.         return $this->json([
  1358.             "success" => true,
  1359.             "data" => [
  1360.                 'userCount' => $this->userCount($start$end),
  1361.             ]
  1362.         ]);
  1363.     }
  1364.     function getLogs($file, ?DateTime $start null, ?DateTime $end null)
  1365.     {
  1366.         $log fopen($file'r');
  1367.         $lines = [];
  1368.         $datePattern '/^\[(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}\+\d{2}:\d{2})\]/';
  1369.         while (!feof($log)) {
  1370.             $line fgets($log);
  1371.             if (str_contains($line'auftrag-data-load')) {
  1372.                 preg_match($datePattern$line$matches);
  1373.                 if (isset($matches[1])) {
  1374.                     $dateString $matches[1];
  1375.                     $dateTime DateTime::createFromImmutable(new DateTimeImmutable($dateString));
  1376.                     if (preg_match('/{.*}/'$line$json)) {
  1377.                         $json_object json_decode($json[0], true);
  1378.                     }
  1379.                     if ($start !== null && $end !== null) {
  1380.                         if ($dateTime >= $start && $dateTime <= $end) {
  1381.                             $lines[] = [
  1382.                                 'timestamp' => $dateTime->format("Y-m-d H:i:s"),
  1383.                                 'data' => $json_object
  1384.                             ];
  1385.                         }
  1386.                     } else {
  1387.                         $lines[] = [
  1388.                             'timestamp' => $dateTime->format("Y-m-d H:i:s"),
  1389.                             'data' => $json_object
  1390.                         ];
  1391.                     }
  1392.                 }
  1393.             }
  1394.         }
  1395.         return $lines;
  1396.     }
  1397.     private function userCount(?DateTime $start null, ?DateTime $end null$format 'Y-m-d H:i') {
  1398.         $data = [];
  1399.         $empty = [];
  1400.         $interval DateInterval::createFromDateString('1 min');
  1401.         $diff $start->diff($end);
  1402.         if ($diff->format('%a') > || $diff->format('%H') > 12) {
  1403.             $format 'Y-m-d H:00';
  1404.             $interval DateInterval::createFromDateString('1 hour');
  1405.         }
  1406.         $period = new DatePeriod($start$interval$end);
  1407.         foreach ($period as $timestamp) {
  1408.             $empty[$timestamp->format($format)] = [
  1409.                 'users' => [],
  1410.                 'count' => 0
  1411.             ];
  1412.         }
  1413.         $entries $this->getLogs('/var/www/html/var/log/kv_usage_log.log'$start$end);
  1414.         foreach($entries as $entry) {
  1415.         $timestamp DateTime::createFromImmutable(new DateTimeImmutable($entry['timestamp']))->setTimezone(new DateTimeZone('Europe/Berlin'))->format($format);
  1416.             // Nothing saved for current timestamp
  1417.             if(!isset($data[$timestamp]['users'])) {
  1418.               $data[$timestamp]['users'][] = $entry['data']['loginUserId'];
  1419.             } else if(!in_array($entry['data']['loginUserId'], $data[$timestamp]['users'])) {
  1420.               // User is not already saved
  1421.               $data[$timestamp]['users'][] = $entry['data']['loginUserId'];
  1422.             }
  1423.         }
  1424.         $data array_map(function ($entry) {
  1425.             $entry['count'] = count($entry['users']);
  1426.             return $entry;
  1427.         }, $data);
  1428.         return array_merge($empty$data);
  1429.     }
  1430.     /**
  1431.      * @param Request $request
  1432.      *
  1433.      * @Route("/data/update-csv")
  1434.      *
  1435.      * return Response
  1436.      */
  1437.     public function updateGeschaeftspartnerCsv(Request $request): JsonResponse
  1438.     {
  1439.         if ($this->checkUserLoggedIn($request) === false) {
  1440.             return new JsonResponse(['success' => false'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  1441.         }
  1442.         $this->catJsonWebservice->fetchGeschaeftspartnerCsvFromCat();
  1443.         return $this->json([
  1444.             "success" => true
  1445.         ]);
  1446.     }
  1447.     // /**
  1448.     //  * @param Request $request
  1449.     //  *
  1450.     //  * @Route("/data/auftrag-filter-meta")
  1451.     //  *
  1452.     //  * return Response
  1453.     //  */
  1454.     // public function loadAuftragFilterMetaData(Request $request): JsonResponse
  1455.     // {
  1456.     //     if ($this->getHelpdeskMode() === false) {
  1457.     //         if ($request->getMethod() !== "POST" || $this->checkUserLoggedIn($request) === false) {
  1458.     //             return new JsonResponse(['success' => false, 'message' => Response::HTTP_METHOD_NOT_ALLOWED]);
  1459.     //         }
  1460.     //     }
  1461.     //     $unvollstaendigeAuftraegeCounter = 0;
  1462.     //     $geaenderterAnnahmeschlussCounter = 0;
  1463.     //     $abweichenderAbholbeginnCounter = 0;
  1464.     //     $abholbereitCounter = 0;
  1465.     //     $auftraegeArray = $this->getAuftrageArrayByLoginUser();
  1466.     //     foreach ($auftraegeArray['auftraege'] as $index => $a) {
  1467.     //         $auftrag = $this->createAuftragObjectFromArrayData($a);
  1468.     //         if ($auftrag->getDatenVollstaendig() === false) { //UNVOLLSTĂ„NDIG JA/NEIN
  1469.     //             $unvollstaendigeAuftraegeCounter++;
  1470.     //         }
  1471.     //         if ($auftrag->getAbweichungGeplanteAnlieferungAnnahmeschluss() || !$auftrag->getAbweichungAnnahmeschlussGelesen()) { //geaenderterAnnahmeschluss JA/NEIN
  1472.     //             $geaenderterAnnahmeschlussCounter++;
  1473.     //         }
  1474.     //         if ($auftrag->getAbweichungAbholbeginn()) { //abweichenderAbholbeginn JA/NEIN
  1475.     //             $abweichenderAbholbeginnCounter++;
  1476.     //         }
  1477.     //         if ($auftrag->getAuftragStatus() == 7) {
  1478.     //             $abholbereitCounter++;
  1479.     //         }
  1480.     //     }
  1481.     //     return $this->json([
  1482.     //         'success' => true,
  1483.     //         'unvollstaendigeAuftraegeCounter' => $unvollstaendigeAuftraegeCounter,
  1484.     //         'geaenderterAnnahmeschlussCounter' => $geaenderterAnnahmeschlussCounter,
  1485.     //         'abweichenderAbholbeginnCounter' => $abweichenderAbholbeginnCounter,
  1486.     //         'abholbereitCounter' => $abholbereitCounter,
  1487.     //         'allCounter' => count($auftraegeArray['auftraege']),
  1488.     //         'maxAnzahlErreicht' => $auftraegeArray['maxAnzahlErreicht']
  1489.     //     ]);
  1490.     // }
  1491. }