Tul xxx Tul
User / IP
:
216.73.216.159
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
vendefacil2
/
models
/
Viewing: CajasModel.php
<?php class CajasModel extends Query { private $cacheNumerosCajas = []; private function esAdministradorSesion() { return empty($_SESSION['rol']); } private function getFiltroUsuarioSesion($alias = '') { if ($this->esAdministradorSesion()) { return ''; } $prefijo = $alias !== '' ? $alias . '.' : ''; $idUsuario = isset($_SESSION['id_usuario']) ? (int)$_SESSION['id_usuario'] : 0; return " AND {$prefijo}id_usuario = $idUsuario"; } private function resetNumeracionSucursal($id_sucursal) { $idSucursalKey = (int)$id_sucursal; if (isset($this->cacheNumerosCajas[$idSucursalKey])) { unset($this->cacheNumerosCajas[$idSucursalKey]); } } private function getMapaNumerosCajas($id_sucursal) { $idSucursalKey = (int)$id_sucursal; if (!isset($this->cacheNumerosCajas[$idSucursalKey])) { $sql = "SELECT id FROM cajas WHERE id_sucursal = $idSucursalKey ORDER BY id ASC"; $registros = $this->selectAll($sql); $mapa = []; $contador = 1; foreach ($registros as $registro) { if (isset($registro['id'])) { $mapa[$registro['id']] = $contador++; } } $this->cacheNumerosCajas[$idSucursalKey] = $mapa; } return $this->cacheNumerosCajas[$idSucursalKey]; } private function asignarNumeroCaja(&$registro, $id_sucursal) { if (!is_array($registro) || empty($registro['id'])) { return; } $mapa = $this->getMapaNumerosCajas($id_sucursal); if (isset($mapa[$registro['id']])) { $registro['numero'] = $mapa[$registro['id']]; } } private function asignarNumeroLista(&$registros, $id_sucursal) { if (!is_array($registros)) { return; } $mapa = $this->getMapaNumerosCajas($id_sucursal); foreach ($registros as &$registro) { if (isset($registro['id']) && isset($mapa[$registro['id']])) { $registro['numero'] = $mapa[$registro['id']]; } } unset($registro); } public function __construct() { parent::__construct(); } public function abrirCaja($monto, $fecha_apertura, $id_usuario, $id_sucursal) { $sql = "INSERT INTO cajas (monto_inicial, fecha_apertura, id_usuario, id_sucursal) VALUES (?,?,?,?)"; $array = array($monto, $fecha_apertura, $id_usuario, $id_sucursal); $id = $this->insertar($sql, $array); $this->resetNumeracionSucursal($id_sucursal); return $id; } public function getUsuarioActivoSucursal($idUsuario, $idSucursal) { $idUsuario = (int)$idUsuario; $idSucursal = (int)$idSucursal; $sql = "SELECT u.id, CONCAT(u.nombre, ' ', u.apellido) AS nombre_completo, COALESCE(r.nombre, 'Admin') AS rol FROM usuarios u LEFT JOIN roles r ON u.rol = r.id WHERE u.id = $idUsuario AND u.id_sucursal = $idSucursal AND u.estado = 1"; return $this->select($sql); } public function getUsuariosCaja($id_sucursal) { $idSucursal = (int)$id_sucursal; if (!$this->esAdministradorSesion()) { $idUsuario = isset($_SESSION['id_usuario']) ? (int)$_SESSION['id_usuario'] : 0; $sql = "SELECT u.id, CONCAT(u.nombre, ' ', u.apellido) AS nombre_completo, COALESCE(r.nombre, 'Admin') AS rol FROM usuarios u LEFT JOIN roles r ON u.rol = r.id WHERE u.estado = 1 AND u.id_sucursal = $idSucursal AND u.id = $idUsuario ORDER BY u.nombre ASC, u.apellido ASC"; return $this->selectAll($sql); } $sql = "SELECT u.id, CONCAT(u.nombre, ' ', u.apellido) AS nombre_completo, COALESCE(r.nombre, 'Admin') AS rol FROM usuarios u LEFT JOIN roles r ON u.rol = r.id WHERE u.estado = 1 AND u.id_sucursal = $idSucursal ORDER BY u.nombre ASC, u.apellido ASC"; return $this->selectAll($sql); } public function tieneCajaAbiertaSucursal($idCaja, $id_sucursal) { $idCaja = (int)$idCaja; $idSucursal = (int)$id_sucursal; $sql = "SELECT id FROM cajas WHERE id = $idCaja AND id_sucursal = $idSucursal AND estado = 1"; return $this->select($sql); } public function getCaja($id_sucursal) { $idSucursal = (int)$id_sucursal; $idCajaActiva = isset($_SESSION['id_caja_activa']) ? (int)$_SESSION['id_caja_activa'] : 0; if ($idCajaActiva > 0) { $sql = "SELECT * FROM cajas WHERE estado = 1 AND id_sucursal = $idSucursal AND id = $idCajaActiva" . $this->getFiltroUsuarioSesion() . " ORDER BY id DESC"; $cajaActiva = $this->select($sql); if (!empty($cajaActiva)) { $this->asignarNumeroCaja($cajaActiva, $idSucursal); return $cajaActiva; } } $sql = "SELECT * FROM cajas WHERE estado = 1 AND id_sucursal = $idSucursal" . $this->getFiltroUsuarioSesion() . " ORDER BY id DESC"; $caja = $this->select($sql); if (!empty($caja)) { $this->asignarNumeroCaja($caja, $idSucursal); } return $caja; } public function getCajasAbiertas($id_sucursal) { $idSucursal = (int)$id_sucursal; $sql = "SELECT c.*, u.nombre FROM cajas c INNER JOIN usuarios u ON c.id_usuario = u.id WHERE c.estado = 1 AND c.id_sucursal = $idSucursal" . $this->getFiltroUsuarioSesion('c') . " ORDER BY c.id DESC"; $cajas = $this->selectAll($sql); $this->asignarNumeroLista($cajas, $idSucursal); return $cajas; } public function getCajaAbiertaById($idCaja, $id_sucursal) { $idCaja = (int)$idCaja; $idSucursal = (int)$id_sucursal; $sql = "SELECT * FROM cajas WHERE id = $idCaja AND id_sucursal = $idSucursal AND estado = 1" . $this->getFiltroUsuarioSesion(); $caja = $this->select($sql); if (!empty($caja)) { $this->asignarNumeroCaja($caja, $idSucursal); } return $caja; } public function getCajaId($id) { $id = (int)$id; $sql = "SELECT c.*, u.nombre AS nombre_usuario, u.apellido AS apellido_usuario FROM cajas c INNER JOIN usuarios u ON c.id_usuario = u.id WHERE c.id = $id"; $caja = $this->select($sql); if (!empty($caja)) { $this->asignarNumeroCaja($caja, $caja['id_sucursal']); } return $caja; } public function getCajas($id_sucursal, $fechaInicio = null, $fechaFin = null) { $idSucursal = (int)$id_sucursal; $sql = "SELECT c.*, COALESCE(v.ventas_contado, 0) AS ventas_contado, COALESCE(vc.ventas_credito, 0) AS ventas_credito, COALESCE(a.adelantos_apartados, 0) AS adelantos_apartados, COALESCE(r.abonos_taller, 0) AS abonos_taller, COALESCE(ab.abonos_credito, 0) AS abonos_credito, COALESCE(cp.compras, 0) AS compras, (c.monto_inicial + c.monto_final - COALESCE(cp.compras, 0) - c.egresos - c.gastos) AS monto_final, u.nombre FROM cajas c INNER JOIN usuarios u ON c.id_usuario = u.id LEFT JOIN ( SELECT id_caja, COALESCE(SUM( CASE WHEN total_final IS NOT NULL AND total_final > 0 THEN total_final WHEN totalConImpuesto IS NOT NULL AND totalConImpuesto > 0 THEN totalConImpuesto ELSE total END ), 0) AS ventas_contado FROM ventas WHERE metodo = 'CONTADO' AND estado = 1 GROUP BY id_caja ) v ON v.id_caja = c.id LEFT JOIN ( SELECT id_caja, COALESCE(SUM( CASE WHEN total_final IS NOT NULL AND total_final > 0 THEN total_final WHEN totalConImpuesto IS NOT NULL AND totalConImpuesto > 0 THEN totalConImpuesto ELSE total END ), 0) AS ventas_credito FROM ventas WHERE metodo = 'CREDITO' AND estado = 1 GROUP BY id_caja ) vc ON vc.id_caja = c.id LEFT JOIN ( SELECT id_caja, SUM(monto) AS adelantos_apartados FROM detalle_apartado GROUP BY id_caja ) a ON a.id_caja = c.id LEFT JOIN ( SELECT id_caja, SUM(monto) AS abonos_taller FROM abono_reparacion GROUP BY id_caja ) r ON r.id_caja = c.id LEFT JOIN ( SELECT abonos.id_caja, SUM(abonos.abono) AS abonos_credito FROM abonos GROUP BY abonos.id_caja ) ab ON ab.id_caja = c.id LEFT JOIN ( SELECT c2.id_caja, COALESCE(SUM( CASE WHEN c2.total_pagar IS NOT NULL AND c2.total_pagar > 0 THEN c2.total_pagar ELSE (c2.total + (c2.total * (s.impuesto / 100))) END ), 0) AS compras FROM compras c2 INNER JOIN sucursales s ON s.id = c2.id_sucursal WHERE c2.estado = 1 GROUP BY c2.id_caja ) cp ON cp.id_caja = c.id WHERE c.id_sucursal = $idSucursal AND c.fecha_cierre IS NOT NULL AND c.fecha_cierre != '0000-00-00'" . $this->getFiltroUsuarioSesion('c'); if (!empty($fechaInicio) && !empty($fechaFin)) { $sql .= " AND DATE(c.fecha_cierre) BETWEEN '$fechaInicio' AND '$fechaFin'"; } elseif (!empty($fechaInicio)) { $sql .= " AND DATE(c.fecha_cierre) >= '$fechaInicio'"; } elseif (!empty($fechaFin)) { $sql .= " AND DATE(c.fecha_cierre) <= '$fechaFin'"; } $sql .= " ORDER BY c.id DESC"; $cajas = $this->selectAll($sql); $this->asignarNumeroLista($cajas, $idSucursal); return $cajas; } public function eliminarCaja($id) { return 0; } public function registraGasto($monto, $codigoCuenta, $categoria, $subcategoria, $descripcion, $destino, $id_caja, $id_usuario, $id_sucursal, $subtotal = 0, $aplica_iva = 0, $iva_monto = 0, $retencion_monto = 0) { $sql = "INSERT INTO gastos (monto, codigo_cuenta, categoria, subcategoria, descripcion, foto, id_caja, id_usuario, id_sucursal, subtotal, aplica_iva, iva_monto, retencion_monto) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)"; $array = array($monto, $codigoCuenta, $categoria, $subcategoria, $descripcion, $destino, $id_caja, $id_usuario, $id_sucursal, $subtotal, $aplica_iva, $iva_monto, $retencion_monto); return $this->insertar($sql, $array); } public function getGastos($id_sucursal, $id_caja = null) { $sql = "SELECT * FROM gastos WHERE id_sucursal = $id_sucursal"; if (!empty($id_caja)) { $sql .= " AND id_caja = $id_caja"; } $sql .= " ORDER BY id DESC"; return $this->selectAll($sql); } public function getEmpresa($id_sucursal) { $sql = "SELECT * FROM sucursales WHERE id = $id_sucursal"; return $this->select($sql); } public function getFormapagosActivos() { $sql = "SELECT id, formapago FROM formapagos WHERE estado = 1 ORDER BY id ASC"; return $this->selectAll($sql); } //####### movimientos public function getVentas($id_caja) { $sql = "SELECT COALESCE(SUM( CASE WHEN total_final IS NOT NULL AND total_final > 0 THEN total_final WHEN totalConImpuesto IS NOT NULL AND totalConImpuesto > 0 THEN totalConImpuesto ELSE total END ), 0) AS total FROM ventas WHERE metodo = 'CONTADO' AND estado = 1 AND id_caja = $id_caja"; return $this->select($sql); } public function getVentasCredito($id_caja) { $sql = "SELECT COALESCE(SUM( CASE WHEN v.total_final IS NOT NULL AND v.total_final > 0 THEN v.total_final WHEN v.totalConImpuesto IS NOT NULL AND v.totalConImpuesto > 0 THEN v.totalConImpuesto ELSE v.total END ), 0) AS total FROM ventas v WHERE v.metodo = 'CREDITO' AND v.estado = 1 AND v.id_caja = $id_caja"; return $this->select($sql); } public function getConteoVentasCredito($id_caja) { $sql = "SELECT COUNT(*) AS total FROM ventas WHERE metodo = 'CREDITO' AND estado = 1 AND id_caja = $id_caja"; return $this->select($sql); } public function getApartados($id_caja) { $sql = "SELECT SUM(d.monto) AS total FROM detalle_apartado d INNER JOIN apartados a ON d.id_apartado = a.id WHERE d.id_caja = $id_caja"; return $this->select($sql); } public function getAbonos($id_caja) { $sql = "SELECT COALESCE(SUM(a.abono), 0) AS total FROM abonos a WHERE a.id_caja = $id_caja"; return $this->select($sql); } public function getAbonosTaller($id_caja) { $sql = "SELECT SUM(monto) AS total FROM abono_reparacion WHERE id_caja = $id_caja"; return $this->select($sql); } public function getCompras($id_caja) { $sql = "SELECT COALESCE(SUM( CASE WHEN c.total_pagar IS NOT NULL AND c.total_pagar > 0 THEN c.total_pagar ELSE (c.total + (c.total * (s.impuesto / 100))) END ), 0) AS total FROM compras c INNER JOIN sucursales s ON s.id = c.id_sucursal WHERE c.estado = 1 AND c.id_caja = $id_caja"; return $this->select($sql); } public function getComprasCredito($id_caja) { $sql = "SELECT COALESCE(SUM( CASE WHEN c.total_pagar IS NOT NULL AND c.total_pagar > 0 THEN c.total_pagar ELSE (c.total + (c.total * (s.impuesto / 100))) END ), 0) AS total FROM compras c INNER JOIN sucursales s ON s.id = c.id_sucursal WHERE c.estado = 1 AND c.id_caja = $id_caja AND c.metodo = 'CREDITO'"; return $this->select($sql); } public function getAbonosPorPagar($id_caja) { $sql = "SELECT COALESCE(SUM(app.abono), 0) AS total FROM abonosporpagar app INNER JOIN cajas c ON c.id = $id_caja WHERE app.fecha >= c.fecha_apertura AND ( (c.fecha_cierre IS NULL OR c.fecha_cierre = '0000-00-00') OR app.fecha <= c.fecha_cierre )"; return $this->select($sql); } public function getConteoAbonosPorPagar($id_caja) { $sql = "SELECT COUNT(*) AS total FROM abonosporpagar app INNER JOIN cajas c ON c.id = $id_caja WHERE app.fecha >= c.fecha_apertura AND ( (c.fecha_cierre IS NULL OR c.fecha_cierre = '0000-00-00') OR app.fecha <= c.fecha_cierre )"; return $this->select($sql); } public function getTotalGastos($id_caja) { $sql = "SELECT COALESCE(SUM(monto), 0) AS total FROM gastos WHERE id_caja = $id_caja"; return $this->select($sql); } public function getTotalGastosPorOrigen($id_caja, $origen = null) { $sql = "SELECT COALESCE(SUM(monto), 0) AS total FROM gastos WHERE id_caja = $id_caja"; if ($origen === 'egresos') { $sql .= " AND categoria IS NOT NULL AND categoria != '' AND subcategoria IS NOT NULL AND subcategoria != ''"; } else { $sql .= " AND (categoria IS NULL OR categoria = '' OR subcategoria IS NULL OR subcategoria = '')"; } return $this->select($sql); } public function getTotalVentas($id_caja) { $sql = "SELECT COUNT(*) AS total FROM ventas WHERE id_caja = $id_caja"; return $this->select($sql); } public function getConteoVentas($id_caja) { $sql = "SELECT COUNT(*) AS total FROM ventas WHERE metodo = 'CONTADO' AND estado = 1 AND id_caja = $id_caja"; return $this->select($sql); } public function getVentasContadoPorFormaPago($id_caja) { $sql = "SELECT fp.id, fp.formapago, COALESCE(SUM(det.monto), 0) AS total, COUNT(det.referencia_id) AS cantidad FROM formapagos fp LEFT JOIN ( SELECT CONCAT('p-', e.id) AS referencia_id, e.formapago_id, e.monto FROM efectivo_ventas e INNER JOIN ventas v ON e.venta_id = v.id WHERE v.metodo = 'CONTADO' AND v.estado = 1 AND v.id_caja = $id_caja UNION ALL SELECT CONCAT('v-', v.id) AS referencia_id, v.id_formapago AS formapago_id, CASE WHEN v.total_final IS NOT NULL AND v.total_final > 0 THEN v.total_final WHEN v.totalConImpuesto IS NOT NULL AND v.totalConImpuesto > 0 THEN v.totalConImpuesto ELSE v.total END AS monto FROM ventas v WHERE v.metodo = 'CONTADO' AND v.estado = 1 AND v.id_caja = $id_caja AND v.id_formapago IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM efectivo_ventas e2 WHERE e2.venta_id = v.id ) ) det ON det.formapago_id = fp.id WHERE fp.estado = 1 GROUP BY fp.id, fp.formapago ORDER BY fp.id ASC"; return $this->selectAll($sql); } public function getAbonosRecibidosPorFormaPago($id_caja) { $sql = "SELECT fp.id, fp.formapago, COALESCE(SUM(det.monto), 0) AS total, COUNT(det.referencia_id) AS cantidad FROM formapagos fp LEFT JOIN ( SELECT CONCAT('r-', ar.id) AS referencia_id, ar.id_formapago AS formapago_id, ar.monto FROM abono_reparacion ar WHERE ar.id_caja = $id_caja ) det ON det.formapago_id = fp.id WHERE fp.estado = 1 GROUP BY fp.id, fp.formapago ORDER BY fp.id ASC"; return $this->selectAll($sql); } public function getAbonosCreditoPorFormaPago($id_caja) { $sql = "SELECT fp.id, fp.formapago, COALESCE(SUM(det.abono), 0) AS total, COUNT(det.referencia_id) AS cantidad FROM formapagos fp LEFT JOIN ( SELECT CONCAT('c-', a.id) AS referencia_id, a.id_formapago AS formapago_id, a.abono FROM abonos a WHERE a.id_caja = $id_caja ) det ON det.formapago_id = fp.id WHERE fp.estado = 1 GROUP BY fp.id, fp.formapago ORDER BY fp.id ASC"; return $this->selectAll($sql); } public function getApartadosPorFormaPago($id_caja) { $sql = "SELECT fp.id, fp.formapago, COALESCE(SUM(det.monto), 0) AS total, COUNT(det.referencia_id) AS cantidad FROM formapagos fp LEFT JOIN ( SELECT CONCAT('a-', da.id) AS referencia_id, da.id_formapago AS formapago_id, da.monto FROM detalle_apartado da WHERE da.id_caja = $id_caja AND da.monto > 0 ) det ON det.formapago_id = fp.id WHERE fp.estado = 1 GROUP BY fp.id, fp.formapago ORDER BY fp.id ASC"; return $this->selectAll($sql); } public function getConteoApartados($id_caja) { $sql = "SELECT COUNT(DISTINCT a.id) AS total FROM detalle_apartado d INNER JOIN apartados a ON d.id_apartado = a.id WHERE d.id_caja = $id_caja"; return $this->select($sql); } public function getConteoAbonos($id_caja) { $sql = "SELECT COUNT(a.id) AS total FROM abonos a WHERE a.id_caja = $id_caja"; return $this->select($sql); } public function getConteoAbonosTaller($id_caja) { $sql = "SELECT COUNT(*) AS total FROM abono_reparacion WHERE id_caja = $id_caja"; return $this->select($sql); } public function getConteoCompras($id_caja) { $sql = "SELECT COUNT(*) AS total FROM compras WHERE estado = 1 AND id_caja = $id_caja"; return $this->select($sql); } public function getConteoComprasCredito($id_caja) { $sql = "SELECT COUNT(*) AS total FROM compras WHERE estado = 1 AND id_caja = $id_caja AND metodo = 'CREDITO'"; return $this->select($sql); } public function getConteoApartadosSinAbono($id_caja) { $sql = "SELECT COUNT(DISTINCT a.id) AS total FROM apartados a INNER JOIN detalle_apartado d ON d.id_apartado = a.id WHERE d.id_caja = $id_caja"; return $this->select($sql); } public function getMontoApartadosSinAbono($id_caja) { $sql = "SELECT COALESCE(SUM(d.monto), 0) AS total FROM detalle_apartado d WHERE d.id_caja = $id_caja"; return $this->select($sql); } public function getConteoGastosPorOrigen($id_caja, $origen = null) { $sql = "SELECT COUNT(*) AS total FROM gastos WHERE id_caja = $id_caja"; if ($origen === 'egresos') { $sql .= " AND categoria IS NOT NULL AND categoria != '' AND subcategoria IS NOT NULL AND subcategoria != ''"; } else { $sql .= " AND (categoria IS NULL OR categoria = '' OR subcategoria IS NULL OR subcategoria = '')"; } return $this->select($sql); } public function getDetalleGastosCaja($id_caja) { $sql = "SELECT fecha, descripcion, monto FROM gastos WHERE id_caja = $id_caja AND (categoria IS NULL OR categoria = '' OR subcategoria IS NULL OR subcategoria = '') ORDER BY id ASC"; return $this->selectAll($sql); } public function getDetalleEgresosCaja($id_caja) { $sql = "SELECT fecha, descripcion, categoria, subcategoria, monto FROM gastos WHERE id_caja = $id_caja AND categoria IS NOT NULL AND categoria != '' AND subcategoria IS NOT NULL AND subcategoria != '' ORDER BY id ASC"; return $this->selectAll($sql); } //cerrar caja public function cerrarCaja($idCaja, $fecha_cierre, $montoFinal, $totalVentas, $egresos, $gastos, $id_sucursal) { $idCaja = (int)$idCaja; $sql = "UPDATE cajas SET fecha_cierre=?, monto_final=?, total_ventas=?, egresos=?, gastos=?, estado=? WHERE id = ? AND estado = ? AND id_sucursal = ?"; $array = array($fecha_cierre, $montoFinal, $totalVentas, $egresos, $gastos, 0, $idCaja, 1, $id_sucursal); return $this->save($sql, $array); } public function getHistorialCajas($idCaja) { $sql = "SELECT * FROM cajas WHERE id = $idCaja"; $caja = $this->select($sql); if (!empty($caja) && isset($caja['id_sucursal'])) { $this->asignarNumeroCaja($caja, $caja['id_sucursal']); } return $caja; } public function saveCierreMetodos($id_caja, array $metodos) { $idCaja = (int)$id_caja; // Delete previous entries for this caja in case of re-close $this->save("DELETE FROM cierre_caja_metodos WHERE id_caja = ?", [$idCaja]); foreach ($metodos as $metodo => $monto) { $monto = (float)$monto; if ($monto <= 0) continue; $this->save( "INSERT INTO cierre_caja_metodos (id_caja, metodo, monto) VALUES (?, ?, ?)", [$idCaja, $metodo, $monto] ); } } public function getCierreMetodos($id_caja) { $idCaja = (int)$id_caja; return $this->selectAll("SELECT metodo, monto FROM cierre_caja_metodos WHERE id_caja = $idCaja ORDER BY id ASC"); } }
Coded With 💗 by
0x6ick