//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj,
mam tridu pro prodlouzeni objednavek (v prostredi Nette, ale na tom nezalezi):
<?php namespace App\AdminModule\Libs; use Nette\Object; use App\Model\Entities\Order as OrderEntity; use App\Model\Entities\Customer as CustomerEntity; use Kdyby\Doctrine\EntityManager; class OrderExtender extends Object { /** @var EntityManager */ protected $em; /** @var boolean */ protected $preview = FALSE; /** @var OrderEntity */ protected $extendedOrder = NULL; /** @var string */ protected $result; /** * * @param EntityManager $em */ public function __construct(EntityManager $em) { $this->em = $em; } /** * * @param boolean $preview */ public function setPreviewMode($preview) { $this->preview = $preview; } /** * * @return boolean */ public function getPreviewMode() { return $this->preview; } /** * * @return string */ public function getResult() { return $this->result; } private function flush() { $this->result = ""; $this->extendedOrder = NULL; } /** * * @return OrderEntity * @throws \Nette\InvalidStateException */ public function getExtendedOrder() { if (is_null($this->extendedOrder)) throw new \Nette\InvalidStateException('Prodloužená objednávka neexistuje!'); return $this->extendedOrder; } /** * * @param int $orderId * @return boolean */ public function extendOrder($orderId) { $this->flush(); try { $order = $this->getValidOrder($orderId); $extendedOrder = $this->extend($order); if (!$this->preview) { $this->em->persist($extendedOrder); $this->em->flush(); $this->result = sprintf("Objednávka %d byla prodloužena na objednávku %d", $orderId, $extendedOrder->id); } else { $this->result = sprintf("Bude prodloužena objednávka %d", $orderId); } return TRUE; } catch (\Nette\InvalidStateException $e) { $this->handleException($e); return FALSE; } } /** * * @param \Nette\InvalidStateException $e */ private function handleException($e) { if ($this->preview) { $this->result = $e->getMessage(); } else { //zalogovat } } /** * * @param int $orderId * @return OrderEntity * @throws \Nette\InvalidStateException */ private function getValidOrder($orderId) { $order = $this->em->find(OrderEntity::class, $orderId); if (!$order) throw new \Nette\InvalidStateException(sprintf("Objednávka %d nenalezena!", $orderId)); if (!$order->isPaid()) throw new \Nette\InvalidStateException(sprintf("Objednávka %d neuhrazena!", $orderId)); //atd return $order; } /** * * @param OrderEntity $order * @return OrderEntity */ private function extend($order) { $eOrder = new OrderEntity(); $eOrder->renewedFrom = $order; $eOrder->price = 1000.0; //atd. produkt jako takovy ted neresim $this->extendedOrder = $eOrder; return $eOrder; } } }
Vytvorim instanci extenderu a prodlouzim objednavku:
$orderId = 123; $extender = new OrderExtender($this->em); $extender->setPreviewMode(TRUE); $result = $extender->extendOrder($orderId); $log = sprintf("[%d] %s", (int)$result, $extender->getResult());
Jdu spravnym smerem nebo je tam nejaka navrhova bota? Kdyz budu prodluzovat vic objednavek v cyklu, muze tam nastat nejaky problem?
$orders = array(123,456,789); $extender = new OrderExtender($this->em); $extender->setPreviewMode(TRUE); $log = ""; foreach($orders as $orderId) { $result = $extender->extendOrder($orderId); $log .= sprintf("[%d] %s", (int)$result, $extender->getResult()); }
Zobrazeno 1 zpráv z 1.