From eeb725200acf1c9b2cba33e04d6799aa8ad9f285 Mon Sep 17 00:00:00 2001 From: Aldarien Date: Mon, 23 Dec 2019 18:01:36 -0300 Subject: [PATCH] Nuevo models --- src/nuevo/Common/Banco.php | 22 +++ src/nuevo/Common/Comuna.php | 27 ++++ src/nuevo/Common/Direccion.php | 24 ++++ src/nuevo/Common/M2.php | 33 +++++ src/nuevo/Common/Provincia.php | 27 ++++ src/nuevo/Common/Region.php | 24 ++++ src/nuevo/Common/UF.php | 33 +++++ src/nuevo/Inmobiliaria/Agente.php | 47 +++++++ .../Inmobiliaria/CategoriaCuentaContable.php | 21 +++ src/nuevo/Inmobiliaria/Cobro.php | 36 +++++ src/nuevo/Inmobiliaria/Contrato.php | 37 +++++ src/nuevo/Inmobiliaria/Cuenta.php | 31 ++++ src/nuevo/Inmobiliaria/CuentaContable.php | 44 ++++++ src/nuevo/Inmobiliaria/EstadoCobro.php | 26 ++++ src/nuevo/Inmobiliaria/Inmobiliaria.php | 50 +++++++ src/nuevo/Inmobiliaria/Participacion.php | 27 ++++ src/nuevo/Inmobiliaria/Representante.php | 56 ++++++++ src/nuevo/Inmobiliaria/Socio.php | 23 +++ src/nuevo/Inmobiliaria/TipoAgente.php | 22 +++ src/nuevo/Inmobiliaria/TipoCobro.php | 22 +++ src/nuevo/Inmobiliaria/TipoContrato.php | 22 +++ src/nuevo/Inmobiliaria/TipoEstadoCobro.php | 22 +++ .../Inmobiliaria/TransaccionContable.php | 46 ++++++ src/nuevo/Proyecto/EstadoProyecto.php | 25 ++++ src/nuevo/Proyecto/Etapa.php | 22 +++ src/nuevo/Proyecto/Participe.php | 27 ++++ src/nuevo/Proyecto/Proyecto.php | 132 ++++++++++++++++++ src/nuevo/Proyecto/ProyectoParticipe.php | 27 ++++ src/nuevo/Proyecto/Tema.php | 75 ++++++++++ src/nuevo/Proyecto/TipoEstadoProyecto.php | 28 ++++ src/nuevo/Proyecto/TipoUnidad.php | 21 +++ src/nuevo/Proyecto/UnidadProyecto.php | 50 +++++++ src/nuevo/Venta/Cierre.php | 59 ++++++++ src/nuevo/Venta/Comentario.php | 23 +++ src/nuevo/Venta/Cuota.php | 27 ++++ src/nuevo/Venta/Entrega.php | 47 +++++++ src/nuevo/Venta/EstadoCierre.php | 26 ++++ src/nuevo/Venta/EstadoObservacion.php | 26 ++++ src/nuevo/Venta/EstadoPago.php | 25 ++++ src/nuevo/Venta/EstadoPostventa.php | 27 ++++ src/nuevo/Venta/EstadoVenta.php | 25 ++++ src/nuevo/Venta/FondoVenta.php | 31 ++++ src/nuevo/Venta/FormaPago.php | 35 +++++ src/nuevo/Venta/Medicion.php | 24 ++++ src/nuevo/Venta/Observacion.php | 20 +++ src/nuevo/Venta/Pago.php | 35 +++++ src/nuevo/Venta/Pie.php | 39 ++++++ src/nuevo/Venta/Postventa.php | 38 +++++ src/nuevo/Venta/PostventaObservacion.php | 27 ++++ src/nuevo/Venta/Premio.php | 27 ++++ src/nuevo/Venta/Propiedad.php | 30 ++++ src/nuevo/Venta/Propietario.php | 71 ++++++++++ src/nuevo/Venta/ProyectoTipoMedicion.php | 28 ++++ src/nuevo/Venta/Reserva.php | 30 ++++ src/nuevo/Venta/TipoEstadoCierre.php | 10 ++ src/nuevo/Venta/TipoEstadoObservacion.php | 10 ++ src/nuevo/Venta/TipoEstadoPago.php | 14 ++ src/nuevo/Venta/TipoEstadoPostventa.php | 17 +++ src/nuevo/Venta/TipoEstadoVenta.php | 14 ++ src/nuevo/Venta/TipoFondo.php | 14 ++ src/nuevo/Venta/TipoMedicion.php | 10 ++ src/nuevo/Venta/TipoPago.php | 14 ++ src/nuevo/Venta/TipoPremio.php | 14 ++ src/nuevo/Venta/Unidad.php | 47 +++++++ src/nuevo/Venta/UnidadPropiedad.php | 27 ++++ src/nuevo/Venta/UnidadReserva.php | 27 ++++ src/nuevo/Venta/Venta.php | 104 ++++++++++++++ 67 files changed, 2171 insertions(+) create mode 100644 src/nuevo/Common/Banco.php create mode 100644 src/nuevo/Common/Comuna.php create mode 100644 src/nuevo/Common/Direccion.php create mode 100644 src/nuevo/Common/M2.php create mode 100644 src/nuevo/Common/Provincia.php create mode 100644 src/nuevo/Common/Region.php create mode 100644 src/nuevo/Common/UF.php create mode 100644 src/nuevo/Inmobiliaria/Agente.php create mode 100644 src/nuevo/Inmobiliaria/CategoriaCuentaContable.php create mode 100644 src/nuevo/Inmobiliaria/Cobro.php create mode 100644 src/nuevo/Inmobiliaria/Contrato.php create mode 100644 src/nuevo/Inmobiliaria/Cuenta.php create mode 100644 src/nuevo/Inmobiliaria/CuentaContable.php create mode 100644 src/nuevo/Inmobiliaria/EstadoCobro.php create mode 100644 src/nuevo/Inmobiliaria/Inmobiliaria.php create mode 100644 src/nuevo/Inmobiliaria/Participacion.php create mode 100644 src/nuevo/Inmobiliaria/Representante.php create mode 100644 src/nuevo/Inmobiliaria/Socio.php create mode 100644 src/nuevo/Inmobiliaria/TipoAgente.php create mode 100644 src/nuevo/Inmobiliaria/TipoCobro.php create mode 100644 src/nuevo/Inmobiliaria/TipoContrato.php create mode 100644 src/nuevo/Inmobiliaria/TipoEstadoCobro.php create mode 100644 src/nuevo/Inmobiliaria/TransaccionContable.php create mode 100644 src/nuevo/Proyecto/EstadoProyecto.php create mode 100644 src/nuevo/Proyecto/Etapa.php create mode 100644 src/nuevo/Proyecto/Participe.php create mode 100644 src/nuevo/Proyecto/Proyecto.php create mode 100644 src/nuevo/Proyecto/ProyectoParticipe.php create mode 100644 src/nuevo/Proyecto/Tema.php create mode 100644 src/nuevo/Proyecto/TipoEstadoProyecto.php create mode 100644 src/nuevo/Proyecto/TipoUnidad.php create mode 100644 src/nuevo/Proyecto/UnidadProyecto.php create mode 100644 src/nuevo/Venta/Cierre.php create mode 100644 src/nuevo/Venta/Comentario.php create mode 100644 src/nuevo/Venta/Cuota.php create mode 100644 src/nuevo/Venta/Entrega.php create mode 100644 src/nuevo/Venta/EstadoCierre.php create mode 100644 src/nuevo/Venta/EstadoObservacion.php create mode 100644 src/nuevo/Venta/EstadoPago.php create mode 100644 src/nuevo/Venta/EstadoPostventa.php create mode 100644 src/nuevo/Venta/EstadoVenta.php create mode 100644 src/nuevo/Venta/FondoVenta.php create mode 100644 src/nuevo/Venta/FormaPago.php create mode 100644 src/nuevo/Venta/Medicion.php create mode 100644 src/nuevo/Venta/Observacion.php create mode 100644 src/nuevo/Venta/Pago.php create mode 100644 src/nuevo/Venta/Pie.php create mode 100644 src/nuevo/Venta/Postventa.php create mode 100644 src/nuevo/Venta/PostventaObservacion.php create mode 100644 src/nuevo/Venta/Premio.php create mode 100644 src/nuevo/Venta/Propiedad.php create mode 100644 src/nuevo/Venta/Propietario.php create mode 100644 src/nuevo/Venta/ProyectoTipoMedicion.php create mode 100644 src/nuevo/Venta/Reserva.php create mode 100644 src/nuevo/Venta/TipoEstadoCierre.php create mode 100644 src/nuevo/Venta/TipoEstadoObservacion.php create mode 100644 src/nuevo/Venta/TipoEstadoPago.php create mode 100644 src/nuevo/Venta/TipoEstadoPostventa.php create mode 100644 src/nuevo/Venta/TipoEstadoVenta.php create mode 100644 src/nuevo/Venta/TipoFondo.php create mode 100644 src/nuevo/Venta/TipoMedicion.php create mode 100644 src/nuevo/Venta/TipoPago.php create mode 100644 src/nuevo/Venta/TipoPremio.php create mode 100644 src/nuevo/Venta/Unidad.php create mode 100644 src/nuevo/Venta/UnidadPropiedad.php create mode 100644 src/nuevo/Venta/UnidadReserva.php create mode 100644 src/nuevo/Venta/Venta.php diff --git a/src/nuevo/Common/Banco.php b/src/nuevo/Common/Banco.php new file mode 100644 index 0000000..365cbb8 --- /dev/null +++ b/src/nuevo/Common/Banco.php @@ -0,0 +1,22 @@ +has_many(\Incoviba\nuevo\Inmobiliaria\Cuenta::class, 'banco_id')->findMany(); + } +} diff --git a/src/nuevo/Common/Comuna.php b/src/nuevo/Common/Comuna.php new file mode 100644 index 0000000..4e25192 --- /dev/null +++ b/src/nuevo/Common/Comuna.php @@ -0,0 +1,27 @@ +belongs_to(Provincia::class, 'provincia_id')->findOne(); + } + public function direcciones() + { + return $this->has_many(Direccion::class, 'comuna_id')->findMany(); + } +} diff --git a/src/nuevo/Common/Direccion.php b/src/nuevo/Common/Direccion.php new file mode 100644 index 0000000..b195681 --- /dev/null +++ b/src/nuevo/Common/Direccion.php @@ -0,0 +1,24 @@ +belongs_to(Comuna::class, 'comuna_id')->findOne(); + } +} diff --git a/src/nuevo/Common/M2.php b/src/nuevo/Common/M2.php new file mode 100644 index 0000000..9c4f05d --- /dev/null +++ b/src/nuevo/Common/M2.php @@ -0,0 +1,33 @@ +has_many(\Incoviba\nuevo\Proyecto\UnidadProyecto::class, 'm2_id')->findMany(); + } + public function vendibles() + { + return $this->util + $this->logia + $this->terraza / 2 + $this->cubierta / 3; + } + public function total() + { + return $this->util + $this->logia + $this->terraza + $this->cubierta; + } +} diff --git a/src/nuevo/Common/Provincia.php b/src/nuevo/Common/Provincia.php new file mode 100644 index 0000000..2f74d80 --- /dev/null +++ b/src/nuevo/Common/Provincia.php @@ -0,0 +1,27 @@ +belongs_to(Region::class, 'region_id')->findOne(); + } + public function comunas() + { + return $this->has_many(Comuna::class, 'provincia_id')->findMany(); + } +} diff --git a/src/nuevo/Common/Region.php b/src/nuevo/Common/Region.php new file mode 100644 index 0000000..e3e211e --- /dev/null +++ b/src/nuevo/Common/Region.php @@ -0,0 +1,24 @@ +has_many(Provincia::class, 'region_id')->findMany(); + } +} diff --git a/src/nuevo/Common/UF.php b/src/nuevo/Common/UF.php new file mode 100644 index 0000000..53f7329 --- /dev/null +++ b/src/nuevo/Common/UF.php @@ -0,0 +1,33 @@ +fecha, config('app.timezone')); + $uf = uf($fecha); + + if ($uf != null) { + $this->valor = $uf->uf->value; + } + } + +} diff --git a/src/nuevo/Inmobiliaria/Agente.php b/src/nuevo/Inmobiliaria/Agente.php new file mode 100644 index 0000000..2b7d828 --- /dev/null +++ b/src/nuevo/Inmobiliaria/Agente.php @@ -0,0 +1,47 @@ +belongsTo(Representante::class, 'representante_rut', 'rut')->findOne(); + } + public function direccion() + { + return $this->belongsTo(Direccion::class, 'direccion_id')->findOne(); + } + public function tipo() + { + return $this->belongsTo(TipoAgente::class, 'tipo_agente_id')->findOne(); + } + public function contratos() + { + return $this->hasMany(Contrato::class, 'agente_id')->findMany(); + } + public function comision($inmobiliaria_rut) + { + return $this->hasMany(Contrato::class, 'agente_id')->where('inmobiliaria_rut', $inmobiliaria_rut)->sum('valor'); + } +} diff --git a/src/nuevo/Inmobiliaria/CategoriaCuentaContable.php b/src/nuevo/Inmobiliaria/CategoriaCuentaContable.php new file mode 100644 index 0000000..8c6de25 --- /dev/null +++ b/src/nuevo/Inmobiliaria/CategoriaCuentaContable.php @@ -0,0 +1,21 @@ +hasMany(CuentaContable::class, 'categoria_id')->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/Cobro.php b/src/nuevo/Inmobiliaria/Cobro.php new file mode 100644 index 0000000..ed856f2 --- /dev/null +++ b/src/nuevo/Inmobiliaria/Cobro.php @@ -0,0 +1,36 @@ +belongsTo(Contrato::class, 'contrato_id')->findOne(); + } + public function tipo() + { + return $this->belongsTo(TipoCobro::class, 'tipo_cobro_id')->findOne(); + } +} diff --git a/src/nuevo/Inmobiliaria/Contrato.php b/src/nuevo/Inmobiliaria/Contrato.php new file mode 100644 index 0000000..903f7f6 --- /dev/null +++ b/src/nuevo/Inmobiliaria/Contrato.php @@ -0,0 +1,37 @@ +belongsTo(Inmobiliaria::class, 'inmobiliaria_rut', 'rut')->findOne(); + } + public function agente() + { + return $this->belongsTo(Agente::class, 'agente_id')->findOne(); + } + public function tipo() + { + return $this->belongsTo(TipoContrato::class, 'tipo_contrato_id')->findOne(); + } + public function cobros() + { + return $this->hasMany(Cobro::class, 'contrato_id')->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/Cuenta.php b/src/nuevo/Inmobiliaria/Cuenta.php new file mode 100644 index 0000000..94dbfc8 --- /dev/null +++ b/src/nuevo/Inmobiliaria/Cuenta.php @@ -0,0 +1,31 @@ +belongsTo(Inmobiliaria::class, 'inmobiliaria_rut', 'rut')->findOne(); + } + public function banco() + { + return $this->belongsTo(Banco::class, 'banco_id')->findOne(); + } +} diff --git a/src/nuevo/Inmobiliaria/CuentaContable.php b/src/nuevo/Inmobiliaria/CuentaContable.php new file mode 100644 index 0000000..7c28136 --- /dev/null +++ b/src/nuevo/Inmobiliaria/CuentaContable.php @@ -0,0 +1,44 @@ +belongsTo(Inmobiliaria::class, 'inmobiliaria_rut', 'rut')->findOne(); + } + public function categoria() + { + return $this->belongsTo(CategoriaCuentaContable::class, 'categoria_id')->findOne(); + } + public function cargos() + { + return $this->hasMany(TransaccionContable::class, 'cuenta_de')->findMany(); + } + public function abonos() + { + return $this->hasMany(TransaccionContable::class, 'cuenta_para')->findMany(); + } + public function transacciones() + { + $transacciones = model(TransaccionContable::class)->whereAnyIs([['cuenta_de', $this->id], ['cuenta_para', $this->id]])->orderByAsc('fecha')->findMany(); + return $transacciones; + } + public function unidades() + { + return null; + } +} diff --git a/src/nuevo/Inmobiliaria/EstadoCobro.php b/src/nuevo/Inmobiliaria/EstadoCobro.php new file mode 100644 index 0000000..251c914 --- /dev/null +++ b/src/nuevo/Inmobiliaria/EstadoCobro.php @@ -0,0 +1,26 @@ +belongsTo(Cobro::class, 'cobro_id')->findOne(); + } + public function estado() + { + return $this->belongsTo(TipoEstadoCobro::class, 'estado_id')->findOne(); + } +} diff --git a/src/nuevo/Inmobiliaria/Inmobiliaria.php b/src/nuevo/Inmobiliaria/Inmobiliaria.php new file mode 100644 index 0000000..c28388a --- /dev/null +++ b/src/nuevo/Inmobiliaria/Inmobiliaria.php @@ -0,0 +1,50 @@ +belongs_to(Direccion::class, 'direccion_id')->findOne(); + } + public function representante() + { + return $this->belongs_to(Representante::class, 'representante_rut', 'rut')->findOne(); + } + public function estado() + { + return ($estado != 0); + } + + public function proyectos() + { + return $this->has_many(Proyecto::class, 'inmobiliaria_rut', 'rut')->findMany(); + } + public function inversionistas() + { + return $this->has_many_through(Socio::class, Participacion::class, 'socio_id', 'inmobiliaria_rut', 'rut')->findMany(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Inmobiliaria/Participacion.php b/src/nuevo/Inmobiliaria/Participacion.php new file mode 100644 index 0000000..f56388a --- /dev/null +++ b/src/nuevo/Inmobiliaria/Participacion.php @@ -0,0 +1,27 @@ +belongsTo(Inmobiliaria::class, 'inmobiliaria_rut', 'rut')->findOne(); + } + public function socio() + { + return $this->belongsTo(Socio::class, 'socio_rut', 'rut')->findOne(); + } +} diff --git a/src/nuevo/Inmobiliaria/Representante.php b/src/nuevo/Inmobiliaria/Representante.php new file mode 100644 index 0000000..1bc76b3 --- /dev/null +++ b/src/nuevo/Inmobiliaria/Representante.php @@ -0,0 +1,56 @@ +belongsTo(Direccion::class, 'direccion_id')->findMany(); + } + public function nombreCompleto() + { + return $this->nombres . ' ' . $this->apellidos; + } + + public function inmobiliarias() + { + return $this->hasMany(Inmobiliaria::class, 'representante_rut', 'rut')->findMany(); + } + public function agentes() + { + return $this->hasMany(Agente::class, 'representante_rut', 'rut')->findMany(); + } + public function apelativo() + { + if ($this->sexo == 'f') { + return 'doña'; + } + return 'don'; + } + public function articulo() + { + if ($this->sexo == 'f') { + return 'la'; + } + return 'el'; + } +} diff --git a/src/nuevo/Inmobiliaria/Socio.php b/src/nuevo/Inmobiliaria/Socio.php new file mode 100644 index 0000000..dddd84e --- /dev/null +++ b/src/nuevo/Inmobiliaria/Socio.php @@ -0,0 +1,23 @@ +hasMany(Participacion::class, 'socio_rut', 'rut')->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/TipoAgente.php b/src/nuevo/Inmobiliaria/TipoAgente.php new file mode 100644 index 0000000..7455f90 --- /dev/null +++ b/src/nuevo/Inmobiliaria/TipoAgente.php @@ -0,0 +1,22 @@ +hasMany(Agente::class, 'tipo_agente_id')->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/TipoCobro.php b/src/nuevo/Inmobiliaria/TipoCobro.php new file mode 100644 index 0000000..3bb0f1a --- /dev/null +++ b/src/nuevo/Inmobiliaria/TipoCobro.php @@ -0,0 +1,22 @@ +hasMany(Cobro::class, 'tipo_cobro_id')->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/TipoContrato.php b/src/nuevo/Inmobiliaria/TipoContrato.php new file mode 100644 index 0000000..15ae99d --- /dev/null +++ b/src/nuevo/Inmobiliaria/TipoContrato.php @@ -0,0 +1,22 @@ +hasMany(Contrato::class)->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/TipoEstadoCobro.php b/src/nuevo/Inmobiliaria/TipoEstadoCobro.php new file mode 100644 index 0000000..777e97f --- /dev/null +++ b/src/nuevo/Inmobiliaria/TipoEstadoCobro.php @@ -0,0 +1,22 @@ +hasMany(EstadoCobro::class, 'estado_id')->findMany(); + } +} diff --git a/src/nuevo/Inmobiliaria/TransaccionContable.php b/src/nuevo/Inmobiliaria/TransaccionContable.php new file mode 100644 index 0000000..ddbbed5 --- /dev/null +++ b/src/nuevo/Inmobiliaria/TransaccionContable.php @@ -0,0 +1,46 @@ +belongsTo(CuentaContable::class, 'cuenta_de'); + } + public function para() + { + return $this->belongsTo(CuentaContable::class, 'cuenta_para'); + } + + public function valor($tipo = 'pesos') + { + if ($tipo == 'ufs') { + $uf = model(UF::class)->where('fecha', $this->fecha)->findOne(); + if (!$uf) { + $uf = model(UF::class)->create(); + $uf->fecha = $this->fecha; + $uf->getValor(); + $uf->save(); + } + return ($this->valor / $uf->valor) ?: 0; + } + return $this->valor; + } +} diff --git a/src/nuevo/Proyecto/EstadoProyecto.php b/src/nuevo/Proyecto/EstadoProyecto.php new file mode 100644 index 0000000..c400628 --- /dev/null +++ b/src/nuevo/Proyecto/EstadoProyecto.php @@ -0,0 +1,25 @@ +belongsTo(Proyecto::class, 'proyecto_id')->findOne(); + } + public function estado() + { + return $this->belongsTo(TipoEstadoProyecto::class, 'estado_id')->findOne(); + } +} diff --git a/src/nuevo/Proyecto/Etapa.php b/src/nuevo/Proyecto/Etapa.php new file mode 100644 index 0000000..9dbda32 --- /dev/null +++ b/src/nuevo/Proyecto/Etapa.php @@ -0,0 +1,22 @@ +hasMany(TipoEstadoProyecto::class, 'etapa_id')->findMany(); + } +} diff --git a/src/nuevo/Proyecto/Participe.php b/src/nuevo/Proyecto/Participe.php new file mode 100644 index 0000000..1aafd6f --- /dev/null +++ b/src/nuevo/Proyecto/Participe.php @@ -0,0 +1,27 @@ +hasManyThrough(Proyecto::class, ProyectoParticipe::class, 'proyecto_id', 'participe_rut', 'rut')->findMany(); + } + public function participaciones() + { + return $this->hasMany(ProyectoParticipe::class, 'participe_rut', 'rut')->findMany(); + } +} diff --git a/src/nuevo/Proyecto/Proyecto.php b/src/nuevo/Proyecto/Proyecto.php new file mode 100644 index 0000000..922573e --- /dev/null +++ b/src/nuevo/Proyecto/Proyecto.php @@ -0,0 +1,132 @@ +belongsTo(Inmobiliaria::class, 'inmobiliaria_rut', 'rut')->findOne(); + } + public function direccion() + { + return $this->belongsTo(Direccion::class, 'direccion_id')->findOne(); + } + + public function participaciones() + { + return $this->hasMany(ProyectoParticipe::class, 'proyecto_id')->findMany(); + } + public function participes() + { + return $this->hasManyThrough(Participe::class, ProyectoParticipe::class, 'proyecto_id', 'participe_rut', 'rut')->findMany(); + } + public function unidades() + { + return $this->hasMany(UnidadProyecto::class, 'proyecto_id')->findMany(); + } + public function cantidad($tipo = 'departamento') + { + $total = 0; + $unidades = $this->unidades; + foreach ($unidades as $unidad) { + if ($unidad->tipo->descripcion == $tipo) { + $total += $unidad->unidades->count(); + } + } + return $total; + } + public function unidadesPrincipales() + { + if ($this->tipoUnidades()) { + return $this->cantidad('departamento'); + } else { + return $this->cantidad('casa'); + } + } + public function pisos() + { + $max_piso = 0; + $unidades = $this->unidades; + foreach ($unidades as $unidad) { + $piso = $unidad->unidades->max('piso'); + if ($max_piso < $piso) { + $max_piso = $piso; + } + } + return $max_piso; + } + public function m2Construidos() + { + $total = 0; + $unidades = $this->unidades; + foreach ($unidades as $unidad) { + $total += $unidad->m2->total() * $unidad->unidades->count(); + } + return $total; + } + public function tipoUnidades() + { + return (!$this->unidades->isEmpty() and $this->unidades[0]->tipo->descripcion == 'departamento'); + } + public function ventas() + { + $ventas = []; + foreach ($this->unidades as $up) { + foreach ($up->unidades as $u) { + if (isset($u->propiedad)) { + $ventas->add($u->propiedad->venta); + } + } + } + $ventas = sort($ventas, function($a, $b) { + return $a->propiedad->unidadPrincipal->numeracion - $b->propiedad->unidadPrincipal->numeracion; + }); + return $ventas; + } + public function ventasActivas() + { + $ventas = $this->ventas(); + $output = []; + foreach ($ventas as $venta) { + $estado = $venta->ultimoEstado()->estado->descripcion; + if ($estado == 'promesado' or $estado == 'escriturado' or $estado == 'entregado') { + $output []= $venta; + } + } + return $output; + } + public function pVendido() + { + return $this->ventasActivas()->count() / $this->unidadesPrincipales(); + } + public function m2Vendidos() + { + $ventas = $this->ventasActivas(); + $sum = 0; + foreach ($ventas as $venta) { + $sum += $venta->propiedad->unidadPrincipal->unidadProyecto->m2->vendibles(); + } + return $sum; + } +} diff --git a/src/nuevo/Proyecto/ProyectoParticipe.php b/src/nuevo/Proyecto/ProyectoParticipe.php new file mode 100644 index 0000000..743e218 --- /dev/null +++ b/src/nuevo/Proyecto/ProyectoParticipe.php @@ -0,0 +1,27 @@ +belongsTo(Proyecto::class, 'proyecto_id')->findOne(); + } + public function participe() + { + $this->belongsTo(Participe::class, 'participe_rut', 'rut')->findOne(); + } +} diff --git a/src/nuevo/Proyecto/Tema.php b/src/nuevo/Proyecto/Tema.php new file mode 100644 index 0000000..8f665e5 --- /dev/null +++ b/src/nuevo/Proyecto/Tema.php @@ -0,0 +1,75 @@ +belongsTo(Proyecto::class)->findOne(); + if ($proyecto) { + return $proyecto; + } + return $this->belongsTo(P::class)->findOne(); + } + public function inicio() + { + return Carbon::parse($this->inicio, config('app.timezone')); + } + public function cierre() + { + return Carbon::parse($this->cierre, config('app.timezone')); + } + public function texto() + { + $text = $this->texto; + $text = explode("\n", $text); + foreach ($text as &$line) { + $line = trim(rtrim($line, '.')) . '.'; + if ($line != ltrim($line, '-')) { + $line = ' ' . $line; + } + } + $text = implode('
', $text); + + preg_match_all('/\[\[.*\]\]/', $text, $matches); + $search = []; + $replace = []; + if (count($matches[0]) > 0) { + foreach ($matches[0] as $match) { + $search []= $match; + list($model, $where, $value) = explode(':', str_replace(['[',']'], ['', ''], $match)); + $class = '\\Incoviba\\old\\' . $model; + $obj = model($class)->where($where, $value)->findOne(); + + $str = $value; + if ($obj->venta()) { + $str = '' . $value . ''; + } + $replace []= $str; + } + } + + $text = str_replace($search, $replace, $text); + + return $text; + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Proyecto/TipoEstadoProyecto.php b/src/nuevo/Proyecto/TipoEstadoProyecto.php new file mode 100644 index 0000000..8d87e4d --- /dev/null +++ b/src/nuevo/Proyecto/TipoEstadoProyecto.php @@ -0,0 +1,28 @@ +belongsTo(Etapa::class, 'etapa_id')->findOne(); + } + + public function estados() + { + return $this->hasMany(EstadoProyecto::class, 'estado_id')->findMany(); + } +} diff --git a/src/nuevo/Proyecto/TipoUnidad.php b/src/nuevo/Proyecto/TipoUnidad.php new file mode 100644 index 0000000..2eb403d --- /dev/null +++ b/src/nuevo/Proyecto/TipoUnidad.php @@ -0,0 +1,21 @@ +hasMany(UnidadProyecto::class, 'tipo_id')->findMany(); + } +} diff --git a/src/nuevo/Proyecto/UnidadProyecto.php b/src/nuevo/Proyecto/UnidadProyecto.php new file mode 100644 index 0000000..0cd665c --- /dev/null +++ b/src/nuevo/Proyecto/UnidadProyecto.php @@ -0,0 +1,50 @@ +belongsTo(Proyecto::class, 'proyecto_id')->findOne(); + } + public function m2() + { + return $this->belongsTo(M2::class, 'm2_id')->findOne(); + } + public function tipo() + { + return $this->belongsTo(TipoUnidad::class, 'tipo_id')->findOne(); + } + public function unidades() + { + return $this->hasMany(Unidad::class, 'unidad_proyecto_id')->findMany(); + } + public function orientaciones() + { + $orientaciones = []; + foreach ($this->unidades as $unidad) { + if (array_search($unidad->orientacion, $orientaciones) === false) { + $orientaciones []= $unidad->orientacion; + } + } + return $orientaciones; + } +} diff --git a/src/nuevo/Venta/Cierre.php b/src/nuevo/Venta/Cierre.php new file mode 100644 index 0000000..ce5a28e --- /dev/null +++ b/src/nuevo/Venta/Cierre.php @@ -0,0 +1,59 @@ +belongsTo(Proyecto::class, 'proyecto_id')->findOne(); + } + public function agente() + { + return $this->belongsTo(Agente::class, 'agente_id')->findOne(); + } + public function propietario() + { + return $this->belongsTo(Propietario::class, 'propietario_rut')->findOne(); + } + public function reserva() + { + return $this->belongsTo(Reserva::class, 'reserva_id')->findOne(); + } + public function fecha() + { + return Carbon::parse($this->fecha, config('app.timezone')); + } + public function pie($type = 'ufs') + { + if ($type == 'ufs') { + return $this->pie; + } + $uf = uf($this->fecha()); + return $this->pie * $uf->uf->value; + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/Comentario.php b/src/nuevo/Venta/Comentario.php new file mode 100644 index 0000000..4c99f66 --- /dev/null +++ b/src/nuevo/Venta/Comentario.php @@ -0,0 +1,23 @@ +belongsTo(Venta::class, 'venta_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/Cuota.php b/src/nuevo/Venta/Cuota.php new file mode 100644 index 0000000..d273578 --- /dev/null +++ b/src/nuevo/Venta/Cuota.php @@ -0,0 +1,27 @@ +belongsTo(Pie::class, 'pie_id')->findOne(); + } + public function pago() + { + return $this->belongsTo(Pago::class, 'pago_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/Entrega.php b/src/nuevo/Venta/Entrega.php new file mode 100644 index 0000000..fb15691 --- /dev/null +++ b/src/nuevo/Venta/Entrega.php @@ -0,0 +1,47 @@ +belongs_to(Venta::class, 'venta_id')->findOne(); + } + + public function fondos() + { + return $this->has_many_through(Pago::class, FondoEntrega::class, 'entrega_id', 'pago_id')->findMany(); + } + public function mediciones() + { + return $this->has_many_through(Medicion::class, MedicionEntrega::class, 'entrega_id', 'medicion_id')->findMany(); + } + public function observaciones() + { + return $this->has_many_through(Observacion::class, EntregaObservacion::class, 'entrega_id', 'observacion_id')->findMany(); + } + public function observacionesPendientes() + { + return $this->has_many_through(Observacion::class, EntregaObservacion::class, 'entrega_id', 'observacion_id') + ->select('observaciones.*') + ->rawJoin('JOIN (SELECT e1.* FROM (SELECT MAX(id) AS id, observacion_id FROM estado_observaciones GROUP BY observacion_id) e0 JOIN estado_observaciones e1 ON e1.id = e0.id)', ['ep.observacion_id', '=', 'observaciones.id'], 'ep') + ->leftOuterJoin('tipo_estado_observaciones', ['tipo_estado_observaciones.id', '=', 'ep.tipo_estado_observacion_id']) + ->where('tipo_estado_observaciones.descripcion', 'ingresada') + ->findMany(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/EstadoCierre.php b/src/nuevo/Venta/EstadoCierre.php new file mode 100644 index 0000000..d9be83e --- /dev/null +++ b/src/nuevo/Venta/EstadoCierre.php @@ -0,0 +1,26 @@ +belongsTo(Cierre::class)->findOne(); + } + public function estado() + { + return $this->belongsTo(TipoEstadoCierre::class)->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/EstadoObservacion.php b/src/nuevo/Venta/EstadoObservacion.php new file mode 100644 index 0000000..e4fc984 --- /dev/null +++ b/src/nuevo/Venta/EstadoObservacion.php @@ -0,0 +1,26 @@ +belongs_to(Observacion::class, 'observacion_id')->findOne(); + } + public function tipo() + { + return $this->belongs_to(TipoEstadoObservacion::class, 'tipo_estado_observacion_id')->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/EstadoPago.php b/src/nuevo/Venta/EstadoPago.php new file mode 100644 index 0000000..a163d9d --- /dev/null +++ b/src/nuevo/Venta/EstadoPago.php @@ -0,0 +1,25 @@ +belongsTo(Pago::class, 'pago_id')->findOne(); + } + public function estado() + { + return $this->belongsTo(TipoEstadoPago::class, 'estado_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/EstadoPostventa.php b/src/nuevo/Venta/EstadoPostventa.php new file mode 100644 index 0000000..ba8b6be --- /dev/null +++ b/src/nuevo/Venta/EstadoPostventa.php @@ -0,0 +1,27 @@ +belongs_to(Postventa::class, 'postventa_id')->findOne(); + } + public function tipo() + { + return $this->belongs_to(TipoEstadoPostventa::class, 'tipo_estado_postventa_id')->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/EstadoVenta.php b/src/nuevo/Venta/EstadoVenta.php new file mode 100644 index 0000000..52ac3df --- /dev/null +++ b/src/nuevo/Venta/EstadoVenta.php @@ -0,0 +1,25 @@ +belongsTo(Venta::class, 'venta_id')->findOne(); + } + public function estado() + { + return $this->belongsTo(TipoEstadoVenta::class, 'estado_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/FondoVenta.php b/src/nuevo/Venta/FondoVenta.php new file mode 100644 index 0000000..7e5c689 --- /dev/null +++ b/src/nuevo/Venta/FondoVenta.php @@ -0,0 +1,31 @@ +belongs_to(Venta::class, 'venta_id')->findOne(); + } + public function tipo() + { + return $this->belongs_to(TipoFondo::class, 'tipo_id')->findOne(); + } + public function pago() + { + return $this->belongs_to(Pago::class, 'pago_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/FormaPago.php b/src/nuevo/Venta/FormaPago.php new file mode 100644 index 0000000..43ffff0 --- /dev/null +++ b/src/nuevo/Venta/FormaPago.php @@ -0,0 +1,35 @@ +belongsTo(Pie::class, 'pie_id')->findOne(); + } + public function escritura() + { + return $this->belongsTo(Pago::class, 'escritura_id')->findOne(); + } + public function credito() + { + return $this->belongsTo(Pago::class, 'credito_id')->findOne(); + } + public function subsidio() + { + return $this->belongs_to(Subsidio::class, 'subsidio_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/Medicion.php b/src/nuevo/Venta/Medicion.php new file mode 100644 index 0000000..4e8c25f --- /dev/null +++ b/src/nuevo/Venta/Medicion.php @@ -0,0 +1,24 @@ +belongs_to(TipoMedicion::class, 'tipo_medicion_id')->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/Observacion.php b/src/nuevo/Venta/Observacion.php new file mode 100644 index 0000000..af3d10e --- /dev/null +++ b/src/nuevo/Venta/Observacion.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/src/nuevo/Venta/Pago.php b/src/nuevo/Venta/Pago.php new file mode 100644 index 0000000..2aa1d18 --- /dev/null +++ b/src/nuevo/Venta/Pago.php @@ -0,0 +1,35 @@ +belongsTo(TipoPago::class, 'tipo_id')->findOne(); + } + public function banco() + { + return $this->belongsTo(Banco::class, 'banco_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/Pie.php b/src/nuevo/Venta/Pie.php new file mode 100644 index 0000000..70a292a --- /dev/null +++ b/src/nuevo/Venta/Pie.php @@ -0,0 +1,39 @@ +belongsTo(Pie::class, 'asociado_id'); + if ($pie) { + return $pie->findOne(); + } + return null; + } + public function Cuotas() + { + return $this->hasMany(Cuota::class, 'pie_id')->findMany(); + } + public function CuotasPagadas() + { + return $this->hasMany(Cuota::class, 'pie_id')->filter(function($cuota) { + $estado = $cuota->pago->ultimoEstado()->estado->descripcion; + return ($estado == 'depositado' or $estado == 'abonado'); + }); + } +} diff --git a/src/nuevo/Venta/Postventa.php b/src/nuevo/Venta/Postventa.php new file mode 100644 index 0000000..defd340 --- /dev/null +++ b/src/nuevo/Venta/Postventa.php @@ -0,0 +1,38 @@ +belongs_to(Venta::class, 'venta_id')->findOne(); + } + public function observaciones() + { + return $this->has_many_through(Observacion::class, PostventaObservacion::class, 'postventa_id', 'observacion_id')->findMany(); + } + public function observacionesPendientes() + { + return $this->has_many_through(Observacion::class, PostventaObservacion::class, 'postventa_id', 'observacion_id') + ->select('observaciones.*') + ->rawJoin('JOIN (SELECT e1.* FROM (SELECT MAX(id) AS id, observacion_id FROM estado_observaciones GROUP BY observacion_id) e0 JOIN estado_observaciones e1 ON e1.id = e0.id)', ['ep.observacion_id', '=', 'observaciones.id'], 'ep') + ->leftOuterJoin('tipo_estado_observaciones', ['tipo_estado_observaciones.id', '=', 'ep.tipo_estado_observacion_id']) + ->where('tipo_estado_observaciones.descripcion', 'ingresada') + ->findMany(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/PostventaObservacion.php b/src/nuevo/Venta/PostventaObservacion.php new file mode 100644 index 0000000..f16309a --- /dev/null +++ b/src/nuevo/Venta/PostventaObservacion.php @@ -0,0 +1,27 @@ +belongs_to(Postventa::class, 'postventa_id')->findOne(); + } + public function observacion() + { + return $this->belongs_to(Observacion::class, 'observacion_id')->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/Premio.php b/src/nuevo/Venta/Premio.php new file mode 100644 index 0000000..0ea45c0 --- /dev/null +++ b/src/nuevo/Venta/Premio.php @@ -0,0 +1,27 @@ +belongsTo(Venta::class, 'venta_id')->findOne(); + } + public function tipo() + { + return $this->belongsTo(TipoPremio::class, 'tipo_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/Propiedad.php b/src/nuevo/Venta/Propiedad.php new file mode 100644 index 0000000..edc7299 --- /dev/null +++ b/src/nuevo/Venta/Propiedad.php @@ -0,0 +1,30 @@ +belongsTo(Unidad::class, 'unidad_id')->findOne(); + } + public function unidades() + { + return $this->hasMany(UnidadPropiedad::class, 'propiedad_id')->findMany(); + } + public function venta() + { + return $this->hasMany(Venta::class, 'propiedad_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/Propietario.php b/src/nuevo/Venta/Propietario.php new file mode 100644 index 0000000..be00555 --- /dev/null +++ b/src/nuevo/Venta/Propietario.php @@ -0,0 +1,71 @@ +belongsTo(Direccion::class, 'direccion_id')->findOne(); + } + public function representante() + { + $prop = $this->belongsTo(Propietario::class, 'representante_rut', 'rut'); + if ($prop) { + return $prop->findOne(); + } + return null; + } + public function otro() + { + $prop = $this->belongsTo(Propietario::class, 'otro_rut', 'rut'); + if ($prop) { + return $prop->findOne(); + } + return null; + } + + public function nombreCompleto() + { + return implode(' ', [$this->nombres, $this->apellido_paterno, $this->apellido_materno]); + } + + public function represntado() + { + $prop = $this->has_many(Propietario::class, 'representante_rut', 'rut'); + if ($prop) { + return $prop->findOne(); + } + return null; + } + public function ventas() + { + return $this->hasMany(Venta::class, 'propietario_rut', 'rut')->findMany(); + } + public function articulo() + { + if ($this->sexo == 'f') { + return 'la'; + } + return 'el'; + } +} diff --git a/src/nuevo/Venta/ProyectoTipoMedicion.php b/src/nuevo/Venta/ProyectoTipoMedicion.php new file mode 100644 index 0000000..6d479c7 --- /dev/null +++ b/src/nuevo/Venta/ProyectoTipoMedicion.php @@ -0,0 +1,28 @@ +belongs_to(Proyecto::class, 'proyecto_id')->findOne(); + } + public function tipo() + { + return $this->belongs_to(TipoMedicion::class, 'tipo_medicion_id')->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/Reserva.php b/src/nuevo/Venta/Reserva.php new file mode 100644 index 0000000..3f68449 --- /dev/null +++ b/src/nuevo/Venta/Reserva.php @@ -0,0 +1,30 @@ +belongsTo(Unidad::class, 'unidad_id')->findOne(); + } + public function unidades() + { + return $this->hasMany(UnidadReserva::class, 'reserva_id')->findMany(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/TipoEstadoCierre.php b/src/nuevo/Venta/TipoEstadoCierre.php new file mode 100644 index 0000000..50498bc --- /dev/null +++ b/src/nuevo/Venta/TipoEstadoCierre.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/src/nuevo/Venta/TipoEstadoObservacion.php b/src/nuevo/Venta/TipoEstadoObservacion.php new file mode 100644 index 0000000..ba0eb69 --- /dev/null +++ b/src/nuevo/Venta/TipoEstadoObservacion.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/src/nuevo/Venta/TipoEstadoPago.php b/src/nuevo/Venta/TipoEstadoPago.php new file mode 100644 index 0000000..0224436 --- /dev/null +++ b/src/nuevo/Venta/TipoEstadoPago.php @@ -0,0 +1,14 @@ +hasMany(EstadoPago::class, 'estado_id')->findMany(); + } +} diff --git a/src/nuevo/Venta/TipoEstadoPostventa.php b/src/nuevo/Venta/TipoEstadoPostventa.php new file mode 100644 index 0000000..3a50841 --- /dev/null +++ b/src/nuevo/Venta/TipoEstadoPostventa.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/src/nuevo/Venta/TipoEstadoVenta.php b/src/nuevo/Venta/TipoEstadoVenta.php new file mode 100644 index 0000000..044dcbf --- /dev/null +++ b/src/nuevo/Venta/TipoEstadoVenta.php @@ -0,0 +1,14 @@ +hasMany(EstadoVenta::class, 'estado_id')->findMany(); + } +} diff --git a/src/nuevo/Venta/TipoFondo.php b/src/nuevo/Venta/TipoFondo.php new file mode 100644 index 0000000..0374e5f --- /dev/null +++ b/src/nuevo/Venta/TipoFondo.php @@ -0,0 +1,14 @@ +hasMany(FontoVenta::class, 'tipo_id')->findMany(); + } +} diff --git a/src/nuevo/Venta/TipoMedicion.php b/src/nuevo/Venta/TipoMedicion.php new file mode 100644 index 0000000..64d21cd --- /dev/null +++ b/src/nuevo/Venta/TipoMedicion.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/src/nuevo/Venta/TipoPago.php b/src/nuevo/Venta/TipoPago.php new file mode 100644 index 0000000..0ce8a64 --- /dev/null +++ b/src/nuevo/Venta/TipoPago.php @@ -0,0 +1,14 @@ +hasMany(Pago::class, 'tipo_id')->findMany(); + } +} diff --git a/src/nuevo/Venta/TipoPremio.php b/src/nuevo/Venta/TipoPremio.php new file mode 100644 index 0000000..381cc39 --- /dev/null +++ b/src/nuevo/Venta/TipoPremio.php @@ -0,0 +1,14 @@ +hasMany(Premio::class, 'tipo_id')->findMany(); + } +} diff --git a/src/nuevo/Venta/Unidad.php b/src/nuevo/Venta/Unidad.php new file mode 100644 index 0000000..7e43358 --- /dev/null +++ b/src/nuevo/Venta/Unidad.php @@ -0,0 +1,47 @@ +belongsTo(UnidadProyecto::class, 'unidad_proyecto_id')->findOne(); + } + public function uPropiedad() + { + $up = $this->hasMany(UnidadPropiedad::class, 'unidad_id'); + if ($up) { + return $up->findOne(); + } + return null; + } + public function propiedad() + { + $prop = $this->hasMany(Propiedad::class, 'unidad_id'); + if ($prop) { + return $prop->findOne(); + } + return null; + } + public function cuentas() + { + return $this->belongsTo(CuentaContable::class, 'cuenta_unidades', 'unidad_id', 'cuenta_id')->findMany(); + } +} diff --git a/src/nuevo/Venta/UnidadPropiedad.php b/src/nuevo/Venta/UnidadPropiedad.php new file mode 100644 index 0000000..d8a8465 --- /dev/null +++ b/src/nuevo/Venta/UnidadPropiedad.php @@ -0,0 +1,27 @@ +belongsTo(Propiedad::class, 'propiedad_id')->findOne(); + } + public function unidad() + { + return $this->belongsTo(Unidad::class, 'unidad_id')->findOne(); + } +} diff --git a/src/nuevo/Venta/UnidadReserva.php b/src/nuevo/Venta/UnidadReserva.php new file mode 100644 index 0000000..f0355cb --- /dev/null +++ b/src/nuevo/Venta/UnidadReserva.php @@ -0,0 +1,27 @@ +belongsTo(Reserva::class, 'reserva_id')->findOne(); + } + public function unidad() + { + return $this->belongsTo(Unidad::class, 'unidad_id')->findOne(); + } +} +?> \ No newline at end of file diff --git a/src/nuevo/Venta/Venta.php b/src/nuevo/Venta/Venta.php new file mode 100644 index 0000000..d5bad0d --- /dev/null +++ b/src/nuevo/Venta/Venta.php @@ -0,0 +1,104 @@ +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; + } +}