NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
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.