<?phpnamespace App\Controller;use Mpdf\Mpdf;use App\Entity\Lot;use App\Entity\Prospect;use App\Entity\Historique;use App\Entity\PieceJointe;use Mpdf\Output\Destination;use App\Service\Notification;use Doctrine\Common\Collections\ArrayCollection;use Symfony\Component\Mailer\Mailer;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\HttpFoundation\Response;use Sonata\AdminBundle\Controller\CRUDController;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\DependencyInjection\ContainerInterface;use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;use Symfony\Component\Security\Core\Exception\AccessDeniedException;class LotAdminController extends CRUDController{ protected $em; public function __construct(EntityManagerInterface $em) { $this->em = $em; } public function preCreate(Request $request, object $object): ?Response { if($object->getProgrammeParent()) { $object->setLivraison($object->getProgrammeParent()->getLivraison()); foreach ($object->getProgrammeParent()->getPjs() as $pj) { $clonedPj = clone $pj; $clonedPj->setLot($object); $clonedPj->setPieceJointeMere($pj); $clonedPj->setProgramme(null); $object->addPj($clonedPj); } } foreach (Lot::INTITULES_PREDEFINIS as $description) { $pj = new PieceJointe(); $pj->setDescriptionCourte($description); $pj->setLot($object); $object->addPj($pj); } return null; } public function editAction(Request $request): Response { $originalProgrammeParentId = $this->admin->getSubject()->getProgrammeParent()->getId(); $response = parent::editAction($request); $lotObject = $this->admin->getSubject(); if ($response instanceof RedirectResponse && $response->isRedirect() && $originalProgrammeParentId != $lotObject->getProgrammeParent()->getId()) { return $this->redirectToRoute('admin_app_programme_lot_edit', array( 'id' => $lotObject->getProgrammeParent()->getId(), 'childId' => $request->get('childId') )); } return $response; } /** * @param $id */ public function cloneAction($id): Response { $object = $this->admin->getSubject(); if (!$object) { throw new NotFoundHttpException(sprintf('Impossible de trouver le lot associé à l\'id : %s', $id)); } $clonedObject = clone $object; $clonedObject->setReference($object->getReference() . ' (Copie)'); $this->admin->create($clonedObject); $this->addFlash('sonata_flash_success', 'Le lot a bien été dupliqué.'); return new RedirectResponse( $this->admin->generateUrl('edit', ['id' => $clonedObject->getId()]) ); }}