src/Api/EmailApi.php line 340

Open in your IDE?
  1. <?php
  2. namespace App\Api;
  3. use App\Middleware\AdminUsersMiddleware;
  4. use App\Middleware\BackgroundProcessingMiddleware;
  5. use App\Middleware\CompanyMiddleware;
  6. use App\Middleware\EmailAckMiddleware;
  7. use App\Middleware\MailgunAckMiddleware;
  8. use App\Middleware\SaleMiddleware;
  9. use App\Middleware\ServerProcessingMiddleware;
  10. use App\Middleware\SessionMiddleware;
  11. use App\Middleware\WebPaySettingsMiddleware;
  12. use App\Util\Format;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  19. use Symfony\Contracts\HttpClient\HttpClientInterface;
  20. use App\Service\MailgunService;
  21. class EmailApi extends AbstractController
  22. {
  23.   private $session;
  24.   private $format;
  25.   private $client;
  26.   private $backgroundProcessingMiddleware;
  27.   private $companyMiddleware;
  28.   private $mailgun;
  29.   public function __construct(
  30.     Format $format,
  31.     SessionInterface $session,
  32.     HttpClientInterface $client,
  33.     BackgroundProcessingMiddleware $backgroundProcessingMiddleware,
  34.     CompanyMiddleware $companyMiddleware,
  35.     MailgunService $mailgun
  36.   ) {
  37.     $this->session $session;
  38.     $this->format $format;
  39.     $this->client $client;
  40.     $this->backgroundProcessingMiddleware $backgroundProcessingMiddleware;
  41.     $this->companyMiddleware $companyMiddleware;
  42.     $this->mailgun $mailgun;
  43.   }
  44.   /**
  45.    * @Route("/api/email/ack/list", name="api_email_ack_list", methods={"GET"})
  46.    */
  47.   public function getList(Request $requestEmailAckMiddleware $emailAckMiddleware): JsonResponse
  48.   {
  49.     if ($this->getParameter('TEST')) {
  50.       $this->session->set('company_id'constant("App\\Constant\\Tests::COMPANY_ID"));
  51.     }
  52.     $parameter = array(
  53.       'companyId' => $this->session->get('company_id'),
  54.       'contactId' => $request->get('id'),
  55.       'search' => $request->get('search'),
  56.       'contactType' => $request->get('type'),
  57.       'startDate' => $this->format->date($request->get('start_date'), 'Y-m-d'),
  58.       'endDate' => $this->format->date($request->get('end_date'), 'Y-m-d'),
  59.       'deliveryStatus' => $request->get('delivery_status') ? $request->get('delivery_status') : null,
  60.       'field' => $request->get('sort_field') ? $request->get('sort_field') : 'created_date',
  61.       'order' => $request->get('sort_order') ? $request->get('sort_order') : 'DESC',
  62.       'start' => $request->get('start') ? $request->get('start') : constant("App\\Constant\\Globals::LIMIT_START"),
  63.       'end' => $request->get('limit') ? $request->get('limit') : null
  64.     );
  65.     return new JsonResponse(['email_data' => $emailAckMiddleware->getList($parameter)]);
  66.   }
  67.   /**
  68.    * @Route("/api/email/ack/count", name="api_email_ack_count", methods={"GET"})
  69.    */
  70.   public function getCount(Request $requestEmailAckMiddleware $emailAckMiddleware): JsonResponse
  71.   {
  72.     if ($this->getParameter('TEST')) {
  73.       $this->session->set('company_id'constant("App\\Constant\\Tests::COMPANY_ID"));
  74.     }
  75.     $parameter = array(
  76.       'companyId' => $this->session->get('company_id'),
  77.       'contactId' => $request->get('id'),
  78.       'contactType' => $request->get('type'),
  79.       'search' => $request->get('search'),
  80.       'startDate' => $this->format->date($request->get('start_date'), 'Y-m-d'),
  81.       'endDate' => $this->format->date($request->get('end_date'), 'Y-m-d'),
  82.       'deliveryStatus' => $request->get('delivery_status') ? $request->get('delivery_status') : null,
  83.       'field' => $request->get('field') ? $request->get('field') : 'created_date'
  84.     );
  85.     return new JsonResponse($emailAckMiddleware->getCount($parameter));
  86.   }
  87.   /**
  88.    * @Route("/api/email/ack/save", name="api_email_ack_save", methods={"GET"})
  89.    */
  90.   public function save(Request $requestEmailAckMiddleware $emailAckMiddleware): JsonResponse
  91.   {
  92.     $post json_decode($request->getContent(), true);
  93.     $parameter = array(
  94.       'companyId' => $this->session->get('company_id'),
  95.       'response' => $post['response'],
  96.       'messageId' => $post['message_id'],
  97.       'webhookResponse' => $post['webhook_response'],
  98.       'recipient' => $post['recipient'],
  99.       'adminEmail' => $post['admin_email'],
  100.       'timestamp' => $post['timestamp'],
  101.       'token' => $post['token'],
  102.       'deliveryStatus' => $post['delivery_status'],
  103.       'deliveryDescription' => $post['delivery_description'],
  104.       'emailOpened' => $post['email_opened'],
  105.       'status' => $post['status'],
  106.       'createdDate' => new \DateTime(),
  107.       'updatedDate' => new \DateTime(),
  108.       'subject' => $post['subject'],
  109.       'contactId' => $post['contact_id'],
  110.       'contactRecordId' => $post['contact_record_id'],
  111.       'contactType' => $post['contact_type'],
  112.       'transactionType' => $post['transaction_type'],
  113.       'transactionId' => $post['transaction_id'],
  114.       'transactionRecordId' => $post['transaction_record_id'],
  115.       'transactionThirdpartyId' => $post['transaction_thirdparty_id']
  116.     );
  117.     return new JsonResponse(['email_data' => $emailAckMiddleware->getList($parameter)]);
  118.   }
  119.   /**
  120.    * @Route("/api/email/bulk/sale/session", name="api_email_bulk_sale_session_add", methods={"POST"})
  121.    */
  122.   public function bulkSaleAddSession(Request $requestSessionMiddleware $sessionMiddleware): JsonResponse
  123.   {
  124.     if (!$this->session->get('company_id')) {
  125.       return new JsonResponse();
  126.     }
  127.     $post json_decode($request->getContent(), true);
  128.     // $post['sale_id'] = 184;
  129.     // $post['receivable_id'] = 3658;
  130.     //$post['all'] = true;
  131.     if (!isset($post['all']) && !isset($post['sale_id']) && !isset($post['receivable_id'])) {
  132.       return new JsonResponse();
  133.     }
  134.     $parameter = array(
  135.       'companyId' => $this->session->get('company_id'),
  136.       'adminUser' => $this->session->get('admin_user'),
  137.       //  '0',
  138.       'transactionVisibility' => $this->session->get('transaction_visibility'),
  139.       // '0',
  140.       'companyUserId' => $this->session->get('company_user_id'),
  141.       //'1351', 
  142.       'status' => '1',
  143.       'search' => addslashes($request->get('search')),
  144.       'isMulticurrencies' => 0,
  145.       'field' => 'selected_date',
  146.       'order' => 'ASC',
  147.       'start' => null,
  148.       'contactTypeFilter' => $request->get('contact_type'),
  149.       'contactIdFilter' => $request->get('contact_id'),
  150.       'contactRecordIdFilter' => $request->get('contact_record_id'),
  151.       'startDateFilter' => $this->format->date($request->get('start_date'), 'Y-m-d'),
  152.       'endDateFilter' => $this->format->date($request->get('end_date'), 'Y-m-d'),
  153.       'colorFilter' => $request->get('color'),
  154.       'typeFilter' => $request->get('type'),
  155.       'paymentStatusFilter' => $request->get('status'),
  156.       'tileFilter' => $request->get('tile'),
  157.       'all' => isset($post['all']) ? $post['all'] : false,
  158.       'sale_id' => isset($post['sale_id']) ? $post['sale_id'] : false,
  159.       'receivable_id' => isset($post['receivable_id']) ? $post['receivable_id'] : false
  160.     );
  161.     return new JsonResponse($sessionMiddleware->setBulkEmailSale($parameter));
  162.   }
  163.   /**
  164.    * @Route("/api/email/bulk/sale/session/data", name="api_email_bulk_sale_session_get", methods={"GET"})
  165.    */
  166.   public function bulkSaleGetSession(Request $request): JsonResponse
  167.   {
  168.     if (!$this->session->get('company_id')) {
  169.       return new JsonResponse();
  170.     }
  171.     $count 0;
  172.     if ($this->session->get('bulk_email_selected_sale')) {
  173.       if (isset($this->session->get('bulk_email_selected_sale')['sale_id'])) {
  174.         $count += count($this->session->get('bulk_email_selected_sale')['sale_id']);
  175.       }
  176.       if (isset($this->session->get('bulk_email_selected_sale')['receivable_id'])) {
  177.         $count += count($this->session->get('bulk_email_selected_sale')['receivable_id']);
  178.       }
  179.     }
  180.     return new JsonResponse(['count' => $count]);
  181.   }
  182.   /**
  183.    * @Route("/api/email/bulk/sale/session/d", name="api_email_bulk_sale_session_delete", methods={"POST"})
  184.    */
  185.   public function bulkSaleDeleteSession(Request $requestSessionMiddleware $sessionMiddleware): JsonResponse
  186.   {
  187.     if (!$this->session->get('company_id')) {
  188.       return new JsonResponse();
  189.     }
  190.     $post json_decode($request->getContent(), true);
  191.     //$post['receivable_id'] = 11212112;
  192.     $parameter = array(
  193.       'all' => isset($post['all']) ? $post['all'] : true,
  194.       'sale_id' => isset($post['sale_id']) ? $post['sale_id'] : false,
  195.       'receivable_id' => isset($post['receivable_id']) ? $post['receivable_id'] : false
  196.     );
  197.     return new JsonResponse($sessionMiddleware->unSetBulkEmailSale($parameter));
  198.   }
  199.   /**
  200.    * @Route("/api/email/bulk/sale/email/initiate", name="api_email_bulk_sale_email_initiate", methods={"POST"})
  201.    */
  202.   public function bulkEmailRequestInitiate(Request $requestSessionMiddleware $sessionMiddleware): Response
  203.   {
  204.     $parameter = array(
  205.       'companyId' => $this->session->get('company_id'),
  206.       'adminEmail' => $this->session->get('admin_email'),
  207.       'selectedId' => $this->session->get('bulk_email_selected_sale'),
  208.       'localCurrencySymbol' => $this->session->get('currency_symbol'),
  209.       'subdomainUsername' => $this->session->get('subdomain_username'),
  210.       'constantMessageFile' => $this->session->get('CONSTANT_MSG_FILE'),
  211.       'country' => $this->session->get('country'),
  212.       'companyAddress' => $this->session->get('company_address'),
  213.       'companyPhone' => $this->session->get('company_phone'),
  214.       'companyEmail' => $this->session->get('company_email'),
  215.       'federalTaxIdentifier' => $this->session->get('federal_tax_identifier'),
  216.       'stateTaxIdentifier' => $this->session->get('state_tax_identifier'),
  217.       'imageHostUrl' => $this->getParameter('IMAGE_HOST_PATH'),
  218.       'hostUrl' => isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : $request->getSchemeAndHttpHost()
  219.     );
  220.     $batchSize 10;
  221.     $batches $this->format->createBatches($this->session->get('bulk_email_selected_sale'), $batchSize);
  222.     foreach ($batches['sale_id'] as $chunk) {
  223.       $parameter['selectedId']['sale_id'] = $chunk;
  224.       $parameter['selectedId']['receivable_id'] = array();
  225.       $requestUrl $parameter['hostUrl'] . '/api/email/bulk/sale/send';
  226.       $response $this->client->request(
  227.         'POST',
  228.         $requestUrl,
  229.         [
  230.           'verify_peer' => false,
  231.           'timeout' => 600,
  232.           'headers' => [
  233.             'Accept' => 'application/json',
  234.           ],
  235.           'json' => $parameter,
  236.         ]
  237.       );
  238.       $content $response->getContent();
  239.     }
  240.     foreach ($batches['receivable_id'] as $chunk) {
  241.       $parameter['selectedId']['receivable_id'] = $chunk;
  242.       $parameter['selectedId']['sale_id'] = array();
  243.       $requestUrl $parameter['hostUrl'] . '/api/email/bulk/sale/send';
  244.       $response $this->client->request(
  245.         'POST',
  246.         $requestUrl,
  247.         [
  248.           'verify_peer' => false,
  249.           'timeout' => 600,
  250.           'headers' => [
  251.             'Accept' => 'application/json',
  252.           ],
  253.           'json' => $parameter,
  254.         ]
  255.       );
  256.       $content $response->getContent();
  257.     }
  258.     // remove all ids from session 
  259.     $sessionMiddleware->unSetBulkEmailSale(array('all' => true));
  260.     return new Response($content);
  261.   }
  262.   /**
  263.    * @Route("/api/email/bulk/sale/send", name="api_email_bulk_sale_session", methods={"POST"})
  264.    */
  265.   public function bulkSaleEmailSend(Request $request): JsonResponse
  266.   {
  267.     return new JsonResponse(true);
  268.   }
  269.   /**
  270.    * @Route("/api/email/receivable/statement/initiate", name="api_email_receivable_statement_initiate", methods={"POST"})
  271.    */
  272.   public function sendEmailStatementSale(Request $request): Response
  273.   {
  274.     $post json_decode($request->getContent(), true);
  275.     $parameter = array(
  276.       'customerIdArr' => $post['customer_ids'],
  277.       'companyId' => $this->session->get('company_id'),
  278.       'adminEmail' => $this->session->get('admin_email'),
  279.       'localCurrencySymbol' => $this->session->get('currency_symbol'),
  280.       'constantMessageFile' => $this->session->get('CONSTANT_MSG_FILE'),
  281.       'country' => $this->session->get('country'),
  282.       'companyAddress' => $this->session->get('company_address'),
  283.       'companyPhone' => $this->session->get('company_phone'),
  284.       'companyEmail' => $this->session->get('company_email'),
  285.       'federalTaxIdentifier' => $this->session->get('federal_tax_identifier'),
  286.       'stateTaxIdentifier' => $this->session->get('state_tax_identifier'),
  287.       'imageHostUrl' => $this->getParameter('IMAGE_HOST_PATH'),
  288.       'hostUrl' => isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : $request->getSchemeAndHttpHost(),
  289.       'subdomainUsername' => $this->session->get('subdomain_username')
  290.     );
  291.     $requestUrl $parameter['hostUrl'] . '/api/email/receivable/statement';
  292.     $response $this->client->request(
  293.       'POST',
  294.       $requestUrl,
  295.       [
  296.         'verify_peer' => false,
  297.         'headers' => [
  298.           'Accept' => 'application/json',
  299.         ],
  300.         'json' => $parameter
  301.       ]
  302.     );
  303.     $content $response->getContent();
  304.     return new Response($content);
  305.   }
  306.   /**
  307.    * @Route("/api/email/receivable/statement", name="api_email_receivable_statement", methods={"POST"})
  308.    */
  309.   public function receivableStatementSend(Request $request): JsonResponse
  310.   {
  311.     return new JsonResponse(true);
  312.   }
  313.   /**
  314.    * @Route("/api/bulk/sale/email/resend", name="api_email_bulk_resend", methods={"GET"})
  315.    */
  316.   public function bulkEmailResendInitiate(Request $requestAdminUsersMiddleware $adminUsersMiddlewareWebPaySettingsMiddleware $webPaySettingsMiddlewareServerProcessingMiddleware $serverProcessingMiddleware): Response
  317.   {
  318.     $authHeader "";
  319.     // Try using apache_request_headers (works in Apache)
  320.     if (function_exists('apache_request_headers')) {
  321.       $headers apache_request_headers();
  322.       if (isset($headers['Authorization'])) {
  323.         $authHeader $headers['Authorization'];
  324.       } elseif (isset($headers['authorization'])) {
  325.         $authHeader $headers['authorization']; // lowercase fallback
  326.       }
  327.     }
  328.     if ($authHeader !== "Ty7JQsyqMhc1gCItvmGp54JmPu75lq6MIblpQK7UWcXKV2dpABpTkpXxVM3M97I3") {
  329.       $errorParameter = array(
  330.         'log' => '/log/Notification/InvoiceNotification.log',
  331.         'message' => 'Auth Failed'
  332.       );
  333.       $this->backgroundProcessingMiddleware->enterLog($errorParameter);
  334.       return new Response('Auth Failed');
  335.     }
  336.     $bgDataWithCompany $this->backgroundProcessingMiddleware->getCronData(array('withCompany' => true));
  337.     $companyId '';
  338.     if (isset($bgDataWithCompany[0]['company_id']) && !empty($bgDataWithCompany[0]['company_id'])) {
  339.       $companyId $bgDataWithCompany[0]['company_id'];
  340.       $serverProcessingData $serverProcessingMiddleware->getData(array('companyId' => $companyId));
  341.       if (isset($serverProcessingData['id']) && !empty($serverProcessingData['id'])) {
  342.         $errorParameter = array(
  343.           'log' => '/log/Notification/InvoiceNotification.log',
  344.           'message' => 'Processing Ongoing for - ' $companyId
  345.         );
  346.         $this->backgroundProcessingMiddleware->enterLog($errorParameter);
  347.         return new Response('Processing Ongoing');
  348.       }
  349.       $serverProcessingMiddleware->save(array('companyId' => $companyId'serverIp' => $_SERVER['REMOTE_ADDR'], 'updatedDate' => new \DateTime()));
  350.       $params = array();
  351.       $params['to'] = 'himanshu@priority-software.com,rahul@priority-software.com';
  352.       $params['subject'] = "Email cron for Company Id - " $companyId;
  353.       $params['html'] = "<html><head><style>a{background: #1991EB !important;border:1px solid #1585D8 !important;padding: 6px 20px 6px 20px;color: #fff !important;text-decoration: none;font-size: 14px;}</style></head></html>
  354.                           Hello Admin
  355.                           <br/><br/>
  356.                           A cron for resending an email has triggered for Company Id: " $companyId "
  357.                           <br/><br/>
  358.                           Sincerely
  359.                           <br/>
  360.                           AccountEdge Connect Team";
  361.       $params['body'] = "Hello Admin
  362.                           A cron for resending an email has triggered for Company Id: " $companyId "
  363.                           Sincerely
  364.                           AccountEdge Connect Team";
  365.       $this->mailgun->sendEmail($params);
  366.       $companyData $this->companyMiddleware->get(array('companyId' => $companyId));
  367.       if (isset($companyData) && !empty($companyData)) {
  368.         $companyData json_decode($companyDatatrue);
  369.         $adminUserData $adminUsersMiddleware->get(array('companyId' => $companyId));
  370.         $webPayData $webPaySettingsMiddleware->get(array('companyId' => $companyId));
  371.         $webPayData json_decode($webPayDatatrue);
  372.         $companyAddress '';
  373.         if (isset($companyData['fileCompanyName'])) {
  374.           $companyAddress .= $companyData['fileCompanyName'] . ', ';
  375.         }
  376.         if (isset($companyData['address'])) {
  377.           $companyAddress .= $companyData['address'] . PHP_EOL;
  378.         }
  379.         if (isset($companyData['address2'])) {
  380.           $companyAddress .= $companyData['address2'] . PHP_EOL;
  381.         }
  382.         if (isset($companyData['city'])) {
  383.           $companyAddress .= $companyData['city'] . ' ';
  384.         }
  385.         if (isset($companyData['state'])) {
  386.           $companyAddress .= $companyData['state'] . ' ';
  387.         }
  388.         if (isset($companyData['zipcode'])) {
  389.           $companyAddress .= $companyData['zipcode'] . ' ';
  390.         }
  391.         $messageFile 'EnglishUS';
  392.         switch ($companyData['country']) {
  393.           case 2:
  394.             $messageFile 'EnglishUK';
  395.             break;
  396.           case 4:
  397.             $messageFile 'EnglishCA';
  398.             break;
  399.         }
  400.         $parameter = array(
  401.           'companyId' => $companyId,
  402.           'adminEmail' => $adminUserData['email'],
  403.           // 'selectedId' => $initiatedData,
  404.           'localCurrencySymbol' => $companyData['currencySymbol'],
  405.           'subdomainUsername' => $webPayData['subdomainUsername'],
  406.           'constantMessageFile' => $messageFile,
  407.           'country' => $companyData['country'],
  408.           'companyAddress' => $companyAddress,
  409.           'companyPhone' => $companyData['phone'],
  410.           'companyEmail' => $companyData['companyEmail'],
  411.           'federalTaxIdentifier' => $companyData['federalTaxIdentifier'],
  412.           'stateTaxIdentifier' => $companyData['stateTaxIdentifier'],
  413.           'imageHostUrl' => $this->getParameter('IMAGE_HOST_PATH'),
  414.           'hostUrl' => isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : $request->getSchemeAndHttpHost()
  415.         );
  416.         $bgData $this->backgroundProcessingMiddleware->getCronData(array('companyId' => $companyId));
  417.         foreach ($bgData as $key => $data) {
  418.           if (isset($data['initiated_data']) && !empty($data['initiated_data'])) {
  419.             $initiatedData json_decode($data['initiated_data'], true);
  420.             if ((isset($initiatedData['sale_id']) && !empty($initiatedData['sale_id'])) || (isset($initiatedData['receivable_id']) && !empty($initiatedData['receivable_id']))) {
  421.               $this->backgroundProcessingMiddleware->updateMultiple(array('companyId' => $companyId'uniqueKey' => $data['unique_key'], 'emailRequestInitiated' => '1'));
  422.               $parameter['selectedId'] = $initiatedData;
  423.               $requestUrl $parameter['hostUrl'] . '/api/email/bulk/sale/send';
  424.               $response $this->client->request(
  425.                 'POST',
  426.                 $requestUrl,
  427.                 [
  428.                   'verify_peer' => false,
  429.                   'timeout' => 600,
  430.                   'headers' => [
  431.                     'Accept' => 'application/json',
  432.                   ],
  433.                   'json' => $parameter,
  434.                 ]
  435.               );
  436.               $content $response->getContent();
  437.             }
  438.           }
  439.         }
  440.         $serverProcessingMiddleware->delete(array('companyId' => $companyId'serverIp' => $_SERVER['REMOTE_ADDR']));
  441.       }
  442.     }
  443.     return new Response('Processing Completed');
  444.   }
  445. }