<?php
/**
* Created by simpson <simpsonwork@gmail.com>
* Date: 27/08/2019
* Time: 18:17
*/
namespace App\Entity\Sales;
use App\Entity\User;
use Doctrine\ORM\Mapping as ORM;
use Money\Currency;
use Money\Money;
/**
* Возврат средств (может быть и частичный) за предыдущее списание
*/
#[ORM\Table(name: 'account_refunds')]
#[ORM\Entity]
class AccountRefund
{
#[ORM\Id]
#[ORM\Column(name: 'id', type: 'integer')]
#[ORM\GeneratedValue(strategy: 'AUTO')]
protected int $id;
#[ORM\JoinColumn(name: 'account_id', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: User::class)]
protected User $account;
#[ORM\Column(name: 'refunded_amount', type: 'integer')]
protected string $refundedAmount;
#[ORM\Column(name: 'currency', type: 'string', length: 3)]
protected string $currency;
#[ORM\Column(name: 'date', type: 'datetimetz_immutable')]
protected \DateTimeImmutable $date;
#[ORM\OneToOne(targetEntity: AccountTransaction::class, mappedBy: 'refund', cascade: ['all'])]
protected AccountTransaction $transaction;
#[ORM\JoinColumn(name: 'price_id', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: PaidPlacementPrice::class)]
protected PaidPlacementPrice $price;
public function __construct(User $account, Money $refundedMoney, \DateTimeImmutable $date, PaidPlacementPrice $price)
{
$this->account = $account;
$this->refundedAmount = $refundedMoney->getAmount();
$this->currency = $refundedMoney->getCurrency()->getCode();
$this->date = $date;
$this->price = $price;
$this->transaction = AccountTransaction::fromRefund($this);
}
public function getId(): int
{
return $this->id;
}
public function getAccount(): User
{
return $this->account;
}
public function getRefundedMoney(): Money
{
return new Money($this->refundedAmount, new Currency($this->currency));
}
public function getDate(): \DateTimeImmutable
{
return $this->date;
}
public function getTransaction(): AccountTransaction
{
return $this->transaction;
}
}