IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Trida pro prodlouzeni objednavek

Aktivity
Avatar
Libi
Člen
Avatar
Libi:14.2.2017 9:09

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());
}
 
Odpovědět
14.2.2017 9:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.