src/Controller/MainController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Accessories;
  4. use App\Entity\Basket;
  5. use App\Entity\Geraete;
  6. use App\Entity\Marke;
  7. use App\Entity\Order;
  8. use App\Entity\Preise;
  9. use App\Entity\Reparaturen;
  10. use App\Entity\Service;
  11. use App\Entity\Settings;
  12. use ChristophSchaeffer\Dhl\BusinessShipping\Credentials\ShippingClientCredentials;
  13. use ChristophSchaeffer\Dhl\BusinessShipping\Credentials\TrackingClientCredentials;
  14. use ChristophSchaeffer\Dhl\BusinessShipping\MultiClient;
  15. use Symfony\Component\HttpFoundation\Cookie;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\Mailer\MailerInterface;
  22. use Symfony\Component\Mime\Email;
  23. class MainController extends AbstractController
  24. {
  25.     #Main
  26.     /**
  27.      * @Route("/", name="index")
  28.      */
  29.     public function index()
  30.     {
  31.         $settings $this->getDoctrine()->getRepository(Settings::class)->find(1);
  32.         $index 'index/index.html.twig';
  33.         $maintaince 'index/maintaince.html.twig';
  34.         $template null;
  35.         $dev_mode false;
  36.         $google_reviews null;
  37.         
  38.         $reviews = [
  39.             [
  40.                 'rating' => "5",
  41.                 'authorName' => 'Bernhard Bernuns',
  42.                 'relativeTimeDescription' => 'vor 3 Tagen',
  43.                 'text' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam'
  44.             ],
  45.             [
  46.                 'rating' => "5",
  47.                 'authorName' => 'kevin kevin',
  48.                 'relativeTimeDescription' => 'vor 3 Tagen',
  49.                 'text' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam'
  50.             ],
  51.             [
  52.                 'rating' => "5",
  53.                 'authorName' => 'asnd jasduern',
  54.                 'relativeTimeDescription' => 'vor 3 Tagen',
  55.                 'text' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam'
  56.             ],
  57.             [
  58.                 'rating' => "5",
  59.                 'authorName' => 'Herr Bonn',
  60.                 'relativeTimeDescription' => 'vor 3 Tagen',
  61.                 'text' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam'
  62.             ],
  63.             [
  64.                 'rating' => "5",
  65.                 'authorName' => 'GamerXXX99__',
  66.                 'relativeTimeDescription' => 'vor 3 Tagen',
  67.                 'text' => 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam'
  68.             ],
  69.         ];
  70.         
  71.         if($settings->isMaintaince()){
  72.             $template $maintaince;
  73.         } else {
  74.             $template $index;
  75.         }
  76.         return $this->render($template, [
  77.             'reviews' => $dev_mode $reviews $google_reviews
  78.         ]);
  79.     }
  80.     /**
  81.      * @Route("/blog", name="blog")
  82.      */
  83.     public function blog()
  84.     {
  85.         return $this->render('blog/blog.html.twig', [
  86.         ]);
  87.     }
  88.     /**
  89.      * @Route("/api/instagram/likes", name="instagram_likes")
  90.      */
  91.     public function getLikes(): JsonResponse
  92.     {
  93.         // Hier holst du die Likes von Instagram über die API
  94.         return new JsonResponse(['likes' => $likes]);
  95.     }
  96.     #Legal
  97.     /**
  98.      * @Route("/impressum", name="impressum")
  99.      */
  100.     public function impressum()
  101.     {
  102.         return $this->render('legal/impressum.html.twig', [
  103.         ]);
  104.     }
  105.     /**
  106.      * @Route("/datenschutz", name="datenschutz")
  107.      */
  108.     public function datenschutz()
  109.     {
  110.         return $this->render('legal/datenschutz.html.twig', [
  111.         ]);
  112.     }
  113.     /**
  114.      * @Route("/agb", name="agb")
  115.      */
  116.     public function agb()
  117.     {
  118.         return $this->render('legal/agb.html.twig', [
  119.         ]);
  120.     }
  121.     /**
  122.      * @Route("/widerruf", name="widerruf")
  123.      */
  124.     public function widerruf()
  125.     {
  126.         return $this->render('legal/widerrufsbelehrung.html.twig', [
  127.         ]);
  128.     }
  129.     #Sites
  130.     /**
  131.      * @Route("/kontakt", name="kontakt")
  132.      */
  133.     public function kontakt()
  134.     {
  135.         return $this->render('sites/kontakt.html.twig', [
  136.         ]);
  137.     }
  138.     /**
  139.      * @Route("/ueber-uns", name="ueber-uns")
  140.      */
  141.     public function ueberUns()
  142.     {
  143.         return $this->render('sites/ueber-uns.html.twig', [
  144.         ]);
  145.     }
  146.     /**
  147.      * @Route("/ankauf", name="ankauf")
  148.      */
  149.     public function ankauf()
  150.     {
  151.         return $this->render('sites/ankauf.html.twig', [
  152.         ]);
  153.     }
  154.     /**
  155.      * @Route("/einsenden", name="einsenden")
  156.      */
  157.     public function einsenden()
  158.     {
  159.         return $this->render('sites/einsenden.html.twig', [
  160.         ]);
  161.     }
  162.     #Reparatur
  163.     /**
  164.      * @Route("/reparieren", name="reparieren")
  165.      */
  166.     public function reparieren()
  167.     {
  168.         return $this->render('sites/reparieren/reparieren.html.twig', [
  169.         ]);
  170.     }
  171.     /**
  172.      * @Route("/reparieren/handy", name="handy")
  173.      */
  174.     public function handy()
  175.     {
  176.         $marke $this->getDoctrine()->getRepository(Marke::class)->findAll();
  177.         $settings $this->getDoctrine()->getRepository(Settings::class)->find(1);
  178.         return $this->render('sites/reparieren/handy.html.twig', [
  179.             'marke' => $marke,
  180.             'maintaince' => $settings->isPricemaintaince()
  181.         ]);
  182.     }
  183.     /**
  184.      * @Route("/reparieren/handy/{marke}", name="handy-marke")
  185.      */
  186.     public function handyMarke($marke)
  187.     {
  188.         $markeEntity $this->getDoctrine()->getRepository(Marke::class)->findOneBy(['marke' => $marke]);
  189.         $geraete $this->getDoctrine()->getRepository(Geraete::class)->findBy(['deviceType' => 'handy' 'marke' => $markeEntity->getId()],['name' => 'DESC']);
  190.         $sortByNumberInName = function ($a$b) {
  191.             preg_match('/\d+/'$a->getName(), $aNumbers);
  192.             preg_match('/\d+/'$b->getName(), $bNumbers);
  193.             
  194.             $aNumber = isset($aNumbers[0]) ? intval($aNumbers[0]) : PHP_INT_MAX;
  195.             $bNumber = isset($bNumbers[0]) ? intval($bNumbers[0]) : PHP_INT_MAX;
  196.             
  197.             return $aNumber $bNumber;
  198.         };
  199.         
  200.         // Benutzerdefinierte Sortierfunktion für die Sortierung nach dem ersten Buchstaben und dann nach Zahlen
  201.         $sortByFirstLetterThenNumber = function ($a$b) {
  202.             $firstLetterComparison strcmp(substr($a->getName(), 01), substr($b->getName(), 01));
  203.             if ($firstLetterComparison == 0) {
  204.                 preg_match('/\d+/'$a->getName(), $aNumbers);
  205.                 preg_match('/\d+/'$b->getName(), $bNumbers);
  206.                 
  207.                 $aNumber = isset($aNumbers[0]) ? intval($aNumbers[0]) : PHP_INT_MAX;
  208.                 $bNumber = isset($bNumbers[0]) ? intval($bNumbers[0]) : PHP_INT_MAX;
  209.                 
  210.                 return $aNumber $bNumber;
  211.             }
  212.             return $firstLetterComparison;
  213.         };
  214.     // Verwenden Sie die entsprechende Sortierfunktion basierend auf der Marke
  215.     if ($markeEntity->getMarke() == 'Apple') {
  216.         usort($geraete, function ($a$b) {
  217.             // Überprüfe, ob die Namen Zahlen enthalten
  218.             $aContainsNumber preg_match('/\d/'$a->getName());
  219.             $bContainsNumber preg_match('/\d/'$b->getName());
  220.     
  221.             // Wenn beide Namen Zahlen enthalten oder beide keine Zahlen enthalten, vergleiche sie normal
  222.             if ($aContainsNumber && $bContainsNumber) {
  223.                 // Extrahiere die Zahlen aus den Namen
  224.                 preg_match('/\d+/'$a->getName(), $aNumbers);
  225.                 preg_match('/\d+/'$b->getName(), $bNumbers);
  226.     
  227.                 // Vergleiche die extrahierten Zahlen, um absteigend zu sortieren (höchste zuerst)
  228.                 return intval($bNumbers[0]) - intval($aNumbers[0]);
  229.             }
  230.     
  231.             // Wenn nur einer der Namen Zahlen enthält, sortiere diesen zuerst
  232.             return $aContainsNumber ? -1;
  233.         });
  234.     } else {
  235.         usort($geraete, function ($a$b) {
  236.             // Extrahiere Buchstaben und Zahlen aus den Namen
  237.             preg_match('/[a-zA-Z]+/'$a->getName(), $aLetters);
  238.             preg_match('/[a-zA-Z]+/'$b->getName(), $bLetters);
  239.             preg_match('/\d+/'$a->getName(), $aNumbers);
  240.             preg_match('/\d+/'$b->getName(), $bNumbers);
  241.     
  242.             // Vergleiche zuerst die Buchstaben im Namen
  243.             $lettersComparison strcmp($aLetters[0], $bLetters[0]);
  244.             if ($lettersComparison !== 0) {
  245.                 return $lettersComparison;
  246.             }
  247.     
  248.             // Wenn die Buchstaben im Namen gleich sind, vergleiche die Zahlen im Namen
  249.             // Wenn einer der Namen keine Zahlen enthält, wird er zuerst sortiert
  250.             if (isset($aNumbers[0]) && isset($bNumbers[0])) {
  251.                 return intval($aNumbers[0]) - intval($bNumbers[0]);
  252.             } elseif (isset($aNumbers[0])) {
  253.                 return -1;
  254.             } elseif (isset($bNumbers[0])) {
  255.                 return 1;
  256.             }
  257.     
  258.             // Wenn beide Namen keine Zahlen enthalten, sind sie gleich
  259.             return 0;
  260.         });
  261.     }
  262.         return $this->render('sites/reparieren/marke.html.twig', [
  263.             'geraete' => $geraete,
  264.         ]);
  265.     }
  266.     /**
  267.      * @Route("/reparieren/tablet/{marke}", name="tablet-marke")
  268.      */
  269.     public function tabletMarke($marke)
  270.     {
  271.         $markeEntity $this->getDoctrine()->getRepository(Marke::class)->findOneBy(['marke' => $marke]);
  272.         $geraete $this->getDoctrine()->getRepository(Geraete::class)->findBy(['deviceType' => 'tablet' 'marke' => $markeEntity->getId()],['positionTable'=>'ASC']);
  273.         return $this->render('sites/reparieren/markeTablet.html.twig', [
  274.             'geraete' => $geraete,
  275.         ]);
  276.     }
  277.     /**
  278.      * @Route("/reparatur/{id}", name="repairdevice")
  279.      */
  280.     public function repairdevice($id)
  281.     {
  282.         $geraete $this->getDoctrine()->getRepository(Geraete::class)->find($id);
  283.         $accessoires $this->getDoctrine()->getRepository(Accessories::class)->findAll();
  284.         $service $this->getDoctrine()->getRepository(Service::class)->findAll();
  285.         $preise $this->getDoctrine()->getRepository(Preise::class)->findBy(['Geraete' => $id]);
  286.         return $this->render('sites/reparieren/repair.html.twig', [
  287.             'geraet' => $geraete,
  288.             'accessoires' => $accessoires,
  289.             'preise' => $preise,
  290.             'services' => $service,
  291.         ]);
  292.     }
  293.     /**
  294.      * @Route("/reparieren/tablet", name="tablet")
  295.      */
  296.     public function tablet()
  297.     {
  298.         $marke $this->getDoctrine()->getRepository(Marke::class)->findAll();
  299.         $settings $this->getDoctrine()->getRepository(Settings::class)->find(1);
  300.         return $this->render('sites/reparieren/tablet.html.twig', [
  301.             'marke' => $marke,
  302.             'maintaince' => $settings->isPricemaintaince()
  303.         ]);
  304.     }
  305.     /**
  306.      * @Route("/reparieren/pc", name="pc")
  307.      */
  308.     public function pc()
  309.     {
  310.         return $this->render('sites/reparieren/pc.html.twig', [
  311.         ]);
  312.     }
  313.     /**
  314.      * @Route("/reparieren/smartwatch", name="smartwatch")
  315.      */
  316.     public function smartwatch()
  317.     {
  318.         return $this->render('sites/reparieren/smartwatch.html.twig', [
  319.         ]);
  320.     }
  321.     #Other
  322.     /**
  323.      * @Route("/geschaeftskunde", name="b2b")
  324.      */
  325.     public function geschaeftskunde()
  326.     {
  327.         return $this->render('sites/geschaeftskunde.html.twig', [
  328.         ]);
  329.     }
  330.     /**
  331.      * @Route("/anleitung", name="anleitung")
  332.      */
  333.     public function anleitung()
  334.     {
  335.         return $this->render('sites/anleitung.html.twig', [
  336.         ]);
  337.     }
  338.     #repair
  339.     /**
  340.      * @Route("/editBasket", name="editBasket", methods={"POST"})
  341.      */
  342.     public function editBasket(Request $request)
  343.     {
  344.         $id $request->request->get('id');
  345.         $action $request->request->get('action');
  346.         $response null;
  347.         if($action == 'delete'){
  348.            $response $this->deletePosition($request$id);
  349.         }
  350.         if($action == 'add'){
  351.             $response $this->addPosition($request$id);
  352.         }
  353.         return $response;
  354.     }
  355.     /**
  356.      * @Route("/addToBasket", name="addToBasket", methods={"POST"})
  357.      */
  358.     public function addToBasket(Request $request)
  359.     {
  360.         $basket json_decode($request->request->get('basket'));
  361.         $text json_decode($request->request->get('text'));
  362.         $newBasket = [];
  363.         foreach ($basket as $item){
  364.                 if(str_starts_with($item'A-')){
  365.                     $trimId explode('-'$item);
  366.                     $acc $this->getDoctrine()->getRepository(Accessories::class)->find($trimId[1]);
  367.                     $id $acc->getId();
  368.                     $product $acc->getType();
  369.                     $price $acc->getPrice();
  370.                     array_push($newBasket, ['id' => $id'product' => $product'price' => $price]);
  371.                 }
  372.                 if(str_starts_with($item'S-')){
  373.                 $trimId explode('-'$item);
  374.    
  375.                 $acc $this->getDoctrine()->getRepository(Service::class)->find($trimId[1]);
  376.                 $id $acc->getId();
  377.                 $product $acc->getName();
  378.                 $price $acc->getPreis();
  379.                 array_push($newBasket, ['id' => $id'product' => $product'price' => $price]);
  380.                 }
  381.                 if(!str_starts_with($item'S-') && !str_starts_with($item'A-')){
  382.                     $repair $this->getDoctrine()->getRepository(Preise::class)->find($item);
  383.                     var_dump($item);
  384.                     $id $repair->getId();
  385.                     $product $repair->getReparatur()->getReparaturen();
  386.                     $price $repair->getPreis();
  387.                     array_push($newBasket, ['id' => $id'product' => $product'price' => $price]);
  388.                 }
  389.         }
  390.         $finishedBasket['items'] =[$newBasket];
  391.         $response = new Response();
  392.         $response->headers->setCookie(new Cookie('basket'json_encode($finishedBasket) ,time() + (365 24 60 60)));
  393.         $response->headers->setCookie(new Cookie('basketText'json_encode($text) ,time() + (365 24 60 60)));
  394. //        return $this->redirectToRoute('repairbasket');
  395.         return $response;
  396.     }
  397.     /**
  398.      * @Route("/removeBasket", name="removeBasket", methods={"POST"})
  399.      */
  400.     public function removeBasket(Request $request)
  401.     {
  402.         $response = new Response();
  403.         $response->headers->clearCookie('basket');
  404.         $response->headers->clearCookie('basketText');
  405.         return $response;
  406.     }
  407.     /**
  408.      * @Route("/reparaturkorb", name="repairbasket")
  409.      */
  410.     public function repairbasket(Request $request)
  411.     {
  412.         $basket json_decode($request->cookies->get('basket'));
  413.         $basketSum 0;
  414.         if(!empty($basket)){
  415.             foreach($basket as $items){
  416.                foreach($items as $item){
  417.                    foreach($item as $position){
  418.                        $basketSum $basketSum + (float)$position->price;
  419.                    }
  420.                }
  421.             }
  422.         }
  423.         $basketTaxes $basketSum 0.19;
  424.         $accessories $this->getDoctrine()->getManager()->getRepository(Accessories::class)->findAll();
  425.         return $this->render('repair/basket.html.twig', [
  426.             'basket' => json_decode($request->cookies->get('basket'),true),
  427.             'basketSum' => $basketSum,
  428.             'basketTaxes' => $basketTaxes,
  429.             'accessories' => $accessories
  430.         ]);
  431.     }
  432.     /**
  433.      * @Route("/kasse", name="checkout")
  434.      */
  435.     public function checkout(Request $request)
  436.     {
  437.         $basket json_decode($request->cookies->get('basket'));
  438.         $basketSum 0;
  439.         foreach($basket as $items){
  440.             foreach($items as $item){
  441.                 foreach($item as $position){
  442.                     $basketSum $basketSum + (float)$position->price;
  443.                 }
  444.             }
  445.         }
  446.         $basketTaxes $basketSum 0.19;
  447.         return $this->render('repair/checkout.html.twig', [
  448.             'basket' => json_decode($request->cookies->get('basket'),true),
  449.             'basketSum' => $basketSum,
  450.             'basketTaxes' => $basketTaxes
  451.         ]);
  452.     }
  453.     /**
  454.      * @Route("/payment", name="payment", methods={"POST"})
  455.      */
  456.     public function payment(Request $request)
  457.     {
  458.         $orderNumber json_decode($request->request->get('orderNumber'));
  459.         $order $this->getDoctrine()->getRepository(Order::class)->findOneBy(['orderNumber' => $orderNumber]);
  460.         $basketSum $order->getBasketSum();
  461.         $mollie = new \Mollie\Api\MollieApiClient();
  462.         $mollie->setApiKey("test_nykdc6k3pxrtu7MgmheFdP4dAQruB9");
  463.         $payment $mollie->payments->create([
  464.             "amount" => [
  465.                 "currency" => "EUR",
  466.                 "value" => number_format($basketSum2'.''.'),
  467.             ],
  468.             "description" => "Bestellung - #" $orderNumber,
  469.             "redirectUrl" => "https://kogorepair.de/erfolgreich/"$orderNumber,
  470.             "webhookUrl"  => "https://kogorepair.de/kasse",
  471.         ]);
  472.         $order->setPaymenttype($payment->id);
  473.         if($payment->isPaid()){
  474.             $order->setPaymentState(Status::PAYMENT_BEZAHLT);
  475.         }
  476.         $entityManager $this->getDoctrine()->getManager();
  477.         $entityManager->persist($order);
  478.         $entityManager->flush();
  479.         return new JsonResponse([
  480.             'status' => 'pending',
  481.             'ordernumber' => $orderNumber,
  482.             'url' => $payment->getCheckoutUrl(),   
  483.         ]);
  484.     }
  485.     /**
  486.      * @Route("/erfolgreich/{ordernumber}", name="checkout-finished")
  487.      */
  488.     public function checkoutFinished($ordernumberMailerInterface $mailer)
  489.     {
  490.         /**@var Order $order **/
  491.         $order $this->getDoctrine()->getRepository(Order::class)->findOneBy(['orderNumber' => $ordernumber]);
  492.         $paid = ($order->getPaymentState() == 11 true false);
  493.         $shipmentType $order->getShippingtype();
  494.         $email = (new Email())
  495.         ->from('noreply@einfachorient.de')
  496.         ->to('mail@michael-kelm.de')
  497.         ->replyTo('mail@michael-kelm.de')
  498.         ->subject('Ihr Auftrag.')
  499.         ->text('Ihr Reparaturauftrag bei Kogorepair.')
  500.         ->html('<h1>Lorem ipsum</h1> <p>...</p>');
  501.         $mailer->send($email);
  502.        /*  $email = (new Email())
  503.         ->from('noreply@einfachorient.de')
  504.         ->to('mail@michael-kelm.de')
  505.         ->replyTo('info@kogorepair.de')
  506.         ->subject('Auftrag: XXXX - Kogorepair')
  507.         ->text('Ihr Reparaturauftrag bei Kogorepair.')
  508.         ->htmlTemplate('emails/signup.html.twig')
  509.         //->attachFromPath('/path/to/documents/privacy.pdf', 'Privacy Policy')
  510.         $mailer->send($email);
  511.         if($paid && $shipmentType != 'noshipping'){
  512.             // sende Auftragsbestätigung mit DHL Label im Anhang
  513.         } else {
  514.             // sende Auftragsbestätigung ohne Label mit Adresse und aufforderung vorbei zu kommen.
  515.         }
  516.         /**if($status == 'paid' && $order->getShippingtype('dhl')){
  517.             if(empty($order->getShipmentnumber()) || $order->getShipmentnumber() == null || $order->getShipmentnumber() == 0){
  518.                 $createdLabel = $this->createLabel($order->getFirstname(), $order->getLastname(),$order->getStreet(), $order->getStreetnumber(), $order->getZipcode(), $order->getCity(), date('Y-m-d', time()));
  519.                 
  520.                 $order->setShipmentnumber($createdLabel);
  521.                 $em = $this->getDoctrine()->getManager();
  522.                 $em->persist($order);
  523.                 $em->flush();
  524.             } else {
  525.                 $createdLabel = $order->getShipmentnumber();
  526.             }
  527.             $downloadLabel = $this->getLabel($createdLabel);
  528.         }*/
  529.         return $this->render('repair/checkout_finished.html.twig', [
  530.             'payment' => $paid,
  531.             'order' => $order,
  532.             'shippingType' => $order->getShippingtype(),
  533.         ]);
  534.     }
  535.     function getAuthToken($clientId$clientSecret) {
  536.         $url "https://api.dhl.com/auth/v2/token"// Sandbox: /sandbox/
  537.     
  538.         $data = [
  539.             "grant_type" => "client_credentials"
  540.         ];
  541.     
  542.         $headers = [
  543.             "Content-Type: application/x-www-form-urlencoded",
  544.             "Authorization: Basic " base64_encode("$clientId:$clientSecret"),
  545.         ];
  546.     
  547.         $ch curl_init($url);
  548.         curl_setopt($chCURLOPT_POSTtrue);
  549.         curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($data));
  550.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  551.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  552.     
  553.         $response curl_exec($ch);
  554.         curl_close($ch);
  555.     
  556.         $response json_decode($responsetrue);
  557.         return $response['access_token'] ?? null;
  558.     }
  559.     
  560.     /**
  561.      * @Route("/createlabel", name="create-label")
  562.      */
  563.     public function createlabelUrl()
  564.     {
  565.        $response $this->createLabel("Michael""Kelm""Lindenallee""1""49661""Cloppenburg""2024-11-11");
  566.        $responseContent $response->getContent();
  567.        $responseData json_decode($responseContenttrue);
  568.        $success $responseData['success'];
  569.        return $success;
  570.     }
  571.     /**
  572.      * @Route("/label/{labelnumber}", name="checkout-label")
  573.      */
  574.     public function label($labelnumber)
  575.     {
  576.         $downloadLabel $this->getLabel($labelnumber);
  577.         return $this->redirect($downloadLabel);
  578.     }
  579.     
  580.     function createLabel($vorname$nachname,$straße$hausnummer$plz$ort$date) {
  581.         $authStorage = new \Dhl\Sdk\ParcelDe\Shipping\Auth\AuthenticationStorage('kH9qkZjQdf5ivjdA0B3NUVVeeIci88SB''kogorepairworker''Kogozugang1234!');
  582.         $logger = new \Psr\Log\NullLogger();
  583.         $serviceFactory = new \Dhl\Sdk\ParcelDe\Shipping\Service\ServiceFactory();
  584.         $service $serviceFactory->createShipmentService($authStorage$logger$sandbox false);
  585.         
  586.         $orderConfiguration = new \Dhl\Sdk\ParcelDe\Shipping\Service\ShipmentService\OrderConfiguration(
  587.             mustEncodetrue,
  588.             combinedPrintingnull,
  589.             docFormat\Dhl\Sdk\ParcelDe\Shipping\Api\Data\OrderConfigurationInterface::DOC_FORMAT_PDF,
  590.             printFormat\Dhl\Sdk\ParcelDe\Shipping\Api\Data\OrderConfigurationInterface::PRINT_FORMAT_A4
  591.         );
  592.         
  593.         $requestBuilder = new \Dhl\Sdk\ParcelDe\Shipping\RequestBuilder\ShipmentOrderRequestBuilder();
  594.         $requestBuilder->setShipperAccount(billingNumber'52833660740101');
  595.         $requestBuilder->setShipperAddress(
  596.             company'Kogorepair',
  597.             name$nachname .' '$vorname,
  598.             countryCode'DEU',
  599.             postalCode$plz,
  600.             city$ort,
  601.             streetName$straße,
  602.             streetNumber$hausnummer
  603.         );
  604.         $requestBuilder->setRecipientAddress(
  605.             company'Smartphone Service Kogorepair',
  606.             name'Ezdin Koyun',
  607.             countryCode'DEU',
  608.             postalCode'49661',
  609.             city'Cloppenburg',
  610.             streetName'Lindenallee',
  611.             streetNumber'2-4'
  612.         );
  613.         $requestBuilder->setShipmentDetails(productCode'V01PAK'shipmentDate: new \DateTime());
  614.         $requestBuilder->setPackageDetails(weightInKg2.4);
  615.         
  616.         $shipmentOrder $requestBuilder->create();
  617.         $shipments $service->createShipments([$shipmentOrder], $orderConfiguration);
  618.         //var_dump($shipments);
  619.         // Antwortverarbeitung
  620.         if (!empty($shipments)) {
  621.             // Überprüfen, ob shipmentNumber und shipmentLabel im Array vorhanden sind
  622.             $shipmentNumber $shipments[0]->getShipmentNumber(); // Zugriff auf shipmentNumber im Array
  623.             $shipmentLabelBase64 $shipments[0]->getShipmentLabel(); // Zugriff auf shipmentLabel (base64 codiert)
  624.             if ($shipmentLabelBase64) {
  625.                 // PDF-Daten dekodieren
  626.                 $pdfData base64_decode($shipmentLabelBase64); 
  627.                 // Pfad und PDF-Datei speichern
  628.                 $pdfPath '/var/www/development/kogorepair/public/dhl/pdf/' $shipmentNumber '.pdf';
  629.                 file_put_contents($pdfPath$pdfData);
  630.                 // Erfolgsantwort zurückgeben
  631.                 return new JsonResponse([
  632.                     'success' => true,
  633.                     'pdf_path' => $pdfPath,
  634.                     'sendungsnummer' => $shipmentNumber
  635.                 ]);
  636.             } else {
  637.                 return new JsonResponse([
  638.                     'success' => false,
  639.                     'message' => 'PDF-Daten fehlen in der Antwort'
  640.                 ]);
  641.             }
  642.         } else {
  643.             return new JsonResponse([
  644.                 'success' => false,
  645.                 'message' => 'Leere Antwort von DHL API'
  646.             ]);
  647.         }
  648.     }
  649.     /**
  650.      * @Route("/formPost", name="formPost", methods={"POST"})
  651.      */
  652.     public function formPost(Request $request)
  653.     {
  654.         $orderPost json_decode($request->request->get('order'));
  655.         $basket json_decode($request->cookies->get('basket'));
  656.         $basketText json_decode($request->cookies->get('basketText'));
  657.         $basketSum 0;
  658.         foreach($basket as $items){
  659.             foreach($items as $item){
  660.                 foreach($item as $position){
  661.                     $basketSum $basketSum + (float)$position->price;
  662.                 }
  663.             }
  664.         }
  665.         /* @var Order $order */
  666.         $order = new Order();
  667.         $order->setFirstname($orderPost->firstname);
  668.         $order->setLastname($orderPost->lastname);
  669.         $order->setStreet($orderPost->street);
  670.         $order->setStreetnumber($orderPost->streetnumber);
  671.         $order->setAddressoption($orderPost->streetoption);
  672.         $order->setCountry($orderPost->country);
  673.         $order->setZipcode($orderPost->zipcode);
  674.         $order->setCity($orderPost->city);
  675.         $order->setEmail($orderPost->email);
  676.         $order->setTel($orderPost->tel);
  677.         $order->setCreateDate(new \DateTime());
  678.         $order->setArchived(false);
  679.         $characters '0123456789';
  680.         $charactersLength strlen($characters);
  681.         $randomString '';
  682.         for ($i 0$i 6$i++) {
  683.             $randomString .= $characters[rand(0$charactersLength 1)];
  684.         }
  685.         $orderNumber $randomString;
  686.         $order->setOrderNumber($orderNumber);
  687.         $basketEntity = new Basket();
  688.         $basketEntity->setData(json_encode($basket));
  689.         $basketEntity->setText(json_encode($basketText));
  690.         $order->setBasket($basketEntity);
  691.         $order->setBasketSum($basketSum);
  692.         $order->setPaymenttype("0");
  693.         $order->setShippingtype($orderPost->shipping);
  694.         $order->setOrderState(Status::EINGEGANGEN);
  695.         $order->setPaymentstate(Status::PAYMENT_UNBEZAHLT);
  696.         $entityManager $this->getDoctrine()->getManager();
  697.         $entityManager->persist($order);
  698.         $entityManager->persist($basketEntity);
  699.         $entityManager->flush();
  700.         return new JsonResponse([
  701.             'status' => 'ok',
  702.             'ordernumber' => $orderNumber,
  703.         ]);
  704.     }
  705.     public function convertStatusToString($id)
  706.     {
  707.         $return 'Status konnte nicht geladen werden...';
  708.         switch ($id) {
  709.             case 0:
  710.                 $return 'FEHLER';
  711.                 break;
  712.             case Status::EINGEGANGEN:
  713.                 $return 'Eingegangen';
  714.                 break;
  715.             case Status::IN_REPARATUR:
  716.                 $return 'in Reparatur';
  717.                 break;
  718.             case Status::VERSAND:
  719.                 $return 'Versand';
  720.                 break;
  721.             case Status::PAYMENT_BEZAHLT:
  722.                 $return 'Bezahlt';
  723.                 break;
  724.             case Status::PAYMENT_UNBEZAHLT:
  725.                 $return 'Unbezahlt';
  726.                 break;
  727.             case Status::ABGESCHLOSSEN:
  728.                 $return 'Abgeschlossen';
  729.                 break;
  730.         }
  731.         return $return;
  732.     }
  733.     public function generateInvoiceID()
  734.     {
  735.         $characters '0123456789';
  736.         $charactersLength strlen($characters);
  737.         $randomString '';
  738.         for ($i 0$i 6$i++) {
  739.             $randomString .= $characters[rand(0$charactersLength 1)];
  740.         }
  741.         return $randomString;
  742.     }
  743.     public function deletePosition(Request $request$id){
  744.         $basket json_decode($request->cookies->get('basket'));
  745.         $strBasket = [];
  746.         foreach($basket as $items){
  747.             foreach($items as $item){
  748.                 foreach($item as $position){
  749.                     if($position->id != $id){
  750.                         array_push($strBasket, ['id' => $position->id'product' => $position->product'price' => $position->price]);
  751.                     }
  752.                 }
  753.             }
  754.         }
  755.         $newBasket['items'] =[$strBasket];
  756.         $response = new Response();
  757.         $response->headers->clearCookie('basket');
  758.         $response->headers->setCookie(new Cookie('basket'json_encode($newBasket) ,time() + (365 24 60 60)));
  759.         return $response;
  760.     }
  761.     public function addPosition(Request $request$id){
  762.         $basket json_decode($request->cookies->get('basket'));
  763.         $strBasket = [];
  764.         $accessories $this->getDoctrine()->getRepository(Accessories::class)->find($id);
  765.         $accessore = ['id' => $accessories->getId(), 'product' => $accessories->getType(), 'price' => $accessories->getPrice()];
  766.         foreach($basket as $items){
  767.             foreach($items as $item){
  768.                 foreach($item as $position){
  769.                     if($position->id != $accessories->getId()){
  770.                          array_push($strBasket, ['id' => $position->id'product' => $position->product'price' => $position->price]);
  771.                     }
  772.                 }
  773.             }
  774.         }
  775.         array_push($strBasket$accessore);
  776.         $newBasket['items'] =[$strBasket];
  777.         $response = new Response();
  778.         $response->headers->clearCookie('basket');
  779.         $response->headers->setCookie(new Cookie('basket'json_encode($newBasket) ,time() + (365 24 60 60)));
  780.         return $response;
  781.     }
  782.     /**
  783.      * @Route("/sendMail", name="sendMail", methods={"POST"})
  784.      */
  785.     public function sendMail(Request $request)
  786.     {
  787.         $name $request->request->get('name');
  788.         $email $request->request->get('email');
  789.         $handymodell $request->request->get('handymodell'); //optional
  790.         $defekt $request->request->get('defekt'); //optional
  791.         $nachricht $request->request->get('nachricht');
  792.         $empfaenger "info@kogorepair.de"//info@kogorepair.de
  793.         $betreff "Webseite: Kontaktanfrage";
  794.         $text "Name: " $name"\n"
  795.          " / E-Mail: " $email"\n"
  796.           " / Nachricht: " $nachricht"\n"
  797.            " / Handy: " $handymodell"\n"
  798.             " / Defekt: " $defekt;
  799.         $header 'From: noreply@kogorepair.de' "\r\n" .
  800.                     'X-Mailer: PHP/' phpversion();
  801.         mail($empfaenger$betreff$text$header);
  802.         return new JsonResponse([
  803.             'status' => 'ok',
  804.         ]);
  805.     }
  806.     /**
  807.      * @Route("/sendMailB2B", name="sendMailB2B", methods={"POST"})
  808.      */
  809.     public function sendMailB2B(Request $request)
  810.     {
  811.         $name $request->request->get('name');
  812.         $email $request->request->get('email');
  813.         $firma $request->request->get('firma'); //optional
  814.         $tel $request->request->get('tel'); //optional
  815.         $nachricht $request->request->get('nachricht');
  816.         $empfaenger "info@kogorepair.de";
  817.         $betreff "Webseite B2B: Kontaktanfrage";
  818.         $text "Name: " $name"\n"
  819.          " / E-Mail: " $email"\n"
  820.           " / Nachricht: " $nachricht"\n"
  821.            " / Firma: " $firma"\n"
  822.             " / Tel: " $tel;
  823.         mail($empfaenger$betreff$text);
  824.         return new JsonResponse([
  825.             'status' => 'ok',
  826.         ]);
  827.     }
  828.     /**
  829.      * @Route("/sendMailAnkauf", name="sendMailAnkauf", methods={"POST"})
  830.      */
  831.     public function sendMailAnkauf(Request $request)
  832.     {
  833.         $name $request->request->get('name');
  834.         $email $request->request->get('email');
  835.         $telefon $request->request->get('telefon');
  836.         $marke $request->request->get('marke');
  837.         $gerätename $request->request->get('gerätename');
  838.         $zustand $request->request->get('zustand');
  839.         $zusatzinformationen $request->request->get('zusatzinformationen');
  840.         $empfaenger "info@kogorepair.de";
  841.         $betreff "Webseite: Ankauf Anfrage";
  842.         $text "Name: " $name "\n" .
  843.                 "E-Mail: " $email "\n" .
  844.                 "Telefon: " $telefon "\n" .
  845.                 "Marke: " $marke "\n" .
  846.                 "Gerätename: " $gerätename "\n" .
  847.                 "Zustand: " $zustand "\n" .
  848.                 "Zusätzliche Informationen: " $zusatzinformationen;
  849.         $header 'From: noreply@kogorepair.de' "\r\n" .
  850.                 'X-Mailer: PHP/' phpversion();
  851.         mail($empfaenger$betreff$text$header);
  852.         return new JsonResponse([
  853.             'status' => 'ok',
  854.         ]);
  855.     }
  856. }