| Current Path : /proc/thread-self/root/var/www/surf/TYPO3/src/surf/Classes/Controller/ |
| 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);
}
}