How do I change not using ObjectManager directly? and use Dependency injection? what about my SQL query? My code is work, but seems not in good Magento style, anyone can help to correct me? I am appreciate if anyone can help
<?php
declare(strict_types=1);
namespace ABC\Fixpayment\Cron;
use Magento\Email\Model\BackendTemplate;
use Magento\Framework\Mail\Template\TransportBuilder;
use Psr\Log\LoggerInterface;
class Check
{
private $logger;
private $transportBuilder;
public function __construct(
LoggerInterface $logger,
BackendTemplate $emailTemplate,
TransportBuilder $transportBuilder
)
{
$this->logger = $logger;
$this->transportBuilder = $transportBuilder;
$this->emailTemplate = $emailTemplate;
}
public function execute()
{
//Cron job - get sales_order_payment information by below query.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$tableName = $resource->getTableName('sales_order_payment');
$attribute_information = "SELECT sales_order.increment_id, sales_order_payment.additional_information
FROM sales_order LEFT JOIN sales_order_payment ON sales_order.entity_id = sales_order_payment.parent_id
WHERE sales_order_payment.method = 'fixpayment' AND sales_order.updated_at >= NOW() - INTERVAL 30 MINUTE";
$results = $connection->fetchAll($attribute_information);
// Fetch sql query result
foreach ($results as $result) {
$increment_id = $result['increment_id'];
$additional_information = $result['additional_information'];
$additional_information_arr = json_decode($additional_information);
$address_verification_json = $additional_information_arr->shipping_address_verification;
$address_verification_arr = json_decode($address_verification_json);
$postal_code = $address_verification_arr->postal_code;
//Grab Postal Code, if score lower than 1, email to customer support
if ($postal_code < 1) {
try {
$templateVars = [
'order_number' => $increment_id,
'postal_code_score' => $postal_code,
'fixOrderId' => $additional_information_arr->fixOrderId
];
$emails = ['[email protected]'];
$email_template = $this->emailTemplate->load('fix_temp', 'template_code');
$email_template_id = $email_template->getTemplateId();
$transport = $this->transportBuilder->setTemplateIdentifier($email_template_id)
->setTemplateOptions( [ 'area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => 1 ] )
->setTemplateVars( $templateVars )
->setFrom( [ "name" => "Magento Fix Order", "email" => "[email protected]" ] )
->addTo($emails)
->setReplyTo('[email protected]')
->getTransport();
$transport->sendMessage();
} catch (Exception $e) {
$this->logger->error($e);
}
}
}
}
}