Block/Payment/Billet.php
<?php
/**
* Class Billet
*
* @author MundiPagg Embeddables Team <embeddables@mundipagg.com>
* @copyright 2017 MundiPagg (http://www.mundipagg.com)
* @license http://www.mundipagg.com Copyright
*
* @link http://www.mundipagg.com
*/
namespace MundiPagg\MundiPagg\Block\Payment;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Checkout\Model\Session as CheckoutSession;
use Magento\Sales\Api\Data\OrderInterface as Order;
use Magento\Sales\Api\Data\OrderPaymentInterface as Payment;
use Mundipagg\Core\Kernel\Repositories\OrderRepository;
use Mundipagg\Core\Kernel\ValueObjects\Id\OrderId;
use Mundipagg\Core\Kernel\ValueObjects\Id\SubscriptionId;
use Mundipagg\Core\Recurrence\Repositories\SubscriptionRepository;
use MundiPagg\MundiPagg\Concrete\Magento2CoreSetup;
use Mundipagg\Core\Recurrence\Repositories\ChargeRepository as SubscriptionChargeRepository;
class Billet extends Template
{
protected $checkoutSession;
/**
* Link constructor.
* @param Context $context
* @param CheckoutSession $checkoutSession
*/
public function __construct(Context $context, CheckoutSession $checkoutSession)
{
$this->checkoutSession = $checkoutSession;
parent::__construct($context, []);
}
/**
* @return CheckoutSession
*/
protected function getCheckoutSession()
{
return $this->checkoutSession;
}
/**
* @return Order
*/
protected function getLastOrder()
{
if (! ($this->checkoutSession->getLastRealOrder()) instanceof Order) {
throw new \InvalidArgumentException;
}
return $this->checkoutSession->getLastRealOrder();
}
/**
* @return Payment
*/
protected function getPayment()
{
if (! ($this->getLastOrder()->getPayment()) instanceof Payment) {
throw new \InvalidArgumentException;
}
return $this->getLastOrder()->getPayment();
}
/**
* @return string
*/
public function getBilletUrl()
{
$method = $this->getPayment()->getMethod();
if (strpos($method, "mundipagg_billet") === false) {
return;
}
$info = $this->getPayment();
$boletoUrl = $this->getPayment()->getAdditionalInformation('billet_url');
Magento2CoreSetup::bootstrap();
$boletoUrl = $this->getBoletoLinkFromOrder($info);
if (!$boletoUrl) {
$boletoUrl = $this->getBoletoLinkFromSubscription($info);
}
return $boletoUrl;
}
private function getBoletoLinkFromOrder($info)
{
$lastTransId = $info->getLastTransId();
$orderId = substr($lastTransId, 0, 19);
if (!$orderId) {
return null;
}
$orderRepository = new OrderRepository();
$order = $orderRepository->findByMundipaggId(new OrderId($orderId));
if ($order !== null) {
$charges = $order->getCharges();
foreach ($charges as $charge) {
$transaction = $charge->getLastTransaction();
$savedBoletoUrl = $transaction->getBoletoUrl();
if ($savedBoletoUrl !== null) {
$boletoUrl = $savedBoletoUrl;
}
}
}
return $boletoUrl;
}
private function getBoletoLinkFromSubscription($info)
{
$subscriptionRepository = new SubscriptionRepository();
$subscription = $subscriptionRepository->findByCode($info->getOrder()->getIncrementId());
if (!$subscription) {
return null;
}
$chargeRepository = new SubscriptionChargeRepository();
$subscriptionId =
new SubscriptionId(
$subscription->getMundipaggId()->getValue()
);
$charge = $chargeRepository->findBySubscriptionId($subscriptionId);
if (!empty($charge[0])) {
return $charge[0]->getBoletoUrl();
}
return null;
}
}