mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 09:35:49 +02:00
parent
ccdac1a94b
commit
a3c626d0ab
8 changed files with 92 additions and 7 deletions
|
@ -224,6 +224,7 @@ class PartController extends AbstractController
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/new", name="part_new")
|
* @Route("/new", name="part_new")
|
||||||
|
* @Route("/{id}/clone", name="part_clone")
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @param EntityManagerInterface $em
|
* @param EntityManagerInterface $em
|
||||||
|
@ -233,16 +234,20 @@ class PartController extends AbstractController
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function new(Request $request, EntityManagerInterface $em, TranslatorInterface $translator,
|
public function new(Request $request, EntityManagerInterface $em, TranslatorInterface $translator,
|
||||||
AttachmentManager $attachmentHelper, AttachmentSubmitHandler $attachmentSubmitHandler): Response
|
AttachmentManager $attachmentHelper, AttachmentSubmitHandler $attachmentSubmitHandler, ?Part $part = null): Response
|
||||||
{
|
{
|
||||||
$new_part = new Part();
|
if($part === null) {
|
||||||
|
$new_part = new Part();
|
||||||
|
} else {
|
||||||
|
$new_part = clone $part;
|
||||||
|
}
|
||||||
|
|
||||||
$this->denyAccessUnlessGranted('create', $new_part);
|
$this->denyAccessUnlessGranted('create', $new_part);
|
||||||
|
|
||||||
$cid = $request->get('cid', 1);
|
$cid = $request->get('cid', 1);
|
||||||
|
|
||||||
$category = $em->find(Category::class, $cid);
|
$category = $em->find(Category::class, $cid);
|
||||||
if (null !== $category) {
|
if (null !== $category && $new_part->getCategory() === null) {
|
||||||
$new_part->setCategory($category);
|
$new_part->setCategory($category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,7 +297,7 @@ class PartController extends AbstractController
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/{id}/clone", name="part_clone")
|
* //@Route("/{id}/clone", name="part_clone")
|
||||||
*
|
*
|
||||||
* @param Part $part
|
* @param Part $part
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
@ -323,6 +328,7 @@ class PartController extends AbstractController
|
||||||
[
|
[
|
||||||
'part' => $new_part,
|
'part' => $new_part,
|
||||||
'form' => $form->createView(),
|
'form' => $form->createView(),
|
||||||
|
'attachment_helper' => $attachmentHelper,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,4 +95,23 @@ abstract class AttachmentContainingDBElement extends AbstractNamedDBElement impl
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
if ($this->id) {
|
||||||
|
$attachments = $this->attachments;
|
||||||
|
$this->attachments = new ArrayCollection();
|
||||||
|
//Set master attachment is needed
|
||||||
|
foreach ($attachments as $attachment) {
|
||||||
|
$clone = clone $attachment;
|
||||||
|
if ($attachment === $this->master_picture_attachment) {
|
||||||
|
$this->setMasterPictureAttachment($clone);
|
||||||
|
}
|
||||||
|
$this->addAttachment($clone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Parent has to be last call, as it resets the ID
|
||||||
|
parent::__clone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,8 +68,10 @@ abstract class AbstractDBElement implements \JsonSerializable
|
||||||
|
|
||||||
public function __clone()
|
public function __clone()
|
||||||
{
|
{
|
||||||
//Set ID to null, so that an new entry is created
|
if ($this->id) {
|
||||||
$this->id = null;
|
//Set ID to null, so that an new entry is created
|
||||||
|
$this->id = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -89,7 +89,15 @@ abstract class AbstractNamedDBElement extends AbstractDBElement implements Named
|
||||||
public function setName(string $new_name): self
|
public function setName(string $new_name): self
|
||||||
{
|
{
|
||||||
$this->name = $new_name;
|
$this->name = $new_name;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
if ($this->id) {
|
||||||
|
//We create a new object, so give it a new creation date
|
||||||
|
$this->addedDate = null;
|
||||||
|
}
|
||||||
|
parent::__clone(); // TODO: Change the autogenerated stub
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,4 +156,24 @@ class Part extends AttachmentContainingDBElement
|
||||||
{
|
{
|
||||||
return $this->devices;
|
return $this->devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
if ($this->id) {
|
||||||
|
//Deep clone part lots
|
||||||
|
$lots = $this->partLots;
|
||||||
|
$this->partLots = new ArrayCollection();
|
||||||
|
foreach ($lots as $lot) {
|
||||||
|
$this->addPartLot(clone $lot);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Deep clone order details
|
||||||
|
$orderdetails = $this->orderdetails;
|
||||||
|
$this->orderdetails = new ArrayCollection();
|
||||||
|
foreach ($orderdetails as $orderdetail) {
|
||||||
|
$this->addOrderdetail(clone $orderdetail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parent::__clone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -325,4 +325,12 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
if($this->id) {
|
||||||
|
$this->addedDate = null;
|
||||||
|
}
|
||||||
|
parent::__clone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -348,4 +348,18 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
if ($this->id) {
|
||||||
|
$this->addedDate = null;
|
||||||
|
$pricedetails = $this->pricedetails;
|
||||||
|
$this->pricedetails = new ArrayCollection();
|
||||||
|
//Set master attachment is needed
|
||||||
|
foreach ($pricedetails as $pricedetail) {
|
||||||
|
$this->addPricedetail(clone $pricedetail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parent::__clone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -328,4 +328,12 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
|
||||||
{
|
{
|
||||||
return 'PD'.sprintf('%06d', $this->getID());
|
return 'PD'.sprintf('%06d', $this->getID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
if ($this->id) {
|
||||||
|
$this->addedDate = null;
|
||||||
|
}
|
||||||
|
parent::__clone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue