| 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/DeliveryController.php |
<?php
declare(strict_types=1);
namespace Torresani\Surf\Controller;
use TYPO3\CMS\Extbase\Http\ForwardResponse;
use TYPO3\CMS\Core\Type\ContextualFeedbackSeverity;
use TYPO3\CMS\Core\Database\ConnectionPool;
/**
* 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>
*/
/**
* DeliveryController
*/
class DeliveryController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
/**
* deliveryRepository
*
* @var \Torresani\Surf\Domain\Repository\DeliveryRepository
*/
protected $deliveryRepository = null;
/**
* orderRepository
*
* @var \Torresani\Surf\Domain\Repository\OrderRepository
*/
protected $orderRepository = null;
/**
* @param \Torresani\Surf\Domain\Repository\DeliveryRepository $deliveryRepository
*/
public function injectDeliveryRepository(\Torresani\Surf\Domain\Repository\DeliveryRepository $deliveryRepository)
{
$this->deliveryRepository = $deliveryRepository;
}
/**
* @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
{
$deliveries = $this->deliveryRepository->findAll();
$this->view->assign('deliveries', $deliveries);
$this->view->assign('debug', "ROBY");
return $this->htmlResponse();
}
/**
* action show
*
* @param \Torresani\Surf\Domain\Model\Delivery $delivery
* @param \Torresani\Surf\Domain\Model\Vendor $vendor
* @return \Psr\Http\Message\ResponseInterface
*/
public function showAction(\Torresani\Surf\Domain\Model\Delivery $delivery, \Torresani\Surf\Domain\Model\Vendor $vendor=null): \Psr\Http\Message\ResponseInterface
{
$orders = $this->orderRepository->findByDelivery($delivery);
$statusDelivery = 100;
$filteredOrders = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
$vendorList = [];
$forceVendor = null;
if ($GLOBALS['TSFE']->fe_user->user['usergroup'] <> 2 && $vendor) {
$forceVendor = $vendor->getUid();
}
foreach ($orders as $keyOrder => $order) {
/** @var \Torresani\Surf\Domain\Model\Order $tempOrder */
$tempOrder = new \Torresani\Surf\Domain\Model\Order();
$iteration = 0;
$statusOrder = 100;
$vendorBool = false;
$filteredOrderItems = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
foreach ($order->getOrderitem() as $key => $item) {
if ($item->getVendor()->getUser() == $GLOBALS['TSFE']->fe_user->user['uid'] || $item->getVendor()->getUid() == $forceVendor) {
if ($statusDelivery > $item->getStatus()) {
$statusDelivery = $item->getStatus();
}
if ($statusOrder > $item->getStatus()) {
$statusOrder = $item->getStatus();
}
$vendorBool = true;
$filteredOrderItems->attach($item);
} else if (!$forceVendor && $GLOBALS['TSFE']->fe_user->user['usergroup'] <> 2) {
if ($statusDelivery > $item->getStatus()) {
$statusDelivery = $item->getStatus();
}
if ($statusOrder > $item->getStatus()) {
$statusOrder = $item->getStatus();
}
$vendorBool = true;
$filteredOrderItems->attach($item);
}
if ($GLOBALS['TSFE']->fe_user->user['usergroup'] <> 2) {
$vendorList[$item->getVendor()->getName()] = $item->getVendor();
}
$iteration++;
}
if ($vendorBool || $forceVendor) {
$tempOrder->setUid($order->getUid());
$tempOrder->setStatus($statusOrder);
$tempOrder->setDelivery($order->getDelivery());
$tempOrder->setCode($order->getCode());
$tempOrder->setName($order->getName());
$tempOrder->setOrderitem($filteredOrderItems);
$filteredOrders->attach($tempOrder);
}
}
$delivery->setStatus($statusDelivery);
$button = [];
switch ($GLOBALS['TSFE']->fe_user->user['usergroup']) {
case 2:
if ($statusDelivery==0) {
$button['forceCloseOrder'] = true;
}
if ($statusDelivery==1) {
$button['closeDelivery'] = true;
}
if ($statusDelivery==1 || $statusDelivery==2) {
$button['requestDelivery'] = true;
}
if ($statusDelivery==1 || $statusDelivery==2 || $statusDelivery==3) {
$button['shipDelivery'] = true;
}
break;
case 3:
if ($forceVendor) {
if ($statusDelivery < 3) {
$button['forceWithdraw'] = true;
}
if ($statusDelivery == 4) {
$button['withdraw'] = true;
}
if ($statusDelivery == 5) {
$button['openDelivery'] = true;
}
}
}
$this->view->assign('orders', $filteredOrders);
$this->view->assign('delivery', $delivery);
$this->view->assign('button', $button);
$this->view->assign('vendorList', $vendorList);
$this->view->assign('forceVendor', $forceVendor);
$logs = $this->logRepository->findAllByCodeAndType($delivery->getCode(), 'delivery');
$this->view->assign('logs', $logs);
return $this->htmlResponse();
}
/**
* action moving
*
* @param \Torresani\Surf\Domain\Model\Delivery $delivery
* @param string $newStatus
* @param \Torresani\Surf\Domain\Model\Vendor $vendor
* @return \Psr\Http\Message\ResponseInterface
*/
public function movingAction(\Torresani\Surf\Domain\Model\Delivery $delivery, string $newStatus, \Torresani\Surf\Domain\Model\Vendor $vendor=null): \Psr\Http\Message\ResponseInterface
{
$descriptionLog = "Log non personalizzato";
$execute = false;
switch ($GLOBALS['TSFE']->fe_user->user['usergroup']) {
case 2: // Vendor
if ($newStatus == 'forceCloseOrder') { $execute = true; $descriptionLog = "Il vendor ha forzato la chiusura della consegna"; }
if ($newStatus == 'closeDelivery') { $execute = true; $descriptionLog = "Il vendor ha chiuso la consegna"; }
if ($newStatus == 'requestDelivery') { $execute = true; $descriptionLog = "Il vendor ha richiesto la spedizione della consegna"; }
if ($newStatus == 'shipDelivery') { $execute = true; $descriptionLog = "Il vendor ha messo la consegna in viaggio"; }
break;
case 3: // Wharehouse
if ($newStatus == 'forceWithdraw') { $execute = true; $descriptionLog = "Il magazzino ha forzato la ricezione della consegna del vendor " . $vendor->getName(); }
if ($newStatus == 'withdraw') { $execute = true; $descriptionLog = "Il magazzino ha ricevuto la consegna del vendor " . $vendor->getName(); }
if ($newStatus == 'openDelivery') { $execute = true; $descriptionLog = "Il magazzino ha aperto la consegna del vendor " . $vendor->getName(); }
break;
}
if ($execute) {
$mapOrderNewStatus = [
'forceCloseOrder' => 1,
'closeDelivery' => 2,
'requestDelivery' => 3,
'shipDelivery' => 4,
'forceWithdraw' => 5,
'withdraw' => 5,
'openDelivery' => 6
];
if ($newStatus == 'forceCloseOrder' ||
$newStatus == 'closeDelivery' ||
$newStatus == 'requestDelivery' ||
$newStatus == 'shipDelivery'
) {
$orders = $this->orderRepository->findByDelivery($delivery);
foreach ($orders as $keyOrder => $order) {
foreach ($order->getOrderitem() as $key => $item) {
if ($item->getStatus() < $mapOrderNewStatus[$newStatus] && $item->getVendor()->getUser() == $GLOBALS['TSFE']->fe_user->user['uid']) {
$orderItem = $this->orderItemRepository->findOneByUid($item->getUid());
$orderItem->setStatus($mapOrderNewStatus[$newStatus]);
$this->orderItemRepository->update($orderItem);
}
}
}
}
if ($newStatus == 'forceWithdraw' ||
$newStatus == 'withdraw' ||
$newStatus == 'openDelivery'
) {
if ($vendor) {
$orders = $this->orderRepository->findByDelivery($delivery);
foreach ($orders as $keyOrder => $order) {
foreach ($order->getOrderitem() as $key => $item) {
if ($item->getStatus() < $mapOrderNewStatus[$newStatus] && $item->getVendor()->getUid() == $vendor->getUid()) {
$orderItem = $this->orderItemRepository->findOneByUid($item->getUid());
$orderItem->setStatus($mapOrderNewStatus[$newStatus]);
$this->orderItemRepository->update($orderItem);
}
}
}
} else {
$this->addFlashMessage('You have to filter by vendor to be able to do this', 'Attention', ContextualFeedbackSeverity::ERROR);
}
}
} else {
$this->addFlashMessage('You are not authorized for this operation', 'Attention', ContextualFeedbackSeverity::ERROR);
}
$this->addLog($descriptionLog, $delivery->getCode(), 'delivery', $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);
}
public function resetAction(): \Psr\Http\Message\ResponseInterface
{
$message = "Error in reset test";
if ($GLOBALS['TSFE']->fe_user->user['usergroup'] == 1) {
$queryBuilder = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_operations_domain_model_operation');
$statement = $queryBuilder
->update('tx_surf_domain_model_orderitem', 'o')
->set('o.status', 0)
->execute();
$statement = $queryBuilder
->delete('tx_surf_domain_model_log', 'l')
->execute();
$message = "Reset test done";
} else {
$message = "We have permissions for this action";
}
$this->view->assign('message', $message);
return $this->htmlResponse();
}
}