Files
oficial/app/src/Model/Venta/Pago.php
2025-03-26 16:49:27 -03:00

69 lines
1.8 KiB
PHP

<?php
namespace Incoviba\Model\Venta;
use DateTimeInterface;
use Incoviba\Common\Ideal\Model;
use Incoviba\Model\Contabilidad\Banco;
class Pago extends Model
{
const UF = 'uf';
const PESOS = 'pesos';
public float $valor;
public ?Banco $banco;
public ?TipoPago $tipoPago;
public ?string $identificador;
public ?DateTimeInterface $fecha;
public ?float $uf;
public ?string $pagador;
public ?Pago $asociado;
public array $estados;
public EstadoPago $currentEstado;
public function valor(string $moneda = Pago::UF): float
{
$multiplier = 1;
if ($moneda === Pago::UF) {
if ($this->uf === null or $this->uf === 0.0) {
return 0;
}
$uf = $this->uf;
$multiplier = 1 / $uf;
}
return $this->valor * $multiplier;
}
public function estado(?string $tipoEstado = null): ?EstadoPago
{
if (!isset($this->estados)) {
return null;
}
if ($tipoEstado === null) {
return $this->currentEstado;
}
foreach ($this->estados as $estado) {
if ($estado->tipoEstado->descripcion === $tipoEstado) {
return $estado;
}
}
return null;
}
public function jsonSerialize(): mixed
{
return array_merge(parent::jsonSerialize(), [
'valor' => $this->valor,
'valor_uf' => $this->valor(),
'banco' => $this->banco ?? '',
'tipo_pago' => $this->tipoPago ?? '',
'identificador' => $this->identificador ?? '',
'fecha' => $this->fecha->format('Y-m-d H:i:s') ?? '',
'uf' => $this->uf ?? 1,
'pagador' => $this->pagador ?? '',
'asociado' => $this->asociado ?? ''
]);
}
}