Implemented repository mapper, and venta show

This commit is contained in:
Juan Pablo Vial
2023-08-08 23:53:49 -04:00
parent ef30ae67d2
commit 59825259b6
111 changed files with 2766 additions and 612 deletions

View File

@ -3,32 +3,103 @@ namespace Incoviba\Model;
use DateTimeInterface;
use Incoviba\Common\Ideal;
use Incoviba\Controller\Ventas;
class Venta extends Ideal\Model
{
public Venta\Propietario $propietario;
public Venta\Propiedad $propiedad;
public Venta\FormaPago $formaPago;
protected Venta\Propietario $propietario;
protected Venta\Propiedad $propiedad;
protected Venta\FormaPago $formaPago;
public DateTimeInterface $fecha;
public DateTimeInterface $fechaIngreso;
public float $valor;
public bool $relacionado;
protected ?Venta\Entrega $entrega;
public array $estados;
public Venta\EstadoVenta $currentEstado;
public function propietario(): Venta\Propietario
{
if (!isset($this->propietario)) {
$this->propietario = $this->runFactory('propietario');
}
return $this->propietario;
}
public function propiedad(): Venta\Propiedad
{
if (!isset($this->propiedad)) {
$this->propiedad = $this->runFactory('propiedad');
}
return $this->propiedad;
}
public function formaPago(): Venta\FormaPago
{
if (!isset($this->formaPago)) {
$this->formaPago = $this->runFactory('formaPago');
}
return $this->formaPago;
}
public function entrega(): ?Venta\Entrega
{
if (!isset($this->entrega)) {
$this->entrega = $this->runFactory('entrega');
}
return $this->entrega;
}
public function estados(): array
{
if (!isset($this->estados)) {
$this->estados = $this->runFactory('estados');
}
return $this->estados;
}
public function currentEstado(): ?Venta\EstadoVenta
{
if (!isset($this->currentEstado)) {
$this->currentEstado = $this->runFactory('currentEstado');
}
return $this->currentEstado;
}
public function proyecto(): Proyecto
{
return $this->propiedad()->departamentos()[0]->proyectoTipoUnidad->proyecto;
}
protected float $valor_util;
public function util(): float
{
if (!isset($this->valor_util)) {
$sum = $this->valor;
$sum -= array_reduce($this->propiedad()->estacionamientos(), function(float $sum, Venta\Unidad $unidad) {
return $unidad->precio($this->fecha)->valor;
}, 0);
$sum -= array_reduce($this->propiedad()->bodegas(), function(float $sum, Venta\Unidad $unidad) {
return $unidad->precio($this->fecha)->valor;
}, 0);
$this->valor_util = $sum;
}
return $this->valor_util;
}
public function saldo(): float
{
return $this->valor - $this->formaPago->total();
}
public function jsonSerialize(): mixed
{
return array_merge(parent::jsonSerialize(), [
'propietario' => $this->propietario,
'propiedad' => $this->propiedad,
'forma_pago' => $this->formaPago,
'propietario' => $this->propietario(),
'propiedad' => $this->propiedad(),
'forma_pago' => $this->formaPago()->ids(),
'fecha' => $this->fecha->format('Y-m-d'),
'fecha_ingreso' => $this->fechaIngreso->format('Y-m-d'),
'valor' => $this->valor,
'relacionado' => $this->relacionado,
'estados' => $this->estados,
'current_estado' => $this->currentEstado
'estados' => array_map(function(Venta\EstadoVenta $estado) {return $estado->id;}, $this->estados()),
'current_estado' => $this->currentEstado()
]);
}
}