230 lines
8.9 KiB
JavaScript
230 lines
8.9 KiB
JavaScript
// // GET producto + receta
|
|
// app.get('/api/rpc/get_producto/:id', async (req, res) => {
|
|
// const id = Number(req.params.id);
|
|
// const { rows } = await mainPool.query('SELECT public.get_producto($1) AS data', [id]);
|
|
// res.json(rows[0]?.data || {});
|
|
// });
|
|
|
|
// // POST guardar producto + receta
|
|
|
|
// app.post('/api/rpc/save_producto', async (req, res) => {
|
|
// try {
|
|
// // console.debug('receta payload:', req.body?.receta); // habilitalo si lo necesitás
|
|
// const q = 'SELECT public.save_producto($1,$2,$3,$4,$5,$6,$7::jsonb) AS id_producto';
|
|
// const { id_producto = null, nombre, img_producto = null, precio = 0, activo = true, id_categoria = null, receta = [] } = req.body || {};
|
|
// const params = [id_producto, nombre, img_producto, precio, activo, id_categoria, JSON.stringify(receta || [])];
|
|
// const { rows } = await mainPool.query(q, params);
|
|
// res.json(rows[0] || {});
|
|
// } catch (e) {
|
|
// console.error(e);
|
|
// res.status(500).json({ error: 'save_producto failed' });
|
|
// }
|
|
// });
|
|
|
|
// // GET MP + proveedores
|
|
// app.get('/api/rpc/get_materia/:id', async (req, res) => {
|
|
// const id = Number(req.params.id);
|
|
// try {
|
|
// const { rows } = await mainPool.query('SELECT public.get_materia_prima($1) AS data', [id]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e);
|
|
// res.status(500).json({ error: 'get_materia failed' });
|
|
// }
|
|
// });
|
|
|
|
// // SAVE MP + proveedores (array)
|
|
// app.post('/api/rpc/save_materia', async (req, res) => {
|
|
// const { id_mat_prima = null, nombre, unidad, activo = true, proveedores = [] } = req.body || {};
|
|
// try {
|
|
// const q = 'SELECT public.save_materia_prima($1,$2,$3,$4,$5::jsonb) AS id_mat_prima';
|
|
// const params = [id_mat_prima, nombre, unidad, activo, JSON.stringify(proveedores || [])];
|
|
// const { rows } = await mainPool.query(q, params);
|
|
// res.json(rows[0] || {});
|
|
// } catch (e) {
|
|
// console.error(e);
|
|
// res.status(500).json({ error: 'save_materia failed' });
|
|
// }
|
|
// });
|
|
|
|
// // POST /api/rpc/find_usuarios_por_documentos { docs: ["12345678","09123456", ...] }
|
|
// app.post('/api/rpc/find_usuarios_por_documentos', async (req, res) => {
|
|
// try {
|
|
// const docs = Array.isArray(req.body?.docs) ? req.body.docs : [];
|
|
// const sql = 'SELECT public.find_usuarios_por_documentos($1::jsonb) AS data';
|
|
// const { rows } = await mainPool.query(sql, [JSON.stringify(docs)]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e);
|
|
// res.status(500).json({ error: 'find_usuarios_por_documentos failed' });
|
|
// }
|
|
// });
|
|
|
|
// // POST /api/rpc/import_asistencia { registros: [...], origen?: "AGL_001.txt" }
|
|
// app.post('/api/rpc/import_asistencia', async (req, res) => {
|
|
// try {
|
|
// const registros = Array.isArray(req.body?.registros) ? req.body.registros : [];
|
|
// const origen = req.body?.origen || null;
|
|
// const sql = 'SELECT public.import_asistencia($1::jsonb,$2) AS data';
|
|
// const { rows } = await mainPool.query(sql, [JSON.stringify(registros), origen]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e);
|
|
// res.status(500).json({ error: 'import_asistencia failed' });
|
|
// }
|
|
// });
|
|
|
|
// // Consultar datos de asistencia (raw + pares) para un usuario y rango
|
|
// app.post('/api/rpc/asistencia_get', async (req, res) => {
|
|
// try {
|
|
// const { doc, desde, hasta } = req.body || {};
|
|
// const sql = 'SELECT public.asistencia_get($1::text,$2::date,$3::date) AS data';
|
|
// const { rows } = await mainPool.query(sql, [doc, desde, hasta]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e); res.status(500).json({ error: 'asistencia_get failed' });
|
|
// }
|
|
// });
|
|
|
|
// // Editar un registro crudo y recalcular pares
|
|
// app.post('/api/rpc/asistencia_update_raw', async (req, res) => {
|
|
// try {
|
|
// const { id_raw, fecha, hora, modo } = req.body || {};
|
|
// const sql = 'SELECT public.asistencia_update_raw($1::bigint,$2::date,$3::text,$4::text) AS data';
|
|
// const { rows } = await mainPool.query(sql, [id_raw, fecha, hora, modo ?? null]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e); res.status(500).json({ error: 'asistencia_update_raw failed' });
|
|
// }
|
|
// });
|
|
|
|
// // Eliminar un registro crudo y recalcular pares
|
|
// app.post('/api/rpc/asistencia_delete_raw', async (req, res) => {
|
|
// try {
|
|
// const { id_raw } = req.body || {};
|
|
// const sql = 'SELECT public.asistencia_delete_raw($1::bigint) AS data';
|
|
// const { rows } = await mainPool.query(sql, [id_raw]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e); res.status(500).json({ error: 'asistencia_delete_raw failed' });
|
|
// }
|
|
// });
|
|
|
|
// // POST /api/rpc/report_tickets { year }
|
|
// app.post('/api/rpc/report_tickets', async (req, res) => {
|
|
// try {
|
|
// const y = parseInt(req.body?.year ?? req.query?.year, 10);
|
|
// const year = (Number.isFinite(y) && y >= 2000 && y <= 2100)
|
|
// ? y
|
|
// : (new Date()).getFullYear();
|
|
|
|
// const { rows } = await mainPool.query(
|
|
// 'SELECT public.report_tickets_year($1::int) AS j', [year]
|
|
// );
|
|
// res.json(rows[0].j);
|
|
// } catch (e) {
|
|
// console.error('report_tickets error:', e);
|
|
// res.status(500).json({
|
|
// error: 'report_tickets failed',
|
|
// message: e.message, detail: e.detail, where: e.where, code: e.code
|
|
// });
|
|
// }
|
|
// });
|
|
|
|
// // POST /api/rpc/report_asistencia { desde: 'YYYY-MM-DD', hasta: 'YYYY-MM-DD' }
|
|
// app.post('/api/rpc/report_asistencia', async (req, res) => {
|
|
// try {
|
|
// let { desde, hasta } = req.body || {};
|
|
// // defaults si vienen vacíos/invalidos
|
|
// const re = /^\d{4}-\d{2}-\d{2}$/;
|
|
// if (!re.test(desde) || !re.test(hasta)) {
|
|
// const end = new Date();
|
|
// const start = new Date(end); start.setDate(end.getDate() - 30);
|
|
// desde = start.toISOString().slice(0, 10);
|
|
// hasta = end.toISOString().slice(0, 10);
|
|
// }
|
|
|
|
// const { rows } = await mainPool.query(
|
|
// 'SELECT public.report_asistencia($1::date,$2::date) AS j', [desde, hasta]
|
|
// );
|
|
// res.json(rows[0].j);
|
|
// } catch (e) {
|
|
// console.error('report_asistencia error:', e);
|
|
// res.status(500).json({
|
|
// error: 'report_asistencia failed',
|
|
// message: e.message, detail: e.detail, where: e.where, code: e.code
|
|
// });
|
|
// }
|
|
// });
|
|
|
|
// // Guardar (insert/update)
|
|
// app.post('/api/rpc/save_compra', async (req, res) => {
|
|
// try {
|
|
// const { id_compra, id_proveedor, fec_compra, detalles } = req.body || {};
|
|
// const sql = 'SELECT * FROM public.save_compra($1::int,$2::int,$3::timestamptz,$4::jsonb)';
|
|
// const args = [id_compra ?? null, id_proveedor, fec_compra ? new Date(fec_compra) : null, JSON.stringify(detalles)];
|
|
// const { rows } = await mainPool.query(sql, args);
|
|
// res.json(rows[0]); // { id_compra, total }
|
|
// } catch (e) {
|
|
// console.error('save_compra error:', e);
|
|
// res.status(500).json({ error: 'save_compra failed', message: e.message, detail: e.detail, where: e.where, code: e.code });
|
|
// }
|
|
// });
|
|
|
|
// // Obtener para editar
|
|
// app.post('/api/rpc/get_compra', async (req, res) => {
|
|
// try {
|
|
// const { id_compra } = req.body || {};
|
|
// const sql = `SELECT public.get_compra($1::int) AS data`;
|
|
// const { rows } = await mainPool.query(sql, [id_compra]);
|
|
// res.json(rows[0]?.data || {});
|
|
// } catch (e) {
|
|
// console.error(e); res.status(500).json({ error: 'get_compra failed' });
|
|
// }
|
|
// });
|
|
|
|
// // Eliminar
|
|
// app.post('/api/rpc/delete_compra', async (req, res) => {
|
|
// try {
|
|
// const { id_compra } = req.body || {};
|
|
// await mainPool.query(`SELECT public.delete_compra($1::int)`, [id_compra]);
|
|
// res.json({ ok: true });
|
|
// } catch (e) {
|
|
// console.error(e); res.status(500).json({ error: 'delete_compra failed' });
|
|
// }
|
|
// });
|
|
|
|
// // POST /api/rpc/report_gastos { year: 2025 }
|
|
// app.post('/api/rpc/report_gastos', async (req, res) => {
|
|
// try {
|
|
// const year = parseInt(req.body?.year ?? new Date().getFullYear(), 10);
|
|
// const { rows } = await mainPool.query(
|
|
// 'SELECT public.report_gastos($1::int) AS j', [year]
|
|
// );
|
|
// res.json(rows[0].j);
|
|
// } catch (e) {
|
|
// console.error('report_gastos error:', e);
|
|
// res.status(500).json({
|
|
// error: 'report_gastos failed',
|
|
// message: e.message, detail: e.detail, code: e.code
|
|
// });
|
|
// }
|
|
// });
|
|
|
|
// // (Opcional) GET para probar rápido desde el navegador:
|
|
// // /api/rpc/report_gastos?year=2025
|
|
// app.get('/api/rpc/report_gastos', async (req, res) => {
|
|
// try {
|
|
// const year = parseInt(req.query.year ?? new Date().getFullYear(), 10);
|
|
// const { rows } = await mainPool.query(
|
|
// 'SELECT public.report_gastos($1::int) AS j', [year]
|
|
// );
|
|
// res.json(rows[0].j);
|
|
// } catch (e) {
|
|
// console.error('report_gastos error:', e);
|
|
// res.status(500).json({
|
|
// error: 'report_gastos failed',
|
|
// message: e.message, detail: e.detail, code: e.code
|
|
// });
|
|
// }
|
|
// });
|