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; } }