src/Controller/ApiController.php line 66

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\HttpFoundation\Response;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use FOS\RestBundle\Controller\AbstractFOSRestController;
  6. use FOS\RestBundle\Controller\Annotations as Rest;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Psr\Log\LoggerInterface;
  11. use App\Clases\Validations\DocumentoValidaClass;
  12. use App\Clases\Doc\BoletaAfecta;
  13. use App\Clases\Doc\FacturaAfectaClass;
  14. use App\Clases\Doc\NotaCreditoClass;
  15. use Symfony\Component\Lock\LockFactory;
  16. use Symfony\Component\Lock\Store\SemaphoreStore;
  17. /* Entities */ 
  18. use App\Entity\Empresa;
  19. use App\Entity\Magento;
  20. use Symfony\Component\HttpClient\HttpClient;
  21. /* Clases */ 
  22. use App\Clases\MagentoClass;
  23. use App\Clases\WebfacturaClass;
  24. use App\Entity\MagentoOrder;
  25. /* Oauth */ 
  26. // use OAuth\Common\Consumer\Credentials;
  27. // use OAuth\Common\Http\Exception\TokenResponseException;
  28. // use OAuth\Common\Storage\Memory;
  29. // use OAuth\OAuth1\Signature\Signature;
  30. // use OAuth\OAuth1\Service\Magento as MagentoService;;
  31. /**
  32. * API  Controller.
  33. * @Route("/api/v3/pos", name="api_controller_")
  34. */
  35. class ApiController extends AbstractFOSRestController
  36. {
  37.     const CURRENT_FILE_NAME 'ApiController';
  38.     /**
  39.      * @var LoggerInterface
  40.      */
  41.     private $logger;
  42.     private $em;
  43.     private $logController;
  44.     public function __construct(LoggerInterface $logger,EntityManagerInterface $emLogController $logController)
  45.     {
  46.         $this->logger $logger;
  47.         $this->em $em;
  48.         $this->logController $logController;
  49.     }
  50.     
  51.     /**
  52.      * Genera la Conexion con la integracion Magento
  53.      * @Rest\Get("/getDocumentsFiltered/data.json/")
  54.      *
  55.      * @return Response
  56.      */
  57.     public function return80mmUrl(Request $request){
  58.         $em $this->getDoctrine()->getManager();
  59.         $empresaId 809;
  60.         $responseMessage = [];
  61.         $magentoEntity $em->getRepository(Magento::class)->findOneBy(['empresa_id' => $empresaId]);
  62.         $empresaEntity $em->getRepository(Empresa::class)->findOneBy(array('webfactura_id' => $empresaId));
  63.         
  64.         try {
  65.             $resource $request->query->get('resource''80MM');
  66.             $nOrden $request->query->get('nro_orden''');
  67.             $store = new SemaphoreStore();
  68.             $factory = new LockFactory($store);
  69.             $lock $factory->createLock($nOrden);
  70.             if ($lock->acquire()) {
  71.                 $searchCriteria['filterGroups'][] = [
  72.                     'filters' => [
  73.                         [
  74.                             'field' => 'increment_id',
  75.                             'value' => $nOrden,
  76.                             'conditionType' => 'eq'
  77.                         ]
  78.                     ]
  79.                 ];
  80.     
  81.                 $orderRequest MagentoClass::getOrdersFiltered($em$empresaEntity$magentoEntity$searchCriteria);
  82.                 if(array_key_exists('status'$orderRequest) && $orderRequest['status'] == 'OK'){
  83.                     $orders $orderRequest['content']['items'] ?? [];
  84.                     $order $orders[0] ?? [];
  85.                     if($order){
  86.                         // foreach($orders as $order){
  87.                         //     $orderId = $order['entity_id'] ?? '';
  88.                         //     $order_increment_id = $order['increment_id'] ?? '';
  89.                         // }
  90.                         $orderId $order['entity_id'] ?? '';
  91.                         
  92.                         $order_status $order['status'] ?? '';
  93.                         
  94.                         // Validaciones para generar el documento
  95.                         $generaDoc false;
  96.                         $docTipoId '';
  97.                         
  98.                         DocumentoValidaClass::validaGeneraDocumento($em$empresaId$order0$responseMessage$generaDoc$docTipoId);
  99.                         
  100.                         if($generaDoc){
  101.                             switch($docTipoId){
  102.                                 case 39:
  103.                                     $class = new BoletaAfecta($em$order$empresaEntity);
  104.                                     break;
  105.                                 case 33:
  106.                                     $class = new FacturaAfectaClass($em$order$empresaEntity);
  107.                                     break;
  108.                                 case 61:
  109.                                     $class = new NotaCreditoClass($em$order$empresaEntity);
  110.                                     break;
  111.                                 default:
  112.                                     $responseMessage['message'] = 'Ocurrio un error al asignar el docTipo';
  113.                                     return new JsonResponse($responseMessage);
  114.                                     break;
  115.                                     
  116.                             }
  117.                             $arrDoc $class->generateArrayOrder();
  118.                             $tokenWFRequest WebfacturaClass::getTokenWF($em$empresaId$empresaEntity);
  119.                             if(array_key_exists('status'$tokenWFRequest) && $tokenWFRequest['status'] == 'OK'){
  120.                                 $tokenWF $tokenWFRequest['token'];
  121.                                 $sendDocRequest WebfacturaClass::postDoc($em$empresaId$tokenWF$arrDoc);
  122.                                 if(array_key_exists('status'$sendDocRequest) && $sendDocRequest['status'] == 'OK'){
  123.                                     $sendDocContent $sendDocRequest['content'];
  124.                                     $pdfUrl $sendDocContent['DocumentoDTE']['PDFUrl'] ?? '';
  125.                                     $folio $sendDocContent['DocumentoDTE']['Folio'] ?? 0;
  126.         
  127.                                     // Generamos un comentario en Magento con el link del pdf
  128.                                     if($pdfUrl){
  129.                                         $commentOrderText '\n\nPuedes descargar el documento PDF desde el siguiente enlace: ' $pdfUrl;
  130.                                         $postCommentRequest MagentoClass::uploadOrderComment($em$empresaEntity$magentoEntity$orderId$commentOrderText$order_status);
  131.                                         $responseMessage['upload-comment-response'] = $postCommentRequest;
  132.                                     }   
  133.                                     $magentoOrderEntity $em->getRepository(MagentoOrder::class)->createAndPersistMagentoOrder(
  134.                                         $empresaId$order$folio$docTipoId$pdfUrl
  135.                                     );
  136.                                     return new jsonResponse(['docUrl' => $pdfUrl '/3']);
  137.                                 }
  138.                             }
  139.                         }
  140.                         elseif(array_key_exists('orderEntityId'$responseMessage[0])){
  141.                             $magentoOrderRepository $em->getRepository(MagentoOrder::class);
  142.                             $magentoOrderEntity $magentoOrderRepository->findOneById($responseMessage[0]['orderEntityId']);
  143.                             $pdfUrl $magentoOrderEntity->getPdfUrl();
  144.                             return new jsonResponse(['docUrl' => $pdfUrl '/3']);
  145.                         }
  146.                     }
  147.                     else{
  148.                         $responseMessage['status'] = 'ERR';
  149.                         $responseMessage['message'] = 'No se encuentra orden en magento';
  150.                         $this->logController->saveJson($empresaId'jsonNotFound'$orderRequest$nOrden);
  151.                     }
  152.                 }
  153.                 else{
  154.                     $responseMessage['status'] = 'ERR';
  155.                     $responseMessage['message'] = 'Error al obtener las ordenes de Magento.';
  156.                     $responseMessage['content'] = $orderRequest['content'];
  157.                 }
  158.             }
  159.         }
  160.         catch (\Exception $e) {
  161.             $lineNumber $e->getLine();
  162.             $file $e->getFile();
  163.             $responseMessage['message'] = 'Error: ' $e->getMessage() . ' En la linea: ' $lineNumber ' - ' __FUNCTION__ ' Archivo: ' $file;
  164.             $responseMessage['status'] = 'ERR';
  165.             $this->logger->error($responseMessage['message']);
  166.             return new jsonResponse($responseMessage);
  167.         }
  168.         finally {
  169.             // LiberaciĆ³n del bloqueo al finalizar
  170.             $lock->release();
  171.         }
  172.     }
  173. }