src/Controller/Api/CustomerApiController.php line 120

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\Customer;
  4. use App\Entity\Hcp;
  5. use App\Entity\Order;
  6. use App\Repository\HcpProductRepository;
  7. use DateTime;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use PHPShopify\Exception\ApiException;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use PHPShopify\ShopifySDK;
  16. class CustomerApiController extends AbstractController
  17. {
  18.     /**
  19.      * @Route("/api/customer", name="app_customer_api")
  20.      */
  21.     public function index(Request $requestManagerRegistry $doctrineHcpProductRepository $hcpProductRepo): Response
  22.     {
  23.         $config = array(
  24.             'ShopUrl' => 'solgar-nz.myshopify.com',
  25.             'AccessToken' => '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',
  26.         );
  27.         $shopify = new ShopifySDK($config);
  28.         $entityManager $doctrine->getManager();
  29.         $hcpId $request->query->get('hcp_id');
  30.         $hcp $entityManager->getRepository(Hcp::class)->findOneBy(array('hcpId' => $hcpId));
  31.         $hcpDbId $hcp->getId();
  32.         if (empty($hcpDbId)) {
  33.             return new JsonResponse(array('data' => []));
  34.         }
  35.         // Get customer records from hcp id
  36.         $customerRecords $entityManager->getRepository(Customer::class)->findBy(array('hcp' => $hcpDbId));
  37.         $objResponse = [];
  38.         // foreach($customerRecords as $customer) {
  39.         //     $customerDbId = $customer->getId();
  40.             // Get latest order for each customer
  41.             $orderRecords $entityManager->getRepository(Order::class)->findBy(array('hcp' => $hcpDbId));
  42.          
  43.             if (count($orderRecords) <= 0) {
  44.                 return new JsonResponse(array('data' => $objResponse));
  45.             }
  46.             foreach ($orderRecords as $ordr):
  47.                 // Check payment status to determine if it's order or draft order
  48.                 $latestOrderStatus $ordr->getPaymentStatus();
  49.                 try {
  50.                     if ($latestOrderStatus == 'completed'){
  51.                         $obj $shopify->Order($ordr->getOrderId())->get();
  52.                     } else {
  53.                         $obj $shopify->DraftOrder($ordr->getOrderId())->get();
  54.                     }
  55.                 } catch(ApiException $e) {
  56.                     continue;
  57.                 }
  58.                 $hcpProductIds $hcpProductRepo->findAllProductIds(); // grab all hcp product ids
  59.                 $latestOrderCreatedAt = new DateTime($obj['created_at']);
  60.                 $latestOrderCreatedAt $latestOrderCreatedAt->format('d/m/Y'); // Get order date
  61.                 // $totalOrderPrice = '$'. $obj['total_price']; // get order price
  62.                 $totalOrderPrice 0;
  63.                 $productData $quantityData $productPrice ''// Initialize empty variable
  64.                 foreach ($obj['line_items'] as $product) {
  65.                     if (in_array($product['product_id'], $hcpProductIds)){
  66.                         $productObj $shopify->Product($product['product_id'])->get();
  67.                         
  68.                         $productData .= '<span><a href="/products/'$productObj['handle'] .'">'$product['name'] .' capsules</a></span>';
  69.                         $quantityData .= '<span>'$product['quantity'] .'</span>';
  70.                         $productPrice .= '<span>$'$product['price'] .'</span>';
  71.                         
  72.                         $totalOrderPrice += $product['price'] * $product['quantity'];
  73.                     }
  74.                 }
  75.                 array_push($objResponse, [
  76.                     $ordr->getId(),
  77.                     $ordr->getCustomer()->getName(),
  78.                     $latestOrderCreatedAt,
  79.                     $productData,
  80.                     $productPrice,
  81.                     $quantityData,
  82.                     '$'.number_format((float)$totalOrderPrice2'.'''),
  83.                     '<span class="status">'$latestOrderStatus .'</span>',
  84.                 ]);
  85.             endforeach;
  86.         // }
  87.         $objResponse array_reverse($objResponse);
  88.         return new JsonResponse(array('data' => $objResponse));
  89.     }
  90.     /**
  91.      * @Route("/api/customer/emails", name="app_customer_email_api")
  92.      */
  93.     public function customerEmail(Request $requestManagerRegistry $doctrine): Response
  94.     {
  95.         $config = array(
  96.             'ShopUrl' => 'solgar-nz.myshopify.com',
  97.             'AccessToken' => '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',
  98.         );
  99.         $shopify = new ShopifySDK($config);
  100.         $entityManager $doctrine->getManager();
  101.         $hcpId $request->query->get('hcp_id');
  102.         $hcp $entityManager->getRepository(Hcp::class)->findOneBy(array('hcpId' => $hcpId));
  103.         $hcpDbId $hcp->getId();
  104.         // Get customer records from hcp id
  105.         $customerRecords $entityManager->getRepository(Customer::class)->findBy(array('hcp' => $hcpDbId));
  106.         $objResponse = [];
  107.         foreach($customerRecords as $customer) {
  108.             $customerEmail $customer->getEmail();
  109.             array_push($objResponse$customerEmail);
  110.         }
  111.         return new JsonResponse($objResponse);
  112.     }
  113.     /**
  114.      * @Route("/api/customer/update_tag", name="app_customer_tag_api")
  115.      */
  116.     public function updateCustomerTag(Request $requestManagerRegistry $doctrine): Response
  117.     {
  118.         $config = array(
  119.             'ShopUrl' => 'solgar-nz.myshopify.com',
  120.             'AccessToken' => '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',
  121.         );
  122.         $shopify = new ShopifySDK($config);
  123.         $entityManager $doctrine->getManager();
  124.         $jsonObj json_decode($request->getContent(), true);
  125.         $customerEmail $jsonObj['email'];
  126.         $draftOrderStatus $jsonObj['status'];
  127.         if ($draftOrderStatus != 'completed') {
  128.             return new Response('Draft order status is still open'200);
  129.         }
  130.         $customer $entityManager->getRepository(Customer::class)->findOneBy(array('email' => $customerEmail));
  131.         
  132.         if (!empty($customer)):
  133.             // Get current tags
  134.             $customerObj =  $shopify->Customer($customer->getCustomerId())->get();
  135.             $currentTags explode(','$customerObj['tags']);
  136.             $lineItems $jsonObj['line_items'];
  137.             
  138.             foreach($lineItems as $lineItem){
  139.                 $productId $lineItem['product_id'];
  140.                 $productObj $shopify->Product($productId)->get();
  141.                 
  142.                 // if (!in_array($productObj['handle'], $currentTags)){
  143.                 //     array_push($currentTags, $productObj['handle']);
  144.                 // }
  145.                 if (!empty($productObj['tags'])) {
  146.                     $pTags explode(','$productObj['tags']);
  147.                     if (in_array('hcp'$pTags)) {
  148.                         $productHandleString 'hcp-unlocked';
  149.                         $customerResponse $shopify->Customer($customer->getCustomerId())->put(
  150.                             array(
  151.                                 'tags' => $productHandleString,
  152.                             )
  153.                         );
  154.                     }
  155.                 }
  156.             }
  157.         endif;
  158.         return new Response('Customer '$customerEmail.' has been updated.'200);
  159.     }
  160.     /**
  161.      * @Route("/api/customer/feed", name="app_customer_feed_api")
  162.      */
  163.     public function customerFeed(Request $requestManagerRegistry $doctrine): Response
  164.     {
  165.         $config = array(
  166.             'ShopUrl' => 'solgar-nz.myshopify.com',
  167.             'AccessToken' => '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',
  168.         );
  169.         $shopify = new ShopifySDK($config);
  170.         $entityManager $doctrine->getManager();
  171.         $email $request->query->get('email');
  172.         $hcp $entityManager->getRepository(Customer::class)->findOneBy(array('email' => $email));
  173.         $customerId $hcp->getCustomerId();
  174.         // Get customer records from hcp id
  175.         $customerObj =  $shopify->Customer($customerId)->get();
  176.         return new JsonResponse($customerObj);
  177.     }
  178.     /**
  179.      * @Route("/api/customer/emailFeed", name="app_customer_feed_api")
  180.      */
  181.     public function getCustomerFromEmail(Request $requestManagerRegistry $doctrine): Response
  182.     {
  183.         $config = array(
  184.             'ShopUrl' => 'solgar-nz.myshopify.com',
  185.             'AccessToken' => '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',
  186.         );
  187.         $shopify = new ShopifySDK($config);
  188.         // Get customer records from hcp id
  189.         $customerObj =  $shopify->Customer()->search([
  190.             "query" => "email:[email protected]"
  191.         ]);
  192.         return new JsonResponse($customerObj);
  193.     }
  194. }