Your IP : 216.73.216.52


Current Path : /proc/thread-self/root/var/www/surf/TYPO3/src/surf/Classes/Controller/
Upload File :
Current File : //proc/thread-self/root/var/www/surf/TYPO3/src/surf/Classes/Controller/OrderController.php

<?php

declare(strict_types=1);

namespace Torresani\Surf\Controller;
use TYPO3\CMS\Extbase\Http\ForwardResponse;
use TYPO3\CMS\Core\Type\ContextualFeedbackSeverity;


/**
 * This file is part of the "Surf" Extension for TYPO3 CMS.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 *
 * (c) 2023 Roberto Torresani <roberto@torresani.eu>
 */

/**
 * OrderController
 */
class OrderController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{

    /**
     * orderRepository
     *
     * @var \Torresani\Surf\Domain\Repository\OrderRepository
     */
    protected $orderRepository = null;

    /**
     * @param \Torresani\Surf\Domain\Repository\OrderRepository $orderRepository
     */
    public function injectOrderRepository(\Torresani\Surf\Domain\Repository\OrderRepository $orderRepository)
    {
        $this->orderRepository = $orderRepository;
    }

    /**
     * orderItemRepository
     *
     * @var \Torresani\Surf\Domain\Repository\OrderItemRepository
     */
    protected $orderItemRepository = null;

    /**
     * @param \Torresani\Surf\Domain\Repository\OrderItemRepository $orderItemRepository
     */
    public function injectOrderItemRepository(\Torresani\Surf\Domain\Repository\OrderItemRepository $orderItemRepository)
    {
        $this->orderItemRepository = $orderItemRepository;
    }

    /**
     * logRepository
     *
     * @var \Torresani\Surf\Domain\Repository\LogRepository
     */
    protected $logRepository = null;

    /**
     * @param \Torresani\Surf\Domain\Repository\LogRepository $logRepository
     */
    public function injectLogRepository(\Torresani\Surf\Domain\Repository\LogRepository $logRepository)
    {
        $this->logRepository = $logRepository;
    }

    /**
     * action list
     *
     * @return \Psr\Http\Message\ResponseInterface
     */
    public function listAction(): \Psr\Http\Message\ResponseInterface
    {
        $orders = $this->orderRepository->findAll();
        $this->view->assign('orders', $orders);
        return $this->htmlResponse();
    }

    /**
     * action show
     *
     * @param \Torresani\Surf\Domain\Model\Order $order
     * @param \Torresani\Surf\Domain\Model\Vendor $vendor
     * @return \Psr\Http\Message\ResponseInterface
     */
    public function showAction(\Torresani\Surf\Domain\Model\Order $order, \Torresani\Surf\Domain\Model\Vendor $vendor=null): \Psr\Http\Message\ResponseInterface
    {
        //https://surf.38121.it/order-1?tx_surf_order%5Baction%5D=show&tx_surf_order%5Bcontroller%5D=Order&tx_surf_order%5Border%5D=1
        $iteration = 0;
        $statusOrder = 100;
        $filteredOrderItems = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
        $vendorList = [];
        $forceVendor = null;
        if ($GLOBALS['TSFE']->fe_user->user['usergroup'] <> 2 && $vendor) {
            $forceVendor = $vendor->getUser();
        }
        foreach ($order->getOrderitem() as $key => $item) {
            if ($item->getVendor()->getUser() == $GLOBALS['TSFE']->fe_user->user['uid'] || $item->getVendor()->getUser() == $forceVendor) {
                if ($statusOrder > $item->getStatus()) {
                    $statusOrder = $item->getStatus();
                }
                $filteredOrderItems->attach($item);
            } else if (!$forceVendor && $GLOBALS['TSFE']->fe_user->user['usergroup'] <> 2) {
                if ($statusOrder > $item->getStatus()) {
                    $statusOrder = $item->getStatus();
                }
                $filteredOrderItems->attach($item);
            }
            if ($GLOBALS['TSFE']->fe_user->user['usergroup'] <> 2) {
                $vendorList[$item->getVendor()->getName()] = $item->getVendor();
            }
        }
        $order->setStatus($statusOrder);
        $order->setOrderitem($filteredOrderItems);
        $this->view->assign('order', $order);

        $button = [];
        $button['goDelivery'] = true;
        switch ($GLOBALS['TSFE']->fe_user->user['usergroup']) {
            case 2: // Vendor
                if ($statusOrder==0) {
                    $button['prepared'] = true;
                }
                break;
            case 3: // Wharehouse
                if ($statusOrder==6 && $forceVendor) {
                    $button['extract'] = true;
//                    $button['assignStore'] = true;
                }
                if ($statusOrder==7) {
                    $button['assignStore'] = true;
                    $button['closeOrder'] = true;
                }
                if ($statusOrder==8) {
                    $button['assignStore'] = true;
                }
                break;
            case 4: // Store
                if ($statusOrder==20 && $_GET['check'] == '1234567890') {
                    $button['assign'] = true;
                }
                if ($statusOrder==20 && $_GET['check'] && $_GET['check'] <> '1234567890') {
                    $this->addFlashMessage('The verification code is not correct', 'Attention', ContextualFeedbackSeverity::ERROR);
                }
                break;
        }

        $this->view->assign('button', $button);
        $this->view->assign('vendorList', $vendorList);
        $this->view->assign('forceVendor', $forceVendor);
        $this->view->assign('user', $GLOBALS['TSFE']->fe_user->user);
        $userGroups = $GLOBALS['TSFE']->fe_user->userGroups;
        $this->view->assign('usergroup', reset($userGroups)['title']);
        $logs = $this->logRepository->findAllByCodeAndType($order->getCode(), 'order');
        $this->view->assign('logs', $logs);
        return $this->htmlResponse();
    }

    /**
     * action moving
     *
     * @param \Torresani\Surf\Domain\Model\Order $order
     * @param int $newStatus
     * @param \Torresani\Surf\Domain\Model\Vendor $vendor
     * @return \Psr\Http\Message\ResponseInterface
     */
    public function movingAction(\Torresani\Surf\Domain\Model\Order $order, int $newStatus, \Torresani\Surf\Domain\Model\Vendor $vendor=null): \Psr\Http\Message\ResponseInterface
    {
        $descriptionLog = "Log non personalizzato";
        $iteration = 0;
        if ($GLOBALS['TSFE']->fe_user->user['usergroup'] == 2) {
            foreach ($order->getOrderitem() as $key => $item) {
                if ($item->getVendor()->getUser() <> $GLOBALS['TSFE']->fe_user->user['uid']) {
                    unset($order->getOrderitem()[$iteration]);
                }
                $iteration++;
            }
        }
        $execute = false;
        switch ($GLOBALS['TSFE']->fe_user->user['usergroup']) {
            case 2:
                if ($newStatus == 1) {
                    $execute = true;
                    $descriptionLog = 'Impostato nuovo stato a PREPARATO per i prodotti del vendor ' . $GLOBALS['TSFE']->fe_user->user['username'];
                }
                break;
            case 3:
                if ($newStatus==7 ) { // TODO && $_GET['check'] == '1234567890') {
                    $execute = true;
                    $descriptionLog = 'Busta inserita in ordine';
                }
                if ($newStatus==8 ) {
                    $execute = true;
                    $descriptionLog = 'Pacco ordine chiuso';
                }
                if ($newStatus==20 ) {
                    $execute = true;
                    $descriptionLog = 'Ordine consegnato allo store';
                }
                break;
            case 4:
                if ($newStatus==21 ) { // TODO && $_GET['check'] == '1234567890') {
                    $execute = true;
                    $descriptionLog = 'Ordine consegnato al cliente';
                }
                break;
        }
        if ($execute) {
            foreach ($order->getOrderitem() as $key => $item) {
                // TODO status 7 verificare vendor da chiudere
                // TODO status 8 verificare che tutti le buste siano inserite
                if (($GLOBALS['TSFE']->fe_user->user['usergroup'] == 3) ||
                    ($GLOBALS['TSFE']->fe_user->user['usergroup'] == 4) ||
                    ($item->getVendor()->getUser() == $GLOBALS['TSFE']->fe_user->user['uid'])) {
                    $orderItem = $this->orderItemRepository->findOneByUid($item->getUid());
                    $orderItem->setStatus($newStatus);
                    $this->orderItemRepository->update($orderItem);
                }
            }
        } else {
            $this->addFlashMessage('You are not authorized for this operation', 'Attention', ContextualFeedbackSeverity::ERROR);
        }

        $this->addLog($descriptionLog, $order->getCode(), 'order', $GLOBALS['TSFE']->fe_user->user['username']);
        return new ForwardResponse('show');

    }

    public function addLog($description, $code, $type, $user) {
        $newLog = new \Torresani\Surf\Domain\Model\Log();
        $newLog->setCode($code);
        $newLog->setType($type);
        $newLog->setUser($user);
        $newLog->setDescription($description);
        $newLog->setDate(new \DateTime());
        $newLog->setPid(7);

        $this->logRepository->add($newLog);
    }

}