diff --git a/app/src/Repository/Venta/Cuota.php b/app/src/Repository/Venta/Cuota.php index a64f430..2578dc5 100644 --- a/app/src/Repository/Venta/Cuota.php +++ b/app/src/Repository/Venta/Cuota.php @@ -74,69 +74,96 @@ class Cuota extends Ideal\Repository public function fetchHoy(): array { - $query = "SELECT a.* -FROM `{$this->getTable()}` a - JOIN `pago` ON `pago`.`id` = a.`pago` - JOIN (SELECT e1.* FROM `estado_pago` e1 JOIN (SELECT MAX(`id`) AS `id`, `pago` FROM `estado_pago` GROUP BY `pago`) e0 ON e0.`id` = e1.`id`) ep ON ep.`pago` = `pago`.`id` - JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` - JOIN `venta` ON `venta`.`pie` = a.`pie` - JOIN (SELECT ev1.* FROM `estado_venta` ev1 JOIN (SELECT MAX(`id`) AS 'id', `venta` FROM `estado_venta` GROUP BY `venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id` - JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` -WHERE tep.`descripcion` = 'no pagado' AND `pago`.`fecha` = CURDATE() - AND tev.`descripcion` IN ('vigente', 'escriturando', 'firmado por inmobiliaria')"; - return $this->fetchMany($query); + $query = $this->connection->getQueryBuilder() + ->select('a.*') + ->from("{$this->getTable()} a") + ->joined('JOIN pago ON pago.id = a.pago') + ->joined('JOIN (SELECT e1.* FROM estado_pago e1 JOIN (SELECT MAX(id) AS id, pago FROM estado_pago GROUP BY pago) e0 ON e0.id = e1.id) ep ON ep.pago = pago.id') + ->joined('JOIN tipo_estado_pago tep ON tep.id = ep.estado') + ->joined('JOIN venta ON venta.pie = a.pie') + ->joined('JOIN (SELECT ev1.* FROM estado_venta ev1 JOIN (SELECT MAX(id) AS id, venta FROM estado_venta GROUP BY venta) ev0 ON ev0.id = ev1.id) ev ON ev.venta = venta.id') + ->joined('JOIN tipo_estado_venta tev ON tev.id = ev.estado') + ->where('tep.descripcion = ?') + ->where('pago.fecha = CURDATE()') + ->where('tev.descripcion IN (?, ?, ?)'); + return $this->fetchMany($query, ['no pagado', 'vigente', 'escriturando', 'firmado por inmobiliaria']); } public function fetchPendientes(): array { - $query = "SELECT a.`id` AS 'cuota_id', `venta`.`id` AS 'venta_id', `proyecto`.`descripcion` AS 'Proyecto', `unidad`.`descripcion` AS 'Departamento', - `pago`.`valor` AS 'Valor', `pago`.`fecha`, CONCAT_WS(' - ', a.`numero`, `pie`.`cuotas`) AS 'Numero', `banco`.`nombre` AS 'Banco', - CONCAT_WS(' ', `propietario`.`nombres`, `propietario`.`apellido_paterno`, `propietario`.`apellido_materno`) AS 'Propietario' -FROM `{$this->getTable()}` a - JOIN `pago` ON `pago`.`id` = a.`pago` - JOIN (SELECT e1.* FROM `estado_pago` e1 JOIN (SELECT MAX(`id`) AS 'id', `pago` FROM `estado_pago` GROUP BY `pago`) e0 ON e0.`id` = e1.`id`) ep ON ep.`pago` = `pago`.`id` - JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` - JOIN `pie` ON `pie`.`id` = a.`pie` - JOIN `venta` ON `venta`.`pie` = a.`pie` - JOIN (SELECT ev1.* FROM `estado_venta` ev1 JOIN (SELECT MAX(`id`) AS 'id', `venta` FROM `estado_venta` GROUP BY `venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id` - JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` - JOIN `propietario` ON `propietario`.`rut` = `venta`.`propietario` - JOIN `propiedad_unidad` pu ON pu.`propiedad` = `venta`.`propiedad` - JOIN `unidad` ON `unidad`.`id` = pu.`unidad` AND pu.`principal` = 1 - JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = `unidad`.`pt` - JOIN `proyecto` ON `proyecto`.`id` = ptu.`proyecto` - JOIN `banco` ON `banco`.`id` = `pago`.`banco` -WHERE tep.`descripcion` = 'no pagado' AND `pago`.`fecha` < CURDATE() - AND tev.`descripcion` IN ('vigente', 'escriturando', 'firmado por inmobiliaria') -ORDER BY `pago`.`fecha` DESC"; - return $this->fetchAsArray($query); + $query = $this->connection->getQueryBuilder() + ->select(['a.`id` AS cuota_id', 'venta.id AS venta_id', 'proyecto.descripcion AS Proyecto', 'unidad.descripcion AS Departamento', + 'pago.valor AS Valor', 'pago.fecha', 'CONCAT_WS(" - ", a.numero, pie.cuotas) AS Numero', 'banco.nombre AS Banco', + 'CONCAT_WS(" ", propietario.nombres, propietario.apellido_paterno, propietario.apellido_materno) AS Propietario']) + ->from("{$this->getTable()} a") + ->joined('JOIN pago ON pago.id = a.pago') + ->joined('JOIN (SELECT e1.* FROM estado_pago e1 JOIN (SELECT MAX(id) AS id, pago FROM estado_pago GROUP BY pago) e0 ON e0.id = e1.id) ep ON ep.pago = pago.id') + ->joined('JOIN tipo_estado_pago tep ON tep.id = ep.estado') + ->joined('JOIN pie ON pie.id = a.pie') + ->joined('JOIN venta ON venta.pie = a.pie') + ->joined('JOIN (SELECT ev1.* FROM estado_venta ev1 JOIN (SELECT MAX(id) AS id, venta FROM estado_venta GROUP BY venta) ev0 ON ev0.id = ev1.id) ev ON ev.venta = venta.id') + ->joined('JOIN tipo_estado_venta tev ON tev.id = ev.estado') + ->joined('JOIN propietario ON propietario.rut = venta.propietario') + ->joined('JOIN propiedad_unidad pu ON pu.propiedad = venta.propiedad') + ->joined('JOIN unidad ON unidad.id = pu.unidad AND pu.principal = 1') + ->joined('JOIN proyecto_tipo_unidad ptu ON ptu.id = unidad.pt') + ->joined('JOIN proyecto ON proyecto.id = ptu.proyecto') + ->joined('JOIN banco ON banco.id = pago.banco') + ->where('tep.descripcion = ?') + ->where('pago.fecha < CURDATE()') + ->where('tev.descripcion IN (?, ?, ?)') + ->order('pago.fecha DESC'); + return $this->fetchAsArray($query, ['no pagado', 'vigente', 'escriturando', 'firmado por inmobiliaria']); } public function fetchDepositadas(): array { - $query = "SELECT a.`id` AS 'cuota_id', `venta`.`id` AS 'venta_id', `proyecto`.`descripcion` AS 'Proyecto', `unidad`.`descripcion` AS 'Departamento', - `pago`.`valor` AS 'Valor', `pago`.`fecha`, CONCAT_WS(' - ', a.`numero`, `pie`.`cuotas`) AS 'Numero', `banco`.`nombre` AS 'Banco', ep.`fecha` AS 'Fecha Depositada', - CONCAT_WS(' ', `propietario`.`nombres`, `propietario`.`apellido_paterno`, `propietario`.`apellido_materno`) AS 'Propietario' -FROM `{$this->getTable()}` a - JOIN `pago` ON `pago`.`id` = a.`pago` - JOIN (SELECT e1.* FROM `estado_pago` e1 JOIN (SELECT MAX(`id`) AS 'id', `pago` FROM `estado_pago` GROUP BY `pago`) e0 ON e0.`id` = e1.`id`) ep ON ep.`pago` = `pago`.`id` - JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` - JOIN `pie` ON `pie`.`id` = a.`pie` - JOIN `venta` ON `venta`.`pie` = a.`pie` - JOIN (SELECT ev1.* FROM `estado_venta` ev1 JOIN (SELECT MAX(`id`) AS 'id', `venta` FROM `estado_venta` GROUP BY `venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id` - JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` - JOIN `propietario` ON `propietario`.`rut` = `venta`.`propietario` - JOIN `propiedad_unidad` pu ON pu.`propiedad` = `venta`.`propiedad` - JOIN `unidad` ON `unidad`.`id` = pu.`unidad` AND pu.`principal` = 1 - JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = `unidad`.`pt` - JOIN `proyecto` ON `proyecto`.`id` = ptu.`proyecto` - JOIN `banco` ON `banco`.`id` = `pago`.`banco` -WHERE tep.`descripcion` = 'depositado' AND `pago`.`fecha` < CURDATE() - AND tev.`descripcion` IN ('vigente', 'escriturando', 'firmado por inmobiliaria') -ORDER BY `pago`.`fecha` DESC"; - return $this->fetchAsArray($query); + $query = $this->connection->getQueryBuilder() + ->select(['a.`id` AS cuota_id', 'venta.id AS venta_id', 'proyecto.descripcion AS Proyecto', 'unidad.descripcion AS Departamento', + 'pago.valor AS Valor', 'pago.fecha', 'CONCAT_WS(" - ", a.numero, pie.cuotas) AS Numero', 'banco.nombre AS Banco', 'ep.fecha AS Fecha Depositada', + 'CONCAT_WS(" ", propietario.nombres, propietario.apellido_paterno, propietario.apellido_materno) AS Propietario']) + ->from("{$this->getTable()} a") + ->joined('JOIN pago ON pago.id = a.pago') + ->joined('JOIN (SELECT e1.* FROM estado_pago e1 JOIN (SELECT MAX(id) AS id, pago FROM estado_pago GROUP BY pago) e0 ON e0.id = e1.id) ep ON ep.pago = pago.id') + ->joined('JOIN tipo_estado_pago tep ON tep.id = ep.estado') + ->joined('JOIN pie ON pie.id = a.pie') + ->joined('JOIN venta ON venta.pie = a.pie') + ->joined('JOIN (SELECT ev1.* FROM estado_venta ev1 JOIN (SELECT MAX(id) AS id, venta FROM estado_venta GROUP BY venta) ev0 ON ev0.id = ev1.id) ev ON ev.venta = venta.id') + ->joined('JOIN tipo_estado_venta tev ON tev.id = ev.estado') + ->joined('JOIN propietario ON propietario.rut = venta.propietario') + ->joined('JOIN propiedad_unidad pu ON pu.propiedad = venta.propiedad') + ->joined('JOIN unidad ON unidad.id = pu.unidad AND pu.principal = 1') + ->joined('JOIN proyecto_tipo_unidad ptu ON ptu.id = unidad.pt') + ->joined('JOIN proyecto ON proyecto.id = ptu.proyecto') + ->joined('JOIN banco ON banco.id = pago.banco') + ->where('tep.descripcion = ?') + ->where('pago.fecha < CURDATE()') + ->where('tev.descripcion IN (?, ?, ?)') + ->order('pago.fecha DESC'); + return $this->fetchAsArray($query, ['depositado', 'vigente', 'escriturando', 'firmado por inmobiliaria']); } public function fetchDatosPorVencer(): array { - $query = "SELECT p1.`fecha` AS 'Fecha', v1.`descripcion` AS 'Proyecto', COUNT(a.`id`) AS 'Cantidad' + $query = $this->connection->getQueryBuilder() + ->select(['p1.`fecha` AS Fecha', 'v1.`descripcion` AS Proyecto', 'COUNT(a.`id`) AS Cantidad']) + ->from("{$this->getTable()} a") + ->joined('JOIN ( + SELECT `pago`.`id`, `pago`.`fecha` FROM `pago` + JOIN (SELECT e1.* FROM `estado_pago` e1 + JOIN (SELECT MAX(`id`) AS `id`, `pago` FROM `estado_pago` GROUP BY `pago`) e0 ON e0.`id` = e1.`id`) ep ON ep.`pago` = `pago`.`id` + JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` AND tep.`descripcion` = :tep) p1 ON p1.id = a.`pago`') + ->joined('JOIN ( + SELECT `venta`.`pie`, `venta`.`propiedad`, `proyecto`.`descripcion` FROM `venta` + JOIN (SELECT ev1.* FROM `estado_venta` ev1 + JOIN (SELECT MAX(`id`) AS `id`, `venta` FROM `estado_venta` GROUP BY `venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id` + JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` AND tev.`descripcion` IN (:tev1, :tev2, :tev3) + JOIN `propiedad_unidad` pu ON pu.`propiedad` = `venta`.`propiedad` + JOIN `unidad` ON `unidad`.`id` = pu.`unidad` JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = `unidad`.`pt` + JOIN `proyecto` ON `proyecto`.`id` = ptu.`proyecto`) v1 ON v1.`pie` = a.`pie`') + ->where('p1.`fecha` BETWEEN DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 MONTH)') + ->group('p1.`fecha`, v1.`descripcion`') + ->order('p1.`fecha`, v1.`descripcion`'); + return $this->fetchAsArray($query, ['tep' => 'no pagado', 'tev1' => 'vigente', 'tev2' => 'escriturando', 'tev3' => 'firmado por inmobiliaria']); + + /*$query = "SELECT p1.`fecha` AS 'Fecha', v1.`descripcion` AS 'Proyecto', COUNT(a.`id`) AS 'Cantidad' FROM `{$this->getTable()}` a JOIN ( SELECT `pago`.`id`, `pago`.`fecha` @@ -150,7 +177,7 @@ FROM `{$this->getTable()}` a GROUP BY `pago` ) e0 ON e0.`id` = e1.`id` ) ep ON ep.`pago` = `pago`.`id` - JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` AND tep.`descripcion` = 'no pagado' + JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` AND tep.`descripcion` = :no_pagado ) p1 ON p1.id = a.`pago` JOIN ( SELECT `venta`.`pie`, `venta`.`propiedad`, `proyecto`.`descripcion` @@ -164,7 +191,7 @@ FROM `{$this->getTable()}` a GROUP BY `venta` ) ev0 ON ev0.`id` = ev1.`id` ) ev ON ev.`venta` = `venta`.`id` - JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` AND tev.`descripcion` IN ('vigente', 'escriturando', 'firmado por inmobiliaria') + JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` AND tev.`descripcion` IN (:estados) JOIN `propiedad_unidad` pu ON pu.`propiedad` = `venta`.`propiedad` AND pu.`principal` = 1 JOIN `unidad` ON `unidad`.`id` = pu.`unidad` JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = `unidad`.`pt` @@ -173,27 +200,37 @@ FROM `{$this->getTable()}` a WHERE p1.`fecha` BETWEEN DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE(), INTERVAL 1 MONTH) GROUP BY p1.`fecha`, v1.`descripcion` ORDER BY p1.`fecha`, v1.`descripcion`"; - return $this->fetchAsArray($query); + return $this->fetchAsArray($query);*/ } public function fetchByPie(int $pie_id): array { $query = $this->connection->getQueryBuilder() ->select() ->from($this->getTable()) - ->where('pie = ?') + ->where('pie = :pie_id') ->group('id'); - return $this->fetchMany($query, [$pie_id]); + return $this->fetchMany($query, compact('pie_id')); } public function fetchVigenteByPie(int $pie_id): array { - $query = "SELECT a.* + $query = $this->connection->getQueryBuilder() + ->select('a.*') + ->from("{$this->getTable()} a") + ->joined('JOIN pago ON pago.id = a.pago') + ->joined('JOIN (SELECT e1.* FROM estado_pago e1 JOIN (SELECT MAX(id) AS id, pago FROM estado_pago GROUP BY pago) e0 ON e0.id = e1.id) ep ON ep.pago = pago.id') + ->joined('JOIN tipo_estado_pago tep ON tep.id = ep.estado') + ->where('a.pie = :pie_id') + ->where('tep.active = 1') + ->group('a.id'); + return $this->fetchMany($query, compact('pie_id')); + /*$query = "SELECT a.* FROM `{$this->getTable()}` a JOIN `pago` ON `pago`.`id` = a.`pago` JOIN (SELECT e1.* FROM `estado_pago` e1 JOIN (SELECT MAX(`id`) AS 'id', `pago` FROM `estado_pago` GROUP BY `pago`) e0 ON e0.`id` = e1.`id`) ep ON ep.`pago` = `pago`.`id` JOIN `tipo_estado_pago` tep ON tep.`id` = ep.`estado` WHERE a.`pie` = ? AND tep.`active` = 1 GROUP BY a.`id`"; - return $this->fetchMany($query, [$pie_id]); + return $this->fetchMany($query, [$pie_id]);*/ } public function fetchByPago(int $pago_id): Model\Venta\Cuota {