CoolFace
Apppublic

fmatituy/selectospromanager

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
queries_epp.py121 linesDownload Raw Back to database
1from .db import DB_PATH2import sqlite33from datetime import datetime, timedelta4 5def db_execute(query, params=()):6    conn = sqlite3.connect(DB_PATH)7    c = conn.cursor()8    c.execute(query, params)9    conn.commit()10    conn.close()11 12def db_fetchall(query, params=()):13    conn = sqlite3.connect(DB_PATH)14    conn.row_factory = sqlite3.Row15    c = conn.cursor()16    c.execute(query, params)17    res = [dict(row) for row in c.fetchall()]18    conn.close()19    return res20 21# --- CONSULTAS DE CATÁLOGO E INVENTARIO ---22 23def get_epp_catalogo():24    return db_fetchall("SELECT * FROM sst_epp_catalogo ORDER BY nombre ASC")25 26def create_epp_item(data):27    db_execute("""28        INSERT INTO sst_epp_catalogo (nombre, categoria, vida_util_meses, descripcion, stock_minimo, stock_actual, ubicacion, fecha_ingreso)29        VALUES (?, ?, ?, ?, ?, ?, ?, ?)30    """, (data['nombre'], data['categoria'], data['vida_util_meses'], data['descripcion'], 31          data['stock_minimo'], data['stock_actual'], data['ubicacion'], datetime.now().strftime('%Y-%m-%d')))32 33def update_epp_stock(epp_id, cantidad, tipo='Suma'):34    op = "+" if tipo == 'Suma' else "-"35    db_execute(f"UPDATE sst_epp_catalogo SET stock_actual = stock_actual {op} ? WHERE id = ?", (cantidad, epp_id))36 37# --- CONSULTAS DE ENTREGAS ---38 39def registrar_entrega_epp(data):40    # Calcular fecha de vencimiento basada en vida util41    epp = db_fetchall("SELECT vida_util_meses FROM sst_epp_catalogo WHERE id = ?", (data['epp_id'],))[0]42    fecha_entrega = datetime.strptime(data['fecha_entrega'], '%Y-%m-%d')43    fecha_vencimiento = (fecha_entrega + timedelta(days=30 * epp['vida_util_meses'])).strftime('%Y-%m-%d')44    45    db_execute("""46        INSERT INTO sst_epp_entregas (trabajador_id, epp_id, fecha_entrega, cantidad, estado_epp, fecha_vencimiento, firma_digital, foto_url, observacion, responsable_id)47        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)48    """, (data['trabajador_id'], data['epp_id'], data['fecha_entrega'], data['cantidad'], 49          data['estado_epp'], fecha_vencimiento, data.get('firma'), data.get('foto'), data.get('observacion'), data['responsable_id']))50    51    # Descontar de inventario52    update_epp_stock(data['epp_id'], data['cantidad'], tipo='Resta')53 54def get_entregas_historial():55    return db_fetchall("""56        SELECT e.*, u.nombre as trabajador_nombre, c.nombre as epp_nombre, c.categoria, resp.nombre as responsable_nombre57        FROM sst_epp_entregas e58        JOIN usuarios u ON e.trabajador_id = u.id59        JOIN sst_epp_catalogo c ON e.epp_id = c.id60        LEFT JOIN usuarios resp ON e.responsable_id = resp.id61        ORDER BY e.fecha_entrega DESC62    """)63 64def get_epp_por_trabajador(trabajador_id):65    return db_fetchall("""66        SELECT e.*, c.nombre as epp_nombre, c.categoria67        FROM sst_epp_entregas e68        JOIN sst_epp_catalogo c ON e.epp_id = c.id69        WHERE e.trabajador_id = ?70        ORDER BY e.fecha_entrega DESC71    """, (trabajador_id,))72 73# --- CONSULTAS DE REPOSICIONES ---74 75def get_epp_reposiciones():76    return db_fetchall("""77        SELECT r.*, u.nombre as trabajador_nombre, c.nombre as epp_nombre78        FROM sst_epp_reposiciones r79        JOIN usuarios u ON r.trabajador_id = u.id80        JOIN sst_epp_catalogo c ON r.epp_id = c.id81        ORDER BY r.fecha_solicitud DESC82    """)83 84def create_reposicion_epp(trabajador_id, epp_id, motivo, entrega_original_id=None):85    db_execute("""86        INSERT INTO sst_epp_reposiciones (trabajador_id, epp_id, motivo, fecha_solicitud, estado, entrega_id_original)87        VALUES (?, ?, ?, ?, 'Pendiente', ?)88    """, (trabajador_id, epp_id, motivo, datetime.now().strftime('%Y-%m-%d'), entrega_original_id))89 90# --- INDICADORES ---91 92def get_epp_stats():93    conn = sqlite3.connect(DB_PATH)94    c = conn.cursor()95    96    stats = {}97    98    # Stock99    c.execute("SELECT COUNT(*) FROM sst_epp_catalogo")100    stats['total_items'] = c.fetchone()[0]101    102    c.execute("SELECT COUNT(*) FROM sst_epp_catalogo WHERE stock_actual <= stock_minimo AND stock_actual > 0")103    stats['stock_bajo'] = c.fetchone()[0]104    105    c.execute("SELECT COUNT(*) FROM sst_epp_catalogo WHERE stock_actual == 0")106    stats['stock_agotado'] = c.fetchone()[0]107    108    # Entregas mes109    c.execute("SELECT COUNT(*) FROM sst_epp_entregas WHERE fecha_entrega >= date('now', 'start of month')")110    stats['entregas_mes'] = c.fetchone()[0]111    112    # Vencimientos113    c.execute("SELECT COUNT(*) FROM sst_epp_entregas WHERE fecha_vencimiento < date('now')")114    stats['vencidos'] = c.fetchone()[0]115    116    c.execute("SELECT COUNT(*) FROM sst_epp_entregas WHERE fecha_vencimiento >= date('now') AND fecha_vencimiento <= date('now', '+30 days')")117    stats['por_vencer'] = c.fetchone()[0]118    119    conn.close()120    return stats121