Dependencies

This commit is contained in:
2021-03-25 21:25:17 -03:00
parent e515612412
commit cd1ee7d446
157 changed files with 8216 additions and 0 deletions

View File

@ -0,0 +1,25 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewEstado;
/**
*
* @author Aldarien
* @property Proyecto proyecto_id
* @property TipoEstadoProyecto estado_id
*
*/
class EstadoProyecto extends NewEstado
{
protected static $_table = 'estado_proyectos';
public function proyecto()
{
return $this->belongsTo(Proyecto::class, 'proyecto_id')->findOne();
}
public function estado()
{
return $this->belongsTo(TipoEstadoProyecto::class, 'estado_id')->findOne();
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
/**
*
* @author Aldarien
* @property int id
* @property string descripcion
* @property int orden
*
*/
class Etapa extends NewModel
{
protected static $_table = 'etapas';
public function tipos()
{
return $this->hasMany(TipoEstadoProyecto::class, 'etapa_id')->findMany();
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Definition\hasRUT;
use Incoviba\Common\Alias\NewModel;
/**
*
* @author Aldarien
* @property string nombre
*
*/
class Participe extends NewModel
{
use hasRUT;
protected static $_table = 'participes';
public function proyectos()
{
return $this->hasManyThrough(Proyecto::class, ProyectoParticipe::class, 'proyecto_id', 'participe_rut', 'rut')->findMany();
}
public function participaciones()
{
return $this->hasMany(ProyectoParticipe::class, 'participe_rut', 'rut')->findMany();
}
}

View File

@ -0,0 +1,132 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
use Incoviba\nuevo\Inmobiliaria\Inmobiliaria;
use Incoviba\nuevo\Common\Direccion;
use Incoviba\Common\Definition\hasEstado;
/**
*
* @author Aldarien
* @property int id
* @property string nombre
* @property string nombre_completo
* @property Inmobiliaria inmobiliaria_rut
* @property Direccion direccion_id
* @property boolean portal
* @property string descripcion
*
*/
class Proyecto extends NewModel
{
use hasEstado;
protected static $_table = 'proyectos';
public function inmobiliaria()
{
return $this->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;
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
/**
*
* @author Aldarien
* @property int id
* @property Proyecto proyecto_id
* @property Participe participe_rut
* @property double participacion
*
*/
class ProyectoParticipe extends NewModel
{
protected static $_table = 'proyecto_participes';
public function proyecto()
{
$this->belongsTo(Proyecto::class, 'proyecto_id')->findOne();
}
public function participe()
{
$this->belongsTo(Participe::class, 'participe_rut', 'rut')->findOne();
}
}

View File

@ -0,0 +1,75 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
use Incoviba\old\Proyecto\Proyecto as P;
use Carbon\Carbon;
/**
*
* @author Aldarien
* @property int $id
* @property Proyecto $proyecto_id
* @property string texto
* @property DateTime inicio
* @property DateTime cierre
*
*/
class Tema extends NewModel
{
protected static $_table = 'temas';
public function proyecto()
{
$proyecto = $this->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 = '&nbsp;' . $line;
}
}
$text = implode('<br />', $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 = '<a href="';
$str .= url('', ['p' => 'ventas', 'a' => 'show', 'venta' => $obj->venta()->id]);
$str .= '">' . $value . '</a>';
}
$replace []= $str;
}
}
$text = str_replace($search, $replace, $text);
return $text;
}
}
?>

View File

@ -0,0 +1,28 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
/**
*
* @author Aldarien
* @property int id
* @property string descripcion
* @property int orden
* @property Etapa etapa_id
*
*/
class TipoEstadoProyecto extends NewModel
{
protected static $_table = 'tipo_estado_proyectos';
public function etapa()
{
return $this->belongsTo(Etapa::class, 'etapa_id')->findOne();
}
public function estados()
{
return $this->hasMany(EstadoProyecto::class, 'estado_id')->findMany();
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
/**
*
* @author Aldarien
* @property int id
* @property string descripcion
*
*/
class TipoUnidad extends NewModel
{
protected static $_table = 'tipo_unidades';
public function unidades()
{
return $this->hasMany(UnidadProyecto::class, 'tipo_id')->findMany();
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace Incoviba\nuevo\Proyecto;
use Incoviba\Common\Alias\NewModel;
use Incoviba\nuevo\Common\M2;
use Incoviba\nuevo\Venta\Unidad;
/**
*
* @author Aldarien
* @property int id
* @property Proyecto proyecto_id
* @property TipoUnidad tipo_id
* @property string nombre
* @property string tipologia
* @property M2 m2_id
* @property string descripcion
*
*/
class UnidadProyecto extends NewModel
{
protected static $_table = 'unidad_proyectos';
public function proyecto()
{
return $this->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;
}
}