src/Entity/BenefactorTransaction.php line 16

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