<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use App\Controller\ControllerNotificationCinepay;
use App\Controller\ControllerNotificationCinetpay;
use App\Controller\ControllerReturnUrlCinetpay;
use App\Controller\ControllerReturnUrlCinetpayGet;
use App\Repository\PaymentRepository;
use DateTimeImmutable;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
#[ORM\Entity(repositoryClass: PaymentRepository::class)]
#[ApiResource(
// denormalizationContext:[
// 'groups'=>['payement:write']
// ],
order: ["id" => "DESC"],
normalizationContext:[
'groups'=>['payement:read']
],
collectionOperations: [
'get',
'post',
'notification' => [
'method' => 'POST',
'path' => "payments/notification",
'controller' => ControllerNotificationCinetpay::class,
'read' => false,
'deserialize' => false,
'input_formats' => [
'application/x-www-form-urlencoded' => ['application/x-www-form-urlencoded'],
],
],
'return_redicrection' => [
'method' => 'POST',
'path' => "payments/return_url",
'controller' => ControllerReturnUrlCinetpay::class,
'read' => false,
'status' => 200,
'deserialize' => false,
// 'input_formats' => [
// 'application/x-www-form-urlencoded' => ['application/x-www-form-urlencoded'],
// ],
],
'return_get_redicrection' => [
'method' => 'GET',
'path' => "payments/return_url",
'controller' => ControllerReturnUrlCinetpay::class,
'read' => false,
'status' => 200,
'deserialize' => false,
// 'input_formats' => [
// 'application/x-www-form-urlencoded' => ['application/x-www-form-urlencoded'],
// ],
],
'return_redicrection_get' => [
'method' => 'GET',
'path' => "payments/return_url_get",
'controller' => ControllerReturnUrlCinetpayGet::class,
'read' => false,
'deserialize' => false
],
]
)]
#[ApiFilter(SearchFilter::class, properties: ['modePayment'=>'exact','abonnement.academicien'=>'exact'])]
class Payment
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
#[Groups(['reservation:write','reservation:read','payement:read',
'abonnement:read','abonnement:write','abonnement:read','user:read'])]
private $id;
#[ORM\Column(type: 'integer')]
#[Groups(['reservation:write','reservation:read','payement:read','abonnement:read',
'abonnement:write','abonnement:read','user:read'])]
private $montant;
#[ORM\ManyToOne(targetEntity: ModePayement::class)]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reservation:write','reservation:read',
'payement:read','abonnement:read','abonnement:write','abonnement:read','user:read'])]
private $modePayment;
#[ORM\ManyToOne(targetEntity: Reservation::class, inversedBy: 'payements')]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
#[Groups(['payement:read'])]
private $reservation;
#[ORM\Column(type: 'datetime', nullable: true)]
#[Groups(['reservation:read','payement:read','abonnement:read','abonnement:read','user:read'])]
private $date;
#[ORM\ManyToOne(targetEntity: Abonnement::class, inversedBy: 'payements')]
#[Groups(['reservation:read','payement:read'])]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
private $abonnement;
#[ORM\Column(type: 'string', length: 45, nullable: true)]
#[Groups(['reservation:read','payement:read','abonnement:read','abonnement:read','user:read'])]
private $statut;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
#[Groups(['reservation:read','payement:read','abonnement:read','abonnement:read','user:read'])]
private $transactionId;
#[ORM\Column(type: 'integer', nullable: true)]
#[Groups(['reservation:write','reservation:read','payement:read','abonnement:read',
'abonnement:write','abonnement:read','user:read'])]
private $remise;
public function __construct()
{
$this->date = new DateTimeImmutable();
$this->statut = "await";
$this->remise = 0;
$this->transactionId = date("YmdHis");
}
public function getId(): ?int
{
return $this->id;
}
public function getMontant(): ?int
{
return $this->montant;
}
public function setMontant(int $montant): self
{
$this->montant = $montant;
return $this;
}
public function getModePayment(): ?ModePayement
{
return $this->modePayment;
}
public function setModePayment(?ModePayement $modePayment): self
{
$this->modePayment = $modePayment;
return $this;
}
public function getReservation(): ?Reservation
{
return $this->reservation;
}
public function setReservation(?Reservation $reservation): self
{
$this->reservation = $reservation;
return $this;
}
public function getDate(): ?\DateTimeInterface
{
return $this->date;
}
public function setDate(?\DateTimeInterface $date): self
{
$this->date = $date;
return $this;
}
public function getAbonnement(): ?Abonnement
{
return $this->abonnement;
}
public function setAbonnement(?Abonnement $abonnement): self
{
$this->abonnement = $abonnement;
return $this;
}
public function getStatut(): ?string
{
return $this->statut;
}
public function setStatut(?string $statut): self
{
$this->statut = $statut;
return $this;
}
public function getTransactionId(): ?string
{
return $this->transactionId;
}
public function setTransactionId(?string $transactionId): self
{
$this->transactionId = $transactionId;
return $this;
}
public function getRemise(): ?int
{
return $this->remise;
}
public function setRemise(?int $remise): self
{
$this->remise = $remise;
return $this;
}
}