105 lines
2.6 KiB
PHP
105 lines
2.6 KiB
PHP
<?php
|
|
namespace Incoviba\nuevo\Venta;
|
|
|
|
use Carbon\Carbon;
|
|
use Incoviba\Common\Alias\NewModel;
|
|
use Incoviba\nuevo\Inmobiliaria\Agente;
|
|
use Incoviba\Common\Definition\hasEstado;
|
|
|
|
/**
|
|
*
|
|
* @author Aldarien
|
|
* @property int id
|
|
* @property Propietario propietario_rut
|
|
* @property Propiedad propiedad_id
|
|
* @property FormaPago forma_pago_id
|
|
* @property Date fecha_promesa
|
|
* @property double valor_promesa
|
|
* @property double uf
|
|
* @property boolean relacionado
|
|
* @property Agente agente_id
|
|
* @property DateTime created_at
|
|
* @property DateTime updated_at
|
|
*
|
|
*/
|
|
class Venta extends NewModel
|
|
{
|
|
use hasEstado;
|
|
|
|
protected static $_table = 'ventas';
|
|
|
|
public function propietario()
|
|
{
|
|
return $this->belongs_to(Propietario::class, 'propietario_rut', 'rut')->findOne();
|
|
}
|
|
public function propiedad()
|
|
{
|
|
return $this->belongs_to(Propiedad::class, 'propiedad_id')->findOne();
|
|
}
|
|
public function formaPago()
|
|
{
|
|
return $this->belongs_to(FormaPago::class, 'forma_pago_id')->findOne();
|
|
}
|
|
public function agente()
|
|
{
|
|
$agente = $this->belongs_to(Agente::class, 'agente_id');
|
|
if ($agente) {
|
|
return $agente->findOne();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function valor()
|
|
{
|
|
return $this->valor_promesa * $this->uf;
|
|
}
|
|
public function proyecto()
|
|
{
|
|
return $this->propiedad->unidadPrincipal->unidadProyecto->proyecto();
|
|
}
|
|
public function comision()
|
|
{
|
|
return $this->agente->comision($this->proyecto->inmobiliaria->rut);
|
|
}
|
|
public function ufM2()
|
|
{
|
|
if (!$this->agente) {
|
|
return 0;
|
|
}
|
|
return ($this->valor_promesa - $this->premios->sum('valor') - $this->comision() - $this->propiedad->unidades->sum('valor')) / $this->propiedad->unidadPrincipal->unidadProyecto->m2->vendibles();
|
|
}
|
|
public function fechaPromesa()
|
|
{
|
|
return Carbon::parse($this->fecha_promesa, config('app.timezone'));
|
|
}
|
|
|
|
public function premios()
|
|
{
|
|
$premios = $this->has_many(Premio::class, 'venta_id');
|
|
if ($premios) {
|
|
return $premios->findMany();
|
|
}
|
|
return [];
|
|
}
|
|
public function comentarios()
|
|
{
|
|
$comentarios = $this->has_many(Comentario::class, 'venta_id');
|
|
if ($comentarios) {
|
|
return $comentarios->findMany();
|
|
}
|
|
return [];
|
|
}
|
|
public function fondos()
|
|
{
|
|
return $this->has_many(FondoVenta::class, 'venta_id')->findMany();
|
|
}
|
|
public function postventas()
|
|
{
|
|
$postventas = $this->has_many(Postventa::class, 'venta_id');
|
|
if ($postventas) {
|
|
return $postventas->findMany();
|
|
}
|
|
return null;
|
|
}
|
|
}
|