src/Entity/Club1895/Transaction.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Club1895;
  3. use App\Entity\Enum\TransactionStatus;
  4. use App\Entity\Traits\Identifiable;
  5. use App\Entity\Traits\Timestampable;
  6. use App\Repository\Club1895\TransactionRepository;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Doctrine\ORM\Mapping\Table;
  9. use InvalidArgumentException;
  10. #[ORM\Entity(repositoryClassTransactionRepository::class)]
  11. #[Table(name'club1895_transaction')]
  12. #[ORM\InheritanceType('SINGLE_TABLE')]
  13. #[ORM\DiscriminatorColumn('type''string')]
  14. #[ORM\DiscriminatorMap(self::TYPE_CLASSES)]
  15. class Transaction
  16. {
  17.     use Identifiable;
  18.     use Timestampable;
  19.     public const TYPE_DEFAULT     'default';
  20.     public const TYPE_CARD        'card';
  21.     public const TYPE_CARD_SINGLE 'card_single';
  22.     public const TYPE_CHECK       'check';
  23.     public const TYPE_CASH        'cash';
  24.     public const TYPE_WIRE        'wire';
  25.     public const TYPE_CLASSES = [
  26.         self::TYPE_DEFAULT     => Transaction::class,
  27.         self::TYPE_CARD        => TransactionCard::class,
  28.         self::TYPE_CARD_SINGLE => TransactionCardSingle::class,
  29.         self::TYPE_CHECK       => TransactionCheck::class,
  30.         self::TYPE_CASH        => TransactionCash::class,
  31.         self::TYPE_WIRE        => TransactionWire::class,
  32.     ];
  33.     public const TYPE_NAMES = [
  34.         self::TYPE_DEFAULT     => 'Paiement',
  35.         self::TYPE_CARD_SINGLE => 'Par carte',
  36.         self::TYPE_CHECK       => 'Par chèques',
  37.         self::TYPE_CASH        => 'En espèces',
  38.         self::TYPE_WIRE        => 'Par virement',
  39.     ];
  40.     public const PUBLIC_TYPES = [
  41.         self::TYPE_CARD_SINGLE,
  42.         self::TYPE_CHECK,
  43.         self::TYPE_CASH,
  44.         self::TYPE_WIRE,
  45.     ];
  46.     #[ORM\Column(type'float')]
  47.     private $amount Registration::DEFAULT_AMOUNT;
  48.     #[ORM\Column(type'float')]
  49.     private $amountPayed 0;
  50.     #[ORM\Column(type'string'length20enumTypeTransactionStatus::class)]
  51.     private $status TransactionStatus::Created;
  52.     #[ORM\Column(type'string'length255nullabletrue)]
  53.     private $comment;
  54.     #[ORM\Column(type'string'length255nullabletrue)]
  55.     private $cancelReason;
  56.     #[ORM\ManyToOne(inversedBy'transactions')]
  57.     #[ORM\JoinColumn(nullablefalse)]
  58.     private ?Registration $registration null;
  59.     public static function createFromType(string $type): self
  60.     {
  61.         if (!array_key_exists($typeself::TYPE_CLASSES)) {
  62.             throw new InvalidArgumentException(
  63.                 sprintf('type must be one of "%s"'implode(', 'array_keys(self::TYPE_CLASSES)))
  64.             );
  65.         }
  66.         return new (self::TYPE_CLASSES[$type]);
  67.     }
  68.     public function getType(?bool $slug false): string
  69.     {
  70.         if ($slug) {
  71.             return array_search(get_class($this), self::TYPE_CLASSES);
  72.         }
  73.         return self::TYPE_NAMES[array_search(get_class($this), self::TYPE_CLASSES)];
  74.     }
  75.     public function getName(): string
  76.     {
  77.         return self::getNameByClass(static::class) ?? '';
  78.     }
  79.     public static function getNameByClass($class): ?string
  80.     {
  81.         $key array_search($classself::TYPE_CLASSEStrue);
  82.         if ($key && (self::TYPE_NAMES[$key] ?? null)) {
  83.             return self::TYPE_NAMES[$key];
  84.         }
  85.         return null;
  86.     }
  87.     public static function getPublicClasses(): array
  88.     {
  89.         $publicTypes self::PUBLIC_TYPES;
  90.         return array_filter(self::TYPE_CLASSES, static fn($key) => in_array($key$publicTypes), ARRAY_FILTER_USE_KEY);
  91.     }
  92.     public function getAmount(): ?float
  93.     {
  94.         return $this->amount;
  95.     }
  96.     public function setAmount(float $amount): self
  97.     {
  98.         $this->amount $amount;
  99.         return $this;
  100.     }
  101.     public function getAmountPayed(): ?float
  102.     {
  103.         return $this->amountPayed;
  104.     }
  105.     public function setAmountPayed(float $amountPayed): self
  106.     {
  107.         $this->amountPayed $amountPayed;
  108.         return $this;
  109.     }
  110.     public function getStatus(): ?TransactionStatus
  111.     {
  112.         return $this->status;
  113.     }
  114.     public function setStatus(TransactionStatus $status): self
  115.     {
  116.         $this->status $status;
  117.         return $this;
  118.     }
  119.     public function getComment(): ?string
  120.     {
  121.         return $this->comment;
  122.     }
  123.     public function setComment(?string $comment): self
  124.     {
  125.         $this->comment $comment;
  126.         return $this;
  127.     }
  128.     public function getCancelReason(): ?string
  129.     {
  130.         return $this->cancelReason;
  131.     }
  132.     public function setCancelReason(?string $cancelReason): self
  133.     {
  134.         $this->cancelReason $cancelReason;
  135.         return $this;
  136.     }
  137.     public function getRegistration(): ?Registration
  138.     {
  139.         return $this->registration;
  140.     }
  141.     public function setRegistration(?Registration $registration): self
  142.     {
  143.         $this->registration $registration;
  144.         return $this;
  145.     }
  146. }