Files
esun3d/app/code/Esun/Customer/Block/Order/History.php
T
2026-09-15 10:35:56 +08:00

120 lines
4.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Esun\Customer\Block\Order;
use Esun\Customer\Model\Order\AccountOrderProvider;
use Esun\Review\Model\Order\AwaitingReviewProvider;
use Esun\Oceanpayment\Model\Config as OceanpaymentConfig;
use Magento\Catalog\Helper\Image;
use Magento\Customer\Model\Session;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\Data\Helper\PostHelper;
use Magento\Sales\Model\Order\Config;
use Magento\Sales\Helper\Reorder;
use Magento\Sales\Model\ResourceModel\Order\Collection;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
class History extends \Magento\Sales\Block\Order\History
{
private ?Collection $esunOrders = null;
public function __construct(
Context $context,
CollectionFactory $orderCollectionFactory,
Session $customerSession,
Config $orderConfig,
private readonly AccountOrderProvider $provider,
private readonly AwaitingReviewProvider $awaitingReviews,
private readonly Image $imageHelper,
private readonly Reorder $reorderHelper,
private readonly PostHelper $postHelper,
array $data = []
) {
parent::__construct($context, $orderCollectionFactory, $customerSession, $orderConfig, $data);
}
public function getOrders(): Collection|false
{
$customerId = (int)$this->_customerSession->getCustomerId();
if (!$customerId) {
return false;
}
if ($this->esunOrders === null) {
$status = (string)$this->getRequest()->getParam('status');
$search = mb_substr(trim((string)$this->getRequest()->getParam('q')), 0, 100);
$this->esunOrders = $this->provider->getHistory($customerId, $status ?: null, $search);
}
return $this->esunOrders;
}
public function getCounts(): array
{
$counts = $this->provider->getStatusCounts((int)$this->_customerSession->getCustomerId());
$counts['awaiting_review'] = $this->awaitingReviews->getCount((int)$this->_customerSession->getCustomerId());
return $counts;
}
public function getCurrentStatus(): string
{
return (string)$this->getRequest()->getParam('status');
}
public function getSearchQuery(): string
{
return trim((string)$this->getRequest()->getParam('q'));
}
public function getItemImageUrl(\Magento\Sales\Model\Order\Item $item): string
{
$product = $item->getProduct();
return $product ? $this->imageHelper->init($product, 'wishlist_thumbnail')->getUrl()
: $this->imageHelper->getDefaultPlaceholderUrl('thumbnail');
}
public function canRepay(\Magento\Sales\Model\Order $order): bool
{
$payment = $order->getPayment();
$method = $payment ? (string)$payment->getMethod() : '';
return (string)$order->getStatus() === 'pending'
&& (float)$order->getTotalPaid() <= 0.0
&& in_array($method, [OceanpaymentConfig::METHOD_CODE, OceanpaymentConfig::LEGACY_METHOD_CODE], true);
}
public function getRepayUrl(\Magento\Sales\Model\Order $order): string
{
return $this->getUrl('esun_customer/order/repay', ['order_id' => (int)$order->getId()]);
}
public function canBuyAgain(\Magento\Sales\Model\Order $order): bool
{
return $this->reorderHelper->canReorder((int)$order->getId());
}
public function getBuyAgainPostData(\Magento\Sales\Model\Order $order): string
{
return $this->postHelper->getPostData($this->getReorderUrl($order));
}
public function canCancel(\Magento\Sales\Model\Order $order): bool
{
return (string)$order->getStatus() === 'pending' && $order->canCancel();
}
public function getCancelUrl(\Magento\Sales\Model\Order $order): string
{
return $this->getUrl('esun_customer/order/cancel', ['order_id' => (int)$order->getId()]);
}
protected function _prepareLayout()
{
parent::_prepareLayout();
$pager = $this->getChildBlock('pager');
if ($pager instanceof \Magento\Theme\Block\Html\Pager) {
$pager->setShowPerPage(false);
}
return $this;
}
}