188 lines
6.0 KiB
PHP
188 lines
6.0 KiB
PHP
<?php
|
|
|
|
class stAllegroSendTackingNumberTask extends stTask
|
|
{
|
|
const LIMIT = 25;
|
|
|
|
protected $carriers = null;
|
|
|
|
public function started(): void
|
|
{
|
|
$this->setParameter('last_id', null);
|
|
}
|
|
|
|
public function count(): int
|
|
{
|
|
$c = $this->getCriteria();
|
|
return AllegroParcelTrackingNumberQueuePeer::doCount($c);
|
|
}
|
|
|
|
public function execute(int $offset): int
|
|
{
|
|
$c = $this->getCriteria();
|
|
$c->setLimit(self::LIMIT);
|
|
|
|
$lastId = $this->getParameter('last_id');
|
|
|
|
if ($lastId)
|
|
{
|
|
$c->add(AllegroParcelTrackingNumberQueuePeer::ORDER_ID, $lastId, Criteria::GREATER_THAN);
|
|
}
|
|
|
|
$api = stAllegroApi::getInstance();
|
|
$controller = sfContext::getInstance()->getController();
|
|
|
|
/**
|
|
* @var AllegroParcelTrackingNumberQueue $trackingNumberQueue
|
|
*/
|
|
foreach (AllegroParcelTrackingNumberQueuePeer::doSelectJoinOrder($c) as $trackingNumberQueue)
|
|
{
|
|
$this->setParameter('last_id', $trackingNumberQueue->getOrderId());
|
|
|
|
$order = $trackingNumberQueue->getOrder();
|
|
$numbers = $order->getOrderDelivery()->getNumbers();
|
|
|
|
if (empty($numbers)) {
|
|
$trackingNumberQueue->delete();
|
|
$offset++;
|
|
continue;
|
|
}
|
|
|
|
$deliveryName = $order->getOrderDelivery()->getName();
|
|
$allegroDeliveryId = $order->getOrderDelivery()->getOptAllegroDeliveryMethodId();
|
|
$orderLink = sprintf('[%s](%s)', $order->getNumber(), $controller->genUrl('@stOrder?action=edit&id='.$order->getId()));
|
|
|
|
if (null !== stPocztaPolskaClient::getServiceByAllegroDeliveryMethodId($allegroDeliveryId))
|
|
{
|
|
$carrierId = "POCZTA_POLSKA";
|
|
}
|
|
else
|
|
{
|
|
$carrierId = $this->getCarrierId($deliveryName);
|
|
|
|
if (false === $carrierId)
|
|
{
|
|
return $this->doCount();
|
|
}
|
|
}
|
|
|
|
if (!$carrierId)
|
|
{
|
|
$this->getLogger()->error("Wystąpił błąd podczas dodawania numeru przesyłki %number% dla zamówienia %order%:\n%error%", array(
|
|
"%number%" => implode(', ', $numbers),
|
|
"%error%" => "Nie znaleziono pasującego identyfikatora przewoźnika",
|
|
'%order%' => $orderLink,
|
|
));
|
|
|
|
$trackingNumberQueue->delete();
|
|
|
|
$offset++;
|
|
continue;
|
|
}
|
|
|
|
foreach ($numbers as $number)
|
|
{
|
|
if (strpos($number, ' ') !== false)
|
|
{
|
|
$this->getLogger()->error("Wystąpił błąd podczas dodawania numeru przesyłki %number% dla zamówienia %order%:\n%error%", array(
|
|
"%number%" => $number,
|
|
"%error%" => "Nieprawidłowy format numeru przesyłki",
|
|
'%order%' => $orderLink,
|
|
));
|
|
|
|
$offset++;
|
|
|
|
continue;
|
|
}
|
|
|
|
$this->getLogger()->info("Wysyłanie numeru przesyłki \"%number%\" dla zamówienia %order%", array(
|
|
"%number%" => $number,
|
|
'%order%' => $orderLink,
|
|
));
|
|
|
|
try
|
|
{
|
|
if ($carrierId)
|
|
{
|
|
$api->addParcelTrackingNumber($order->getOptAllegroCheckoutFormId(), $carrierId, $number);
|
|
}
|
|
else
|
|
{
|
|
$this->getLogger()->error("Wystąpił błąd podczas dodawania numeru przesyłki %number% dla zamówienia %order%:\n%error%", array(
|
|
"%number%" => $number,
|
|
"%error%" => "Nie znaleziono pasującego identyfikatora przewoźnika",
|
|
'%order%' => $orderLink,
|
|
));
|
|
}
|
|
}
|
|
catch (Throwable $e)
|
|
{
|
|
$error = stAllegroApi::getLastErrorsAsString();
|
|
|
|
$this->getLogger()->error("Wystąpił błąd podczas dodawania numeru przesyłki %number% dla zamówienia %order%:\n%error%", array(
|
|
"%number%" => $number,
|
|
"%error%" => $error ? $error : $e->getMessage(),
|
|
"%order%" => $orderLink,
|
|
));
|
|
}
|
|
}
|
|
|
|
$trackingNumberQueue->delete();
|
|
$offset++;
|
|
usleep(300000);
|
|
}
|
|
|
|
sleep(1);
|
|
|
|
return $offset;
|
|
}
|
|
|
|
protected function getCriteria()
|
|
{
|
|
$c = new Criteria();
|
|
$c->addAscendingOrderByColumn(AllegroParcelTrackingNumberQueuePeer::ORDER_ID);
|
|
return $c;
|
|
}
|
|
|
|
protected function getCarriers()
|
|
{
|
|
$api = stAllegroApi::getInstance();
|
|
|
|
if (null === $this->carriers)
|
|
{
|
|
$this->carriers = $api->getAvailableShippingCarriers();
|
|
}
|
|
|
|
return $this->carriers;
|
|
}
|
|
|
|
public function getCarrierId($deliveryName)
|
|
{
|
|
$deliveryName = str_replace('Dostawa Allegro - ', '', $deliveryName);
|
|
|
|
try
|
|
{
|
|
$carriers = $this->getCarriers();
|
|
}
|
|
catch(Throwable $e)
|
|
{
|
|
$error = stAllegroApi::getLastErrorsAsString();
|
|
$this->getLogger()->error("Wystąpił błąd podczas pobierania dostępnych identyfikatorów przewoźników:\n%error%", array(
|
|
"%error%" => $error ? $error : $e->getMessage(),
|
|
));
|
|
|
|
return false;
|
|
}
|
|
|
|
foreach ($carriers as $carrier)
|
|
{
|
|
if (!in_array($carrier->id, array('OTHER', 'ALLEGRO')) && false !== strpos($deliveryName, $carrier->name))
|
|
{
|
|
return $carrier->id;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
} |