Files
module-vendor-sales-report/Model/EmailSender.php
2025-11-03 17:20:07 -05:00

117 lines
3.3 KiB
PHP

<?php
namespace Shopkeeper\VendorSalesReport\Model;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Translate\Inline\StateInterface;
use Magento\Store\Model\StoreManagerInterface;
use Shopkeeper\VendorSalesReport\Helper\Data as ConfigHelper;
use Psr\Log\LoggerInterface;
class EmailSender
{
/**
* @var TransportBuilder
*/
protected $transportBuilder;
/**
* @var StateInterface
*/
protected $inlineTranslation;
/**
* @var StoreManagerInterface
*/
protected $storeManager;
/**
* @var ConfigHelper
*/
protected $configHelper;
/**
* @var LoggerInterface
*/
protected $logger;
/**
* @param TransportBuilder $transportBuilder
* @param StateInterface $inlineTranslation
* @param StoreManagerInterface $storeManager
* @param ConfigHelper $configHelper
* @param LoggerInterface $logger
*/
public function __construct(
TransportBuilder $transportBuilder,
StateInterface $inlineTranslation,
StoreManagerInterface $storeManager,
ConfigHelper $configHelper,
LoggerInterface $logger
) {
$this->transportBuilder = $transportBuilder;
$this->inlineTranslation = $inlineTranslation;
$this->storeManager = $storeManager;
$this->configHelper = $configHelper;
$this->logger = $logger;
}
/**
* Send report email
*
* @param string $csvContent
* @param string $filename
* @param string $month
* @param string $year
* @return bool
*/
public function sendReport($csvContent, $filename, $month = null, $year = null)
{
if (!$this->configHelper->isEmailEnabled()) {
return false;
}
$recipients = $this->configHelper->getEmailRecipients();
if (empty($recipients)) {
$this->logger->warning('Vendor Sales Report: No email recipients configured');
return false;
}
try {
$this->inlineTranslation->suspend();
$sender = [
'name' => $this->storeManager->getStore()->getName(),
'email' => $this->storeManager->getStore()->getConfig('trans_email/' . $this->configHelper->getEmailSender() . '/email')
];
$subject = $this->configHelper->getEmailSubject($month, $year);
$transport = $this->transportBuilder
->setTemplateIdentifier('vendorsalesreport_email_template')
->setTemplateOptions([
'area' => \Magento\Framework\App\Area::AREA_ADMINHTML,
'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
])
->setTemplateVars([
'subject' => $subject,
'month' => $month,
'year' => $year
])
->setFromByScope($sender)
->addTo($recipients)
->addAttachment($csvContent, $filename, 'text/csv')
->getTransport();
$transport->sendMessage();
$this->inlineTranslation->resume();
return true;
} catch (\Exception $e) {
$this->logger->error('Vendor Sales Report Email Error: ' . $e->getMessage());
$this->inlineTranslation->resume();
return false;
}
}
}