diff --git a/app/common/Define/Connection.php b/app/common/Define/Connection.php index a35af54..5b31ad1 100644 --- a/app/common/Define/Connection.php +++ b/app/common/Define/Connection.php @@ -3,13 +3,42 @@ namespace Incoviba\Common\Define; use PDO; use PDOStatement; +use PDOException; interface Connection { + /** + * @return Connection + * @throws PDOException + */ public function connect(): Connection; + + /** + * @param string $query + * @return PDOStatement + * @throws PDOException + */ public function query(string $query): PDOStatement; + + /** + * @param string $query + * @return PDOStatement + * @throws PDOException + */ 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; + + /** + * @return PDO + * @throws PDOException + */ public function getPDO(): PDO; public function getQueryBuilder(): Query\Builder; } diff --git a/app/common/Define/Money/Provider.php b/app/common/Define/Money/Provider.php index f91e079..7680407 100644 --- a/app/common/Define/Money/Provider.php +++ b/app/common/Define/Money/Provider.php @@ -2,8 +2,15 @@ namespace Incoviba\Common\Define\Money; use DateTimeInterface; +use Incoviba\Common\Implement\Exception\EmptyResponse; interface Provider { + /** + * @param string $money_symbol + * @param DateTimeInterface $dateTime + * @return float + * @throws EmptyResponse + */ public function get(string $money_symbol, DateTimeInterface $dateTime): float; } diff --git a/app/common/Define/Repository.php b/app/common/Define/Repository.php index e62d24b..8520f88 100644 --- a/app/common/Define/Repository.php +++ b/app/common/Define/Repository.php @@ -1,11 +1,42 @@ setDefault($model, $property); } + + /** + * @param Define\Model $model + * @param string $property + * @return 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(); $value = match ($type) { 'int' => 0, @@ -128,6 +141,13 @@ abstract class Repository implements Define\Repository }; $model->{$property} = $value; } + + /** + * @param array $columns + * @param array $values + * @return int + * @throws PDOException + */ protected function saveNew(array $columns, array $values): int { $query = $this->connection->getQueryBuilder() @@ -138,6 +158,14 @@ abstract class Repository implements Define\Repository $this->connection->execute($query, $values); 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 { $changes = []; @@ -158,30 +186,59 @@ abstract class Repository implements Define\Repository ->set($columns_string) ->where("{$this->getKey()} = ?"); $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)); } + + /** + * @param string $query + * @param array|null $data + * @return Define\Model + * @throws EmptyResult + */ protected function fetchOne(string $query, ?array $data = null): Define\Model { - $result = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC); - if ($result === false) { - throw new EmptyResult($query); + try { + $result = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC); + } catch (PDOException $exception) { + throw new EmptyResult($query, $exception); + } return $this->load($result); } + + /** + * @param string $query + * @param array|null $data + * @return array + * @throws EmptyResult + */ protected function fetchMany(string $query, ?array $data = null): array { - $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); - if ($results === false) { - throw new EmptyResult($query); + try { + $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); + } catch (PDOException $exception) { + throw new EmptyResult($query, $exception); } 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 { - $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); - if ($results === false) { - throw new EmptyResult($query); + try { + $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); + } catch (PDOException $exception) { + throw new EmptyResult($query, $exception); } return $results; } diff --git a/app/common/Implement/Connection.php b/app/common/Implement/Connection.php index 761151a..36c1512 100644 --- a/app/common/Implement/Connection.php +++ b/app/common/Implement/Connection.php @@ -22,6 +22,7 @@ class Connection implements Define\Connection } return $this; } + public function getPDO(): PDO { $this->connect(); diff --git a/app/resources/views/ventas/facturacion/show/unidad.blade.php b/app/resources/views/ventas/facturacion/show/unidad.blade.php index e2aa9b6..76c0d60 100644 --- a/app/resources/views/ventas/facturacion/show/unidad.blade.php +++ b/app/resources/views/ventas/facturacion/show/unidad.blade.php @@ -29,6 +29,7 @@ } return response.json().then(json => { if (!json.edited) { + alert('No se pudo editar la unidad.') return } this.props.valor = parseFloat(json.input.valor) @@ -68,8 +69,7 @@ return } this.update().precio(newValue).then(() => { - facturas.venta.update().totalUnidades() - facturas.draw().facturas() + window.location.reload() }) }) }, diff --git a/app/resources/views/ventas/show/escritura.blade.php b/app/resources/views/ventas/show/escritura.blade.php index 7e2aade..b627919 100644 --- a/app/resources/views/ventas/show/escritura.blade.php +++ b/app/resources/views/ventas/show/escritura.blade.php @@ -18,8 +18,8 @@ Firmar
- - Factura + + Factura @else diff --git a/app/src/Model/Venta/PropiedadUnidad.php b/app/src/Model/Venta/PropiedadUnidad.php index 9545477..edb1270 100644 --- a/app/src/Model/Venta/PropiedadUnidad.php +++ b/app/src/Model/Venta/PropiedadUnidad.php @@ -5,7 +5,7 @@ class PropiedadUnidad extends Unidad { public int $pu_id; public int $propiedad_id; - public float $valor; + public ?float $valor; public function jsonSerialize(): mixed { diff --git a/app/src/Repository/Contabilidad/Cartola.php b/app/src/Repository/Contabilidad/Cartola.php index f2b20fc..e4ebb78 100644 --- a/app/src/Repository/Contabilidad/Cartola.php +++ b/app/src/Repository/Contabilidad/Cartola.php @@ -65,6 +65,13 @@ class Cartola extends Ideal\Repository ->where('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 { $query = $this->connection->getQueryBuilder() @@ -73,6 +80,13 @@ class Cartola extends Ideal\Repository ->where('cuenta_id = ? AND fecha = ?'); 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Contabilidad/Movimiento.php b/app/src/Repository/Contabilidad/Movimiento.php index 84313a6..c2260a8 100644 --- a/app/src/Repository/Contabilidad/Movimiento.php +++ b/app/src/Repository/Contabilidad/Movimiento.php @@ -62,6 +62,13 @@ class Movimiento extends Ideal\Repository ->where('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 { $query = $this->connection->getQueryBuilder() @@ -70,6 +77,17 @@ class Movimiento extends Ideal\Repository ->where('cuenta_id = ? AND fecha = ?'); 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 { $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')]); } + + /** + * @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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Contabilidad/Movimiento/Detalle.php b/app/src/Repository/Contabilidad/Movimiento/Detalle.php index 178db21..b70a059 100644 --- a/app/src/Repository/Contabilidad/Movimiento/Detalle.php +++ b/app/src/Repository/Contabilidad/Movimiento/Detalle.php @@ -60,6 +60,11 @@ class Detalle extends Ideal\Repository 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Direccion.php b/app/src/Repository/Direccion.php index 0d55e98..8838dd7 100644 --- a/app/src/Repository/Direccion.php +++ b/app/src/Repository/Direccion.php @@ -30,16 +30,38 @@ class Direccion extends Ideal\Repository ); 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 { 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 { $query = "SELECT * FROM `{$this->getTable()}` WHERE `calle` = ? AND `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 { $query = "SELECT * FROM `{$this->getTable()}` WHERE `calle` = ? AND `numero` = ? AND `extra` = ? AND `comuna` = ?"; diff --git a/app/src/Repository/Inmobiliaria/Proveedor.php b/app/src/Repository/Inmobiliaria/Proveedor.php index f337a9c..d90197b 100644 --- a/app/src/Repository/Inmobiliaria/Proveedor.php +++ b/app/src/Repository/Inmobiliaria/Proveedor.php @@ -35,11 +35,23 @@ class Proveedor extends Ideal\Repository ]); 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 { 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Login.php b/app/src/Repository/Login.php index fa709ad..b5e2e21 100644 --- a/app/src/Repository/Login.php +++ b/app/src/Repository/Login.php @@ -50,6 +50,12 @@ class Login extends Ideal\Repository ->where('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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Persona.php b/app/src/Repository/Persona.php index 52ba83c..c49ec27 100644 --- a/app/src/Repository/Persona.php +++ b/app/src/Repository/Persona.php @@ -28,6 +28,13 @@ class Persona extends Ideal\Repository [$model->rut, $model->digito, $model->nombres, $model->apellidoPaterno, $model->apellidoMaterno]); 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 { return $this->update($model, ['digito', 'nombres', 'apellido_paterno', 'apellido_materno'], $new_data); diff --git a/app/src/Repository/Persona/Datos.php b/app/src/Repository/Persona/Datos.php index 1f9338d..c227c06 100644 --- a/app/src/Repository/Persona/Datos.php +++ b/app/src/Repository/Persona/Datos.php @@ -72,6 +72,11 @@ class Datos extends Ideal\Repository ], $new_data); } + /** + * @param int $persona_rut + * @return Model\Persona\Datos + * @throws Implement\Exception\EmptyResult + */ public function fetchByPersona(int $persona_rut): Model\Persona\Datos { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/User.php b/app/src/Repository/User.php index 4211bc6..799e2f0 100644 --- a/app/src/Repository/User.php +++ b/app/src/Repository/User.php @@ -27,11 +27,22 @@ class User extends Ideal\Repository 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 { 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 { $query = "SELECT * FROM `{$this->getTable()}` WHERE `name` = ?"; diff --git a/app/src/Repository/Venta.php b/app/src/Repository/Venta.php index b279cbd..7aeac55 100644 --- a/app/src/Repository/Venta.php +++ b/app/src/Repository/Venta.php @@ -2,6 +2,7 @@ namespace Incoviba\Repository; use PDO; +use PDOException; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal; use Incoviba\Common\Define; @@ -128,6 +129,12 @@ class Venta extends Ideal\Repository } 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 { $model->id = $this->saveNew( @@ -142,6 +149,13 @@ class Venta extends Ideal\Repository ); 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 { 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); } + /** + * @param int $proyecto_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByProyecto(int $proyecto_id): array { $query = $this->connection->getQueryBuilder() @@ -163,6 +182,12 @@ class Venta extends Ideal\Repository ->group('a.id'); return $this->fetchMany($query, [$proyecto_id]); } + + /** + * @param int $proyecto_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdsByProyecto(int $proyecto_id): array { $query = $this->connection->getQueryBuilder() @@ -177,6 +202,12 @@ class Venta extends Ideal\Repository ->group('a.id'); return $this->fetchIds($query, [$proyecto_id]); } + + /** + * @param int $proyecto_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchActivaByProyecto(int $proyecto_id): array { $query = $this->connection->getQueryBuilder() @@ -191,6 +222,13 @@ class Venta extends Ideal\Repository ->group('a.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 { $query = $this->connection->getQueryBuilder() @@ -205,6 +243,12 @@ class Venta extends Ideal\Repository ->where('`proyecto`.`descripcion` = ? AND `unidad`.`descripcion` = ? AND tev.`activa`'); 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 { $query = $this->connection->getQueryBuilder() @@ -213,6 +257,12 @@ class Venta extends Ideal\Repository ->where('pie = ?'); return $this->fetchOne($query, [$pie_id]); } + + /** + * @param int $pie_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdByPie(int $pie_id): array { $query = $this->connection->getQueryBuilder() @@ -221,6 +271,13 @@ class Venta extends Ideal\Repository ->where('pie = ?'); 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 { $query = $this->connection->getQueryBuilder() @@ -233,6 +290,12 @@ class Venta extends Ideal\Repository ->where('`unidad`.`descripcion` LIKE ? AND tu.`descripcion` = ?'); 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 { $query = $this->connection->getQueryBuilder() @@ -242,6 +305,13 @@ class Venta extends Ideal\Repository ->where('pu.unidad = ?'); 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 { $query = $this->connection->getQueryBuilder() @@ -254,6 +324,12 @@ class Venta extends Ideal\Repository ->where('`unidad`.`descripcion` LIKE ? AND tu.`descripcion` = ?'); return $this->fetchIds($query, [$unidad, $tipo]); } + + /** + * @param string $precio + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByPrecio(string $precio): array { $query = $this->connection->getQueryBuilder() @@ -262,6 +338,12 @@ class Venta extends Ideal\Repository ->where('valor_uf = ?'); return $this->fetchMany($query, [$precio]); } + + /** + * @param string $precio + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdsByPrecio(string $precio): array { $query = $this->connection->getQueryBuilder() @@ -270,6 +352,13 @@ class Venta extends Ideal\Repository ->where('valor_uf = ?'); 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 { $query = $this->connection->getQueryBuilder() @@ -278,6 +367,12 @@ class Venta extends Ideal\Repository ->where('propietario = ? AND propiedad = ?'); return $this->fetchOne($query, [$propietario_rut, $propiedad_id]); } + + /** + * @param string $propietario + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByPropietario(string $propietario): array { $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"); return $this->fetchMany($query, [':propietario' => "%{$propietario}%"]); } + + /** + * @param string $propietario + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdsByPropietario(string $propietario): array { $query = $this->connection->getQueryBuilder() @@ -302,6 +403,12 @@ class Venta extends Ideal\Repository OR CONCAT_WS('-', rut, dv) = :rut"); return $this->fetchIds($query, [':propietario' => "%{$propietario}%", ':rut' => $propietario]); } + + /** + * @param string $propietario + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByPropietarioNombreCompleto(string $propietario): array { $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 ?"); return $this->fetchMany($query, [$propietario]); } + + /** + * @param int $proyecto_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchEscriturasByProyecto(int $proyecto_id): array { $query = $this->connection->getQueryBuilder() @@ -325,6 +438,12 @@ class Venta extends Ideal\Repository ->group('a.id'); return $this->fetchMany($query, [$proyecto_id]); } + + /** + * @param int $escritura_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdByEscritura(int $escritura_id): array { $query = $this->connection->getQueryBuilder() @@ -333,6 +452,12 @@ class Venta extends Ideal\Repository ->where('escritura = ?'); return $this->fetchId($query, [$escritura_id]); } + + /** + * @param int $subsidio_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdBySubsidio(int $subsidio_id): array { $query = $this->connection->getQueryBuilder() @@ -341,6 +466,12 @@ class Venta extends Ideal\Repository ->where('subsidio = ?'); return $this->fetchId($query, [$subsidio_id]); } + + /** + * @param int $credito_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdByCredito(int $credito_id): array { $query = $this->connection->getQueryBuilder() @@ -349,6 +480,12 @@ class Venta extends Ideal\Repository ->where('credito = ?'); return $this->fetchId($query, [$credito_id]); } + + /** + * @param int $bono_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchIdByBono(int $bono_id): array { $query = $this->connection->getQueryBuilder() @@ -357,6 +494,11 @@ class Venta extends Ideal\Repository ->where('bono_pie = ?'); return $this->fetchId($query, [$bono_id]); } + + /** + * @param int $venta_id + * @return array + */ public function fetchByIdForSearch(int $venta_id): array { $query = $this->connection->getQueryBuilder() @@ -382,6 +524,11 @@ class Venta extends Ideal\Repository ->limit(1); return $this->connection->execute($query, [$venta_id])->fetch(PDO::FETCH_ASSOC); } + + /** + * @param int $venta_id + * @return array + */ public function fetchByIdForList(int $venta_id): array { $query = $this->connection->getQueryBuilder() @@ -404,20 +551,33 @@ class Venta extends Ideal\Repository 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 { - $results = $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); - if ($results === false) { - throw new Implement\Exception\EmptyResult($query); + try { + return $this->connection->execute($query, $data)->fetchAll(PDO::FETCH_ASSOC); + } 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 { - $results = $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC); - if ($results === false) { - throw new Implement\Exception\EmptyResult($query); + try { + return $this->connection->execute($query, $data)->fetch(PDO::FETCH_ASSOC); + } catch (PDOException $exception) { + throw new Implement\Exception\EmptyResult($query, $exception); } - return $results; } } diff --git a/app/src/Repository/Venta/BonoPie.php b/app/src/Repository/Venta/BonoPie.php index 672ff5b..dd575d1 100644 --- a/app/src/Repository/Venta/BonoPie.php +++ b/app/src/Repository/Venta/BonoPie.php @@ -31,11 +31,23 @@ class BonoPie extends Ideal\Repository ); 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 { return $this->update($model, ['valor', 'pago'], $new_data); } + /** + * @param float $value + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByValue(float $value): array { $query = $this->connection->getQueryBuilder() @@ -44,6 +56,12 @@ class BonoPie extends Ideal\Repository ->where('valor = ?'); 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 { $query = $this->connection->getQueryBuilder() @@ -52,6 +70,12 @@ class BonoPie extends Ideal\Repository ->where('pago = ?'); 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/Credito.php b/app/src/Repository/Venta/Credito.php index 6abe902..8100342 100644 --- a/app/src/Repository/Venta/Credito.php +++ b/app/src/Repository/Venta/Credito.php @@ -37,6 +37,11 @@ class Credito extends Ideal\Repository 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/Cuota.php b/app/src/Repository/Venta/Cuota.php index e54baf5..adbed9a 100644 --- a/app/src/Repository/Venta/Cuota.php +++ b/app/src/Repository/Venta/Cuota.php @@ -198,6 +198,12 @@ GROUP BY p1.`fecha`, v1.`descripcion` ORDER BY p1.`fecha`, v1.`descripcion`"; return $this->fetchAsArray($query);*/ } + + /** + * @param int $pie_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByPie(int $pie_id): array { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/Escritura.php b/app/src/Repository/Venta/Escritura.php index 0b81440..7da49f1 100644 --- a/app/src/Repository/Venta/Escritura.php +++ b/app/src/Repository/Venta/Escritura.php @@ -39,6 +39,11 @@ class Escritura extends Ideal\Repository 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 { $query = $this->connection->getQueryBuilder() @@ -55,6 +60,12 @@ class Escritura extends Ideal\Repository ->where('pago = ?'); 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/Pago.php b/app/src/Repository/Venta/Pago.php index cd9991b..c28bb0d 100644 --- a/app/src/Repository/Venta/Pago.php +++ b/app/src/Repository/Venta/Pago.php @@ -100,6 +100,12 @@ FROM ( WHERE venta_id = ?"; return $this->fetchMany($query, [$venta_id]); } + + /** + * @param int $value + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByValue(int $value): array { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/Pie.php b/app/src/Repository/Venta/Pie.php index b6b61f0..ffe8244 100644 --- a/app/src/Repository/Venta/Pie.php +++ b/app/src/Repository/Venta/Pie.php @@ -48,6 +48,11 @@ class Pie extends Ideal\Repository 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 { $query = $this->connection->getQueryBuilder() @@ -56,6 +61,12 @@ class Pie extends Ideal\Repository ->where('asociado = ?'); return $this->fetchMany($query, [$pie_id]); } + + /** + * @param float $value + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByValue(float $value): array { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/Precio.php b/app/src/Repository/Venta/Precio.php index f569afe..68c7250 100644 --- a/app/src/Repository/Venta/Precio.php +++ b/app/src/Repository/Venta/Precio.php @@ -32,11 +32,23 @@ class Precio extends Ideal\Repository ); 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 { 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 { $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')"; return $this->fetchMany($query, [$proyecto_id]); } + + /** + * @param int $unidad_id + * @return array + * @throws Implement\Exception\EmptyResult + */ public function fetchByUnidad(int $unidad_id): array { $query = "SELECT a.* @@ -59,6 +77,12 @@ FROM `{$this->getTable()}` a WHERE `unidad` = ?"; 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 { $query = "SELECT a.* @@ -68,6 +92,13 @@ FROM `{$this->getTable()}` a WHERE `unidad` = ? AND tep.`descripcion` = 'vigente'"; 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 { $query = "SELECT a.* diff --git a/app/src/Repository/Venta/Propiedad.php b/app/src/Repository/Venta/Propiedad.php index 4663c56..d28dd96 100644 --- a/app/src/Repository/Venta/Propiedad.php +++ b/app/src/Repository/Venta/Propiedad.php @@ -48,11 +48,23 @@ class Propiedad extends Ideal\Repository ); 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 { 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 { $query = "SELECT * FROM `{$this->getTable()}` WHERE `unidad_principal` = ?"; diff --git a/app/src/Repository/Venta/Subsidio.php b/app/src/Repository/Venta/Subsidio.php index 7ae4563..d0356fe 100644 --- a/app/src/Repository/Venta/Subsidio.php +++ b/app/src/Repository/Venta/Subsidio.php @@ -49,6 +49,12 @@ class Subsidio extends Ideal\Repository ->where('subsidio = ? OR pago = ?'); 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Repository/Venta/TipoEstadoVenta.php b/app/src/Repository/Venta/TipoEstadoVenta.php index 5043963..eb847c4 100644 --- a/app/src/Repository/Venta/TipoEstadoVenta.php +++ b/app/src/Repository/Venta/TipoEstadoVenta.php @@ -33,6 +33,11 @@ class TipoEstadoVenta extends Ideal\Repository 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 { $query = "SELECT * FROM `{$this->getTable()}` WHERE `descripcion` = ?"; diff --git a/app/src/Repository/Venta/Unidad.php b/app/src/Repository/Venta/Unidad.php index 19a013c..d29bc3e 100644 --- a/app/src/Repository/Venta/Unidad.php +++ b/app/src/Repository/Venta/Unidad.php @@ -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)"); 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 { $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 `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)"); - 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 { diff --git a/app/src/Repository/Venta/Unidad/Prorrateo.php b/app/src/Repository/Venta/Unidad/Prorrateo.php index ec4372a..3c96c28 100644 --- a/app/src/Repository/Venta/Unidad/Prorrateo.php +++ b/app/src/Repository/Venta/Unidad/Prorrateo.php @@ -39,6 +39,11 @@ class Prorrateo extends Ideal\Repository 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 { $query = $this->connection->getQueryBuilder() diff --git a/app/src/Service/Contabilidad/Cartola.php b/app/src/Service/Contabilidad/Cartola.php index 5d6d36b..bfc5120 100644 --- a/app/src/Service/Contabilidad/Cartola.php +++ b/app/src/Service/Contabilidad/Cartola.php @@ -1,6 +1,7 @@ id; $movimiento = $this->movimientoRepository->create($data); try { return $this->movimientoRepository->save($movimiento); - } catch (\PDOException $exception) { + } catch (PDOException $exception) { $this->logger->critical(var_export($data,true)); throw $exception; } diff --git a/app/src/Service/Contabilidad/Cartola/isExcel.php b/app/src/Service/Contabilidad/Cartola/isExcel.php index 684ac1e..7846b03 100644 --- a/app/src/Service/Contabilidad/Cartola/isExcel.php +++ b/app/src/Service/Contabilidad/Cartola/isExcel.php @@ -9,7 +9,7 @@ trait isExcel * @throws PhpSpreadsheet\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) { $firstTitle = strtolower($firstTitle); @@ -100,11 +100,6 @@ trait isExcel if ($columnOffset > 1) { $cellIterator->seek($columnOffset); } - foreach ($exitValues as $exitValue) { - if ($cellIterator->current()->getCalculatedValue() === $exitValue) { - return true; - } - } - return false; + return in_array($cellIterator->current()->getCalculatedValue(), $exitValues, true); } } diff --git a/app/src/Service/Contabilidad/Cartola/withSubBancos.php b/app/src/Service/Contabilidad/Cartola/withSubBancos.php index c49c3f9..fab5cf4 100644 --- a/app/src/Service/Contabilidad/Cartola/withSubBancos.php +++ b/app/src/Service/Contabilidad/Cartola/withSubBancos.php @@ -1,8 +1,9 @@ anterior; } - public function build(DateTimeInterface $fecha): array - {} + /*public function build(DateTimeInterface $fecha): array + {}*/ } diff --git a/app/src/Service/Contabilidad/Informe/Tesoreria/Input/Data/SaldosContables.php b/app/src/Service/Contabilidad/Informe/Tesoreria/Input/Data/SaldosContables.php index 12f1b61..31033ce 100644 --- a/app/src/Service/Contabilidad/Informe/Tesoreria/Input/Data/SaldosContables.php +++ b/app/src/Service/Contabilidad/Informe/Tesoreria/Input/Data/SaldosContables.php @@ -65,7 +65,7 @@ class SaldosContables extends Ideal\Service 'saldo' => $this->getSaldo($dataMovimiento) ]; 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) { $movimiento = $this->movimientoRepository->create($data); $movimiento = $this->movimientoRepository->save($movimiento); diff --git a/app/src/Service/Contabilidad/Informe/Tesoreria/Output.php b/app/src/Service/Contabilidad/Informe/Tesoreria/Output.php index c3568fb..00635bf 100644 --- a/app/src/Service/Contabilidad/Informe/Tesoreria/Output.php +++ b/app/src/Service/Contabilidad/Informe/Tesoreria/Output.php @@ -5,6 +5,7 @@ use DateInterval; use DateTimeInterface; use Incoviba\Common\Ideal; use Incoviba\Common\Implement; +use Incoviba\Exception\ServiceAction\Read; use Incoviba\Model; use Incoviba\Repository; use Incoviba\Service; @@ -94,7 +95,7 @@ class Output extends Ideal\Service $dataInmobiliaria->sociedad = $inmobiliaria; try { $cuentas = $this->cuentaService->getAllActiveByInmobiliaria($inmobiliaria->rut); - } catch (Implement\Exception\EmptyResult) { + } catch (Read) { return $dataInmobiliaria; } foreach ($cuentas as $cuenta) { diff --git a/app/src/Service/Contabilidad/Informe/Tesoreria/Output/Data/Movimientos.php b/app/src/Service/Contabilidad/Informe/Tesoreria/Output/Data/Movimientos.php index 00131e3..7b39be2 100644 --- a/app/src/Service/Contabilidad/Informe/Tesoreria/Output/Data/Movimientos.php +++ b/app/src/Service/Contabilidad/Informe/Tesoreria/Output/Data/Movimientos.php @@ -17,7 +17,7 @@ class Movimientos const INGRESOS = 'ingresos'; const EGRESOS = 'egresos'; - public function addDap(string $tipo, array $movimientos) + public function addDap(string $tipo, array $movimientos): self { foreach ($movimientos as $movimiento) { $this->dap->{$tipo} []= $movimiento; @@ -66,11 +66,7 @@ class Movimientos $date = $movimiento->fecha; } if ($movimiento->fecha !== $date) { - if ($movimiento->cuenta->inmobiliaria->rut === $sociedad_rut) { - $temp []= $movimiento; - } $date = $movimiento->fecha; - continue; } if ($movimiento->cuenta->inmobiliaria->rut === $sociedad_rut) { $temp []= $movimiento; diff --git a/app/src/Service/Inmobiliaria/Cuenta.php b/app/src/Service/Inmobiliaria/Cuenta.php index e40e602..aa6c6f3 100644 --- a/app/src/Service/Inmobiliaria/Cuenta.php +++ b/app/src/Service/Inmobiliaria/Cuenta.php @@ -2,6 +2,7 @@ namespace Incoviba\Service\Inmobiliaria; use DateTimeImmutable; +use Incoviba\Exception\ServiceAction\Read; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal\Service; use Incoviba\Common\Implement; @@ -16,19 +17,37 @@ class Cuenta extends Service parent::__construct($logger); } + /** + * @return array + * @throws Read + */ public function getAllActive(): array { - $cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchAll()); - return array_values(array_filter($cuentas, function(Model\Inmobiliaria\Cuenta $cuenta) { - return $cuenta->currentEstado()->active; - })); + try { + $cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchAll()); + 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 { - $cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchByInmobiliaria($inmobiliaria_rut)); - return array_values(array_filter($cuentas, function(Model\Inmobiliaria\Cuenta $cuenta) { - return $cuenta->currentEstado()->active; - })); + try { + $cuentas = array_map([$this, 'process'], $this->cuentaRepository->fetchByInmobiliaria($inmobiliaria_rut)); + 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 { diff --git a/app/src/Service/Inmobiliaria/Proveedor.php b/app/src/Service/Inmobiliaria/Proveedor.php index e7dedad..fdba293 100644 --- a/app/src/Service/Inmobiliaria/Proveedor.php +++ b/app/src/Service/Inmobiliaria/Proveedor.php @@ -1,6 +1,7 @@ proveedorRepository->filterData($data); return $this->process($this->proveedorRepository->edit($proveedor, $filteredData)); - } catch (Implement\Exception\EmptyResult) { + } catch (Read | Implement\Exception\EmptyResult) { return $proveedor; } } @@ -82,7 +83,7 @@ class Proveedor extends Ideal\Service try { $this->proveedorRepository->remove($proveedor); return true; - } catch (Implement\Exception\EmptyResult | PDOException) { + } catch (PDOException) { return false; } } diff --git a/app/src/Service/Login.php b/app/src/Service/Login.php index 1fe92c2..c4d98fe 100644 --- a/app/src/Service/Login.php +++ b/app/src/Service/Login.php @@ -192,7 +192,7 @@ class Login protected function cryptoJs_aes_decrypt($data, $key): string { $data = base64_decode($data); - if (substr($data, 0, 8) != "Salted__") { + if (!str_starts_with($data, "Salted__")) { return false; } $salt = substr($data, 8, 8); diff --git a/app/src/Service/Persona.php b/app/src/Service/Persona.php index 39733a6..c2647e4 100644 --- a/app/src/Service/Persona.php +++ b/app/src/Service/Persona.php @@ -3,6 +3,7 @@ namespace Incoviba\Service; use Incoviba\Common\Ideal; use Incoviba\Common\Implement; +use Incoviba\Exception\ServiceAction\Read; use Incoviba\Model; use Incoviba\Repository; use Psr\Log\LoggerInterface; @@ -17,9 +18,18 @@ class Persona extends Ideal\Service parent::__construct($logger); } + /** + * @param int $rut + * @return Model\Persona + * @throws Read + */ 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 { diff --git a/app/src/Service/Proyecto/Terreno.php b/app/src/Service/Proyecto/Terreno.php index f01f7fe..1cef273 100644 --- a/app/src/Service/Proyecto/Terreno.php +++ b/app/src/Service/Proyecto/Terreno.php @@ -36,7 +36,7 @@ class Terreno extends Ideal\Service return $proyecto->terreno; } try { - // Valor 1o Enero + // Valor 1o enero return $this->getValorContable($proyecto, $lastNovember->add(new DateInterval('P1M'))->add(new DateInterval('P1D'))); } catch (Implement\Exception\EmptyResponse) {} if ($proyecto->terreno->fecha === null) { diff --git a/app/src/Service/Redis.php b/app/src/Service/Redis.php index 6b14761..e399bf3 100644 --- a/app/src/Service/Redis.php +++ b/app/src/Service/Redis.php @@ -9,7 +9,12 @@ class Redis { 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 { if (!$this->client->exists($name)) { diff --git a/app/src/Service/Search.php b/app/src/Service/Search.php index 43966dd..d687cef 100644 --- a/app/src/Service/Search.php +++ b/app/src/Service/Search.php @@ -102,7 +102,7 @@ class Search { try { return $this->unidadRepository->fetchDisponiblesIdsByDescripcionAndTipo($query, $tipo); - } catch (EmptyResponse) { + } catch (EmptyResult) { return []; } } diff --git a/app/src/Service/Sociedad.php b/app/src/Service/Sociedad.php index c2844bb..d3cdebc 100644 --- a/app/src/Service/Sociedad.php +++ b/app/src/Service/Sociedad.php @@ -1,6 +1,7 @@ process($this->sociedadRepository->save($this->sociedadRepository->create($data))); - } catch (EmptyResult) { + } catch (PDOException) { return null; } } diff --git a/app/src/Service/Venta.php b/app/src/Service/Venta.php index 70a761d..4d9eeea 100644 --- a/app/src/Service/Venta.php +++ b/app/src/Service/Venta.php @@ -4,6 +4,7 @@ namespace Incoviba\Service; use Exception; use DateTimeImmutable; use DateInterval; +use DateMalformedStringException; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal\Service; use Incoviba\Common\Implement; @@ -98,7 +99,7 @@ class Venta extends Service public function getFacturacionById(int $venta_id): array { $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 = [ 'id' => $venta->id, 'fecha' => $venta->fecha->format('Y-m-d'), @@ -289,7 +290,7 @@ class Venta extends Service { try { $fecha = new DateTimeImmutable($data['fecha']); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $fecha = new DateTimeImmutable(); } $estadoData = [ @@ -348,7 +349,7 @@ class Venta extends Service { try { $fecha = new DateTimeImmutable($data['fecha_reajuste']); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $fecha = new DateTimeImmutable(); } $reajusteData = [ @@ -363,7 +364,7 @@ class Venta extends Service { try { $fecha = new DateTimeImmutable($data['fecha_pago']); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $fecha = new DateTimeImmutable(); } $uf = $this->moneyService->getUF($fecha); @@ -389,7 +390,7 @@ class Venta extends Service { try { $fecha = new DateTimeImmutable($data['fecha']); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $fecha = new DateTimeImmutable(); } $uf = $this->moneyService->getUF($fecha); @@ -399,15 +400,15 @@ class Venta extends Service 'subsidio' => $this->valorService->clean($data['valor_subsidio']), 'uf' => $uf ]; - $subsidio = $this->addSubsidio($subsidioData); - $this->ventaRepository->edit($venta, ['subsidio' => $subsidio->id]); + $formaPago = $this->addFormaPago($subsidioData); + $this->ventaRepository->edit($venta, ['subsidio' => $formaPago->subsidio->id]); } protected function editCredito(Model\Venta $venta, array $data): void { try { $fecha = new DateTimeImmutable($data['fecha']); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $fecha = new DateTimeImmutable(); } $uf = $this->moneyService->getUF($fecha); diff --git a/app/src/Service/Venta/BonoPie.php b/app/src/Service/Venta/BonoPie.php index 51dd1e5..c0528f0 100644 --- a/app/src/Service/Venta/BonoPie.php +++ b/app/src/Service/Venta/BonoPie.php @@ -2,6 +2,7 @@ namespace Incoviba\Service\Venta; use Incoviba\Common\Implement\Exception\EmptyResult; +use Incoviba\Exception\ServiceAction\Read; use Incoviba\Repository; use Incoviba\Model; use Psr\Log\LoggerInterface; @@ -27,8 +28,18 @@ class BonoPie } return $bono; } + + /** + * @param int $venta_id + * @return Model\Venta\BonoPie + * @throws Read + */ 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); + } } } diff --git a/app/src/Service/Venta/Cierre.php b/app/src/Service/Venta/Cierre.php index 02c921d..b9652ed 100644 --- a/app/src/Service/Venta/Cierre.php +++ b/app/src/Service/Venta/Cierre.php @@ -17,7 +17,7 @@ class Cierre public function getByProyecto(int $proyecto_id): array { $cierres = $this->cierreRepository->fetchByProyecto($proyecto_id); - foreach ($cierres as &$cierre) { + foreach ($cierres as $cierre) { $cierre->estados = $this->estadoCierreRepository->fetchByCierre($cierre->id); $cierre->current = $this->estadoCierreRepository->fetchCurrentByCierre($cierre->id); $cierre->unidades = $this->unidadRepository->fetchByCierre($cierre->id); @@ -30,7 +30,7 @@ class Cierre $cierre->estados = $this->estadoCierreRepository->fetchByCierre($cierre_id); $cierre->current = $this->estadoCierreRepository->fetchCurrentByCierre($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')); } $cierre->valoresCierre = $this->valorCierreRepository->fetchByCierre($cierre_id); diff --git a/app/src/Service/Venta/Credito.php b/app/src/Service/Venta/Credito.php index b6cb9bf..3d8b5d2 100644 --- a/app/src/Service/Venta/Credito.php +++ b/app/src/Service/Venta/Credito.php @@ -3,6 +3,8 @@ namespace Incoviba\Service\Venta; use Exception; use DateTimeImmutable; +use Incoviba\Common\Implement\Exception\EmptyResult; +use Incoviba\Exception\ServiceAction\Read; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal; use Incoviba\Repository; @@ -24,9 +26,18 @@ class Credito extends Ideal\Service parent::__construct($logger); } + /** + * @param int $venta_id + * @return Model\Venta\Credito + * @throws Read + */ 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); + } } /** diff --git a/app/src/Service/Venta/Cuota.php b/app/src/Service/Venta/Cuota.php index 960a315..cfc9b28 100644 --- a/app/src/Service/Venta/Cuota.php +++ b/app/src/Service/Venta/Cuota.php @@ -3,6 +3,7 @@ namespace Incoviba\Service\Venta; use DateTimeImmutable; use DateInterval; +use Incoviba\Common\Implement\Exception\EmptyResult; use IntlDateFormatter; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal; diff --git a/app/src/Service/Venta/Escritura.php b/app/src/Service/Venta/Escritura.php index 9b6824f..7b12632 100644 --- a/app/src/Service/Venta/Escritura.php +++ b/app/src/Service/Venta/Escritura.php @@ -3,6 +3,7 @@ namespace Incoviba\Service\Venta; use Exception; use DateTimeImmutable; +use DateMalformedStringException; use Psr\Log\LoggerInterface; use Incoviba\Common\Ideal; use Incoviba\Common\Implement\Exception\EmptyResult; @@ -65,7 +66,7 @@ class Escritura extends Ideal\Service } try { $data['fecha'] = (new DateTimeImmutable($data['fecha']))->format('Y-m-d'); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { unset($data['fecha']); } diff --git a/app/src/Service/Venta/FormaPago.php b/app/src/Service/Venta/FormaPago.php index 105fe18..6b8f17a 100644 --- a/app/src/Service/Venta/FormaPago.php +++ b/app/src/Service/Venta/FormaPago.php @@ -1,12 +1,14 @@ pie = $this->pieService->getByVenta($venta_id); - } catch (Implement\Exception\EmptyResult) {} + } catch (Read) {} try { $formaPago->bonoPie = $this->bonoPieService->getByVenta($venta_id); - } catch (Implement\Exception\EmptyResult) {} + } catch (Read) {} try { $formaPago->credito = $this->creditoService->getByVenta($venta_id); - } catch (Implement\Exception\EmptyResult) {} + } catch (Read) {} try { $formaPago->escritura = $this->escrituraRepository->fetchByVenta($venta_id); } catch (Implement\Exception\EmptyResult) {} try { $formaPago->subsidio = $this->subsidioService->getByVenta($venta_id); - } catch (Implement\Exception\EmptyResult) {} + } catch (Read) {} try { $formaPago->devolucion = $this->pagoService->getDevolucionByVenta($venta_id); - } catch (Implement\Exception\EmptyResult) {} + } catch (Read) {} try { $formaPago->cuotasAbono = $this->cuotaRepository->fetchByVenta($venta_id); } catch (Implement\Exception\EmptyResult) {} @@ -66,7 +68,7 @@ class FormaPago extends Ideal\Service $method = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name))); $obj = $this->{$method}($data); $forma_pago->{$name} = $obj; - } catch (\Error $error) { + } catch (Error $error) { $this->logger->critical($error); } } diff --git a/app/src/Service/Venta/Pago.php b/app/src/Service/Venta/Pago.php index 3273f58..f9313dc 100644 --- a/app/src/Service/Venta/Pago.php +++ b/app/src/Service/Venta/Pago.php @@ -4,6 +4,8 @@ namespace Incoviba\Service\Venta; use Exception; use DateTimeInterface; use DateTimeImmutable; +use DateMalformedStringException; +use Incoviba\Exception\ServiceAction\Read; use PDOException; use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Repository; @@ -112,9 +114,19 @@ class Pago { return []; } + + /** + * @param int $venta_id + * @return Model\Venta\Pago + * @throws Read + */ 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 @@ -122,7 +134,7 @@ class Pago if (!isset($data['uf'])) { try { $data['uf'] = $this->ufService->get(new DateTimeImmutable($data['fecha'])); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $data['uf'] = 0; } } @@ -147,14 +159,14 @@ class Pago if (array_key_exists('fecha', $data)) { try { $data['fecha'] = (new DateTimeImmutable($data['fecha']))->format('Y-m-d'); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $data['fecha'] = (new DateTimeImmutable())->format('Y-m-d'); } } if (array_key_exists('uf', $data)) { try { $data['uf'] = $this->ufService->get(new DateTimeImmutable($data['fecha'])); - } catch (\DateMalformedStringException) { + } catch (DateMalformedStringException) { $data['uf'] = 0; } } @@ -171,7 +183,7 @@ class Pago try { $this->pagoRepository->remove($pago); return true; - } catch (EmptyResult|PDOException) { + } catch (PDOException) { return false; } } diff --git a/app/src/Service/Venta/Pie.php b/app/src/Service/Venta/Pie.php index 92e13bc..b48e41a 100644 --- a/app/src/Service/Venta/Pie.php +++ b/app/src/Service/Venta/Pie.php @@ -3,6 +3,7 @@ namespace Incoviba\Service\Venta; use Incoviba\Common\Implement\Exception\EmptyResult; use Incoviba\Common\Implement\Repository\Factory; +use Incoviba\Exception\ServiceAction\Read; use Incoviba\Repository; use Incoviba\Model; @@ -20,7 +21,11 @@ class 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 diff --git a/app/src/Service/Venta/Precio.php b/app/src/Service/Venta/Precio.php index d6ec40a..a8ee641 100644 --- a/app/src/Service/Venta/Precio.php +++ b/app/src/Service/Venta/Precio.php @@ -1,6 +1,8 @@ precioRepository->fetchByProyecto($proyecto_id); - foreach ($precios as &$precio) { - $precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->id); - $precio->current = $this->estadoPrecioRepository->fetchCurrentByPrecio($precio->id); + try { + $precios = $this->precioRepository->fetchByProyecto($proyecto_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; } + + /** + * @param int $unidad_id + * @return Model\Venta\Precio + * @throws Read + */ public function getVigenteByUnidad(int $unidad_id): Model\Venta\Precio { - $precio = $this->precioRepository->fetchVigenteByUnidad($unidad_id); - $precio->estados = $this->estadoPrecioRepository->fetchByPrecio($precio->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) { + try { + $precio = $this->precioRepository->fetchVigenteByUnidad($unidad_id); $precio->estados = $this->estadoPrecioRepository->fetchByPrecio($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; } } diff --git a/app/src/Service/Venta/PropiedadUnidad.php b/app/src/Service/Venta/PropiedadUnidad.php index 2995983..b2c08a5 100644 --- a/app/src/Service/Venta/PropiedadUnidad.php +++ b/app/src/Service/Venta/PropiedadUnidad.php @@ -2,6 +2,7 @@ namespace Incoviba\Service\Venta; use Incoviba\Common\Implement\Exception\EmptyResult; +use Incoviba\Exception\ServiceAction\Read; use Incoviba\Repository; use Incoviba\Service; use Incoviba\Model; @@ -51,10 +52,10 @@ class PropiedadUnidad try { $unidad->precios = $this->precioService->getByUnidad($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; } - } catch (EmptyResult) {} + } catch (Read) {} return $unidad; } } diff --git a/app/src/Service/Venta/Subsidio.php b/app/src/Service/Venta/Subsidio.php index d7cdfb9..c99684b 100644 --- a/app/src/Service/Venta/Subsidio.php +++ b/app/src/Service/Venta/Subsidio.php @@ -1,8 +1,9 @@ subsidioRepository->fetchByVenta($venta_id); + try { + return $this->subsidioRepository->fetchByVenta($venta_id); + } catch (EmptyResult $exception) { + throw new Read(__CLASS__, $exception); + } } /** diff --git a/app/src/Service/Venta/Unidad.php b/app/src/Service/Venta/Unidad.php index 01be029..76593ad 100644 --- a/app/src/Service/Venta/Unidad.php +++ b/app/src/Service/Venta/Unidad.php @@ -1,6 +1,8 @@ precios = $this->precioService->getByUnidad($unidad->id); $unidad->currentPrecio = $this->precioService->getVigenteByUnidad($unidad->id); - } catch (EmptyResult) { - } + } catch (Read) {} return $unidad; } }