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;
+ }
+}