<?php
namespace App\Entity;
use App\Component\Serializer\Normalizer\ProxyAwareObjectNormalizer;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as SA;
/**
* Transaction
*
* @ORM\Table(name="transactions", uniqueConstraints={@ORM\UniqueConstraint(name="ref_id", columns={"ref_id"}), @ORM\UniqueConstraint(name="ipn_id", columns={"ipn_id", "type"})}, indexes={@ORM\Index(name="status", columns={"status"}), @ORM\Index(name="account_id", columns={"account_id"}), @ORM\Index(name="type", columns={"type"})})
* @ORM\Entity(repositoryClass="App\Repository\TransactionRepository")
*/
class Transaction extends Entity
{
public const STATUS = [
'pending' => 'pending',
'completed' => 'completed',
'canceled' => 'cancelled',
'suspended' => 'suspended',
];
public const TYPE = [
'manual' => 'manual',
'paypal' => 'paypal',
];
const SERIALIZATION_CONTEXT = [
'search' => ['groups' => ['transaction_general', 'account_general'],
ProxyAwareObjectNormalizer::RESOLVE_PROXY_CLASSES => [Transaction::class, Account::class]],
];
/**
* @var int
*
* @ORM\Column(name="id", type="bigint", nullable=false, options={"unsigned"=true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @SA\Groups({"transaction_general", "account_admin_details"})
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime", nullable=false, options={"default"="CURRENT_TIMESTAMP"})
* @SA\Groups({"transaction_general", "account_admin_details"})
*/
private $created = 'CURRENT_TIMESTAMP';
/**
* @var \DateTime|null
*
* @ORM\Column(name="modified", type="datetime", nullable=true)
* @SA\Groups({"transaction_general"})
*/
private $modified;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=0, nullable=false)
* @SA\Groups({"transaction_general", "account_admin_details"})
*/
private $type;
/**
* @var string
*
* @ORM\Column(name="status", type="string", length=0, nullable=false, options={"default"="pending"})
* @SA\Groups({"transaction_general"})
*/
private $status = self::STATUS['pending'];
/**
* @var string|null
*
* @ORM\Column(name="description", type="string", length=255, nullable=true)
*/
private $description;
/**
* @var string|null
*
* @ORM\Column(name="reason", type="string", length=255, nullable=true)
*/
private $reason;
/**
* @var string
*
* @ORM\Column(name="amount", type="decimal", precision=18, scale=9, nullable=false, options={"default"="0.000000000"})
* @SA\Groups({"transaction_general", "account_admin_details"})
*/
private $amount = '0.000000000';
/**
* @var int|null
*
* @ORM\Column(name="ipn_id", type="bigint", nullable=true, options={"unsigned"=true})
*/
private $ipnId;
/**
* @var string|null
*
* @ORM\Column(name="ref_id", type="string", length=40, nullable=true)
*/
private $refId;
/**
* @var \Account
*
* @ORM\ManyToOne(targetEntity="Account")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="account_id", referencedColumnName="id")
* })
* @SA\Groups({"account_general"})
*/
private $account;
/**
* @var IpnPaypal|null
* @ORM\OneToOne(targetEntity="IpnPaypal", inversedBy="transaction")
* @ORM\JoinColumns({
@ORM\JoinColumn(name="ipn_id", referencedColumnName="id")
* })
* @SA\Ignore
*/
private $ipn;
public function getId(): ?int
{
return $this->id;
}
public function getCreated(): ?\DateTimeInterface
{
return $this->created;
}
public function setCreated(\DateTimeInterface $created): self
{
$this->created = $created;
return $this;
}
public function getModified(): ?\DateTimeInterface
{
return $this->modified;
}
public function setModified(?\DateTimeInterface $modified): self
{
$this->modified = $modified;
return $this;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(string $type): self
{
$this->type = $type;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(string $status): self
{
$this->status = $status;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getReason(): ?string
{
return $this->reason;
}
public function setReason(?string $reason): self
{
$this->reason = $reason;
return $this;
}
public function getAmount(): ?string
{
return $this->amount;
}
public function setAmount(string $amount): self
{
$this->amount = $amount;
return $this;
}
public function getIpnId(): ?string
{
return $this->ipnId;
}
public function setIpnId(?string $ipnId): self
{
$this->ipnId = $ipnId;
return $this;
}
public function getRefId(): ?string
{
return $this->refId;
}
public function setRefId(?string $refId): self
{
$this->refId = $refId;
return $this;
}
public function getAccount(): ?Account
{
return $this->account;
}
public function setAccount(?Account $account): self
{
$this->account = $account;
return $this;
}
/**
* @return IpnPaypal|null
*/
public function getIpn(): ?IpnPaypal
{
return $this->ipn;
}
/**
* @param IpnPaypal|null $ipn
* @return Transaction
*/
public function setIpn(?IpnPaypal $ipn): Transaction
{
$this->ipn = $ipn;
return $this;
}
}