implements trackable on accompanying period

This commit is contained in:
Julien Fastré 2021-05-19 23:08:13 +02:00
parent 9f1f7ad3f7
commit 32b8de8997
3 changed files with 82 additions and 3 deletions

View File

@ -2,6 +2,7 @@
namespace Chill\MainBundle\Doctrine\Event; namespace Chill\MainBundle\Doctrine\Event;
use Chill\MainBundle\Entity\User;
use Doctrine\Common\EventSubscriber; use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events; use Doctrine\ORM\Events;
use Doctrine\Persistence\Event\LifecycleEventArgs; use Doctrine\Persistence\Event\LifecycleEventArgs;
@ -37,7 +38,8 @@ class TrackCreateUpdateSubscriber implements EventSubscriber
{ {
$object = $args->getObject(); $object = $args->getObject();
if ($object instanceof TrackCreationInterface) { if ($object instanceof TrackCreationInterface
&& $this->security->getUser() instanceof User) {
$object->setCreatedBy($this->security->getUser()); $object->setCreatedBy($this->security->getUser());
$object->setCreatedAt(new \DateTimeImmutable('now')); $object->setCreatedAt(new \DateTimeImmutable('now'));
} }
@ -54,7 +56,8 @@ class TrackCreateUpdateSubscriber implements EventSubscriber
protected function onUpdate(object $object): void protected function onUpdate(object $object): void
{ {
if ($object instanceof TrackUpdateInterface) { if ($object instanceof TrackUpdateInterface
&& $this->security->getUser() instanceof User) {
$object->setUpdatedBy($this->security->getUser()); $object->setUpdatedBy($this->security->getUser());
$object->setUpdatedAt(new \DateTimeImmutable('now')); $object->setUpdatedAt(new \DateTimeImmutable('now'));
} }

View File

@ -22,6 +22,8 @@
namespace Chill\PersonBundle\Entity; namespace Chill\PersonBundle\Entity;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
use Chill\MainBundle\Entity\Scope; use Chill\MainBundle\Entity\Scope;
use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive; use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive;
use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment; use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment;
@ -29,6 +31,7 @@ use Chill\PersonBundle\Entity\AccompanyingPeriod\Origin;
use Chill\PersonBundle\Entity\AccompanyingPeriod\Resource; use Chill\PersonBundle\Entity\AccompanyingPeriod\Resource;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue; use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Chill\ThirdPartyBundle\Entity\ThirdParty; use Chill\ThirdPartyBundle\Entity\ThirdParty;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
@ -46,7 +49,7 @@ use Symfony\Component\Serializer\Annotation\DiscriminatorMap;
* "accompanying_period"=AccompanyingPeriod::class * "accompanying_period"=AccompanyingPeriod::class
* }) * })
*/ */
class AccompanyingPeriod class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
{ {
/** /**
* Mark an accompanying period as "occasional" * Mark an accompanying period as "occasional"
@ -260,6 +263,23 @@ class AccompanyingPeriod
*/ */
private Collection $socialIssues; private Collection $socialIssues;
/**
* @ORM\Column(type="datetime", nullable=true, options={"default": NULL})
*/
private \DateTimeInterface $createdAt;
/**
* @ORM\ManyToOne(
* targetEntity=User::class
* )
*/
private User $updatedBy;
/**
* @ORM\Column(type="datetime", nullable=true, options={"default": NULL})
*/
private \DateTimeInterface $updatedAt;
/** /**
* AccompanyingPeriod constructor. * AccompanyingPeriod constructor.
* *
@ -789,4 +809,25 @@ class AccompanyingPeriod
} }
); );
} }
public function setCreatedAt(\DateTimeInterface $datetime): self
{
$this->createdAt = $datetime;
return $this;
}
public function setUpdatedBy(User $user): self
{
$this->updatedBy = $user;
return $this;
}
public function setUpdatedAt(\DateTimeInterface $datetime): self
{
$this->updatedAt = $datetime;
return $this;
}
} }

View File

@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace Chill\Migrations\Person;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Add updatedAt, updatedBy, createdAt on accompanying period
*/
final class Version20210519204938 extends AbstractMigration
{
public function getDescription(): string
{
return 'Add updatedAt, updatedBy, createdAt on accompanying period';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_person_accompanying_period ADD createdAt TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL');
$this->addSql('ALTER TABLE chill_person_accompanying_period ADD updatedAt TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL');
$this->addSql('ALTER TABLE chill_person_accompanying_period ADD updatedBy_id INT DEFAULT NULL');
$this->addSql('ALTER TABLE chill_person_accompanying_period ADD CONSTRAINT FK_E260A86865FF1AEC FOREIGN KEY (updatedBy_id) REFERENCES users (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
$this->addSql('CREATE INDEX IDX_E260A86865FF1AEC ON chill_person_accompanying_period (updatedBy_id)');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_person_accompanying_period DROP createdAt');
$this->addSql('ALTER TABLE chill_person_accompanying_period DROP updatedAt');
$this->addSql('ALTER TABLE chill_person_accompanying_period DROP updatedBy_id');
}
}