Actualizar contabilidad.html

This commit is contained in:
2026-03-01 16:02:16 +00:00
parent f3e5e4bea3
commit a9a761a0b3

View File

@@ -516,21 +516,109 @@
loadBudgets();
}
function openConvertModal(id) {
// ==========================================
// LÓGICA DE CONVERSIÓN A SERVICIO (MODAL)
// ==========================================
async function openConvertModal(id) {
document.getElementById('convBudgetId').value = id;
// 1. Limpiamos y cargamos los gremios directamente de la base de datos
const gSel = document.getElementById('convGuild');
gSel.innerHTML = '<option value="">Cargando gremios...</option>';
try {
const res = await fetch(`${API_URL}/guilds`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
const data = await res.json();
gSel.innerHTML = '<option value="">Selecciona Gremio...</option>';
if (data.ok && data.guilds) {
data.guilds.forEach(g => {
gSel.innerHTML += `<option value="${g.id}">${g.name}</option>`;
});
}
} catch (e) {
gSel.innerHTML = '<option value="">Error al cargar</option>';
}
// 2. Reseteamos el resto del formulario
document.getElementById('convOperator').innerHTML = '<option value="AUTO">⚡ MANDAR A LA BOLSA (AUTO)</option>';
document.getElementById('convDateContainer').classList.add('hidden');
document.getElementById('convDate').value = "";
document.getElementById('convTime').value = "";
document.getElementById('convertModal').classList.remove('hidden');
}
async function loadOpsForGuildConv(guildId) {
const sel = document.getElementById('convOperator');
const dateCont = document.getElementById('convDateContainer');
sel.innerHTML = '<option value="AUTO">⚡ MANDAR A LA BOLSA (AUTO)</option>';
// Ocultamos la fecha si cambiamos de gremio (vuelve a Auto por defecto)
dateCont.classList.add('hidden');
document.getElementById('convDate').value = "";
document.getElementById('convTime').value = "";
if(!guildId) return;
try {
const res = await fetch(`${API_URL}/operators?guild_id=${guildId}`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
const data = await res.json();
if(data.ok && data.operators) {
data.operators.forEach(op => {
sel.innerHTML += `<option value="${op.id}">👤 ${op.full_name}</option>`;
});
}
} catch(e) {}
}
function handleOperatorChange(val) {
const dateCont = document.getElementById('convDateContainer');
if(val === 'AUTO') {
dateCont.classList.add('hidden');
} else {
// Si elige un técnico concreto, mostramos los campos de fecha
dateCont.classList.remove('hidden');
}
}
async function confirmConversion() {
const id = document.getElementById('convBudgetId').value;
const guild_id = document.getElementById('convGuild').value;
const assigned_to = document.getElementById('convOperator').value;
const date = document.getElementById('convDate').value;
const time = document.getElementById('convTime').value;
if(!date || !time) return showToast("Debes elegir fecha y hora.");
if (!guild_id) return showToast("⚠️ El Gremio es obligatorio.");
const use_automation = (assigned_to === 'AUTO');
await fetch(`${API_URL}/budgets/${id}/convert`, { method: 'POST', headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` }, body: JSON.stringify({date, time}) });
document.getElementById('convertModal').classList.add('hidden');
showToast("¡Convertido a Servicio con éxito!");
loadBudgets();
if (!use_automation && (!date || !time)) {
return showToast("⚠️ Si asignas a un técnico, debes fijar Fecha y Hora.");
}
const payload = {
guild_id: guild_id,
assigned_to: use_automation ? null : assigned_to,
use_automation: use_automation,
date: use_automation ? null : date,
time: use_automation ? null : time
};
try {
await fetch(`${API_URL}/budgets/${id}/convert`, {
method: 'POST',
headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
body: JSON.stringify(payload)
});
document.getElementById('convertModal').classList.add('hidden');
showToast(use_automation ? "✅ ¡Enviado a la bolsa con éxito!" : "✅ ¡Servicio agendado con éxito!");
loadBudgets();
} catch(e) {
showToast("❌ Error al convertir el presupuesto.");
}
}
function openBudgetModal() {