<?php
namespace App\Entity;
use App\Service\Helper\DateTimeHelper;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Exception;
/**
* Class SberbankAcquiringOrder
*
* @ORM\Table(name="bookkeeping__sberbank_acquiring_orders",
* indexes={
* @ORM\Index(name="created_at", columns={"created_at"}),
* @ORM\Index(name="status", columns={"status"})
* })
* @ORM\Entity(repositoryClass="App\Repository\SberbankAcquiringOrderRepository")
*/
class SberbankAcquiringOrder
{
const STATUS_IN_PROGRESS = 'in_progress';
const STATUS_SUCCESS = 'success';
const STATUS_ERROR = 'error';
const STATUS_PAID = 'paid';
const STATUS_CREATED = 'created';
const STATUS_REVERSED = 'reversed';
const STATUS_REFUNDED = 'refunded';
const STATUS_REVOKED = 'revoked';
const STATUS_DECLINED = 'declined';
const STATUS_EXPIRED = 'expired';
const STATUS_AUTHORIZED = 'authorized';
const STATUS_CONFIRMED = 'confirmed';
const STATUS_ON_PAYMENT = 'on_payment';
const STATUSES = [
self::STATUS_CREATED => 'Создан',
self::STATUS_ERROR => 'Ошибка',
self::STATUS_PAID => 'Оплачен',
self::STATUS_REFUNDED => 'Возвращен',
];
const TYPE_ACQUIRING = 'acquiring';
const TYPE_QR = 'qr';
use IdTrait;
/**
* @ORM\Column(name="created_at", type="datetime", nullable=false)
*/
private DateTime $createdAt;
/**
* @ORM\Column(name="status", type="string", nullable=false)
*/
private string $status;
/**
* @ORM\Column(name="type", type="string", nullable=true)
*/
private string $type;
/**
* @ORM\Column(name="acquiring_order", type="string", nullable=true, options={"comments":"Номер заказа платежного шлюза."})
*/
private ?string $acquiringOrder = null;
/**
* @ORM\Column(name="form_url", type="string", nullable=true, options={"comments":"Адрес страницы оплаты платежного шлюза."})
*/
private ?string $formUrl = null;
/**
* @ORM\Column(name="auth_code", type="string", nullable=true)
*/
private ?string $authCode;
/**
* @ORM\Column(name="operation_id", type="string", nullable=true)
*/
private ?string $operationId;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Order", cascade={"all"})
* @ORM\JoinColumn(name="order_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
private Order $order;
/**
* @ORM\Column(name="amount", type="integer")
*/
private int $amount;
/**
* @ORM\Column(name="refund_amount", type="integer", options={"default":0})
*/
private int $refundAmount = 0;
/**
* @ORM\Column(name="error", type="text", nullable=true)
*/
private ?string $error = null;
/**
* @ORM\Column(name="webhook_request", type="text", nullable=true)
*/
private ?string $webhookRequest = null;
/**
* @throws Exception
*/
public function __construct(
Order $order,
int $amount,
string $type
)
{
$this->createdAt = DateTimeHelper::getNowDateTime();
$this->order = $order;
$this->amount = $amount;
$this->status = self::STATUS_IN_PROGRESS;
$this->type = $type;
}
public function getOrder(): Order
{
return $this->order;
}
public function getAmount(): int
{
return $this->amount;
}
public function getRefundAmount(): int
{
return $this->refundAmount;
}
public function setRefundAmount(int $refundAmount): SberbankAcquiringOrder
{
$this->refundAmount = $refundAmount;
return $this;
}
public function getStatus(): string
{
return $this->status;
}
public function setStatus(string $status): SberbankAcquiringOrder
{
$this->status = $status;
return $this;
}
public function getAcquiringOrder(): ?string
{
return $this->acquiringOrder;
}
public function setAcquiringOrder(string $acquiringOrder): SberbankAcquiringOrder
{
$this->acquiringOrder = $acquiringOrder;
return $this;
}
public function getFormUrl(): ?string
{
return $this->formUrl;
}
public function setFormUrl(string $formUrl): SberbankAcquiringOrder
{
$this->formUrl = $formUrl;
return $this;
}
public function getError(): ?string
{
return $this->error;
}
public function setError(?string $error): SberbankAcquiringOrder
{
$this->error = $error;
return $this;
}
public function getType(): string
{
return $this->type;
}
public function getAuthCode(): ?string
{
return $this->authCode;
}
public function setAuthCode(?string $authCode): SberbankAcquiringOrder
{
$this->authCode = $authCode;
return $this;
}
public function getOperationId(): ?string
{
return $this->operationId;
}
public function setOperationId(?string $operationId): SberbankAcquiringOrder
{
$this->operationId = $operationId;
return $this;
}
public function getWebhookRequest(): ?string
{
return $this->webhookRequest;
}
public function setWebhookRequest(?string $webhookRequest): SberbankAcquiringOrder
{
$this->webhookRequest = $webhookRequest;
return $this;
}
}