mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-16 14:33:14 +00:00
Fix OrderElement accept/deny todo count
This commit is contained in:
@@ -41,12 +41,13 @@ class OrderElement
|
|||||||
* @ORM\ManyToOne(targetEntity="User")
|
* @ORM\ManyToOne(targetEntity="User")
|
||||||
* @ORM\JoinColumn(name="order_master", referencedColumnName="id")
|
* @ORM\JoinColumn(name="order_master", referencedColumnName="id")
|
||||||
*
|
*
|
||||||
* @return User
|
* @var null|User
|
||||||
**/
|
**/
|
||||||
private $orderMaster;
|
private $orderMaster;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\Column(type="boolean", nullable=true)
|
* @ORM\Column(type="boolean", nullable=true)
|
||||||
|
* @var bool|null
|
||||||
*/
|
*/
|
||||||
private $deny;
|
private $deny;
|
||||||
|
|
||||||
@@ -89,7 +90,7 @@ class OrderElement
|
|||||||
/**
|
/**
|
||||||
* Set deny
|
* Set deny
|
||||||
*
|
*
|
||||||
* @param boolean $deny
|
* @param null|bool $deny
|
||||||
* @return OrderElement
|
* @return OrderElement
|
||||||
*/
|
*/
|
||||||
public function setDeny($deny)
|
public function setDeny($deny)
|
||||||
@@ -102,7 +103,7 @@ class OrderElement
|
|||||||
/**
|
/**
|
||||||
* Get deny
|
* Get deny
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return bool|null
|
||||||
*/
|
*/
|
||||||
public function getDeny()
|
public function getDeny()
|
||||||
{
|
{
|
||||||
|
@@ -15,6 +15,7 @@ use Alchemy\Phrasea\Application\Helper\EntityManagerAware;
|
|||||||
use Alchemy\Phrasea\Controller\Controller;
|
use Alchemy\Phrasea\Controller\Controller;
|
||||||
use Alchemy\Phrasea\Core\Event\OrderDeliveryEvent;
|
use Alchemy\Phrasea\Core\Event\OrderDeliveryEvent;
|
||||||
use Alchemy\Phrasea\Core\PhraseaEvents;
|
use Alchemy\Phrasea\Core\PhraseaEvents;
|
||||||
|
use Alchemy\Phrasea\Model\Entities\Basket;
|
||||||
use Alchemy\Phrasea\Model\Entities\BasketElement;
|
use Alchemy\Phrasea\Model\Entities\BasketElement;
|
||||||
use Alchemy\Phrasea\Model\Entities\Order;
|
use Alchemy\Phrasea\Model\Entities\Order;
|
||||||
use Alchemy\Phrasea\Model\Entities\OrderElement;
|
use Alchemy\Phrasea\Model\Entities\OrderElement;
|
||||||
@@ -23,9 +24,12 @@ use Alchemy\Phrasea\Model\Repositories\OrderElementRepository;
|
|||||||
use Alchemy\Phrasea\Model\Repositories\OrderRepository;
|
use Alchemy\Phrasea\Model\Repositories\OrderRepository;
|
||||||
use Alchemy\Phrasea\Order\OrderValidator;
|
use Alchemy\Phrasea\Order\OrderValidator;
|
||||||
use Alchemy\Phrasea\Order\PartialOrder;
|
use Alchemy\Phrasea\Order\PartialOrder;
|
||||||
|
use Alchemy\Phrasea\Record\RecordReference;
|
||||||
|
use Alchemy\Phrasea\Record\RecordReferenceCollection;
|
||||||
use Assert\Assertion;
|
use Assert\Assertion;
|
||||||
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
|
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
|
||||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
|
||||||
class BaseOrderController extends Controller
|
class BaseOrderController extends Controller
|
||||||
@@ -112,9 +116,14 @@ class BaseOrderController extends Controller
|
|||||||
$order = $this->findOr404($order_id);
|
$order = $this->findOr404($order_id);
|
||||||
|
|
||||||
$basket = $this->app['provider.order_basket']->provideBasketForOrderAndUser($order, $acceptor);
|
$basket = $this->app['provider.order_basket']->provideBasketForOrderAndUser($order, $acceptor);
|
||||||
$orderValidator = $this->getOrderValidator();
|
|
||||||
$partialOrder = new PartialOrder($order, $elements);
|
$partialOrder = new PartialOrder($order, $elements);
|
||||||
|
|
||||||
|
$orderValidator = $this->getOrderValidator();
|
||||||
|
|
||||||
$basketElements = $orderValidator->createBasketElements($partialOrder);
|
$basketElements = $orderValidator->createBasketElements($partialOrder);
|
||||||
|
$this->assertRequestedElementsWereNotAlreadyAdded($basket, $basketElements);
|
||||||
|
|
||||||
$orderValidator->accept($acceptor, $partialOrder);
|
$orderValidator->accept($acceptor, $partialOrder);
|
||||||
$orderValidator->grantHD($basket->getUser(), $basketElements);
|
$orderValidator->grantHD($basket->getUser(), $basketElements);
|
||||||
|
|
||||||
@@ -167,4 +176,31 @@ class BaseOrderController extends Controller
|
|||||||
|
|
||||||
return $elements;
|
return $elements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Basket $basket
|
||||||
|
* @param BasketElement[] $elements
|
||||||
|
*/
|
||||||
|
protected function assertRequestedElementsWereNotAlreadyAdded(Basket $basket, $elements)
|
||||||
|
{
|
||||||
|
if ($basket->getElements()->isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$references = new RecordReferenceCollection();
|
||||||
|
|
||||||
|
foreach ($elements as $element) {
|
||||||
|
$reference = RecordReference::createFromDataboxIdAndRecordId($element->getSbasId(), $element->getRecordId());
|
||||||
|
|
||||||
|
$references->addRecordReference($reference);
|
||||||
|
}
|
||||||
|
|
||||||
|
$groups = $references->groupPerDataboxId();
|
||||||
|
|
||||||
|
foreach ($basket->getElements() as $element) {
|
||||||
|
if (isset($groups[$element->getSbasId()][$element->getRecordId()])) {
|
||||||
|
throw new ConflictHttpException('Some records have already been handled');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -159,11 +159,18 @@ class OrderValidator
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$decrementCount = 0;
|
||||||
|
|
||||||
foreach ($elements as $element) {
|
foreach ($elements as $element) {
|
||||||
$element->setOrderMaster($acceptor);
|
$element->setOrderMaster($acceptor);
|
||||||
|
if (null === $element->getDeny()) {
|
||||||
|
++$decrementCount;
|
||||||
|
}
|
||||||
$element->setDeny($deny);
|
$element->setDeny($deny);
|
||||||
}
|
}
|
||||||
|
|
||||||
$order->getOrder()->decrementTodo(count($elements));
|
if ($decrementCount) {
|
||||||
|
$order->getOrder()->decrementTodo($decrementCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user