2 Commits

Author SHA1 Message Date
2592794a49 Alertas 2024-10-03 21:11:06 -03:00
196c5b947f Modernizacion de repo Cuota 2024-10-03 20:38:35 -03:00
3 changed files with 129 additions and 69 deletions

View File

@ -13,6 +13,13 @@
return "<a href=\"{$urls->base}/venta/{$venta->id}\">{$venta->propiedad()->departamentos()[0]->descripcion}</a>";
}, $asociadas)) !!}
</div>
@if ($venta->formaPago()->pie->asociado !== null)
<div class="row">
<div class="ui tiny basic segment">
* Este pie no es la base para el cálculo de las cuotas
</div>
</div>
@endif
</div>
@endif
<div class="ui grid">
@ -113,13 +120,13 @@
<tr>
<th colspan="5">TOTAL</th>
<th class="right aligned">
{{$format->pesos($total_pesos = array_reduce($venta->formaPago()->pie->cuotas(),
function(float $sum, Incoviba\Model\Venta\Cuota $cuota) {
{{$format->pesos($total_pesos = array_reduce($venta->formaPago()->pie->cuotas(vigentes: true),
function(int $sum, Incoviba\Model\Venta\Cuota $cuota) {
return $sum + $cuota->pago->valor;
}, 0))}}
</th>
<th class="right aligned">
{{$format->ufs($total = array_reduce($venta->formaPago()->pie->cuotas(),
{{$format->ufs($total = array_reduce($venta->formaPago()->pie->cuotas(vigentes: true),
function(float $sum, Incoviba\Model\Venta\Cuota $cuota) use ($now, $uf_venta) {
return $sum + (($cuota->pago->fecha > $now or $cuota->pago->uf === null) ?
$cuota->pago->valor / $uf_venta :
@ -131,13 +138,13 @@
<tr>
<th colspan="5">TOTAL PAGADO</th>
<th class="right aligned">
{{$format->pesos($pagado_pesos = array_reduce($venta->formaPago()->pie->cuotas(true),
{{$format->pesos($pagado_pesos = array_reduce($venta->formaPago()->pie->cuotas(pagadas: true, vigentes: true),
function(int $sum, Incoviba\Model\Venta\Cuota $cuota) {
return $sum + $cuota->pago->valor;
}, 0))}}
</th>
<th class="right aligned">
{{$format->ufs($pagado = array_reduce($venta->formaPago()->pie->cuotas(true),
{{$format->ufs($pagado = array_reduce($venta->formaPago()->pie->cuotas(pagadas: true, vigentes: true),
function(float $sum, Incoviba\Model\Venta\Cuota $cuota) {
return $sum + $cuota->pago->valor();
}, 0.0))}}
@ -156,12 +163,15 @@
{{$format->ufs($total - $pagado)}}
</th>
<th class="right aligned">
{{$format->number(($total > 0) ? ($total - $pagado) / $total * 100 : 0, 2)}}%
{{$format->percent(($total > 0) ? ($total - $pagado) / $total * 100 : 0, 2)}}*
</th>
<th colspan="3"></th>
</tr>
</tfoot>
</table>
<div class="ui tiny basic right aligned segment">
* Porcentaje calculado sobre el valor de la venta
</div>
@endsection
@include('layout.head.styles.datatables')
@ -303,13 +313,26 @@
columnDefs: [
{
target: 1,
orderData: [2]
orderData: [2],
className: 'dt-center'
},
{
target: 2,
visible: false,
searchable: false
},
{
target: 3,
className: 'dt-center'
},
{
targets: [5, 6],
className: 'dt-right'
},
{
target: 7,
className: 'dt-center'
},
{
target: 8,
orderData: [9]

View File

@ -14,7 +14,7 @@
<td class="right aligned">Cuotas</td>
<td>
<a href="{{$urls->base}}/venta/{{$venta->id}}/pie/cuotas">
<span data-tooltip="Pagadas">{{count($pie->cuotas(true))}}</span>/{{$pie->cuotas}}
<span data-tooltip="Pagadas">{{count($pie->cuotas(true, true))}}</span>/{{$pie->cuotas}}
</a>
@if (count($pie->cuotas(vigentes: true)) < $pie->cuotas)
<a href="{{$urls->base}}/ventas/pie/{{$pie->id}}/cuotas/add">

View File

@ -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
{