<?php
namespace App\EventSubscriber;
use App\Env;
use App\Event\OrderMakedEvent;
use App\Event\OrderPayedEvent;
use App\Repository\CartRepository;
use App\Repository\ProdRepository;
use App\Repository\UserRepository;
use App\Service\Baselinker\DTO\Prod;
use App\Repository\EsystemRepository;
use App\Service\Baselinker\DTO\Order;
use App\Repository\DeliveryRepository;
use App\Service\Baselinker\Baselinker;
use App\Service\Baselinker\DTO\Company;
use App\Service\Baselinker\DTO\Delivery;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class BaselinkerOrder implements EventSubscriberInterface
{
public function __construct(
private CartRepository $Cart,
private ProdRepository $Prods,
private DeliveryRepository $Delivery,
private EsystemRepository $Esystems,
private UserRepository $Users,
private Baselinker $baselinker,
private RequestStack $requestStack,
)
{
$this->baselinker->setToken(Env::baselinker_token());
}
public function onOrderMaked(OrderMakedEvent $event): void
{
if (Env::site() != Env::MIX && Env::site() != Env::OPT_MIX) {
return;
}
$order = $event->getOrder();
$user = $this->Users->find($order->getUser());
$cartitems = $this->Cart->getByOrder($order->getId());
$delivery = $this->Delivery->find($order->getDelivery());
$esystem = $this->Esystems->find($order->getEsystem());
$bl_prods = [];
foreach ($cartitems as $k => $v) {
$prod = $v->getProd();
$discount = ($v->getSkidka()) ? $v->getSkidka() : $v->getUserdiscount() + $v->getNumdiscount();
$bl_prods[] = new Prod((string) $prod->getId(), '', (string) $prod->getName(), (string) $prod->getExternalId(), $v->getPrice() * (100 - $discount) / 100, 0, $v->getNum(), (float) $prod->getWeight());
}
$bl = $this->baselinker->newOrder(
new Order((int) $order->getId(), 0, (int) $order->getTstamp(), (string) $order->getPhone(), (string) $order->getEmail(), Env::currency_code(), (string) $esystem->getName(), (string) $order->getComment()),
$bl_prods,
new Delivery((string) $delivery->getIntname(), (string) $delivery->getName(), (string) $order->getDeliverycost(), (string) $order->getName(), (string) $order->getAddr(), (string) $order->getCity(), '', (string) $order->getPostcode(), ""),
new Company($user->getCompanyNip(), $user->getCompanyName(), $user->getCompanyIndex(), $user->getCompanyCity(), $user->getCompanyStreet(), $user->getCompanyHouse(), $user->getCompanyFlat())
);
}
public function onOrderPayed(OrderPayedEvent $event): void
{
if (Env::site() != Env::MIX && Env::site() != Env::OPT_MIX) {
return;
}
// $baselinker = new Baselinker(Env::baselinker_token());
// $baselinker->orderPayed($order_id, $order->amount);
$order = $event->getOrder();
$this->baselinker->orderPayed($order->getId(), $order->getAmount());
}
public static function getSubscribedEvents(): array
{
return [
OrderMakedEvent::NAME => 'onOrderMaked',
OrderPayedEvent::NAME => 'onOrderPayed',
];
}
}