mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 01:25:55 +02:00
Update timestamp of the associated element.
For example the lastModified timestamp of a part is now updated, when the user changes a price information. This should represent more what a user expects under a last Modified field and should improve also sorting...
This commit is contained in:
parent
2b21d4039a
commit
dbf770f784
7 changed files with 68 additions and 4 deletions
|
@ -116,6 +116,14 @@ abstract class Attachment extends AbstractNamedDBElement
|
|||
}
|
||||
}
|
||||
|
||||
public function updateTimestamps(): void
|
||||
{
|
||||
parent::updateTimestamps();
|
||||
if ($this->element instanceof AttachmentContainingDBElement) {
|
||||
$this->element->updateTimestamps();
|
||||
}
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
* Various function
|
||||
***********************************************************/
|
||||
|
|
|
@ -92,7 +92,7 @@ trait TimestampTrait
|
|||
* @ORM\PrePersist
|
||||
* @ORM\PreUpdate
|
||||
*/
|
||||
public function updatedTimestamps(): void
|
||||
public function updateTimestamps(): void
|
||||
{
|
||||
$this->lastModified = new DateTime('now');
|
||||
if (null === $this->addedDate) {
|
||||
|
|
|
@ -120,6 +120,14 @@ abstract class AbstractParameter extends AbstractNamedDBElement
|
|||
}
|
||||
}
|
||||
|
||||
public function updateTimestamps(): void
|
||||
{
|
||||
parent::updateTimestamps();
|
||||
if ($this->element instanceof AbstractNamedDBElement) {
|
||||
$this->element->updateTimestamps();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the element this parameter belongs to.
|
||||
*
|
||||
|
|
|
@ -56,6 +56,7 @@ use App\Entity\Contracts\NamedElementInterface;
|
|||
use App\Entity\Contracts\TimeStampableInterface;
|
||||
use App\Entity\Parts\Part;
|
||||
use App\Entity\Parts\Supplier;
|
||||
use DateTime;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
@ -134,6 +135,24 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N
|
|||
parent::__clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for updating the timestamp. It is automatically called by doctrine before persisting.
|
||||
*
|
||||
* @ORM\PrePersist
|
||||
* @ORM\PreUpdate
|
||||
*/
|
||||
public function updateTimestamps(): void
|
||||
{
|
||||
$this->lastModified = new DateTime('now');
|
||||
if (null === $this->addedDate) {
|
||||
$this->addedDate = new DateTime('now');
|
||||
}
|
||||
|
||||
if ($this->part instanceof Part) {
|
||||
$this->part->updateTimestamps();
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************************
|
||||
*
|
||||
* Getters
|
||||
|
|
|
@ -57,6 +57,7 @@ use App\Validator\Constraints\BigDecimal\BigDecimalPositive;
|
|||
use App\Validator\Constraints\Selectable;
|
||||
use Brick\Math\BigDecimal;
|
||||
use Brick\Math\RoundingMode;
|
||||
use DateTime;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
@ -132,6 +133,24 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
|
|||
parent::__clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for updating the timestamp. It is automatically called by doctrine before persisting.
|
||||
*
|
||||
* @ORM\PrePersist
|
||||
* @ORM\PreUpdate
|
||||
*/
|
||||
public function updateTimestamps(): void
|
||||
{
|
||||
$this->lastModified = new DateTime('now');
|
||||
if (null === $this->addedDate) {
|
||||
$this->addedDate = new DateTime('now');
|
||||
}
|
||||
|
||||
if ($this->orderdetail instanceof Orderdetail) {
|
||||
$this->orderdetail->updateTimestamps();
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************************
|
||||
*
|
||||
* Getters
|
||||
|
|
|
@ -172,7 +172,8 @@ class EventLoggerSubscriber implements EventSubscriber
|
|||
$em = $args->getEntityManager();
|
||||
$uow = $em->getUnitOfWork();
|
||||
// If the we have added any ElementCreatedLogEntries added in postPersist, we flush them here.
|
||||
if ($uow->hasPendingInsertions()) {
|
||||
$uow->computeChangeSets();
|
||||
if ($uow->hasPendingInsertions() || !empty($uow->getScheduledEntityUpdates())) {
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
|
@ -266,6 +267,15 @@ class EventLoggerSubscriber implements EventSubscriber
|
|||
{
|
||||
$uow = $em->getUnitOfWork();
|
||||
|
||||
/* We have to call that here again, so the foreign entity timestamps, that were changed in updateTimestamp
|
||||
get persisted */
|
||||
$changeSet = $uow->getEntityChangeSet($entity);
|
||||
|
||||
//Skip log entry, if only the lastModified field has changed...
|
||||
if (isset($changeSet['lastModified']) && count($changeSet)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$log = new ElementEditedLogEntry($entity);
|
||||
if ($this->save_changed_data) {
|
||||
$this->saveChangeSet($entity, $log, $em);
|
||||
|
|
|
@ -62,7 +62,7 @@ final class BarcodeExampleElementsGenerator
|
|||
$part->setManufacturerProductNumber('CUSTOM MPN');
|
||||
$part->setTags('Tag1, Tag2, Tag3');
|
||||
$part->setManufacturingStatus('active');
|
||||
$part->updatedTimestamps();
|
||||
$part->updateTimestamps();
|
||||
|
||||
$part->setFavorite(true);
|
||||
$part->setMinAmount(100);
|
||||
|
@ -90,7 +90,7 @@ final class BarcodeExampleElementsGenerator
|
|||
$storelocation = new Storelocation();
|
||||
$storelocation->setName('Location 1');
|
||||
$storelocation->setComment('Example comment');
|
||||
$storelocation->updatedTimestamps();
|
||||
$storelocation->updateTimestamps();
|
||||
|
||||
$parent = new Storelocation();
|
||||
$parent->setName('Parent');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue