0% encontró este documento útil (0 votos)
4 vistas7 páginas

Index

Este documento es un código fuente de un servidor Express que gestiona productos, compras, ventas y órdenes de trabajo. Incluye rutas para obtener, crear, actualizar y eliminar productos, así como para manejar compras y ventas, incluyendo reportes de ganancias. Utiliza una base de datos PostgreSQL para almacenar y recuperar información relacionada con las operaciones del negocio.

Cargado por

dennisagm503
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas7 páginas

Index

Este documento es un código fuente de un servidor Express que gestiona productos, compras, ventas y órdenes de trabajo. Incluye rutas para obtener, crear, actualizar y eliminar productos, así como para manejar compras y ventas, incluyendo reportes de ganancias. Utiliza una base de datos PostgreSQL para almacenar y recuperar información relacionada con las operaciones del negocio.

Cargado por

dennisagm503
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

const express = require('express');

const cors = require('cors');


const pool = require('./db');
require('dotenv').config();

const app = express();


const PORT = [Link] || 4000;

[Link](cors());
[Link]([Link]());

[Link]('/', (req, res) => {


[Link]('🚀 Servidor de Digicenter: ONLINE');
});

// PRODUCTOS
[Link]('/productos', async (req, res) => {
try {
const todosProductos = await [Link]("SELECT * FROM productos
ORDER BY id DESC");
[Link]([Link]);
} catch (err) {
[Link]([Link]);
[Link](500).send("Error al obtener productos");
}
});

[Link]('/productos', async (req, res) => {


try {
const { codigo_barras, nombre, categoria, precio_costo,
precio_venta, stock_actual, stock_minimo, ubicacion } = [Link];
const nuevoProducto = await [Link](
"INSERT INTO productos (codigo_barras, nombre, categoria,
precio_costo, precio_venta, stock_actual, stock_minimo, ubicacion) VALUES
($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *",
[codigo_barras, nombre, categoria, precio_costo, precio_venta,
stock_actual, stock_minimo, ubicacion]
);
[Link]({ mensaje: "Producto guardado!", producto:
[Link][0] });
} catch (err) {
[Link]([Link]);
[Link](500).send("Error al guardar");
}
});
[Link]('/productos/:id', async (req, res) => {
try {
const { id } = [Link];
const { nombre, categoria, precio_costo, precio_venta, stock_actual,
stock_minimo, ubicacion } = [Link];
await [Link](
"UPDATE productos SET nombre = $1, categoria = $2, precio_costo
= $3, precio_venta = $4, stock_actual = $5, stock_minimo = $6, ubicacion =
$7 WHERE id = $8",
[nombre, categoria, precio_costo, precio_venta, stock_actual,
stock_minimo, ubicacion, id]
);
[Link]("¡Actualizado!");
} catch (err) { [Link]([Link]); }
});

[Link]('/productos/:id', async (req, res) => {


try {
await [Link]("DELETE FROM productos WHERE id = $1",
[[Link]]);
[Link]("Eliminado");
} catch (err) { [Link]([Link]); }
});

// COMPRAS (Entradas de Stock)


[Link]('/compras', async (req, res) => {
try {
const { producto_id, cantidad_entrante, precio_compra_nuevo } =
[Link];
// Insertar en historial_compras (nombre correcto según tu pgAdmin)
await [Link](
"INSERT INTO historial_compras (producto_id, cantidad_entrante,
precio_compra_nuevo) VALUES ($1, $2, $3)",
[producto_id, cantidad_entrante, precio_compra_nuevo]
);
// Actualizar stock
await [Link](
"UPDATE productos SET stock_actual = stock_actual + $1,
precio_costo = $2 WHERE id = $3",
[cantidad_entrante, precio_compra_nuevo, producto_id]
);
[Link]("✅ Stock actualizado");
} catch (err) {
[Link]([Link]);
[Link](500).send("Error en compra");
}
});

[Link]('/compras', async (req, res) => {


try {
const result = await [Link](`
SELECT h.*, [Link] as producto_nombre
FROM historial_compras h
JOIN productos p ON h.producto_id = [Link]
ORDER BY h.fecha_registro DESC
`);
[Link]([Link]);
} catch (err) { [Link]([Link]); }
});

// VENTAS
// RUTA PARA PROCESAR VENTAS (ACTUALIZADA)
[Link]('/ventas', async (req, res) => {
const client = await [Link]();
try {
const { total, carrito, metodo_pago, cliente_nombre, telefono } =
[Link];
await [Link]('BEGIN');

// Insertamos cliente y telefono (pueden ser null si vienen vacíos)


const nuevaVenta = await [Link](
"INSERT INTO ventas (total, metodo_pago, cliente, telefono)
VALUES ($1, $2, $3, $4) RETURNING id",
[total, metodo_pago || 'Efectivo', cliente_nombre || null,
telefono || null]
);
const ventaId = [Link][0].id;

for (const item of carrito) {


await [Link](
"INSERT INTO detalle_ventas (venta_id, producto_id,
cantidad, precio_unitario, subtotal) VALUES ($1, $2, $3, $4, $5)",
[ventaId, [Link], [Link], item.precio_venta,
([Link] * item.precio_venta)]
);
await [Link](
"UPDATE productos SET stock_actual = stock_actual - $1 WHERE
id = $2",
[[Link], [Link]]
);
}
await [Link]('COMMIT');
[Link]({ success: true, message: "Venta guardada" });
} catch (err) {
await [Link]('ROLLBACK');
[Link](500).send("Error en venta");
} finally { [Link](); }
});

[Link]('/reporte-ganancias', async (req, res) => {


try {
const result = await [Link](`
SELECT v.fecha_venta, [Link], ([Link] *
p.precio_costo) as costo_total
FROM detalle_ventas dv
JOIN ventas v ON dv.venta_id = [Link]
JOIN productos p ON dv.producto_id = [Link]
WHERE DATE(v.fecha_venta) = CURRENT_DATE
`);
[Link]([Link]);
} catch (err) { [Link](err); [Link](500).send("Error"); }
});

// RUTA PARA TRAER TODAS LAS VENTAS (Backend)


[Link]('/ventas', async (req, res) => {
try {
// Traemos las ventas ordenadas por la más reciente
// Asegúrate que tu tabla se llame 'ventas'
const resultado = await [Link]("SELECT * FROM ventas ORDER BY id
DESC");
[Link]([Link]);
} catch (err) {
[Link]("Error al obtener ventas:", [Link]);
[Link](500).send("Error en el servidor");
}
});

// RUTA PARA VER EL DETALLE DE UNA VENTA ESPECÍFICA


// AGREGAR ESTO A TU [Link]
[Link]('/ventas/:id/detalle', async (req, res) => {
try {
const { id } = [Link];
const result = await [Link](`
SELECT dv.*, [Link] as producto_nombre
FROM detalle_ventas dv
JOIN productos p ON dv.producto_id = [Link]
WHERE dv.venta_id = $1
`, [id]);

if ([Link] === 0) {
return [Link](404).send("No se encontraron productos para
esta venta");
}

[Link]([Link]);
} catch (err) {
[Link]("Error en el servidor:", [Link]);
[Link](500).send("Error interno del servidor");
}
});
// 1. Obtener todas las órdenes
[Link]('/ordenes', async (req, res) => {
try {
const result = await [Link](`
SELECT o.*, [Link] as producto_nombre
FROM ordenes_trabajo o
JOIN productos p ON o.producto_id = [Link]
ORDER BY o.fecha_entrega ASC
`);
[Link]([Link]);
} catch (err) {
[Link]([Link]);
[Link](500).send("Error al obtener órdenes");
}
});

// 2. Crear una nueva orden


[Link]('/ordenes', async (req, res) => {
try {
const { cliente_nombre, telefono, producto_id, cantidad,
descripcion, precio_total, anticipo, saldo_pendiente, fecha_entrega, estado
} = [Link];
const newOrder = await [Link](
// Agregamos 'estado' al final de la lista de columnas y el $10
"INSERT INTO ordenes_trabajo (cliente_nombre, telefono,
producto_id, cantidad, descripcion, precio_total, anticipo, saldo_pendiente,
fecha_entrega, estado) VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
RETURNING *",
[cliente_nombre, telefono, producto_id, cantidad, descripcion,
precio_total, anticipo, saldo_pendiente, fecha_entrega, estado ||
'Pendiente']
);
[Link]([Link][0]);
} catch (err) {
[Link]([Link]);
[Link](500).send("Error al crear la orden");
}
});
// En tu [Link] agrega esto:
[Link]('/ordenes/:id', async (req, res) => {
try {
const { id } = [Link];
await [Link]("DELETE FROM ordenes_trabajo WHERE id = $1", [id]);
[Link]("Orden eliminada");
} catch (err) { [Link]([Link]); }
});
// RUTA PARA ACTUALIZAR ORDEN EXISTENTE
[Link]('/ordenes/:id', async (req, res) => {
try {
const { id } = [Link];
const {
cliente_nombre,
telefono,
producto_id,
cantidad,
descripcion,
precio_total,
anticipo,
saldo_pendiente,
fecha_entrega,
estado // <-- Ahora sí lo vamos a usar
} = [Link];

await [Link](
`UPDATE ordenes_trabajo SET
cliente_nombre=$1,
telefono=$2,
producto_id=$3,
cantidad=$4,
descripcion=$5,
precio_total=$6,
anticipo=$7,
saldo_pendiente=$8,
fecha_entrega=$9,
estado=$10
WHERE id=$11`, // <-- Subimos a 11 para que el ID sea el final
[
cliente_nombre,
telefono,
producto_id,
cantidad,
descripcion,
precio_total,
anticipo,
saldo_pendiente,
fecha_entrega,
estado || 'Pendiente', // Si viene vacío, le ponemos
Pendiente
id
]
);
[Link]("Orden actualizada con éxito");
} catch (err) {
[Link]("Error al actualizar orden:", [Link]);
[Link](500).send("Error al actualizar");
}
});
[Link](PORT, () => { [Link](`✅ Server on port ${PORT}`); });

También podría gustarte