diff --git a/src-tauri/src/plugins/supabase.rs b/src-tauri/src/plugins/supabase.rs index 8c53e8c..6e77f68 100644 --- a/src-tauri/src/plugins/supabase.rs +++ b/src-tauri/src/plugins/supabase.rs @@ -248,24 +248,24 @@ impl SupabaseClient { } } - /// Atualiza campos específicos de um fechamento pelo id numérico (pk) ou UUID. - pub fn atualizar_fechamento(&self, id: Option, uuid: &str, updates: &serde_json::Value) -> Result { - // Se temos id numerico, usa id=eq.; senao usa id=eq.UUID - let url = if let Some(num) = id { - format!("{}/rest/v1/fechamentos_web?id=eq.{}", self.base_url, num) - } else { - format!("{}/rest/v1/fechamentos_web?id=eq.{}", self.base_url, uuid) - }; + /// Atualiza campos específicos de um fechamento pelo id_fechamento. + pub fn atualizar_fechamento(&self, id_fechamento: &str, updates: &serde_json::Value) -> Result { + let url = format!( + "{}/rest/v1/fechamentos_web?id_fechamento=eq.{}", + self.base_url, + urlencoding::encode(id_fechamento) + ); let resp = self .http .patch(&url) .headers(self.headers(true)) + .header("Prefer", "return=representation") .json(updates) .send()?; if resp.status().is_success() { - Ok(serde_json::json!({ "ok": true, "id": id.unwrap_or(0) })) + Ok(serde_json::json!({ "ok": true, "id_fechamento": id_fechamento })) } else { let status = resp.status(); let body = resp.text().unwrap_or_default(); @@ -507,13 +507,10 @@ pub fn sb_buscar_por_id_fechamento( #[tauri::command] pub fn sb_atualizar_fechamento( sb: State<'_, SupabaseClient>, - id: String, + id_fechamento: String, updates: serde_json::Value, ) -> Result { - // Tenta primeiro como i64 (id numerico), depois como String (UUID) - let id_i64 = id.parse::().ok(); - let id_str = &id; - sb.atualizar_fechamento(id_i64, id_str, &updates) + sb.atualizar_fechamento(&id_fechamento, &updates) } #[tauri::command] diff --git a/src/index.html b/src/index.html index 402545f..e709eb5 100644 --- a/src/index.html +++ b/src/index.html @@ -2941,6 +2941,9 @@ window.salvarEdicaoModal = async function() { const operador = estado.operador || full.operador || ''; const updates = { + // Chave natural — essencial para o Supabase encontrar o registro + id_fechamento: inp('edit-loja') + '_' + inp('edit-data') + '_' + inp('edit-operador'), + // Identificação loja: inp('edit-loja'), data: inp('edit-data'), @@ -3001,13 +3004,15 @@ window.salvarEdicaoModal = async function() { if (!hasTauri) { alert('Tauri não disponível.'); return; } try { - // Usa uuid (string) — que é o id externo do registro no Supabase - const uuid = full.uuid || full.id; - if (!uuid) { alert('UUID do registro não encontrado.'); return; } - console.log('[DEBUG] salvarEdicaoModal uuid:', uuid, 'updates:', JSON.stringify(updates)); + // Usa id_fechamento que é a chave natural do registro + const id_fechamento = full.id_fechamento || (full.loja && full.data && full.operador + ? `${full.loja}_${full.data}_${full.operador}`.toLowerCase().replace(/ /g, '_') + : null); + if (!id_fechamento) { alert('id_fechamento não encontrado.'); return; } + console.log('[DEBUG] salvarEdicaoModal id_fechamento:', id_fechamento, 'updates:', JSON.stringify(updates)); console.log('[DEBUG] invoking sb_atualizar_fechamento...'); - const result = await window.__TAURI__.core.invoke('sb_atualizar_fechamento', { id: uuid, updates: JSON.stringify(updates) }); + const result = await window.__TAURI__.core.invoke('sb_atualizar_fechamento', { id_fechamento, updates: JSON.stringify(updates) }); console.log('[DEBUG] invoke result:', result); closeEditModal(); closeRelatorioModal();