src/Controller/TestController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AvocadostoreOrder;
  4. use App\Entity\AvocadostoreOrderLine;
  5. use App\Entity\AvocadostoreToShopwareConnection;
  6. use App\Service\Avocadostore\AvocadostoreOrderSyncService;
  7. use App\Service\OrderImportService;
  8. use App\Service\Shopware\AdminApiClient;
  9. use App\Service\Shopware\StoreApiClient;
  10. use Doctrine\ORM\EntityManager;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Doctrine\ORM\EntityRepository;
  13. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. class TestController extends AbstractController
  19. {
  20.     /**
  21.      * @Route("/job/sync_orders_to_shopware", name="test")
  22.      */
  23.     public function index(OrderImportService $orderImportServiceStoreApiClient $storeApiClientAdminApiClient $adminApiClientAvocadostoreOrderSyncService $orderSyncServiceEntityManagerInterface $entityManager)
  24.     {
  25.         /** @var EntityRepository $avocadostoreToShopwareConnectionRepository */
  26.         $avocadostoreToShopwareConnectionRepository $entityManager->getRepository(AvocadostoreToShopwareConnection::class);
  27.         $connections $avocadostoreToShopwareConnectionRepository->findBy([], ['id' => 'ASC']);
  28.         /** @var AvocadostoreToShopwareConnection $connection */
  29.         foreach ($connections as $connection) {
  30.             $orderSyncService->syncOrders($connection);
  31.         }
  32.         // Load sales channel data.
  33. //        $context = $storeApiClient->getContext($shopBaseUrl, $apiVersion, $swAccessKey);
  34. //        $languages = $storeApiClient->getLanguages($shopBaseUrl, $apiVersion, $swAccessKey);
  35. //        $currencies = $storeApiClient->getCurrencies($shopBaseUrl, $apiVersion, $swAccessKey);
  36. //        $paymentMethods = $storeApiClient->getPaymentMethods($shopBaseUrl, $apiVersion, $swAccessKey);
  37. //        $shippingMethods = $storeApiClient->getShippingMethods($shopBaseUrl, $apiVersion, $swAccessKey);
  38. //        foreach ($numbers as $number) {
  39. //            try {
  40. //                $productNumber2Id[$number] = $storeApiClient->findProductIdByNumber($shopBaseUrl, $apiVersion, $swAccessKey, $number);
  41. //            } catch (\Exception $e) {
  42. //                dd($e);
  43. //            }
  44. //        }
  45.         // Login user.
  46. //        $contextToken = $storeApiClient->loginCustomer($shopBaseUrl, $apiVersion, $swAccessKey, $username, $password);
  47.         // Add products to cart.
  48. //        $cart = $storeApiClient->cartAddLineItem($shopBaseUrl, $apiVersion, $swAccessKey, $contextToken, '123');
  49. //        dd($productNumber2Id);
  50. //        die();
  51.         return $this->render('test/index.html.twig', [
  52.             'controller_name' => 'TestController',
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/avocadostore/order_export_webhook/{connection}", name="avocadostore_order_export_webhook")
  57.      */
  58.     public function test2(AvocadostoreToShopwareConnection $connectionRequest $requestEntityManagerInterface $em) {
  59.         try {
  60.             $this->log('Starting import.');
  61.             $body $request->getContent();
  62.             $orderRepository $em->getRepository(AvocadostoreOrder::class);
  63.             $orderLineRepository $em->getRepository(AvocadostoreOrderLine::class);
  64.             $this->log('Decoding data.');
  65.             $json json_decode($body);
  66.             if($json === false) {
  67.                 $this->log('false');
  68.                 return new Response(''503);
  69.             }
  70.             if(empty($json->exportUrl)) {
  71.                 $this->log('false');
  72.                 mail('[email protected]''Avocadostore''No exportUrl in body.');
  73.                 return new Response('No exportUrl in body.'503);
  74.             }
  75.             $this->log('Loading external data from "' $json->exportUrl '".');
  76.             $content file_get_contents($json->exportUrl);
  77.             $this->log('Content: ' $content);
  78.             $header = [];
  79.             $orders = [];
  80.             // LINE START
  81.             foreach (explode("\n"$content) as $key => $line) {
  82.                 $this->log('Line: ' $line);
  83.                 if(empty($line)) {
  84.                     $this->log('empty line.');
  85.                     continue;
  86.                 }
  87.                 $lineData str_getcsv($line';''"');
  88.                 if($key === 0) {
  89.                     $header $lineData;
  90.                 } else {
  91.                     $orderedLineData = [];
  92.                     // Arrange array keys.
  93.                     foreach ($lineData as $arrayKey => $value) {
  94.                         $orderedLineData[$header[$arrayKey]] = $value;
  95.                     }
  96.                     $orders[$orderedLineData['order-id']]['order'] = $orderedLineData;
  97.                     $orders[$orderedLineData['order-id']]['lines'][] = $orderedLineData;
  98.                 }
  99.             }// LINE END
  100.             foreach ($orders as $orderId => $orderCsv) {
  101.                 // Order import
  102.                 if(empty($orderCsv['order']['payment-date'])) {
  103.                     $this->log('Skipping line because payment-date is not set.');
  104.                     continue;
  105.                 }
  106.                 $this->log('search order with id "' $orderCsv['order']['order-id'] . '"');
  107.                 /** @var null|AvocadostoreOrder $order */
  108.                 $order $orderRepository->findOneBy([
  109.                     'avocadostoreOrderId' => $orderCsv['order']['order-id']
  110.                 ]);
  111.                 if($order !== null) {
  112.                     // Skip if already added.
  113.                     $this->log('Skipping order with id "' $order->getAvocadostoreOrderId() . '" because it is already there.');
  114.                     continue;
  115.                 }
  116.                 $purchaseDate = \DateTime::createFromFormat('Y-m-d H:i:s O'$orderCsv['order']['purchase-date']);
  117.                 $paymentDate null;
  118.                 $this->log('Payment date: ' $orderCsv['order']['payment-date']);
  119.                 try {
  120.                     $newPaymentDate = \DateTime::createFromFormat('Y-m-d H:i:s O'$orderCsv['order']['payment-date']);
  121.                     if($newPaymentDate !== false) {
  122.                         $paymentDate $newPaymentDate;
  123.                         $this->log('New payment date: ' $newPaymentDate->format('Y-m-d'));
  124.                     }
  125.                 } catch (\Exception $e) {
  126.                 }
  127.                 $this->log('Setting variables');
  128.                 $order = new AvocadostoreOrder();
  129.                 $order->setConnection($connection);
  130.                 $order->setAvocadostoreOrderId($orderCsv['order']['order-id']);
  131.                 $order->setSynced(false);
  132.                 $order->setErrorCount(0);
  133.                 $this->log('Purchase date: ' $purchaseDate->format('Y-m-d H:i:s'));
  134.                 $this->log('Payment date: ' $paymentDate->format('Y-m-d H:i:s'));
  135.                 $this->log('Currency: ' $orderCsv['order']['currency']);
  136.                 $this->log('Shipping price: ' $orderCsv['order']['shipping-price']);
  137.                 // Only update if not already synced.
  138.                 $order->setPurchaseDate($purchaseDate);
  139.                 $order->setPaymentDate($paymentDate);
  140.                 $order->setCurrency($orderCsv['order']['currency']);
  141.                 $this->log('Shipping price: ' str_replace(',''.'$orderCsv['order']['shipping-price']));
  142.                 $order->setShippingPrice(floatval(str_replace(',''.'$orderCsv['order']['shipping-price'])));
  143.                 $this->log('Shipping tax: ' str_replace(',''.'$orderCsv['order']['shipping-tax']));
  144.                 $order->setShippingTax(floatval(str_replace(',''.'$orderCsv['order']['shipping-tax'])));
  145.                 $this->log('check123');
  146.                 $order->setShippingServiceLevel($orderCsv['order']['shipping-service-level']);
  147.                 $order->setRecipientName($orderCsv['order']['recipient-name']);
  148.                 $order->setShipAddress1($orderCsv['order']['ship-address-1']);
  149.                 $order->setShipAddress2($orderCsv['order']['ship-address-2']);
  150.                 $order->setShipPostalCode($orderCsv['order']['ship-postal-code']);
  151.                 $order->setShipCity($orderCsv['order']['ship-city']);
  152.                 $order->setShipCountry($orderCsv['order']['ship-country']);
  153.                 $order->setShipAddressAdditional($orderCsv['order']['ship-address-additional']);
  154.                 $order->setShipAddressStreet($orderCsv['order']['ship-address-street']);
  155.                 $order->setShipAddressNo($orderCsv['order']['ship-address-no']);
  156.                 $order->setBuyerName($orderCsv['order']['buyer-name']);
  157.                 $order->setBillAddress1($orderCsv['order']['bill-address-1']);
  158.                 $order->setBillAddress2($orderCsv['order']['bill-address-2']);
  159.                 $order->setBillPostalCode($orderCsv['order']['bill-postal-code']);
  160.                 $order->setBillCity($orderCsv['order']['bill-city']);
  161.                 $order->setBillCountry($orderCsv['order']['bill-country']);
  162.                 $order->setBillAddressAdditional($orderCsv['order']['bill-address-additional']);
  163.                 $order->setBillAddressStreet($orderCsv['order']['bill-address-street']);
  164.                 $order->setBillAddressNo($orderCsv['order']['bill-address-no']);
  165.                 $order->setBuyerId($orderCsv['order']['buyer-id']);
  166.                 $this->log('persisting data.');
  167.                 $em->persist($order);
  168.                 $em->flush();
  169.                 $this->log('persisting data finished.');
  170.                 foreach ($orderCsv['lines'] as $key => $orderedLineData) {
  171.                     // Order line import.
  172.                     $this->log('Importing line: ' print_r($orderedLineDatatrue));
  173.                     // Create order line.
  174. //                    $orderLine = $orderLineRepository->findOneBy([
  175. //                        'avocadostoreOrderId' => $orderedLineData['order-id'],
  176. //                        'avocadostoreOrderItemId' => $orderedLineData['order-item-id'],
  177. //                    ]);
  178. //                    if($orderLine === null) {
  179.                     $orderLine = new AvocadostoreOrderLine();
  180.                     $orderLine->setAvocadostoreOrderId($orderedLineData['order-id']);
  181.                     $orderLine->setAvocadostoreOrderItemId($orderedLineData['order-item-id']);
  182. //                    }
  183.                     $orderLine->setSku($orderedLineData['sku']);
  184.                     $orderLine->setProductName($orderedLineData['product-name']);
  185.                     $orderLine->setQuantityPurchased($orderedLineData['quantity-purchased']);
  186.                     $orderLine->setItemPrice(str_replace(',''.'$orderedLineData['item-price']));
  187.                     $orderLine->setItemTax(str_replace(',''.'$orderedLineData['item-tax']));
  188.                     $em->persist($orderLine);
  189.                     $em->flush();
  190.                 }
  191.             }
  192.             $this->log('ok');
  193.         } catch (\Exception $e) {
  194.             $this->log('Error: ' $e->getMessage() . "\n" 'Line: ' $e->getLine());
  195.             mail('[email protected]''Avocadostore'$e->getMessage() . "\n" $e->getTraceAsString());
  196.         }
  197.         $this->log('Finishing import.');
  198.         return new Response('ok');
  199.     }
  200.     private function log($string) {
  201.         $log file_get_contents(__DIR__ '/../../var/log/avl.log.txt');
  202.         $log .= (new \DateTime())->format('Y-m-d H:i:s') . ': ' $string "\n";
  203.         file_put_contents(__DIR__ '/../../var/log/avl.log.txt'$log);
  204.     }
  205. }