35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
|
|
import db from "./db";
|
||
|
|
|
||
|
|
// Metas mensuales — SQLite (Etapa 4). Clave: correo del vendedor, resuelto en vivo
|
||
|
|
// contra systemusers (no hay una lista fija de correos confirmados — ver migration.md §11.5).
|
||
|
|
// La tabla arranca vacía: un administrador las carga desde /admin/metas.
|
||
|
|
|
||
|
|
export function getMetas() {
|
||
|
|
const rows = db.prepare("SELECT email, monto FROM metas").all();
|
||
|
|
const map = {};
|
||
|
|
rows.forEach((r) => {
|
||
|
|
map[r.email] = r.monto;
|
||
|
|
});
|
||
|
|
return map;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getMetaGlobal() {
|
||
|
|
const row = db.prepare("SELECT valor FROM config WHERE clave = 'meta_global'").get();
|
||
|
|
if (row) return Number(row.valor);
|
||
|
|
return Object.values(getMetas()).reduce((a, v) => a + v, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function setMeta(email, monto) {
|
||
|
|
db.prepare(
|
||
|
|
`INSERT INTO metas (email, monto, updated_at) VALUES (?, ?, datetime('now'))
|
||
|
|
ON CONFLICT(email) DO UPDATE SET monto = excluded.monto, updated_at = excluded.updated_at`
|
||
|
|
).run(email.toLowerCase(), monto);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function setMetaGlobal(monto) {
|
||
|
|
db.prepare(
|
||
|
|
`INSERT INTO config (clave, valor) VALUES ('meta_global', ?)
|
||
|
|
ON CONFLICT(clave) DO UPDATE SET valor = excluded.valor`
|
||
|
|
).run(String(monto));
|
||
|
|
}
|