Tul xxx Tul
User / IP
:
216.73.216.227
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
/
vendefacil
/
models
/
Viewing: VentasModel.php
<?php class VentasModel extends Query { public function __construct() { parent::__construct(); } private function asegurarLotesVencimientoProducto() { $this->save("CREATE TABLE IF NOT EXISTS producto_lotes_vencimiento ( id int(11) NOT NULL AUTO_INCREMENT, id_producto int(11) NOT NULL, id_sucursal int(11) NOT NULL, fecha_vencimiento date NOT NULL, cantidad decimal(10,2) NOT NULL DEFAULT 0.00, estado int(11) NOT NULL DEFAULT 1, fecha timestamp NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (id), UNIQUE KEY uq_producto_sucursal_vencimiento (id_producto, id_sucursal, fecha_vencimiento), KEY idx_producto_lotes_producto (id_producto), KEY idx_producto_lotes_sucursal (id_sucursal), KEY idx_producto_lotes_fecha (fecha_vencimiento) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci", []); $this->save("INSERT INTO producto_lotes_vencimiento (id_producto, id_sucursal, fecha_vencimiento, cantidad) SELECT p.id, p.id_sucursal, p.fecha_vencimiento, p.cantidad FROM productos p WHERE p.servicio = 0 AND p.cantidad > 0 AND p.fecha_vencimiento IS NOT NULL AND p.fecha_vencimiento <> '0000-00-00' AND NOT EXISTS ( SELECT 1 FROM producto_lotes_vencimiento pl WHERE pl.id_producto = p.id AND pl.id_sucursal = p.id_sucursal )", []); } public function getLotesProducto($idProducto, $id_sucursal) { $this->asegurarLotesVencimientoProducto(); $idProducto = (int)$idProducto; $id_sucursal = (int)$id_sucursal; $sql = "SELECT id, id_producto, id_sucursal, fecha_vencimiento, cantidad FROM producto_lotes_vencimiento WHERE id_producto = $idProducto AND id_sucursal = $id_sucursal AND estado = 1 AND cantidad > 0 ORDER BY fecha_vencimiento ASC, id ASC"; return $this->selectAll($sql); } public function getLoteProducto($idLote, $idProducto, $id_sucursal) { $this->asegurarLotesVencimientoProducto(); $idLote = (int)$idLote; $idProducto = (int)$idProducto; $id_sucursal = (int)$id_sucursal; $sql = "SELECT id, id_producto, id_sucursal, fecha_vencimiento, cantidad FROM producto_lotes_vencimiento WHERE id = $idLote AND id_producto = $idProducto AND id_sucursal = $id_sucursal AND estado = 1"; return $this->select($sql); } public function descontarLote($idLote, $cantidad) { $this->asegurarLotesVencimientoProducto(); $sql = "UPDATE producto_lotes_vencimiento SET cantidad = cantidad - ? WHERE id = ? AND cantidad >= ?"; return $this->save($sql, [$cantidad, (int)$idLote, $cantidad]); } public function reponerLote($idLote, $cantidad) { $this->asegurarLotesVencimientoProducto(); $sql = "UPDATE producto_lotes_vencimiento SET cantidad = cantidad + ? WHERE id = ?"; return $this->save($sql, [$cantidad, (int)$idLote]); } public function sincronizarStockProducto($idProducto, $id_sucursal) { $this->asegurarLotesVencimientoProducto(); $idProducto = (int)$idProducto; $id_sucursal = (int)$id_sucursal; $row = $this->select("SELECT COALESCE(SUM(cantidad), 0) AS total, MIN(CASE WHEN cantidad > 0 THEN fecha_vencimiento ELSE NULL END) AS fecha FROM producto_lotes_vencimiento WHERE id_producto = $idProducto AND id_sucursal = $id_sucursal AND estado = 1"); $total = isset($row['total']) ? (float)$row['total'] : 0; $fecha = $row['fecha'] ?? null; $this->save("UPDATE productos SET cantidad = ?, fecha_vencimiento = ? WHERE id = ? AND id_sucursal = ?", [$total, $fecha, $idProducto, $id_sucursal]); return ['total' => $total, 'fecha' => $fecha]; } public function getIdentidades() { return $this->selectAll("SELECT * FROM identidades"); } public function getFormaPagos() { return $this->selectAll("SELECT * FROM formapagos WHERE estado = 1"); } public function registrarPagoVenta($id_venta, $formapago_id, $monto, $cobrado, $devuelta, $referencia, $fecha) { $sql = "INSERT INTO efectivo_ventas (venta_id, formapago_id, monto, cobrado, devuelta, referencia, fecha) VALUES (?, ?, ?, ?, ?, ?, ?)"; $this->insertar($sql, [$id_venta, $formapago_id, $monto, $cobrado, $devuelta, $referencia, $fecha]); } public function getProducto($idProducto) { $sql = "SELECT p.*, m.marca FROM productos p INNER JOIN marcas m ON p.id_marca = m.id WHERE p.id = $idProducto"; return $this->select($sql); } public function getEfectivos(int $venta_id) { $sql = "SELECT e.*, f.formapago FROM efectivo_ventas e LEFT JOIN formapagos f ON e.formapago_id = f.id WHERE e.venta_id = $venta_id"; return $this->selectAll($sql); } public function getVentasDetalle($id_sucursal, $fechaInicio = null, $fechaFin = null) { $sql = "SELECT v.id, v.serie, v.fecha, v.hora, v.metodo, v.productos, c.nombre AS cliente, v.total AS subtotal_venta, v.descuento, v.impuesto, COALESCE(v.iva_monto, 0) AS iva_monto, COALESCE(v.retencion_monto, 0) AS retencion_monto, COALESCE(v.total_final, v.totalConImpuesto) AS total_final, uv.nombre AS vendedor FROM ventas v LEFT JOIN clientes c ON v.id_cliente = c.id LEFT JOIN usuarios uv ON v.id_vendedor = uv.id WHERE v.estado = 1 AND v.id_sucursal = $id_sucursal"; if (!empty($fechaInicio) && !empty($fechaFin)) { $sql .= " AND v.fecha BETWEEN '$fechaInicio' AND '$fechaFin'"; } $sql .= " ORDER BY v.fecha DESC, v.hora DESC, v.serie DESC"; $ventas = $this->selectAll($sql); if (empty($ventas)) { return []; } $items = []; $idsSet = []; foreach ($ventas as $venta) { $productosRaw = $venta['productos'] ?? null; if (empty($productosRaw)) { continue; } $productos = json_decode($productosRaw, true); if (!is_array($productos)) { continue; } foreach ($productos as $p) { if (!isset($p['id'])) { continue; } $pid = (int)$p['id']; if ($pid > 0) { $idsSet[$pid] = true; } $items[] = [ 'id_venta' => $venta['id'], 'serie' => $venta['serie'], 'fecha' => $venta['fecha'], 'hora' => $venta['hora'], 'cliente' => $venta['cliente'], 'metodo' => $venta['metodo'], 'id_producto' => $pid, 'producto' => $p['nombre'] ?? '', 'cantidad' => isset($p['cantidad']) ? (float)$p['cantidad'] : 0, 'precio_venta' => isset($p['precio']) ? (float)$p['precio'] : 0, 'descuento_venta' => (float)($venta['descuento'] ?? 0), 'iva_monto' => (float)($venta['iva_monto'] ?? 0), 'retencion_monto' => (float)($venta['retencion_monto'] ?? 0), 'total_final' => (float)($venta['total_final'] ?? 0), 'vendedor' => $venta['vendedor'] ?? '', ]; } } if (empty($items)) { return []; } $info = []; $ids = array_keys($idsSet); $ids = array_map('intval', $ids); $ids = array_filter($ids, function ($id) { return $id > 0; }); if (!empty($ids)) { $idsSql = implode(',', $ids); $sqlInfo = "SELECT id, precio_compra, servicio FROM productos WHERE id_sucursal = $id_sucursal AND id IN ($idsSql)"; $productosInfo = $this->selectAll($sqlInfo); foreach ($productosInfo as $p) { $pid = (int)$p['id']; $info[$pid] = [ 'precio_compra' => (float)$p['precio_compra'], 'servicio' => (int)$p['servicio'], ]; } } foreach ($items as &$it) { $pid = (int)$it['id_producto']; $cantidad = (float)$it['cantidad']; $precioVenta = (float)$it['precio_venta']; $precioCompra = 0.0; $esServicio = false; if (!empty($info[$pid])) { $precioCompra = (float)$info[$pid]['precio_compra']; $esServicio = ((int)$info[$pid]['servicio'] === 1); } if ($esServicio) { $precioCompra = 0.0; } $it['precio_compra'] = $precioCompra; $it['costo_ventas'] = $precioCompra * $cantidad; $it['ingreso_ventas'] = $precioVenta * $cantidad; $it['utilidad'] = ($precioVenta - $precioCompra) * $cantidad; } unset($it); return $items; } public function getResumenVentas($id_sucursal, $fechaInicio = null, $fechaFin = null) { $sql = "SELECT COALESCE(SUM(v.total), 0) AS subtotal, COALESCE(SUM( CASE WHEN v.iva_monto > 0 THEN v.iva_monto WHEN v.totalConImpuesto > v.total THEN v.totalConImpuesto - v.total ELSE 0 END ), 0) AS iva, COALESCE(SUM( GREATEST( (CASE WHEN v.total_final = 0 AND v.totalConImpuesto <> 0 THEN v.totalConImpuesto - v.retencion_monto ELSE v.total_final END), 0 ) ), 0) AS total FROM ventas v WHERE v.estado = 1 AND v.id_sucursal = $id_sucursal"; if (!empty($fechaInicio) && !empty($fechaFin)) { $sql .= " AND v.fecha BETWEEN '$fechaInicio' AND '$fechaFin'"; } return $this->select($sql); } public function eliminarPagoAnterior(int $id) { $sql = "DELETE FROM efectivo_ventas WHERE venta_id = ?"; return $this->save($sql, [$id]); } public function actualizarStock($cantidad, $ventas, $idProducto) { $sql = "UPDATE productos SET cantidad = ?, ventas=? WHERE id = ?"; $array = array($cantidad, $ventas, $idProducto); return $this->save($sql, $array); } public function registrarCredito($monto, $fecha, $hora, $idVenta) { $sql = "INSERT INTO creditos (monto, fecha, hora, id_venta) VALUES (?,?,?,?)"; $array = array($monto, $fecha, $hora, $idVenta); return $this->insertar($sql, $array); } public function registrarVenta($productos, $total, $totalConImpuesto, $fecha, $hora, $metodo, $descuento, $ivaMonto, $retencionMonto, $totalFinal, $impuesto, $moneda, $serie, $pago, $id_caja, $idCliente, $idusuario, $id_sucursal, $nota, $id_vendedor = null) { $sql = "INSERT INTO ventas (productos, total, totalConImpuesto, fecha, hora, metodo, descuento, iva_monto, retencion_monto, total_final, impuesto, moneda, serie, pago, id_caja, id_cliente, id_usuario, id_sucursal, nota, id_vendedor) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; $array = array($productos, $total, $totalConImpuesto, $fecha, $hora, $metodo, $descuento, $ivaMonto, $retencionMonto, $totalFinal, $impuesto, $moneda, $serie, $pago, $id_caja, $idCliente, $idusuario, $id_sucursal, $nota, $id_vendedor); return $this->insertar($sql, $array); } public function modificarVenta($productos, $total, $totalConImpuesto, $metodo, $descuento, $ivaMonto, $retencionMonto, $totalFinal, $impuesto, $moneda, $pago, $idCliente, $id_usuario, $id_formapago, $nota, $id_venta) { $sql = "UPDATE ventas SET productos=?, total=?, totalConImpuesto=?, metodo=?, descuento=?, iva_monto=?, retencion_monto=?, total_final=?, impuesto=?, moneda=?, pago=?, id_cliente=?, id_usuario=?, id_formapago=?, nota=? WHERE id=?"; $array = array($productos, $total, $totalConImpuesto, $metodo, $descuento, $ivaMonto, $retencionMonto, $totalFinal, $impuesto, $moneda, $pago, $idCliente, $id_usuario, $id_formapago, $nota, $id_venta); return $this->save($sql, $array); } public function getCredito($id_venta) { $sql = "SELECT * FROM creditos WHERE id_venta = $id_venta"; return $this->select($sql); } public function actualizarCredito($monto, $id_credito) { $sql = "UPDATE creditos SET monto=? WHERE id=?"; $array = array($monto, $id_credito); return $this->save($sql, $array); } public function getEmpresa($id) { $sql = "SELECT * FROM sucursales WHERE id = $id"; return $this->select($sql); } public function getVenta($idVenta) { $sql = "SELECT v.*, c.identidad, c.num_identidad, c.nombre, c.telefono, c.correo, c.direccion, f.formapago, u.nombre AS usuario, uv.nombre AS vendedor FROM ventas v LEFT JOIN clientes c ON v.id_cliente = c.id LEFT JOIN formapagos f ON v.id_formapago = f.id LEFT JOIN usuarios u ON v.id_usuario = u.id LEFT JOIN usuarios uv ON v.id_vendedor = uv.id WHERE v.id = $idVenta"; return $this->select($sql); } public function getVentaBySucursal($idVenta, $id_sucursal) { $sql = "SELECT v.*, c.identidad, c.num_identidad, c.nombre, c.telefono, c.correo, c.direccion, f.formapago, u.nombre AS usuario, uv.nombre AS vendedor FROM ventas v LEFT JOIN clientes c ON v.id_cliente = c.id LEFT JOIN formapagos f ON v.id_formapago = f.id LEFT JOIN usuarios u ON v.id_usuario = u.id LEFT JOIN usuarios uv ON v.id_vendedor = uv.id WHERE v.id = $idVenta AND v.id_sucursal = $id_sucursal"; return $this->select($sql); } public function getVentas($id_sucursal, $fechaInicio = null, $fechaFin = null) { $sql = "SELECT v.*, c.nombre FROM ventas v LEFT JOIN clientes c ON v.id_cliente = c.id WHERE v.estado = 1 AND v.id_sucursal = $id_sucursal"; if (!empty($fechaInicio) && !empty($fechaFin)) { $sql .= " AND v.fecha BETWEEN '$fechaInicio' AND '$fechaFin'"; } return $this->selectAll($sql); } public function anular($idVenta) { $sql = "UPDATE ventas SET estado = ? WHERE id = ?"; $array = array(0, $idVenta); return $this->save($sql, $array); } public function anularCredito($idVenta) { $sql = "UPDATE creditos SET estado = ? WHERE id_venta = ?"; $array = array(2, $idVenta); return $this->save($sql, $array); } public function eliminarVentaFisica($idVenta, $id_sucursal) { $this->save("DELETE FROM efectivo_ventas WHERE venta_id = ?", [$idVenta]); $creditos = $this->selectAll("SELECT id FROM creditos WHERE id_venta = $idVenta"); if (!empty($creditos)) { foreach ($creditos as $credito) { if (!empty($credito['id'])) { $this->save("DELETE FROM abonos WHERE id_credito = ?", [$credito['id']]); } } } $this->save("DELETE FROM creditos WHERE id_venta = ?", [$idVenta]); $sql = "DELETE FROM ventas WHERE id = ? AND id_sucursal = ?"; return $this->delete($sql, [$idVenta, $id_sucursal]); } public function getSerie($id_sucursal) { $sql = "SELECT MAX(id) AS total FROM ventas WHERE id_sucursal = $id_sucursal"; return $this->select($sql); } public function registrarMovimiento($movimiento, $accion, $cantidad, $stockActual, $idProducto, $id_usuario, $id_sucursal) { $sql = "INSERT INTO inventario (movimiento, accion, cantidad, stock_actual, id_producto, id_usuario, id_sucursal) VALUES (?,?,?,?,?,?,?)"; $array = array($movimiento, $accion, $cantidad, $stockActual, $idProducto, $id_usuario, $id_sucursal); return $this->insertar($sql, $array); } public function getCaja($id_sucursal) { $idUsuario = isset($_SESSION['id_usuario']) ? (int)$_SESSION['id_usuario'] : 0; $filtroUsuario = empty($_SESSION['rol']) ? '' : " AND id_usuario = $idUsuario"; $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 = $id_sucursal AND id = $idCajaActiva" . $filtroUsuario . " ORDER BY id DESC"; $cajaActiva = $this->select($sql); if (!empty($cajaActiva)) { return $cajaActiva; } } $sql = "SELECT * FROM cajas WHERE estado = 1 AND id_sucursal = $id_sucursal" . $filtroUsuario . " ORDER BY id DESC"; return $this->select($sql); } public function registrarPrefactura($productos, $total, $totalConImpuesto, $fecha, $hora, $descuento, $ivaMonto, $retencionMonto, $totalFinal, $impuesto, $moneda, $nota, $idCliente, $idVendedor, $idSucursal) { $sql = "INSERT INTO prefacturas (productos, total, totalConImpuesto, fecha, hora, descuento, iva_monto, retencion_monto, total_final, impuesto, moneda, nota, id_cliente, id_vendedor, id_sucursal, estado) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,1)"; $array = array($productos, $total, $totalConImpuesto, $fecha, $hora, $descuento, $ivaMonto, $retencionMonto, $totalFinal, $impuesto, $moneda, $nota, $idCliente, $idVendedor, $idSucursal); return $this->insertar($sql, $array); } public function getPrefacturasActivas($idSucursal) { $sql = "SELECT p.*, c.nombre AS cliente, u.nombre AS vendedor FROM prefacturas p LEFT JOIN clientes c ON p.id_cliente = c.id LEFT JOIN usuarios u ON p.id_vendedor = u.id WHERE p.estado = 1 AND p.id_sucursal = $idSucursal ORDER BY p.id DESC"; return $this->selectAll($sql); } public function getPrefactura($idPrefactura) { $sql = "SELECT p.*, c.nombre AS cliente, c.num_identidad, c.telefono, c.direccion FROM prefacturas p LEFT JOIN clientes c ON p.id_cliente = c.id WHERE p.id = $idPrefactura"; return $this->select($sql); } public function marcarPrefacturaFacturada($idPrefactura) { $sql = "UPDATE prefacturas SET estado = 2 WHERE id = ?"; return $this->save($sql, [$idPrefactura]); } public function eliminarPrefactura($idPrefactura) { $sql = "UPDATE prefacturas SET estado = 0 WHERE id = ?"; return $this->save($sql, [$idPrefactura]); } }
Coded With 💗 by
0x6ick