mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-10 19:43:16 +00:00
Refactor OrderController
This commit is contained in:
@@ -46,73 +46,31 @@ class OrderController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function createOrder(Request $request)
|
public function createOrder(Request $request)
|
||||||
{
|
{
|
||||||
$success = false;
|
|
||||||
$collectionHasOrderAdmins = new ArrayCollection();
|
|
||||||
$toRemove = [];
|
|
||||||
|
|
||||||
$records = RecordsRequest::fromRequest($this->app, $request, true, ['cancmd']);
|
$records = RecordsRequest::fromRequest($this->app, $request, true, ['cancmd']);
|
||||||
$hasOneAdmin = [];
|
|
||||||
|
|
||||||
if (!$records->isEmpty()) {
|
|
||||||
$order = new OrderEntity();
|
|
||||||
$order->setUser($this->getAuthenticatedUser());
|
|
||||||
$order->setDeadline((null !== $deadLine = $request->request->get('deadline')) ? new \DateTime($deadLine) : $deadLine);
|
|
||||||
$order->setOrderUsage($request->request->get('use', ''));
|
|
||||||
foreach ($records as $key => $record) {
|
|
||||||
if ($collectionHasOrderAdmins->containsKey($record->get_base_id())) {
|
|
||||||
if (!$collectionHasOrderAdmins->get($record->get_base_id())) {
|
|
||||||
$records->remove($key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($hasOneAdmin[$record->get_base_id()])) {
|
|
||||||
$query = $this->createUserQuery();
|
|
||||||
$hasOneAdmin[$record->get_base_id()] = (Boolean) count($query->on_base_ids([$record->get_base_id()])
|
|
||||||
->who_have_right(['order_master'])
|
|
||||||
->execute()->get_results());
|
|
||||||
}
|
|
||||||
|
|
||||||
$collectionHasOrderAdmins->set($record->get_base_id(), $hasOneAdmin[$record->get_base_id()]);
|
|
||||||
|
|
||||||
if (!$hasOneAdmin[$record->get_base_id()]) {
|
|
||||||
$toRemove[] = $key;
|
|
||||||
} else {
|
|
||||||
$orderElement = new OrderElement();
|
|
||||||
$order->addElement($orderElement);
|
|
||||||
$orderElement->setOrder($order);
|
|
||||||
$orderElement->setBaseId($record->get_base_id());
|
|
||||||
$orderElement->setRecordId($record->get_record_id());
|
|
||||||
$this->getEntityManager()->persist($orderElement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($toRemove as $key) {
|
|
||||||
if ($records->containsKey($key)) {
|
|
||||||
$records->remove($key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$noAdmins = $collectionHasOrderAdmins->forAll(function ($key, $hasAdmin) {
|
|
||||||
return false === $hasAdmin;
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($noAdmins) {
|
|
||||||
$msg = $this->app->trans('There is no one to validate orders, please contact an administrator');
|
|
||||||
} else {
|
|
||||||
$order->setTodo($order->getElements()->count());
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->dispatch(PhraseaEvents::ORDER_CREATE, new OrderEvent($order));
|
if ($records->isEmpty()) {
|
||||||
$this->getEntityManager()->persist($order);
|
throw new OrderControllerException($this->app->trans('There is no record eligible for an order'));
|
||||||
$this->getEntityManager()->flush();
|
}
|
||||||
$msg = $this->app->trans('The records have been properly ordered');
|
|
||||||
|
if (null !== $deadLine = $request->request->get('deadline')) {
|
||||||
|
$deadLine = new \DateTime($deadLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderUsage = $request->request->get('use', '');
|
||||||
|
|
||||||
|
$order = new OrderEntity();
|
||||||
|
$order->setUser($this->getAuthenticatedUser());
|
||||||
|
$order->setDeadline($deadLine);
|
||||||
|
$order->setOrderUsage($orderUsage);
|
||||||
|
|
||||||
|
$this->fillOrderFromRequest($records, $order);
|
||||||
|
|
||||||
$success = true;
|
$success = true;
|
||||||
} catch (\Exception $e) {
|
$msg = $this->app->trans('The records have been properly ordered');
|
||||||
$msg = $this->app->trans('An error occured');
|
} catch (OrderControllerException $exception) {
|
||||||
}
|
$success = false;
|
||||||
}
|
$msg = $exception->getMessage();
|
||||||
} else {
|
|
||||||
$msg = $this->app->trans('There is no record eligible for an order');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('json' === $request->getRequestFormat()) {
|
if ('json' === $request->getRequestFormat()) {
|
||||||
@@ -322,4 +280,46 @@ class OrderController extends Controller
|
|||||||
{
|
{
|
||||||
return $this->app['repo.orders'];
|
return $this->app['repo.orders'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function fillOrderFromRequest(RecordsRequest $records, Order $order)
|
||||||
|
{
|
||||||
|
$collectionIds = [];
|
||||||
|
|
||||||
|
foreach ($records->collections() as $collection) {
|
||||||
|
$collectionIds[] = $collection->get_base_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
$hasOneAdmin = [];
|
||||||
|
|
||||||
|
foreach ($this->app['repo.collection-references']->findHavingOrderMaster($collectionIds) as $reference) {
|
||||||
|
$hasOneAdmin[$reference->getBaseId()] = $reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty(array_diff($collectionIds, array_keys($hasOneAdmin)))) {
|
||||||
|
throw new OrderControllerException($this->app->trans('There is no one to validate orders, please contact an administrator'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$entityManager = $this->getEntityManager();
|
||||||
|
|
||||||
|
foreach ($records as $key => $record) {
|
||||||
|
$orderElement = new OrderElement();
|
||||||
|
$order->addElement($orderElement);
|
||||||
|
$orderElement->setOrder($order);
|
||||||
|
$orderElement->setBaseId($record->get_base_id());
|
||||||
|
$orderElement->setRecordId($record->get_record_id());
|
||||||
|
$entityManager->persist($orderElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
$order->setTodo($order->getElements()->count());
|
||||||
|
|
||||||
|
$entityManager->persist($order);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$entityManager->flush();
|
||||||
|
|
||||||
|
$this->dispatch(PhraseaEvents::ORDER_CREATE, new OrderEvent($order));
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw new OrderControllerException($this->app->trans('An error occurred'), 0, $e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of Phraseanet
|
||||||
|
*
|
||||||
|
* (c) 2005-2016 Alchemy
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Alchemy\Phrasea\Controller\Prod;
|
||||||
|
|
||||||
|
class OrderControllerException extends \RuntimeException
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@@ -64,7 +64,7 @@ class RecordsRequest extends ArrayCollection
|
|||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$records = $this->toArray();
|
$records = $this->toArray();
|
||||||
array_walk($records, function ($record) use (&$i) {
|
array_walk($records, function (\record_adapter $record) use (&$i) {
|
||||||
$record->setNumber($i++);
|
$record->setNumber($i++);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -103,8 +103,8 @@ class RecordsRequest extends ArrayCollection
|
|||||||
|
|
||||||
/** @var \record_adapter $record */
|
/** @var \record_adapter $record */
|
||||||
foreach ($this as $record) {
|
foreach ($this as $record) {
|
||||||
if (false === array_key_exists($record->get_base_id(), $this->collections)) {
|
if (! isset($this->collections[$record->getBaseId()])) {
|
||||||
$this->collections[$record->get_base_id()] = $record->get_collection();
|
$this->collections[$record->getBaseId()] = $record->get_collection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user