Files
This commit is contained in:
14
src/Admin/Config.php
Normal file
14
src/Admin/Config.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
namespace Incoviba\Admin;
|
||||
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property string $name
|
||||
* @property string $value
|
||||
*/
|
||||
class Config extends Model {
|
||||
public static $_table = 'configurations';
|
||||
protected static $fields = ['name', 'value'];
|
||||
}
|
48
src/Auth/Login.php
Normal file
48
src/Auth/Login.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
namespace Incoviba\Auth;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use DateTime;
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
use Incoviba\Admin\Config;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property int $user_id
|
||||
* @property DateTime $time
|
||||
* @property string $selector
|
||||
* @property string $token
|
||||
* @property int $status
|
||||
*
|
||||
*/
|
||||
class Login extends Model {
|
||||
public static $_table = 'logins';
|
||||
protected static $fields = ['user_id', 'time', 'selector', 'token', 'status'];
|
||||
|
||||
protected $user;
|
||||
public function user() {
|
||||
if ($this->user === null) {
|
||||
$this->user = $this->childOf(User::class, [Model::SELF_KEY => 'user_id']);
|
||||
}
|
||||
return $this->user;
|
||||
}
|
||||
public function time(DateTime $time = null) {
|
||||
if ($time === null) {
|
||||
return Carbon::parse($this->time);
|
||||
}
|
||||
$this->time = $time->format('Y-m-d H:m:s');
|
||||
return null;
|
||||
}
|
||||
public function isValid() {
|
||||
if ($this->status == 0) {
|
||||
return false;
|
||||
}
|
||||
$expiration = $this->factory->find(Config::class)->where([['name', 'cookie_expiration_time']])->one();
|
||||
if ($this->time()->diffInSeconds() > $expiration->value) {
|
||||
$this->status = 0;
|
||||
$this->save();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
79
src/Auth/User.php
Normal file
79
src/Auth/User.php
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
namespace Incoviba\Auth;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Incoviba\Admin\Config;
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property string $name
|
||||
* @property string $password
|
||||
* @property int $enabled
|
||||
*/
|
||||
class User extends Model {
|
||||
public static $_table = 'users';
|
||||
|
||||
protected $logins;
|
||||
public function logins() {
|
||||
if ($this->logins === null) {
|
||||
$this->logins = $this->parentOf(Login::class, [Model::CHILD_KEY => 'user_id']);
|
||||
}
|
||||
return $this->logins;
|
||||
}
|
||||
protected $login;
|
||||
public function login() {
|
||||
if ($this->login === null) {
|
||||
$this->login = $this->factory->find(Login::class)
|
||||
->where([['user_id', $this->id]])
|
||||
->order([['column' => 'time', 'direction' => 'desc']])
|
||||
->one(1);
|
||||
}
|
||||
return $this->login;
|
||||
}
|
||||
|
||||
public function isIn(): bool {
|
||||
return $this->login()->isValid();
|
||||
}
|
||||
public function validate($password): bool {
|
||||
return password_verify($password, $this->password);
|
||||
}
|
||||
public function validLogins(): bool|array {
|
||||
return $this->factory->find(Login::class)->where([['user_id', $this->id], ['status', 1]])->many();
|
||||
}
|
||||
public function logout() {
|
||||
$logins = $this->validLogins();
|
||||
if ($logins === false) {
|
||||
return true;
|
||||
}
|
||||
$bool = true;
|
||||
foreach ($logins as $login) {
|
||||
$login->status = 0;
|
||||
$bool &= $login->save();
|
||||
}
|
||||
return $bool;
|
||||
}
|
||||
public function setToken($selector, $token) {
|
||||
$this->logout();
|
||||
$expiration = $this->factory->find(Config::class)->where([['name', 'cookie_expiration_time']])->one();
|
||||
$data = [
|
||||
'user_id' => $this->id,
|
||||
'time' => Carbon::now()->format('Y-m-d H:i:s '),
|
||||
'selector' => $selector,
|
||||
'token' => $token,
|
||||
'status' => 1
|
||||
];
|
||||
$output = [
|
||||
'input' => $data,
|
||||
'login' => null,
|
||||
'logged_in' => false
|
||||
];
|
||||
$login = Login::add($this->factory, $data);
|
||||
$output['login'] = $login;
|
||||
if ($login !== false and $login->is_new()) {
|
||||
$output['logged_in'] = $login->save();
|
||||
$output['expires'] = $login->time()->addSeconds($expiration->value)->timestamp;
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
@ -1,9 +1,12 @@
|
||||
<?php
|
||||
namespace Incoviba\Proyecto;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
use Incoviba\Common\Direccion;
|
||||
use Incoviba\Inmobiliaria\Inmobiliaria;
|
||||
use Incoviba\Venta\Cuota;
|
||||
use Incoviba\Venta\Cierre;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
@ -19,22 +22,158 @@ use Incoviba\Inmobiliaria\Inmobiliaria;
|
||||
* @property int $subterraneos;
|
||||
*/
|
||||
class Proyecto extends Model {
|
||||
public static $_table = 'proyecto';
|
||||
protected static $fields = ['inmobiliaria', 'descripcion', 'direccion', 'superficie_terreno', 'valor_terreno',
|
||||
'corredor', 'superficie_sobre_terreno', 'superficie_bajo_terreno', 'pisos', 'subterraneos'];
|
||||
public static $_table = 'proyecto';
|
||||
protected static $fields = ['inmobiliaria', 'descripcion', 'direccion', 'superficie_terreno', 'valor_terreno',
|
||||
'corredor', 'superficie_sobre_terreno', 'superficie_bajo_terreno', 'pisos', 'subterraneos'];
|
||||
|
||||
protected $direccion_o;
|
||||
public function direccion() {
|
||||
if ($this->direccion_o === null) {
|
||||
$this->direccion_o = $this->childOf(Direccion::class, [Model::SELF_KEY => 'direccion']);
|
||||
protected $direccion_o;
|
||||
public function direccion() {
|
||||
if ($this->direccion_o === null) {
|
||||
$this->direccion_o = $this->childOf(Direccion::class, [Model::SELF_KEY => 'direccion']);
|
||||
}
|
||||
return $this->direccion_o;
|
||||
}
|
||||
return $this->direccion_o;
|
||||
}
|
||||
protected $inmobiliaria_o;
|
||||
public function inmobiliaria() {
|
||||
if ($this->inmobiliaria_o === null) {
|
||||
$this->inmobiliaria_o = $this->childOf(Inmobiliaria::class, [Model::SELF_KEY => 'inmobiliaria', Model::PARENT_KEY => 'rut']);
|
||||
protected $inmobiliaria_o;
|
||||
public function inmobiliaria() {
|
||||
if ($this->inmobiliaria_o === null) {
|
||||
$this->inmobiliaria_o = $this->childOf(Inmobiliaria::class, [Model::SELF_KEY => 'inmobiliaria', Model::PARENT_KEY => 'rut']);
|
||||
}
|
||||
return $this->inmobiliaria_o;
|
||||
}
|
||||
|
||||
protected $cuotas;
|
||||
protected function buildCuotas() {
|
||||
return $this->factory->find(Cuota::class)
|
||||
->join([
|
||||
['venta', 'venta.pie', 'cuota.pie'],
|
||||
['JOIN (SELECT e1.* FROM estado_venta e1 JOIN (SELECT MAX(id) AS id, venta FROM estado_venta GROUP BY venta) e0 ON e0.id = e1.id)', 'ev.venta', 'venta.id', 'alias' => 'ev', 'type' => 'raw'],
|
||||
['tipo_estado_venta', 'tev.id', 'ev.estado', 'alias' => 'tev'],
|
||||
['propiedad', 'propiedad.id', 'venta.propiedad'],
|
||||
['propiedad_unidad', 'pu.propiedad', 'propiedad.id', 'alias' => 'pu'],
|
||||
['unidad', 'unidad.id', 'pu.unidad'],
|
||||
['proyecto_tipo_unidad', 'ptu.id', 'unidad.pt', 'alias' => 'ptu'],
|
||||
['proyecto', 'proyecto.id', 'ptu.proyecto'],
|
||||
['pago', 'pago.id', 'cuota.pago'],
|
||||
['JOIN (SELECT e1.* FROM estado_pago e1 JOIN (SELECT MAX(id) AS id, pago FROM estado_pago GROUP BY pago) e0 ON e0.id = e1.id)', 'ep.pago', 'pago.id', 'alias' => 'ep', 'type' => 'raw'],
|
||||
['tipo_estado_pago', 'tep.id', 'ep.estado', 'alias' => 'tep']
|
||||
])
|
||||
->where([
|
||||
['proyecto.id', $this->id],
|
||||
['tev.activa', 1],
|
||||
['tep.active', 1]
|
||||
]);
|
||||
}
|
||||
public function cuotas() {
|
||||
if ($this->cuotas === null or !isset($this->cuotas->total)) {
|
||||
$cuotas = [];
|
||||
if ($this->cuotas !== null) {
|
||||
$cuotas = (array) $this->cuotas;
|
||||
}
|
||||
$cuotas['total'] = $this->$this->buildCuotas()->many();
|
||||
$this->cuotas = (object) $cuotas;
|
||||
}
|
||||
return $this->cuotas->total;
|
||||
}
|
||||
public function cuotasHoy() {
|
||||
if ($this->cuotas === null or !isset($this->cuotas->hoy)) {
|
||||
$cuotas = [];
|
||||
if ($this->cuotas !== null) {
|
||||
$cuotas = (array) $this->cuotas;
|
||||
}
|
||||
$f = Carbon::today();
|
||||
$cuotas['hoy'] = $this->buildCuotas()
|
||||
->where([
|
||||
['pago.fecha', $f->format('Y-m-d')]
|
||||
])
|
||||
->many();
|
||||
$this->cuotas = (object) $cuotas;
|
||||
}
|
||||
return $this->cuotas->hoy;
|
||||
}
|
||||
public function cuotasPendientes() {
|
||||
if (!isset($this->cuotas) or !isset($this->cuotas->mes)) {
|
||||
$cuotas = [];
|
||||
if (isset($this->cuotas)) {
|
||||
$cuotas = (array) $this->cuotas;
|
||||
}
|
||||
$f = Carbon::today();
|
||||
$cuotas['pendientes'] = $this->buildCuotas()
|
||||
->where([
|
||||
['ep.estado', 1, '<'],
|
||||
['ep.estado', 0, '>=']
|
||||
])
|
||||
->many();
|
||||
$this->cuotas = (object) $cuotas;
|
||||
}
|
||||
return $this->cuotas->pendientes;
|
||||
}
|
||||
public function cuotasMes() {
|
||||
if (!isset($this->cuotas) or !isset($this->cuotas->mes)) {
|
||||
$cuotas = [];
|
||||
if (isset($this->cuotas)) {
|
||||
$cuotas = (array) $this->cuotas;
|
||||
}
|
||||
$f = Carbon::today();
|
||||
error_log(var_export($this->buildCuotas(), true));
|
||||
$cuotas['mes'] = $this->buildCuotas()
|
||||
->where([
|
||||
['pago.fecha', $f->format('Y-m-d'), 'operator' => '>'],
|
||||
['pago.fecha', $f->copy()->addMonth(1)->format('Y-m-d'), '<=']
|
||||
])
|
||||
->many();
|
||||
$this->cuotas = (object) $cuotas;
|
||||
}
|
||||
return $this->cuotas->mes;
|
||||
}
|
||||
|
||||
protected $cierres;
|
||||
public function cierres(int $vigentes = 0)
|
||||
{
|
||||
if (!isset($this->cierres[$vigentes]) or $this->cierres[$vigentes] == null) {
|
||||
$orm = $this->factory->find(Cierre::class)
|
||||
->select([['cierre', '*']])
|
||||
->join([
|
||||
['join (select e1.* from estado_cierre e1 join (select cierre, max(id) as id from estado_cierre group by cierre) e0 on e0.id = e1.id)',
|
||||
'ec.cierre', 'cierre.id', 'alias' => 'ec', 'type' => 'raw'],
|
||||
['tipo_estado_cierre', 'tipo_estado_cierre.id', 'ec.tipo'],
|
||||
['proyecto', 'proyecto.id', 'cierre.proyecto'],
|
||||
['unidad_cierre', 'unidad_cierre.cierre', 'cierre.id'],
|
||||
['unidad', 'unidad.id', 'unidad_cierre.unidad']
|
||||
])
|
||||
->where([
|
||||
['proyecto.id', $this->id],
|
||||
['unidad_cierre.principal', 1]
|
||||
])
|
||||
->order([
|
||||
'proyecto.descripcion',
|
||||
'tipo_estado_cierre.vigente',
|
||||
'cierre.fecha',
|
||||
'LPAD(unidad.descripcion, 4, "0")'
|
||||
])
|
||||
->group(['cierre.id']);
|
||||
switch ($vigentes) {
|
||||
case Cierre::VIGENTES:
|
||||
$orm = $orm->where([['tipo_estado_cierre.vigente', 1]]);
|
||||
break;
|
||||
case Cierre::NO_VIGENTES:
|
||||
$orm = $orm->where([['tipo_estado_cierre.vigente', 0]]);
|
||||
break;
|
||||
case (Cierre::VIGENTES + 1):
|
||||
$orm = $orm->where([
|
||||
['tipo_estado_cierre.vigente', 1],
|
||||
['tipo_estado_cierre.descripcion', 'promesado', 'type' => 'not like']
|
||||
]);
|
||||
break;
|
||||
case (Cierre::VIGENTES + 2):
|
||||
$orm = $orm->where([
|
||||
['tipo_estado_cierre.vigente', 1],
|
||||
['tipo_estado_cierre.descripcion', 'promesado', 'type' => 'like']
|
||||
]);
|
||||
break;
|
||||
};
|
||||
error_log(var_export($orm, true));
|
||||
$this->cierres[$vigentes] = $orm->many();
|
||||
}
|
||||
return $this->cierres[$vigentes];
|
||||
}
|
||||
return $this->inmobiliaria_o;
|
||||
}
|
||||
}
|
||||
|
25
src/Venta/Cierre.php
Normal file
25
src/Venta/Cierre.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
namespace Incoviba\Venta;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
|
||||
class Cierre extends Model {
|
||||
public static $_table = 'cierre';
|
||||
|
||||
const VIGENTES = 1;
|
||||
const NO_VIGENTES = -1;
|
||||
|
||||
public function fecha(\DateTimeInterface $fecha = null)
|
||||
{
|
||||
if ($fecha == null) {
|
||||
return Carbon::parse($this->fecha);
|
||||
}
|
||||
$this->fecha = $fecha->format('Y-m-d');
|
||||
}
|
||||
public function periodo() {
|
||||
$today = Carbon::today();
|
||||
$dif = $today->diffInDays($this->fecha());
|
||||
return $dif;
|
||||
}
|
||||
}
|
33
src/Venta/Cuota.php
Normal file
33
src/Venta/Cuota.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
namespace Incoviba\Venta;
|
||||
|
||||
use DateTimeInterface;
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
use Incoviba\Common\Banco;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property Pie $pie
|
||||
* @property DateTimeInterface $fecha
|
||||
* @property float $valor_$
|
||||
* @property bool $estado
|
||||
* @property Banco $banco
|
||||
* @property DateTimeInterface $fecha_pago
|
||||
* @property bool $abonado
|
||||
* @property DateTimeInterface $fecha_abono
|
||||
* @property float $uf
|
||||
* @property Pago $pago
|
||||
* @property int $numero
|
||||
*/
|
||||
class Cuota extends Model {
|
||||
public static $_table = 'cuota';
|
||||
protected static $fields = ['pie', 'fecha', 'valor_$', 'estado', 'banco', 'fecha_pago', 'abonado', 'fecha_abono', 'uf', 'pago', 'numero'];
|
||||
|
||||
protected $pago_o;
|
||||
public function pago() {
|
||||
if ($this->pago_o === null) {
|
||||
$this->pago_o = $this->childOf(Pago::class, [Model::SELF_KEY => 'pago']);
|
||||
}
|
||||
return $this->pago_o;
|
||||
}
|
||||
}
|
@ -1,6 +1,38 @@
|
||||
<?php
|
||||
namespace Incoviba\Venta;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use DateTimeInterface;
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
use Incoviba\Common\Banco;
|
||||
|
||||
class Pago extends Model {}
|
||||
/**
|
||||
* @property int $id
|
||||
* @property float $valor
|
||||
* @property Banco $banco
|
||||
* @property TipoPago $tipo
|
||||
* @property string $identificador
|
||||
* @property DateTimeInterface $fecha
|
||||
* @property float $uf
|
||||
* @property string $pagador
|
||||
* @property Pago $asociado
|
||||
*/
|
||||
class Pago extends Model {
|
||||
public static $_table = 'pago';
|
||||
protected static $fields = ['valor', 'banco', 'tipo', 'identificador', 'fecha', 'uf', 'pagador', 'asociado'];
|
||||
|
||||
protected $tipo_o;
|
||||
public function tipo() {
|
||||
if ($this->tipo_o === null) {
|
||||
$this->tipo_o = $this->childOf(TipoPago::class, [Model::SELF_KEY => 'tipo']);
|
||||
}
|
||||
return $this->tipo_o;
|
||||
}
|
||||
|
||||
public function fecha(DateTimeInterface $fecha = null) {
|
||||
if ($fecha === null) {
|
||||
return Carbon::parse($this->fecha);
|
||||
}
|
||||
$this->fecha = $fecha->format('Y-m-d');
|
||||
}
|
||||
}
|
||||
|
12
src/Venta/TipoPago.php
Normal file
12
src/Venta/TipoPago.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
namespace Incoviba\Venta;
|
||||
|
||||
use Incoviba\API\Common\Alias\Model;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property string $descripcion
|
||||
*/
|
||||
class TipoPago extends Model {
|
||||
public static $_table = 'tipo_pago';
|
||||
}
|
Reference in New Issue
Block a user