This commit is contained in:
Juan Pablo Vial
2025-03-03 14:57:22 -03:00
parent d165440483
commit 8f16f33a1e
56 changed files with 749 additions and 105 deletions

View File

@ -3,13 +3,42 @@ namespace Incoviba\Common\Define;
use PDO; use PDO;
use PDOStatement; use PDOStatement;
use PDOException;
interface Connection interface Connection
{ {
/**
* @return Connection
* @throws PDOException
*/
public function connect(): Connection; public function connect(): Connection;
/**
* @param string $query
* @return PDOStatement
* @throws PDOException
*/
public function query(string $query): PDOStatement; public function query(string $query): PDOStatement;
/**
* @param string $query
* @return PDOStatement
* @throws PDOException
*/
public function prepare(string $query): PDOStatement; public function prepare(string $query): PDOStatement;
/**
* @param string $query
* @param array|null $data
* @return PDOStatement
* @throws PDOException
*/
public function execute(string $query, ?array $data = null): PDOStatement; public function execute(string $query, ?array $data = null): PDOStatement;
/**
* @return PDO
* @throws PDOException
*/
public function getPDO(): PDO; public function getPDO(): PDO;
public function getQueryBuilder(): Query\Builder; public function getQueryBuilder(): Query\Builder;
} }

View File

@ -2,8 +2,15 @@
namespace Incoviba\Common\Define\Money; namespace Incoviba\Common\Define\Money;
use DateTimeInterface; use DateTimeInterface;
use Incoviba\Common\Implement\Exception\EmptyResponse;
interface Provider interface Provider
{ {
/**
* @param string $money_symbol
* @param DateTimeInterface $dateTime
* @return float
* @throws EmptyResponse
*/
public function get(string $money_symbol, DateTimeInterface $dateTime): float; public function get(string $money_symbol, DateTimeInterface $dateTime): float;
} }

View File

@ -1,11 +1,42 @@
<?php <?php
namespace Incoviba\Common\Define; namespace Incoviba\Common\Define;
use Incoviba\Common\Implement\Exception\EmptyResult;
use PDOException;
interface Repository interface Repository
{ {
/**
* @param array|null $data
* @return Model
*/
public function create(?array $data = null): Model; public function create(?array $data = null): Model;
/**
* @param Model $model
* @return Model
* @throws PDOException
*/
public function save(Model $model): Model; public function save(Model $model): Model;
/**
* @param array $data_row
* @return Model
*/
public function load(array $data_row): Model; public function load(array $data_row): Model;
/**
* @param Model $model
* @param array $new_data
* @return Model
* @throws EmptyResult
*/
public function edit(Model $model, array $new_data): Model; public function edit(Model $model, array $new_data): Model;
/**
* @param Model $model
* @return void
* @throws PDOException
*/
public function remove(Model $model): void; public function remove(Model $model): void;
} }

View File

@ -2,7 +2,9 @@
namespace Incoviba\Common\Ideal; namespace Incoviba\Common\Ideal;
use PDO; use PDO;
use PDOException;
use ReflectionProperty; use ReflectionProperty;
use ReflectionException;
use Incoviba\Common\Define; use Incoviba\Common\Define;
use Incoviba\Common\Implement; use Incoviba\Common\Implement;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
@ -116,9 +118,20 @@ abstract class Repository implements Define\Repository
} }
$this->setDefault($model, $property); $this->setDefault($model, $property);
} }
/**
* @param Define\Model $model
* @param string $property
* @return void
*/
protected function setDefault(Define\Model &$model, string $property): void protected function setDefault(Define\Model &$model, string $property): void
{ {
$prop = new ReflectionProperty($model, $property); try {
$prop = new ReflectionProperty($model, $property);
} catch (ReflectionException) {
$model->{$property} = null;
return;
}
$type = $prop->getType()->getName(); $type = $prop->getType()->getName();
$value = match ($type) { $value = match ($type) {
'int' => 0, 'int' => 0,
@ -128,6 +141,13 @@ abstract class Repository implements Define\Repository
}; };
$model->{$property} = $value; $model->{$property} = $value;
} }
/**
* @param array $columns
* @param array $values
* @return int
* @throws PDOException
*/
protected function saveNew(array $columns, array $values): int protected function saveNew(array $columns, array $values): int
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -138,6 +158,14 @@ abstract class Repository implements Define\Repository
$this->connection->execute($query, $values); $this->connection->execute($query, $values);
return $this->connection->getPDO()->lastInsertId(); return $this->connection->getPDO()->lastInsertId();
} }
/**
* @param Define\Model $model
* @param array $columns
* @param array $data
* @return Define\Model
* @throws EmptyResult
*/
protected function update(Define\Model $model, array $columns, array $data): Define\Model protected function update(Define\Model $model, array $columns, array $data): Define\Model
{ {
$changes = []; $changes = [];
@ -158,30 +186,59 @@ abstract class Repository implements Define\Repository
->set($columns_string) ->set($columns_string)
->where("{$this->getKey()} = ?"); ->where("{$this->getKey()} = ?");
$values []= $this->getIndex($model); $values []= $this->getIndex($model);
$this->connection->execute($query, $values); try {
$this->connection->execute($query, $values);
} catch (PDOException $exception) {
throw new EmptyResult($query, $exception);
}
return $this->fetchById($this->getIndex($model)); return $this->fetchById($this->getIndex($model));
} }
/**
* @param string $query
* @param array|null $data
* @return Define\Model
* @throws EmptyResult
*/
protected function fetchOne(string $query, ?array $data = null): Define\Model protected function fetchOne(string $query, ?array $data = null): Define\Model
{ {
$result = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC); try {
if ($result === false) { $result = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC);
throw new EmptyResult($query); } catch (PDOException $exception) {
throw new EmptyResult($query, $exception);
} }
return $this->load($result); return $this->load($result);
} }
/**
* @param string $query
* @param array|null $data
* @return array
* @throws EmptyResult
*/
protected function fetchMany(string $query, ?array $data = null): array protected function fetchMany(string $query, ?array $data = null): array
{ {
$results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); try {
if ($results === false) { $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC);
throw new EmptyResult($query); } catch (PDOException $exception) {
throw new EmptyResult($query, $exception);
} }
return array_map([$this, 'load'], $results); return array_map([$this, 'load'], $results);
} }
/**
* @param string $query
* @param array|null $data
* @return array
* @throws EmptyResult
*/
protected function fetchAsArray(string $query, ?array $data = null): array protected function fetchAsArray(string $query, ?array $data = null): array
{ {
$results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); try {
if ($results === false) { $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC);
throw new EmptyResult($query); } catch (PDOException $exception) {
throw new EmptyResult($query, $exception);
} }
return $results; return $results;
} }

View File

@ -22,6 +22,7 @@ class Connection implements Define\Connection
} }
return $this; return $this;
} }
public function getPDO(): PDO public function getPDO(): PDO
{ {
$this->connect(); $this->connect();

View File

@ -5,7 +5,7 @@ class PropiedadUnidad extends Unidad
{ {
public int $pu_id; public int $pu_id;
public int $propiedad_id; public int $propiedad_id;
public float $valor; public ?float $valor;
public function jsonSerialize(): mixed public function jsonSerialize(): mixed
{ {

View File

@ -65,6 +65,13 @@ class Cartola extends Ideal\Repository
->where('cuenta_id = ?'); ->where('cuenta_id = ?');
return $this->fetchMany($query, [$cuenta_id]); return $this->fetchMany($query, [$cuenta_id]);
} }
/**
* @param int $cuenta_id
* @param DateTimeInterface $fecha
* @return Model\Contabilidad\Cartola
* @throws Implement\Exception\EmptyResult
*/
public function fetchByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): Model\Contabilidad\Cartola public function fetchByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): Model\Contabilidad\Cartola
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -73,6 +80,13 @@ class Cartola extends Ideal\Repository
->where('cuenta_id = ? AND fecha = ?'); ->where('cuenta_id = ? AND fecha = ?');
return $this->fetchOne($query, [$cuenta_id, $fecha->format('Y-m-d')]); return $this->fetchOne($query, [$cuenta_id, $fecha->format('Y-m-d')]);
} }
/**
* @param int $cuenta_id
* @param DateTimeInterface $fecha
* @return Model\Contabilidad\Cartola
* @throws Implement\Exception\EmptyResult
*/
public function fetchLastByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): Model\Contabilidad\Cartola public function fetchLastByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): Model\Contabilidad\Cartola
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -62,6 +62,13 @@ class Movimiento extends Ideal\Repository
->where('cuenta_id = ?'); ->where('cuenta_id = ?');
return $this->fetchMany($query, [$cuenta_id]); return $this->fetchMany($query, [$cuenta_id]);
} }
/**
* @param int $cuenta_id
* @param DateTimeInterface $fecha
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): array public function fetchByCuentaAndFecha(int $cuenta_id, DateTimeInterface $fecha): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -70,6 +77,17 @@ class Movimiento extends Ideal\Repository
->where('cuenta_id = ? AND fecha = ?'); ->where('cuenta_id = ? AND fecha = ?');
return $this->fetchMany($query, [$cuenta_id, $fecha->format('Y-m-d')]); return $this->fetchMany($query, [$cuenta_id, $fecha->format('Y-m-d')]);
} }
/**
* @param int $cuenta_id
* @param DateTimeInterface $fecha
* @param string $glosa
* @param int $cargo
* @param int $abono
* @param int $saldo
* @return Model\Contabilidad\Movimiento
* @throws Implement\Exception\EmptyResult
*/
public function fetchByCuentaAndFechaAndGlosaAndCargoAndAbonoAndSaldo(int $cuenta_id, DateTimeInterface $fecha, string $glosa, int $cargo, int $abono, int $saldo): Model\Contabilidad\Movimiento public function fetchByCuentaAndFechaAndGlosaAndCargoAndAbonoAndSaldo(int $cuenta_id, DateTimeInterface $fecha, string $glosa, int $cargo, int $abono, int $saldo): Model\Contabilidad\Movimiento
{ {
$len = (int) round(strlen($glosa) * .75); $len = (int) round(strlen($glosa) * .75);
@ -99,6 +117,15 @@ class Movimiento extends Ideal\Repository
} }
return $this->fetchMany($query, [$sociedad_rut, $mes->format('Y-m-01'), $mes->format('Y-m-t')]); return $this->fetchMany($query, [$sociedad_rut, $mes->format('Y-m-01'), $mes->format('Y-m-t')]);
} }
/**
* @param int $cuenta_id
* @param DateTimeInterface $startDate
* @param DateTimeInterface $endDate
* @param array $idList
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchMissingInDateRange(int $cuenta_id, DateTimeInterface $startDate, DateTimeInterface $endDate, array $idList = []): array public function fetchMissingInDateRange(int $cuenta_id, DateTimeInterface $startDate, DateTimeInterface $endDate, array $idList = []): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -60,6 +60,11 @@ class Detalle extends Ideal\Repository
return $data; return $data;
} }
/**
* @param int $movimiento_id
* @return Model\Contabilidad\Movimiento\Detalle
* @throws Implement\Exception\EmptyResult
*/
public function fetchByMovimiento(int $movimiento_id): Model\Contabilidad\Movimiento\Detalle public function fetchByMovimiento(int $movimiento_id): Model\Contabilidad\Movimiento\Detalle
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -30,16 +30,38 @@ class Direccion extends Ideal\Repository
); );
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Define\Model
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Define\Model public function edit(Define\Model $model, array $new_data): Define\Model
{ {
return $this->update($model, ['calle', 'numero', 'extra', 'comuna'], $new_data); return $this->update($model, ['calle', 'numero', 'extra', 'comuna'], $new_data);
} }
/**
* @param string $calle
* @param int $numero
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByCalleAndNumero(string $calle, int $numero): array public function fetchByCalleAndNumero(string $calle, int $numero): array
{ {
$query = "SELECT * FROM `{$this->getTable()}` WHERE `calle` = ? AND `numero` = ?"; $query = "SELECT * FROM `{$this->getTable()}` WHERE `calle` = ? AND `numero` = ?";
return $this->fetchMany($query, [$calle, $numero]); return $this->fetchMany($query, [$calle, $numero]);
} }
/**
* @param string $calle
* @param int $numero
* @param string $extra
* @param int $comuna_id
* @return Model\Direccion
* @throws Implement\Exception\EmptyResult
*/
public function fetchByCalleAndNumeroAndExtraAndComuna(string $calle, int $numero, string $extra, int $comuna_id): Model\Direccion public function fetchByCalleAndNumeroAndExtraAndComuna(string $calle, int $numero, string $extra, int $comuna_id): Model\Direccion
{ {
$query = "SELECT * FROM `{$this->getTable()}` WHERE `calle` = ? AND `numero` = ? AND `extra` = ? AND `comuna` = ?"; $query = "SELECT * FROM `{$this->getTable()}` WHERE `calle` = ? AND `numero` = ? AND `extra` = ? AND `comuna` = ?";

View File

@ -35,11 +35,23 @@ class Proveedor extends Ideal\Repository
]); ]);
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Model\Inmobiliaria\Proveedor
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Model\Inmobiliaria\Proveedor public function edit(Define\Model $model, array $new_data): Model\Inmobiliaria\Proveedor
{ {
return $this->update($model, ['rut', 'digito', 'nombre', 'razon', 'contacto_rut'], $new_data); return $this->update($model, ['rut', 'digito', 'nombre', 'razon', 'contacto_rut'], $new_data);
} }
/**
* @param string $nombre
* @return Model\Inmobiliaria\Proveedor
* @throws Implement\Exception\EmptyResult
*/
public function fetchByNombre(string $nombre): Model\Inmobiliaria\Proveedor public function fetchByNombre(string $nombre): Model\Inmobiliaria\Proveedor
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -50,6 +50,12 @@ class Login extends Ideal\Repository
->where('user_id = ?'); ->where('user_id = ?');
return $this->fetchMany($query, [$user_id]); return $this->fetchMany($query, [$user_id]);
} }
/**
* @param int $user_id
* @return Model\Login
* @throws Implement\Exception\EmptyResult
*/
public function fetchActiveByUser(int $user_id): Model\Login public function fetchActiveByUser(int $user_id): Model\Login
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -28,6 +28,13 @@ class Persona extends Ideal\Repository
[$model->rut, $model->digito, $model->nombres, $model->apellidoPaterno, $model->apellidoMaterno]); [$model->rut, $model->digito, $model->nombres, $model->apellidoPaterno, $model->apellidoMaterno]);
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Model\Persona
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Model\Persona public function edit(Define\Model $model, array $new_data): Model\Persona
{ {
return $this->update($model, ['digito', 'nombres', 'apellido_paterno', 'apellido_materno'], $new_data); return $this->update($model, ['digito', 'nombres', 'apellido_paterno', 'apellido_materno'], $new_data);

View File

@ -72,6 +72,11 @@ class Datos extends Ideal\Repository
], $new_data); ], $new_data);
} }
/**
* @param int $persona_rut
* @return Model\Persona\Datos
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPersona(int $persona_rut): Model\Persona\Datos public function fetchByPersona(int $persona_rut): Model\Persona\Datos
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -27,11 +27,22 @@ class User extends Ideal\Repository
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Define\Model
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Define\Model public function edit(Define\Model $model, array $new_data): Define\Model
{ {
return $this->update($model, ['name', 'password', 'enabled'], $new_data); return $this->update($model, ['name', 'password', 'enabled'], $new_data);
} }
/**
* @param string $name
* @return Model\User
* @throws Implement\Exception\EmptyResult
*/
public function fetchByName(string $name): Model\User public function fetchByName(string $name): Model\User
{ {
$query = "SELECT * FROM `{$this->getTable()}` WHERE `name` = ?"; $query = "SELECT * FROM `{$this->getTable()}` WHERE `name` = ?";

View File

@ -2,6 +2,7 @@
namespace Incoviba\Repository; namespace Incoviba\Repository;
use PDO; use PDO;
use PDOException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Common\Define; use Incoviba\Common\Define;
@ -128,6 +129,12 @@ class Venta extends Ideal\Repository
} }
return $this->parseData(new Model\Venta(), $data, $map); return $this->parseData(new Model\Venta(), $data, $map);
} }
/**
* @param Define\Model $model
* @return Model\Venta
* @throws PDOException
*/
public function save(Define\Model $model): Model\Venta public function save(Define\Model $model): Model\Venta
{ {
$model->id = $this->saveNew( $model->id = $this->saveNew(
@ -142,6 +149,13 @@ class Venta extends Ideal\Repository
); );
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Model\Venta
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Model\Venta public function edit(Define\Model $model, array $new_data): Model\Venta
{ {
return $this->update($model, ['propietario', 'propiedad', 'pie', 'bono_pie', 'credito', 'escritura', 'subsidio', 'escriturado', return $this->update($model, ['propietario', 'propiedad', 'pie', 'bono_pie', 'credito', 'escritura', 'subsidio', 'escriturado',
@ -149,6 +163,11 @@ class Venta extends Ideal\Repository
'relacionado', 'promocion', 'resciliacion', 'devolucion'], $new_data); 'relacionado', 'promocion', 'resciliacion', 'devolucion'], $new_data);
} }
/**
* @param int $proyecto_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByProyecto(int $proyecto_id): array public function fetchByProyecto(int $proyecto_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -163,6 +182,12 @@ class Venta extends Ideal\Repository
->group('a.id'); ->group('a.id');
return $this->fetchMany($query, [$proyecto_id]); return $this->fetchMany($query, [$proyecto_id]);
} }
/**
* @param int $proyecto_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdsByProyecto(int $proyecto_id): array public function fetchIdsByProyecto(int $proyecto_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -177,6 +202,12 @@ class Venta extends Ideal\Repository
->group('a.id'); ->group('a.id');
return $this->fetchIds($query, [$proyecto_id]); return $this->fetchIds($query, [$proyecto_id]);
} }
/**
* @param int $proyecto_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchActivaByProyecto(int $proyecto_id): array public function fetchActivaByProyecto(int $proyecto_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -191,6 +222,13 @@ class Venta extends Ideal\Repository
->group('a.id'); ->group('a.id');
return $this->fetchMany($query, [$proyecto_id]); return $this->fetchMany($query, [$proyecto_id]);
} }
/**
* @param string $proyecto_nombre
* @param int $unidad_descripcion
* @return Model\Venta
* @throws Implement\Exception\EmptyResult
*/
public function fetchByProyectoAndUnidad(string $proyecto_nombre, int $unidad_descripcion): Model\Venta public function fetchByProyectoAndUnidad(string $proyecto_nombre, int $unidad_descripcion): Model\Venta
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -205,6 +243,12 @@ class Venta extends Ideal\Repository
->where('`proyecto`.`descripcion` = ? AND `unidad`.`descripcion` = ? AND tev.`activa`'); ->where('`proyecto`.`descripcion` = ? AND `unidad`.`descripcion` = ? AND tev.`activa`');
return $this->fetchOne($query, [$proyecto_nombre, $unidad_descripcion]); return $this->fetchOne($query, [$proyecto_nombre, $unidad_descripcion]);
} }
/**
* @param int $pie_id
* @return Model\Venta
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPie(int $pie_id): Model\Venta public function fetchByPie(int $pie_id): Model\Venta
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -213,6 +257,12 @@ class Venta extends Ideal\Repository
->where('pie = ?'); ->where('pie = ?');
return $this->fetchOne($query, [$pie_id]); return $this->fetchOne($query, [$pie_id]);
} }
/**
* @param int $pie_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdByPie(int $pie_id): array public function fetchIdByPie(int $pie_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -221,6 +271,13 @@ class Venta extends Ideal\Repository
->where('pie = ?'); ->where('pie = ?');
return $this->fetchId($query, [$pie_id]); return $this->fetchId($query, [$pie_id]);
} }
/**
* @param string $unidad
* @param string $tipo
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByUnidad(string $unidad, string $tipo): array public function fetchByUnidad(string $unidad, string $tipo): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -233,6 +290,12 @@ class Venta extends Ideal\Repository
->where('`unidad`.`descripcion` LIKE ? AND tu.`descripcion` = ?'); ->where('`unidad`.`descripcion` LIKE ? AND tu.`descripcion` = ?');
return $this->fetchMany($query, [$unidad, $tipo]); return $this->fetchMany($query, [$unidad, $tipo]);
} }
/**
* @param int $unidad_id
* @return Model\Venta
* @throws Implement\Exception\EmptyResult
*/
public function fetchByUnidadId(int $unidad_id): Model\Venta public function fetchByUnidadId(int $unidad_id): Model\Venta
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -242,6 +305,13 @@ class Venta extends Ideal\Repository
->where('pu.unidad = ?'); ->where('pu.unidad = ?');
return $this->fetchOne($query, [$unidad_id]); return $this->fetchOne($query, [$unidad_id]);
} }
/**
* @param string $unidad
* @param string $tipo
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdsByUnidad(string $unidad, string $tipo): array public function fetchIdsByUnidad(string $unidad, string $tipo): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -254,6 +324,12 @@ class Venta extends Ideal\Repository
->where('`unidad`.`descripcion` LIKE ? AND tu.`descripcion` = ?'); ->where('`unidad`.`descripcion` LIKE ? AND tu.`descripcion` = ?');
return $this->fetchIds($query, [$unidad, $tipo]); return $this->fetchIds($query, [$unidad, $tipo]);
} }
/**
* @param string $precio
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPrecio(string $precio): array public function fetchByPrecio(string $precio): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -262,6 +338,12 @@ class Venta extends Ideal\Repository
->where('valor_uf = ?'); ->where('valor_uf = ?');
return $this->fetchMany($query, [$precio]); return $this->fetchMany($query, [$precio]);
} }
/**
* @param string $precio
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdsByPrecio(string $precio): array public function fetchIdsByPrecio(string $precio): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -270,6 +352,13 @@ class Venta extends Ideal\Repository
->where('valor_uf = ?'); ->where('valor_uf = ?');
return $this->fetchIds($query, [$precio]); return $this->fetchIds($query, [$precio]);
} }
/**
* @param int $propietario_rut
* @param int $propiedad_id
* @return Model\Venta
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPropietarioAndPropiedad(int $propietario_rut, int $propiedad_id): Model\Venta public function fetchByPropietarioAndPropiedad(int $propietario_rut, int $propiedad_id): Model\Venta
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -278,6 +367,12 @@ class Venta extends Ideal\Repository
->where('propietario = ? AND propiedad = ?'); ->where('propietario = ? AND propiedad = ?');
return $this->fetchOne($query, [$propietario_rut, $propiedad_id]); return $this->fetchOne($query, [$propietario_rut, $propiedad_id]);
} }
/**
* @param string $propietario
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPropietario(string $propietario): array public function fetchByPropietario(string $propietario): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -289,6 +384,12 @@ class Venta extends Ideal\Repository
OR CONCAT_WS(' ', `propietario`.`nombres`, `propietario`.`apellido_paterno`, `propietario`.`apellido_materno`) LIKE :propietario"); OR CONCAT_WS(' ', `propietario`.`nombres`, `propietario`.`apellido_paterno`, `propietario`.`apellido_materno`) LIKE :propietario");
return $this->fetchMany($query, [':propietario' => "%{$propietario}%"]); return $this->fetchMany($query, [':propietario' => "%{$propietario}%"]);
} }
/**
* @param string $propietario
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdsByPropietario(string $propietario): array public function fetchIdsByPropietario(string $propietario): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -302,6 +403,12 @@ class Venta extends Ideal\Repository
OR CONCAT_WS('-', rut, dv) = :rut"); OR CONCAT_WS('-', rut, dv) = :rut");
return $this->fetchIds($query, [':propietario' => "%{$propietario}%", ':rut' => $propietario]); return $this->fetchIds($query, [':propietario' => "%{$propietario}%", ':rut' => $propietario]);
} }
/**
* @param string $propietario
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPropietarioNombreCompleto(string $propietario): array public function fetchByPropietarioNombreCompleto(string $propietario): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -311,6 +418,12 @@ class Venta extends Ideal\Repository
->where("CONCAT_WS(' ', `propietario`.`nombres`, `propietario`.`apellido_paterno`, `propietario`.`apellido_materno`) LIKE ?"); ->where("CONCAT_WS(' ', `propietario`.`nombres`, `propietario`.`apellido_paterno`, `propietario`.`apellido_materno`) LIKE ?");
return $this->fetchMany($query, [$propietario]); return $this->fetchMany($query, [$propietario]);
} }
/**
* @param int $proyecto_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchEscriturasByProyecto(int $proyecto_id): array public function fetchEscriturasByProyecto(int $proyecto_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -325,6 +438,12 @@ class Venta extends Ideal\Repository
->group('a.id'); ->group('a.id');
return $this->fetchMany($query, [$proyecto_id]); return $this->fetchMany($query, [$proyecto_id]);
} }
/**
* @param int $escritura_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdByEscritura(int $escritura_id): array public function fetchIdByEscritura(int $escritura_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -333,6 +452,12 @@ class Venta extends Ideal\Repository
->where('escritura = ?'); ->where('escritura = ?');
return $this->fetchId($query, [$escritura_id]); return $this->fetchId($query, [$escritura_id]);
} }
/**
* @param int $subsidio_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdBySubsidio(int $subsidio_id): array public function fetchIdBySubsidio(int $subsidio_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -341,6 +466,12 @@ class Venta extends Ideal\Repository
->where('subsidio = ?'); ->where('subsidio = ?');
return $this->fetchId($query, [$subsidio_id]); return $this->fetchId($query, [$subsidio_id]);
} }
/**
* @param int $credito_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdByCredito(int $credito_id): array public function fetchIdByCredito(int $credito_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -349,6 +480,12 @@ class Venta extends Ideal\Repository
->where('credito = ?'); ->where('credito = ?');
return $this->fetchId($query, [$credito_id]); return $this->fetchId($query, [$credito_id]);
} }
/**
* @param int $bono_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchIdByBono(int $bono_id): array public function fetchIdByBono(int $bono_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -357,6 +494,11 @@ class Venta extends Ideal\Repository
->where('bono_pie = ?'); ->where('bono_pie = ?');
return $this->fetchId($query, [$bono_id]); return $this->fetchId($query, [$bono_id]);
} }
/**
* @param int $venta_id
* @return array
*/
public function fetchByIdForSearch(int $venta_id): array public function fetchByIdForSearch(int $venta_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -382,6 +524,11 @@ class Venta extends Ideal\Repository
->limit(1); ->limit(1);
return $this->connection->execute($query, [$venta_id])->fetch(PDO::FETCH_ASSOC); return $this->connection->execute($query, [$venta_id])->fetch(PDO::FETCH_ASSOC);
} }
/**
* @param int $venta_id
* @return array
*/
public function fetchByIdForList(int $venta_id): array public function fetchByIdForList(int $venta_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -404,20 +551,33 @@ class Venta extends Ideal\Repository
return $this->connection->execute($query, [$venta_id])->fetch(PDO::FETCH_ASSOC); return $this->connection->execute($query, [$venta_id])->fetch(PDO::FETCH_ASSOC);
} }
/**
* @param string $query
* @param array|null $data
* @return array
* @throws Implement\Exception\EmptyResult
*/
protected function fetchIds(string $query, ?array $data = null): array protected function fetchIds(string $query, ?array $data = null): array
{ {
$results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); try {
if ($results === false) { return $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC);
throw new Implement\Exception\EmptyResult($query); } catch (PDOException $exception) {
throw new Implement\Exception\EmptyResult($query, $exception);
} }
return $results;
} }
/**
* @param string $query
* @param array|null $data
* @return array
* @throws Implement\Exception\EmptyResult
*/
protected function fetchId(string $query, ?array $data = null): array protected function fetchId(string $query, ?array $data = null): array
{ {
$results = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC); try {
if ($results === false) { return $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC);
throw new Implement\Exception\EmptyResult($query); } catch (PDOException $exception) {
throw new Implement\Exception\EmptyResult($query, $exception);
} }
return $results;
} }
} }

View File

@ -31,11 +31,23 @@ class BonoPie extends Ideal\Repository
); );
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Define\Model
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Define\Model public function edit(Define\Model $model, array $new_data): Define\Model
{ {
return $this->update($model, ['valor', 'pago'], $new_data); return $this->update($model, ['valor', 'pago'], $new_data);
} }
/**
* @param float $value
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByValue(float $value): array public function fetchByValue(float $value): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -44,6 +56,12 @@ class BonoPie extends Ideal\Repository
->where('valor = ?'); ->where('valor = ?');
return $this->fetchMany($query, [$value]); return $this->fetchMany($query, [$value]);
} }
/**
* @param int $pago_id
* @return Model\Venta\BonoPie
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPago(int $pago_id): Model\Venta\BonoPie public function fetchByPago(int $pago_id): Model\Venta\BonoPie
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -52,6 +70,12 @@ class BonoPie extends Ideal\Repository
->where('pago = ?'); ->where('pago = ?');
return $this->fetchOne($query, [$pago_id]); return $this->fetchOne($query, [$pago_id]);
} }
/**
* @param int $venta_id
* @return Model\Venta\BonoPie
* @throws Implement\Exception\EmptyResult
*/
public function fetchByVenta(int $venta_id): Model\Venta\BonoPie public function fetchByVenta(int $venta_id): Model\Venta\BonoPie
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -37,6 +37,11 @@ class Credito extends Ideal\Repository
return $this->update($model, ['banco', 'valor', 'fecha', 'uf', 'abonado', 'fecha_abono', 'pago'], $new_data); return $this->update($model, ['banco', 'valor', 'fecha', 'uf', 'abonado', 'fecha_abono', 'pago'], $new_data);
} }
/**
* @param int $value
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByValue(int $value): array public function fetchByValue(int $value): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -198,6 +198,12 @@ GROUP BY p1.`fecha`, v1.`descripcion`
ORDER BY p1.`fecha`, v1.`descripcion`"; ORDER BY p1.`fecha`, v1.`descripcion`";
return $this->fetchAsArray($query);*/ return $this->fetchAsArray($query);*/
} }
/**
* @param int $pie_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByPie(int $pie_id): array public function fetchByPie(int $pie_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -39,6 +39,11 @@ class Escritura extends Ideal\Repository
return $this->update($model, ['valor', 'fecha', 'uf', 'abonado', 'fecha_abono', 'pago'], $new_data); return $this->update($model, ['valor', 'fecha', 'uf', 'abonado', 'fecha_abono', 'pago'], $new_data);
} }
/**
* @param int $value
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByValue(int $value): array public function fetchByValue(int $value): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -55,6 +60,12 @@ class Escritura extends Ideal\Repository
->where('pago = ?'); ->where('pago = ?');
return $this->fetchOne($query, [$pago_id]); return $this->fetchOne($query, [$pago_id]);
} }
/**
* @param int $venta_id
* @return Model\Venta\Escritura
* @throws Implement\Exception\EmptyResult
*/
public function fetchByVenta(int $venta_id): Model\Venta\Escritura public function fetchByVenta(int $venta_id): Model\Venta\Escritura
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -100,6 +100,12 @@ FROM (
WHERE venta_id = ?"; WHERE venta_id = ?";
return $this->fetchMany($query, [$venta_id]); return $this->fetchMany($query, [$venta_id]);
} }
/**
* @param int $value
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByValue(int $value): array public function fetchByValue(int $value): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -48,6 +48,11 @@ class Pie extends Ideal\Repository
return $this->update($model, ['fecha', 'valor', 'uf', 'cuotas', 'asociado', 'reajuste'], $new_data); return $this->update($model, ['fecha', 'valor', 'uf', 'cuotas', 'asociado', 'reajuste'], $new_data);
} }
/**
* @param int $pie_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchAsociados(int $pie_id): array public function fetchAsociados(int $pie_id): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -56,6 +61,12 @@ class Pie extends Ideal\Repository
->where('asociado = ?'); ->where('asociado = ?');
return $this->fetchMany($query, [$pie_id]); return $this->fetchMany($query, [$pie_id]);
} }
/**
* @param float $value
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByValue(float $value): array public function fetchByValue(float $value): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -32,11 +32,23 @@ class Precio extends Ideal\Repository
); );
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Define\Model
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Define\Model public function edit(Define\Model $model, array $new_data): Define\Model
{ {
return $this->update($model, ['unidad', 'valor'], $new_data); return $this->update($model, ['unidad', 'valor'], $new_data);
} }
/**
* @param int $proyecto_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByProyecto(int $proyecto_id): array public function fetchByProyecto(int $proyecto_id): array
{ {
$query = "SELECT a.* $query = "SELECT a.*
@ -50,6 +62,12 @@ WHERE ptu.`proyecto` = ? AND tep.`descripcion` = 'vigente'
ORDER BY tu.`orden`, ptu.`nombre`, `unidad`.`subtipo`, LPAD(`unidad`.`descripcion`, 4, '0')"; ORDER BY tu.`orden`, ptu.`nombre`, `unidad`.`subtipo`, LPAD(`unidad`.`descripcion`, 4, '0')";
return $this->fetchMany($query, [$proyecto_id]); return $this->fetchMany($query, [$proyecto_id]);
} }
/**
* @param int $unidad_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchByUnidad(int $unidad_id): array public function fetchByUnidad(int $unidad_id): array
{ {
$query = "SELECT a.* $query = "SELECT a.*
@ -59,6 +77,12 @@ FROM `{$this->getTable()}` a
WHERE `unidad` = ?"; WHERE `unidad` = ?";
return $this->fetchMany($query, [$unidad_id]); return $this->fetchMany($query, [$unidad_id]);
} }
/**
* @param int $unidad_id
* @return Define\Model
* @throws Implement\Exception\EmptyResult
*/
public function fetchVigenteByUnidad(int $unidad_id): Define\Model public function fetchVigenteByUnidad(int $unidad_id): Define\Model
{ {
$query = "SELECT a.* $query = "SELECT a.*
@ -68,6 +92,13 @@ FROM `{$this->getTable()}` a
WHERE `unidad` = ? AND tep.`descripcion` = 'vigente'"; WHERE `unidad` = ? AND tep.`descripcion` = 'vigente'";
return $this->fetchOne($query, [$unidad_id]); return $this->fetchOne($query, [$unidad_id]);
} }
/**
* @param int $unidad_id
* @param string $date_time
* @return Define\Model
* @throws Implement\Exception\EmptyResult
*/
public function fetchByUnidadAndDate(int $unidad_id, string $date_time): Define\Model public function fetchByUnidadAndDate(int $unidad_id, string $date_time): Define\Model
{ {
$query = "SELECT a.* $query = "SELECT a.*

View File

@ -48,11 +48,23 @@ class Propiedad extends Ideal\Repository
); );
return $model; return $model;
} }
/**
* @param Define\Model $model
* @param array $new_data
* @return Model\Venta\Propiedad
* @throws Implement\Exception\EmptyResult
*/
public function edit(Define\Model $model, array $new_data): Model\Venta\Propiedad public function edit(Define\Model $model, array $new_data): Model\Venta\Propiedad
{ {
return $this->update($model, ['unidad_principal', 'estacionamientos', 'bodegas', 'estado'], $new_data); return $this->update($model, ['unidad_principal', 'estacionamientos', 'bodegas', 'estado'], $new_data);
} }
/**
* @param int $unidad_id
* @return Model\Venta\Propiedad
* @throws Implement\Exception\EmptyResult
*/
public function fetchVigenteByUnidad(int $unidad_id): Model\Venta\Propiedad public function fetchVigenteByUnidad(int $unidad_id): Model\Venta\Propiedad
{ {
$query = "SELECT * FROM `{$this->getTable()}` WHERE `unidad_principal` = ?"; $query = "SELECT * FROM `{$this->getTable()}` WHERE `unidad_principal` = ?";

View File

@ -49,6 +49,12 @@ class Subsidio extends Ideal\Repository
->where('subsidio = ? OR pago = ?'); ->where('subsidio = ? OR pago = ?');
return $this->fetchOne($query, [$pago_id, $pago_id]); return $this->fetchOne($query, [$pago_id, $pago_id]);
} }
/**
* @param int $venta_id
* @return Model\Venta\Subsidio
* @throws Implement\Exception\EmptyResult
*/
public function fetchByVenta(int $venta_id): Model\Venta\Subsidio public function fetchByVenta(int $venta_id): Model\Venta\Subsidio
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -33,6 +33,11 @@ class TipoEstadoVenta extends Ideal\Repository
return $this->update($model, ['descripcion', 'activa'], $new_data); return $this->update($model, ['descripcion', 'activa'], $new_data);
} }
/**
* @param string $descripcion
* @return Model\Venta\TipoEstadoVenta
* @throws Implement\Exception\EmptyResult
*/
public function fetchByDescripcion(string $descripcion): Model\Venta\TipoEstadoVenta public function fetchByDescripcion(string $descripcion): Model\Venta\TipoEstadoVenta
{ {
$query = "SELECT * FROM `{$this->getTable()}` WHERE `descripcion` = ?"; $query = "SELECT * FROM `{$this->getTable()}` WHERE `descripcion` = ?";

View File

@ -129,6 +129,13 @@ class Unidad extends Ideal\Repository
->where("a.`descripcion` LIKE ? AND tu.`descripcion` = ? AND (pu.`id` IS NULL OR `venta`.`id` IS NULL OR tev.`activa` = 0)"); ->where("a.`descripcion` LIKE ? AND tu.`descripcion` = ? AND (pu.`id` IS NULL OR `venta`.`id` IS NULL OR tev.`activa` = 0)");
return $this->fetchMany($query, [$descripcion, $tipo]); return $this->fetchMany($query, [$descripcion, $tipo]);
} }
/**
* @param string $descripcion
* @param string $tipo
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchDisponiblesIdsByDescripcionAndTipo(string $descripcion, string $tipo): array public function fetchDisponiblesIdsByDescripcionAndTipo(string $descripcion, string $tipo): array
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()
@ -141,7 +148,11 @@ class Unidad extends Ideal\Repository
LEFT OUTER JOIN (SELECT ev1.* FROM `estado_venta` ev1 JOIN (SELECT MAX(`id`) as 'id', `venta` FROM `estado_venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id` LEFT OUTER JOIN (SELECT ev1.* FROM `estado_venta` ev1 JOIN (SELECT MAX(`id`) as 'id', `venta` FROM `estado_venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id`
LEFT OUTER JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado`") LEFT OUTER JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado`")
->where("a.`descripcion` LIKE ? AND tu.`descripcion` = ? AND (pu.`id` IS NULL OR `venta`.`id` IS NULL OR tev.`activa` = 0)"); ->where("a.`descripcion` LIKE ? AND tu.`descripcion` = ? AND (pu.`id` IS NULL OR `venta`.`id` IS NULL OR tev.`activa` = 0)");
return $this->connection->execute($query, [$descripcion, $tipo])->fetchAll(PDO::FETCH_ASSOC); try {
return $this->connection->execute($query, [$descripcion, $tipo])->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $exception) {
throw new Implement\Exception\EmptyResult($query, $exception);
}
} }
public function fetchByIdForSearch(int $unidad_id): array public function fetchByIdForSearch(int $unidad_id): array
{ {

View File

@ -39,6 +39,11 @@ class Prorrateo extends Ideal\Repository
return $this->update($model, ['unidad_id', 'prorrateo'], $new_data); return $this->update($model, ['unidad_id', 'prorrateo'], $new_data);
} }
/**
* @param int $unidad_id
* @return Model\Venta\Unidad\Prorrateo
* @throws Implement\Exception\EmptyResult
*/
public function fetchByUnidad(int $unidad_id): Model\Venta\Unidad\Prorrateo public function fetchByUnidad(int $unidad_id): Model\Venta\Unidad\Prorrateo
{ {
$query = $this->connection->getQueryBuilder() $query = $this->connection->getQueryBuilder()

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Incoviba\Service\Contabilidad; namespace Incoviba\Service\Contabilidad;
use PDOException;
use DateTimeImmutable; use DateTimeImmutable;
use DateTimeInterface; use DateTimeInterface;
use Incoviba\Common\Define\Cartola\Banco; use Incoviba\Common\Define\Cartola\Banco;
@ -273,12 +274,12 @@ class Cartola extends Service
$data['abono'] ?? 0, $data['abono'] ?? 0,
$data['saldo'] $data['saldo']
); );
} catch (Exception\EmptyResult $exception) { } catch (Exception\EmptyResult) {
$data['cuenta_id'] = $cuenta->id; $data['cuenta_id'] = $cuenta->id;
$movimiento = $this->movimientoRepository->create($data); $movimiento = $this->movimientoRepository->create($data);
try { try {
return $this->movimientoRepository->save($movimiento); return $this->movimientoRepository->save($movimiento);
} catch (\PDOException $exception) { } catch (PDOException $exception) {
$this->logger->critical(var_export($data,true)); $this->logger->critical(var_export($data,true));
throw $exception; throw $exception;
} }

View File

@ -9,7 +9,7 @@ trait isExcel
* @throws PhpSpreadsheet\Exception * @throws PhpSpreadsheet\Exception
* @throws PhpSpreadsheet\Calculation\Exception * @throws PhpSpreadsheet\Calculation\Exception
*/ */
protected function findTitlesRow(PhpSpreadsheet\Worksheet\RowIterator &$rowIterator, string $firstTitle, int $columnOffset = 1, bool $caseInsensitive = false): ?PhpSpreadsheet\Worksheet\Row protected function findTitlesRow(PhpSpreadsheet\Worksheet\RowIterator $rowIterator, string $firstTitle, int $columnOffset = 1, bool $caseInsensitive = false): ?PhpSpreadsheet\Worksheet\Row
{ {
if ($caseInsensitive) { if ($caseInsensitive) {
$firstTitle = strtolower($firstTitle); $firstTitle = strtolower($firstTitle);
@ -100,11 +100,6 @@ trait isExcel
if ($columnOffset > 1) { if ($columnOffset > 1) {
$cellIterator->seek($columnOffset); $cellIterator->seek($columnOffset);
} }
foreach ($exitValues as $exitValue) { return in_array($cellIterator->current()->getCalculatedValue(), $exitValues, true);
if ($cellIterator->current()->getCalculatedValue() === $exitValue) {
return true;
}
}
return false;
} }
} }

View File

@ -1,8 +1,9 @@
<?php <?php
namespace Incoviba\Service\Contabilidad\Cartola; namespace Incoviba\Service\Contabilidad\Cartola;
use Incoviba\Common\Ideal\Cartola\Banco; use InvalidArgumentException;
use Psr\Http\Message\UploadedFileInterface; use Psr\Http\Message\UploadedFileInterface;
use Incoviba\Common\Ideal\Cartola\Banco;
trait withSubBancos trait withSubBancos
{ {

View File

@ -15,8 +15,8 @@ class Semanal extends Ideal\Service
protected Repository\Contabilidad\Deposito $depositoRepository, protected Repository\Contabilidad\Deposito $depositoRepository,
protected Service\Contabilidad\Cartola $cartolaService, protected Service\Contabilidad\Cartola $cartolaService,
protected Service\Contabilidad\Movimiento $movimientoService, protected Service\Contabilidad\Movimiento $movimientoService,
protected Service\Contabilidad\Informe\Tesoreria\Excel $excelService, protected Service\Contabilidad\Informe\Tesoreria\Input\Excel $excelService,
protected Service\Contabilidad\Informe\Tesoreria\PDF $pdfService) protected Service\Contabilidad\Informe\Tesoreria\Output\PDF $pdfService)
{ {
parent::__construct($logger); parent::__construct($logger);
} }
@ -31,6 +31,6 @@ class Semanal extends Ideal\Service
} }
return $this->anterior; return $this->anterior;
} }
public function build(DateTimeInterface $fecha): array /*public function build(DateTimeInterface $fecha): array
{} {}*/
} }

View File

@ -65,7 +65,7 @@ class SaldosContables extends Ideal\Service
'saldo' => $this->getSaldo($dataMovimiento) 'saldo' => $this->getSaldo($dataMovimiento)
]; ];
try { try {
$movimiento = $this->movimientoRepository->fetchByCuentaAndFechaAndCargoAndAbonoAndSaldo($cuenta->id, $dataMovimiento->fecha, $data['cargo'], $data['abono'], $data['saldo']); $movimiento = $this->movimientoRepository->fetchByCuentaAndFechaAndGlosaAndCargoAndAbonoAndSaldo($cuenta->id, $dataMovimiento->fecha, $data['glosa'], $data['cargo'], $data['abono'], $data['saldo']);
} catch (Implement\Exception\EmptyResult) { } catch (Implement\Exception\EmptyResult) {
$movimiento = $this->movimientoRepository->create($data); $movimiento = $this->movimientoRepository->create($data);
$movimiento = $this->movimientoRepository->save($movimiento); $movimiento = $this->movimientoRepository->save($movimiento);

View File

@ -5,6 +5,7 @@ use DateInterval;
use DateTimeInterface; use DateTimeInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Common\Implement; use Incoviba\Common\Implement;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Model; use Incoviba\Model;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Service; use Incoviba\Service;
@ -94,7 +95,7 @@ class Output extends Ideal\Service
$dataInmobiliaria->sociedad = $inmobiliaria; $dataInmobiliaria->sociedad = $inmobiliaria;
try { try {
$cuentas = $this->cuentaService->getAllActiveByInmobiliaria($inmobiliaria->rut); $cuentas = $this->cuentaService->getAllActiveByInmobiliaria($inmobiliaria->rut);
} catch (Implement\Exception\EmptyResult) { } catch (Read) {
return $dataInmobiliaria; return $dataInmobiliaria;
} }
foreach ($cuentas as $cuenta) { foreach ($cuentas as $cuenta) {

View File

@ -17,7 +17,7 @@ class Movimientos
const INGRESOS = 'ingresos'; const INGRESOS = 'ingresos';
const EGRESOS = 'egresos'; const EGRESOS = 'egresos';
public function addDap(string $tipo, array $movimientos) public function addDap(string $tipo, array $movimientos): self
{ {
foreach ($movimientos as $movimiento) { foreach ($movimientos as $movimiento) {
$this->dap->{$tipo} []= $movimiento; $this->dap->{$tipo} []= $movimiento;
@ -66,11 +66,7 @@ class Movimientos
$date = $movimiento->fecha; $date = $movimiento->fecha;
} }
if ($movimiento->fecha !== $date) { if ($movimiento->fecha !== $date) {
if ($movimiento->cuenta->inmobiliaria->rut === $sociedad_rut) {
$temp []= $movimiento;
}
$date = $movimiento->fecha; $date = $movimiento->fecha;
continue;
} }
if ($movimiento->cuenta->inmobiliaria->rut === $sociedad_rut) { if ($movimiento->cuenta->inmobiliaria->rut === $sociedad_rut) {
$temp []= $movimiento; $temp []= $movimiento;

View File

@ -2,6 +2,7 @@
namespace Incoviba\Service\Inmobiliaria; namespace Incoviba\Service\Inmobiliaria;
use DateTimeImmutable; use DateTimeImmutable;
use Incoviba\Exception\ServiceAction\Read;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal\Service; use Incoviba\Common\Ideal\Service;
use Incoviba\Common\Implement; use Incoviba\Common\Implement;
@ -16,19 +17,37 @@ class Cuenta extends Service
parent::__construct($logger); parent::__construct($logger);
} }
/**
* @return array
* @throws Read
*/
public function getAllActive(): array public function getAllActive(): array
{ {
$cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchAll()); try {
return array_values(array_filter($cuentas, function(Model\Inmobiliaria\Cuenta $cuenta) { $cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchAll());
return $cuenta->currentEstado()->active; return array_values(array_filter($cuentas, function(Model\Inmobiliaria\Cuenta $cuenta) {
})); return $cuenta->currentEstado()->active;
}));
} catch (Implement\Exception\EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
/**
* @param int $inmobiliaria_rut
* @return array
* @throws Read
*/
public function getAllActiveByInmobiliaria(int $inmobiliaria_rut): array public function getAllActiveByInmobiliaria(int $inmobiliaria_rut): array
{ {
$cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchByInmobiliaria($inmobiliaria_rut)); try {
return array_values(array_filter($cuentas, function(Model\Inmobiliaria\Cuenta $cuenta) { $cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchByInmobiliaria($inmobiliaria_rut));
return $cuenta->currentEstado()->active; return array_values(array_filter($cuentas, function(Model\Inmobiliaria\Cuenta $cuenta) {
})); return $cuenta->currentEstado()->active;
}));
} catch (Implement\Exception\EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
public function add(array $data): Model\Inmobiliaria\Cuenta public function add(array $data): Model\Inmobiliaria\Cuenta
{ {

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Incoviba\Service\Inmobiliaria; namespace Incoviba\Service\Inmobiliaria;
use Incoviba\Exception\ServiceAction\Read;
use PDOException; use PDOException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
@ -73,7 +74,7 @@ class Proveedor extends Ideal\Service
} }
$filteredData = $this->proveedorRepository->filterData($data); $filteredData = $this->proveedorRepository->filterData($data);
return $this->process($this->proveedorRepository->edit($proveedor, $filteredData)); return $this->process($this->proveedorRepository->edit($proveedor, $filteredData));
} catch (Implement\Exception\EmptyResult) { } catch (Read | Implement\Exception\EmptyResult) {
return $proveedor; return $proveedor;
} }
} }
@ -82,7 +83,7 @@ class Proveedor extends Ideal\Service
try { try {
$this->proveedorRepository->remove($proveedor); $this->proveedorRepository->remove($proveedor);
return true; return true;
} catch (Implement\Exception\EmptyResult | PDOException) { } catch (PDOException) {
return false; return false;
} }
} }

View File

@ -192,7 +192,7 @@ class Login
protected function cryptoJs_aes_decrypt($data, $key): string protected function cryptoJs_aes_decrypt($data, $key): string
{ {
$data = base64_decode($data); $data = base64_decode($data);
if (substr($data, 0, 8) != "Salted__") { if (!str_starts_with($data, "Salted__")) {
return false; return false;
} }
$salt = substr($data, 8, 8); $salt = substr($data, 8, 8);

View File

@ -3,6 +3,7 @@ namespace Incoviba\Service;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Common\Implement; use Incoviba\Common\Implement;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Model; use Incoviba\Model;
use Incoviba\Repository; use Incoviba\Repository;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -17,9 +18,18 @@ class Persona extends Ideal\Service
parent::__construct($logger); parent::__construct($logger);
} }
/**
* @param int $rut
* @return Model\Persona
* @throws Read
*/
public function getById(int $rut): Model\Persona public function getById(int $rut): Model\Persona
{ {
return $this->process($this->personaRepository->fetchById($rut)); try {
return $this->process($this->personaRepository->fetchById($rut));
} catch (Implement\Exception\EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
public function add(array $data): Model\Persona public function add(array $data): Model\Persona
{ {

View File

@ -36,7 +36,7 @@ class Terreno extends Ideal\Service
return $proyecto->terreno; return $proyecto->terreno;
} }
try { try {
// Valor 1o Enero // Valor 1o enero
return $this->getValorContable($proyecto, $lastNovember->add(new DateInterval('P1M'))->add(new DateInterval('P1D'))); return $this->getValorContable($proyecto, $lastNovember->add(new DateInterval('P1M'))->add(new DateInterval('P1D')));
} catch (Implement\Exception\EmptyResponse) {} } catch (Implement\Exception\EmptyResponse) {}
if ($proyecto->terreno->fecha === null) { if ($proyecto->terreno->fecha === null) {

View File

@ -9,7 +9,12 @@ class Redis
{ {
public function __construct(protected ClientInterface $client) {} public function __construct(protected ClientInterface $client) {}
public function get(string $name): mixed /**
* @param string $name
* @return string|null
* @throws EmptyRedis
*/
public function get(string $name): ?string
{ {
try { try {
if (!$this->client->exists($name)) { if (!$this->client->exists($name)) {

View File

@ -102,7 +102,7 @@ class Search
{ {
try { try {
return $this->unidadRepository->fetchDisponiblesIdsByDescripcionAndTipo($query, $tipo); return $this->unidadRepository->fetchDisponiblesIdsByDescripcionAndTipo($query, $tipo);
} catch (EmptyResponse) { } catch (EmptyResult) {
return []; return [];
} }
} }

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Incoviba\Service; namespace Incoviba\Service;
use PDOException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Repository; use Incoviba\Repository;
@ -39,7 +40,7 @@ class Sociedad extends Ideal\Service
} catch (EmptyResult) { } catch (EmptyResult) {
try { try {
return $this->process($this->sociedadRepository->save($this->sociedadRepository->create($data))); return $this->process($this->sociedadRepository->save($this->sociedadRepository->create($data)));
} catch (EmptyResult) { } catch (PDOException) {
return null; return null;
} }
} }

View File

@ -4,6 +4,7 @@ namespace Incoviba\Service;
use Exception; use Exception;
use DateTimeImmutable; use DateTimeImmutable;
use DateInterval; use DateInterval;
use DateMalformedStringException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal\Service; use Incoviba\Common\Ideal\Service;
use Incoviba\Common\Implement; use Incoviba\Common\Implement;
@ -98,7 +99,7 @@ class Venta extends Service
public function getFacturacionById(int $venta_id): array public function getFacturacionById(int $venta_id): array
{ {
$venta = $this->getById($venta_id); $venta = $this->getById($venta_id);
$escritura = (in_array($venta->currentEstado()->tipoEstadoVenta->descripcion, ['escriturando'])) ? $venta->currentEstado()->fecha : $venta->fecha; $escritura = (in_array($venta->currentEstado()->tipoEstadoVenta->descripcion, ['escriturando', 'firmado por inmobiliaria'])) ? $venta->currentEstado()->fecha : $venta->fecha;
$data = [ $data = [
'id' => $venta->id, 'id' => $venta->id,
'fecha' => $venta->fecha->format('Y-m-d'), 'fecha' => $venta->fecha->format('Y-m-d'),
@ -289,7 +290,7 @@ class Venta extends Service
{ {
try { try {
$fecha = new DateTimeImmutable($data['fecha']); $fecha = new DateTimeImmutable($data['fecha']);
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$fecha = new DateTimeImmutable(); $fecha = new DateTimeImmutable();
} }
$estadoData = [ $estadoData = [
@ -348,7 +349,7 @@ class Venta extends Service
{ {
try { try {
$fecha = new DateTimeImmutable($data['fecha_reajuste']); $fecha = new DateTimeImmutable($data['fecha_reajuste']);
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$fecha = new DateTimeImmutable(); $fecha = new DateTimeImmutable();
} }
$reajusteData = [ $reajusteData = [
@ -363,7 +364,7 @@ class Venta extends Service
{ {
try { try {
$fecha = new DateTimeImmutable($data['fecha_pago']); $fecha = new DateTimeImmutable($data['fecha_pago']);
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$fecha = new DateTimeImmutable(); $fecha = new DateTimeImmutable();
} }
$uf = $this->moneyService->getUF($fecha); $uf = $this->moneyService->getUF($fecha);
@ -389,7 +390,7 @@ class Venta extends Service
{ {
try { try {
$fecha = new DateTimeImmutable($data['fecha']); $fecha = new DateTimeImmutable($data['fecha']);
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$fecha = new DateTimeImmutable(); $fecha = new DateTimeImmutable();
} }
$uf = $this->moneyService->getUF($fecha); $uf = $this->moneyService->getUF($fecha);
@ -399,15 +400,15 @@ class Venta extends Service
'subsidio' => $this->valorService->clean($data['valor_subsidio']), 'subsidio' => $this->valorService->clean($data['valor_subsidio']),
'uf' => $uf 'uf' => $uf
]; ];
$subsidio = $this->addSubsidio($subsidioData); $formaPago = $this->addFormaPago($subsidioData);
$this->ventaRepository->edit($venta, ['subsidio' => $subsidio->id]); $this->ventaRepository->edit($venta, ['subsidio' => $formaPago->subsidio->id]);
} }
protected function editCredito(Model\Venta $venta, array $data): void protected function editCredito(Model\Venta $venta, array $data): void
{ {
try { try {
$fecha = new DateTimeImmutable($data['fecha']); $fecha = new DateTimeImmutable($data['fecha']);
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$fecha = new DateTimeImmutable(); $fecha = new DateTimeImmutable();
} }
$uf = $this->moneyService->getUF($fecha); $uf = $this->moneyService->getUF($fecha);

View File

@ -2,6 +2,7 @@
namespace Incoviba\Service\Venta; namespace Incoviba\Service\Venta;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Model; use Incoviba\Model;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -27,8 +28,18 @@ class BonoPie
} }
return $bono; return $bono;
} }
/**
* @param int $venta_id
* @return Model\Venta\BonoPie
* @throws Read
*/
public function getByVenta(int $venta_id): Model\Venta\BonoPie public function getByVenta(int $venta_id): Model\Venta\BonoPie
{ {
return $this->bonoPieRepository->fetchByVenta($venta_id); try {
return $this->bonoPieRepository->fetchByVenta($venta_id);
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
} }

View File

@ -17,7 +17,7 @@ class Cierre
public function getByProyecto(int $proyecto_id): array public function getByProyecto(int $proyecto_id): array
{ {
$cierres = $this->cierreRepository->fetchByProyecto($proyecto_id); $cierres = $this->cierreRepository->fetchByProyecto($proyecto_id);
foreach ($cierres as &$cierre) { foreach ($cierres as $cierre) {
$cierre->estados = $this->estadoCierreRepository->fetchByCierre($cierre->id); $cierre->estados = $this->estadoCierreRepository->fetchByCierre($cierre->id);
$cierre->current = $this->estadoCierreRepository->fetchCurrentByCierre($cierre->id); $cierre->current = $this->estadoCierreRepository->fetchCurrentByCierre($cierre->id);
$cierre->unidades = $this->unidadRepository->fetchByCierre($cierre->id); $cierre->unidades = $this->unidadRepository->fetchByCierre($cierre->id);
@ -30,7 +30,7 @@ class Cierre
$cierre->estados = $this->estadoCierreRepository->fetchByCierre($cierre_id); $cierre->estados = $this->estadoCierreRepository->fetchByCierre($cierre_id);
$cierre->current = $this->estadoCierreRepository->fetchCurrentByCierre($cierre_id); $cierre->current = $this->estadoCierreRepository->fetchCurrentByCierre($cierre_id);
$cierre->unidades = $this->unidadRepository->fetchByCierre($cierre_id); $cierre->unidades = $this->unidadRepository->fetchByCierre($cierre_id);
foreach ($cierre->unidades as &$unidad) { foreach ($cierre->unidades as $unidad) {
$unidad->currentPrecio = $this->precioRepository->fetchByUnidadAndDate($unidad->id, $cierre->dateTime->format('Y-m-d')); $unidad->currentPrecio = $this->precioRepository->fetchByUnidadAndDate($unidad->id, $cierre->dateTime->format('Y-m-d'));
} }
$cierre->valoresCierre = $this->valorCierreRepository->fetchByCierre($cierre_id); $cierre->valoresCierre = $this->valorCierreRepository->fetchByCierre($cierre_id);

View File

@ -3,6 +3,8 @@ namespace Incoviba\Service\Venta;
use Exception; use Exception;
use DateTimeImmutable; use DateTimeImmutable;
use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Exception\ServiceAction\Read;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Repository; use Incoviba\Repository;
@ -24,9 +26,18 @@ class Credito extends Ideal\Service
parent::__construct($logger); parent::__construct($logger);
} }
/**
* @param int $venta_id
* @return Model\Venta\Credito
* @throws Read
*/
public function getByVenta(int $venta_id): Model\Venta\Credito public function getByVenta(int $venta_id): Model\Venta\Credito
{ {
return $this->creditoRepository->fetchByVenta($venta_id); try {
return $this->creditoRepository->fetchByVenta($venta_id);
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
/** /**

View File

@ -3,6 +3,7 @@ namespace Incoviba\Service\Venta;
use DateTimeImmutable; use DateTimeImmutable;
use DateInterval; use DateInterval;
use Incoviba\Common\Implement\Exception\EmptyResult;
use IntlDateFormatter; use IntlDateFormatter;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;

View File

@ -3,6 +3,7 @@ namespace Incoviba\Service\Venta;
use Exception; use Exception;
use DateTimeImmutable; use DateTimeImmutable;
use DateMalformedStringException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
@ -65,7 +66,7 @@ class Escritura extends Ideal\Service
} }
try { try {
$data['fecha'] = (new DateTimeImmutable($data['fecha']))->format('Y-m-d'); $data['fecha'] = (new DateTimeImmutable($data['fecha']))->format('Y-m-d');
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
unset($data['fecha']); unset($data['fecha']);
} }

View File

@ -1,12 +1,14 @@
<?php <?php
namespace Incoviba\Service\Venta; namespace Incoviba\Service\Venta;
use Incoviba\Service\Valor; use Error;
use Incoviba\Exception\ServiceAction\Read;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Incoviba\Common\Implement; use Incoviba\Common\Implement;
use Incoviba\Common\Ideal; use Incoviba\Common\Ideal;
use Incoviba\Model; use Incoviba\Model;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Service\Valor;
class FormaPago extends Ideal\Service class FormaPago extends Ideal\Service
{ {
@ -28,22 +30,22 @@ class FormaPago extends Ideal\Service
$formaPago = new Model\Venta\FormaPago(); $formaPago = new Model\Venta\FormaPago();
try { try {
$formaPago->pie = $this->pieService->getByVenta($venta_id); $formaPago->pie = $this->pieService->getByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Read) {}
try { try {
$formaPago->bonoPie = $this->bonoPieService->getByVenta($venta_id); $formaPago->bonoPie = $this->bonoPieService->getByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Read) {}
try { try {
$formaPago->credito = $this->creditoService->getByVenta($venta_id); $formaPago->credito = $this->creditoService->getByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Read) {}
try { try {
$formaPago->escritura = $this->escrituraRepository->fetchByVenta($venta_id); $formaPago->escritura = $this->escrituraRepository->fetchByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Implement\Exception\EmptyResult) {}
try { try {
$formaPago->subsidio = $this->subsidioService->getByVenta($venta_id); $formaPago->subsidio = $this->subsidioService->getByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Read) {}
try { try {
$formaPago->devolucion = $this->pagoService->getDevolucionByVenta($venta_id); $formaPago->devolucion = $this->pagoService->getDevolucionByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Read) {}
try { try {
$formaPago->cuotasAbono = $this->cuotaRepository->fetchByVenta($venta_id); $formaPago->cuotasAbono = $this->cuotaRepository->fetchByVenta($venta_id);
} catch (Implement\Exception\EmptyResult) {} } catch (Implement\Exception\EmptyResult) {}
@ -66,7 +68,7 @@ class FormaPago extends Ideal\Service
$method = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name))); $method = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name)));
$obj = $this->{$method}($data); $obj = $this->{$method}($data);
$forma_pago->{$name} = $obj; $forma_pago->{$name} = $obj;
} catch (\Error $error) { } catch (Error $error) {
$this->logger->critical($error); $this->logger->critical($error);
} }
} }

View File

@ -4,6 +4,8 @@ namespace Incoviba\Service\Venta;
use Exception; use Exception;
use DateTimeInterface; use DateTimeInterface;
use DateTimeImmutable; use DateTimeImmutable;
use DateMalformedStringException;
use Incoviba\Exception\ServiceAction\Read;
use PDOException; use PDOException;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Repository; use Incoviba\Repository;
@ -112,9 +114,19 @@ class Pago
{ {
return []; return [];
} }
/**
* @param int $venta_id
* @return Model\Venta\Pago
* @throws Read
*/
public function getDevolucionByVenta(int $venta_id): Model\Venta\Pago public function getDevolucionByVenta(int $venta_id): Model\Venta\Pago
{ {
return $this->process($this->pagoRepository->fetchDevolucionByVenta($venta_id)); try {
return $this->process($this->pagoRepository->fetchDevolucionByVenta($venta_id));
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
public function add(array $data): Model\Venta\Pago public function add(array $data): Model\Venta\Pago
@ -122,7 +134,7 @@ class Pago
if (!isset($data['uf'])) { if (!isset($data['uf'])) {
try { try {
$data['uf'] = $this->ufService->get(new DateTimeImmutable($data['fecha'])); $data['uf'] = $this->ufService->get(new DateTimeImmutable($data['fecha']));
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$data['uf'] = 0; $data['uf'] = 0;
} }
} }
@ -147,14 +159,14 @@ class Pago
if (array_key_exists('fecha', $data)) { if (array_key_exists('fecha', $data)) {
try { try {
$data['fecha'] = (new DateTimeImmutable($data['fecha']))->format('Y-m-d'); $data['fecha'] = (new DateTimeImmutable($data['fecha']))->format('Y-m-d');
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$data['fecha'] = (new DateTimeImmutable())->format('Y-m-d'); $data['fecha'] = (new DateTimeImmutable())->format('Y-m-d');
} }
} }
if (array_key_exists('uf', $data)) { if (array_key_exists('uf', $data)) {
try { try {
$data['uf'] = $this->ufService->get(new DateTimeImmutable($data['fecha'])); $data['uf'] = $this->ufService->get(new DateTimeImmutable($data['fecha']));
} catch (\DateMalformedStringException) { } catch (DateMalformedStringException) {
$data['uf'] = 0; $data['uf'] = 0;
} }
} }
@ -171,7 +183,7 @@ class Pago
try { try {
$this->pagoRepository->remove($pago); $this->pagoRepository->remove($pago);
return true; return true;
} catch (EmptyResult|PDOException) { } catch (PDOException) {
return false; return false;
} }
} }

View File

@ -3,6 +3,7 @@ namespace Incoviba\Service\Venta;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Common\Implement\Repository\Factory; use Incoviba\Common\Implement\Repository\Factory;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Model; use Incoviba\Model;
@ -20,7 +21,11 @@ class Pie
} }
public function getByVenta(int $venta_id): Model\Venta\Pie public function getByVenta(int $venta_id): Model\Venta\Pie
{ {
return $this->process($this->pieRepository->fetchByVenta($venta_id)); try {
return $this->process($this->pieRepository->fetchByVenta($venta_id));
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
public function add(array $data): Model\Venta\Pie public function add(array $data): Model\Venta\Pie

View File

@ -1,6 +1,8 @@
<?php <?php
namespace Incoviba\Service\Venta; namespace Incoviba\Service\Venta;
use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Model; use Incoviba\Model;
@ -8,29 +10,58 @@ class Precio
{ {
public function __construct(protected Repository\Venta\Precio $precioRepository, protected Repository\Venta\EstadoPrecio $estadoPrecioRepository) {} public function __construct(protected Repository\Venta\Precio $precioRepository, protected Repository\Venta\EstadoPrecio $estadoPrecioRepository) {}
/**
* @param int $proyecto_id
* @return array
* @throws Read
*/
public function getByProyecto(int $proyecto_id): array public function getByProyecto(int $proyecto_id): array
{ {
$precios = $this->precioRepository->fetchByProyecto($proyecto_id); try {
foreach ($precios as &$precio) { $precios = $this->precioRepository->fetchByProyecto($proyecto_id);
$precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id); foreach ($precios as $precio) {
$precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id); $precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id);
$precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id);
}
return $precios;
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
} }
return $precios;
} }
/**
* @param int $unidad_id
* @return Model\Venta\Precio
* @throws Read
*/
public function getVigenteByUnidad(int $unidad_id): Model\Venta\Precio public function getVigenteByUnidad(int $unidad_id): Model\Venta\Precio
{ {
$precio = $this->precioRepository->fetchVigenteByUnidad($unidad_id); try {
$precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id); $precio = $this->precioRepository->fetchVigenteByUnidad($unidad_id);
$precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id);
return $precio;
}
public function getByUnidad(int $unidad_id): array
{
$precios = $this->precioRepository->fetchByUnidad($unidad_id);
foreach ($precios as &$precio) {
$precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id); $precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id);
$precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id); $precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id);
return $precio;
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
}
/**
* @param int $unidad_id
* @return array
* @throws Read
*/
public function getByUnidad(int $unidad_id): array
{
try {
$precios = $this->precioRepository->fetchByUnidad($unidad_id);
foreach ($precios as $precio) {
$precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id);
$precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id);
}
return $precios;
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
} }
return $precios;
} }
} }

View File

@ -2,6 +2,7 @@
namespace Incoviba\Service\Venta; namespace Incoviba\Service\Venta;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Service; use Incoviba\Service;
use Incoviba\Model; use Incoviba\Model;
@ -51,10 +52,10 @@ class PropiedadUnidad
try { try {
$unidad->precios = $this->precioService->getByUnidad($unidad->id); $unidad->precios = $this->precioService->getByUnidad($unidad->id);
$unidad->currentPrecio = $this->precioService->getVigenteByUnidad($unidad->id); $unidad->currentPrecio = $this->precioService->getVigenteByUnidad($unidad->id);
if ($unidad->valor === 0 or $unidad->valor === null) { if ($unidad->valor === null or $unidad->valor === 0) {
$unidad->valor = $unidad->currentPrecio->valor; $unidad->valor = $unidad->currentPrecio->valor;
} }
} catch (EmptyResult) {} } catch (Read) {}
return $unidad; return $unidad;
} }
} }

View File

@ -1,8 +1,9 @@
<?php <?php
namespace Incoviba\Service\Venta; namespace Incoviba\Service\Venta;
use Exception;
use DateTimeImmutable; use DateTimeImmutable;
use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Exception\ServiceAction\Read;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Model; use Incoviba\Model;
use Incoviba\Service; use Incoviba\Service;
@ -19,9 +20,18 @@ class Subsidio
protected Service\Valor $valorService protected Service\Valor $valorService
) {} ) {}
/**
* @param int $venta_id
* @return Model\Venta\Subsidio
* @throws Read
*/
public function getByVenta(int $venta_id): Model\Venta\Subsidio public function getByVenta(int $venta_id): Model\Venta\Subsidio
{ {
return $this->subsidioRepository->fetchByVenta($venta_id); try {
return $this->subsidioRepository->fetchByVenta($venta_id);
} catch (EmptyResult $exception) {
throw new Read(__CLASS__, $exception);
}
} }
/** /**

View File

@ -1,6 +1,8 @@
<?php <?php
namespace Incoviba\Service\Venta; namespace Incoviba\Service\Venta;
use Incoviba\Exception\ServiceAction\Read;
use PDOException;
use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Repository; use Incoviba\Repository;
use Incoviba\Service; use Incoviba\Service;
@ -60,8 +62,7 @@ class Unidad
try { try {
$unidad->precios = $this->precioService->getByUnidad($unidad->id); $unidad->precios = $this->precioService->getByUnidad($unidad->id);
$unidad->currentPrecio = $this->precioService->getVigenteByUnidad($unidad->id); $unidad->currentPrecio = $this->precioService->getVigenteByUnidad($unidad->id);
} catch (EmptyResult) { } catch (Read) {}
}
return $unidad; return $unidad;
} }
} }