Compare commits

...

3 Commits

Author SHA1 Message Date
root 9a4ccabd1b fix: ler resposta real do PATCH e logar body enviado/recebido para debug
Build Fechamento de Caixa / build (macos-14, app) (push) Has been cancelled
Build Fechamento de Caixa / build (ubuntu-22.04, deb) (push) Has been cancelled
Build Fechamento de Caixa / build (windows-2022, msi) (push) Has been cancelled
2026-07-01 12:11:35 +00:00
root 32728eec37 fix: rename_all snake_case no comando sb_atualizar_fechamento (Tauri converte id_fechamento pra idFechamento na interface JS)
Build Fechamento de Caixa / build (macos-14, app) (push) Has been cancelled
Build Fechamento de Caixa / build (ubuntu-22.04, deb) (push) Has been cancelled
Build Fechamento de Caixa / build (windows-2022, msi) (push) Has been cancelled
2026-07-01 11:53:46 +00:00
root 905ca253d7 fix: PATCH usa id_fechamento (não id/uuid); inclui id_fechamento no updates; Rust sb_atualizar_fechamento usa id_fechamento como chave
Build Fechamento de Caixa / build (macos-14, app) (push) Has been cancelled
Build Fechamento de Caixa / build (ubuntu-22.04, deb) (push) Has been cancelled
Build Fechamento de Caixa / build (windows-2022, msi) (push) Has been cancelled
2026-07-01 01:46:01 +00:00
2 changed files with 34 additions and 22 deletions
+24 -17
View File
@@ -248,27 +248,37 @@ impl SupabaseClient {
} }
} }
/// Atualiza campos específicos de um fechamento pelo id numérico (pk) ou UUID. /// Atualiza campos específicos de um fechamento pelo id_fechamento.
pub fn atualizar_fechamento(&self, id: Option<i64>, uuid: &str, updates: &serde_json::Value) -> Result<Value, SupabaseError> { pub fn atualizar_fechamento(&self, id_fechamento: &str, updates: &serde_json::Value) -> Result<Value, SupabaseError> {
// Se temos id numerico, usa id=eq.; senao usa id=eq.UUID let url = format!(
let url = if let Some(num) = id { "{}/rest/v1/fechamentos_web?id_fechamento=eq.{}",
format!("{}/rest/v1/fechamentos_web?id=eq.{}", self.base_url, num) self.base_url,
} else { urlencoding::encode(id_fechamento)
format!("{}/rest/v1/fechamentos_web?id=eq.{}", self.base_url, uuid) );
};
// Log do que está sendo enviado (debug)
log::info!("[PATCH] url={} body={}", url, updates);
let resp = self let resp = self
.http .http
.patch(&url) .patch(&url)
.headers(self.headers(true)) .headers(self.headers(true))
.header("Prefer", "return=representation")
.json(updates) .json(updates)
.send()?; .send()?;
if resp.status().is_success() { let status = resp.status();
Ok(serde_json::json!({ "ok": true, "id": id.unwrap_or(0) })) if status.is_success() {
// Ler a resposta real do Supabase (retorna o registro atualizado)
if let Ok(ret) = resp.json::<serde_json::Value>() {
log::info!("[PATCH] sucesso — resposta: {}", ret);
} else {
log::warn!("[PATCH] sucesso mas não conseguiu ler resposta");
}
Ok(serde_json::json!({ "ok": true, "id_fechamento": id_fechamento }))
} else { } else {
let status = resp.status();
let body = resp.text().unwrap_or_default(); let body = resp.text().unwrap_or_default();
log::error!("[PATCH] HTTP {} body: {}", status.as_u16(), body);
Err(SupabaseError::Api(format!( Err(SupabaseError::Api(format!(
"HTTP {}: {}", "HTTP {}: {}",
status.as_u16(), status.as_u16(),
@@ -504,16 +514,13 @@ pub fn sb_buscar_por_id_fechamento(
sb.buscar_por_id_fechamento(&id_fechamento) sb.buscar_por_id_fechamento(&id_fechamento)
} }
#[tauri::command] #[tauri::command(rename_all = "snake_case")]
pub fn sb_atualizar_fechamento( pub fn sb_atualizar_fechamento(
sb: State<'_, SupabaseClient>, sb: State<'_, SupabaseClient>,
id: String, id_fechamento: String,
updates: serde_json::Value, updates: serde_json::Value,
) -> Result<serde_json::Value, SupabaseError> { ) -> Result<serde_json::Value, SupabaseError> {
// Tenta primeiro como i64 (id numerico), depois como String (UUID) sb.atualizar_fechamento(&id_fechamento, &updates)
let id_i64 = id.parse::<i64>().ok();
let id_str = &id;
sb.atualizar_fechamento(id_i64, id_str, &updates)
} }
#[tauri::command] #[tauri::command]
+10 -5
View File
@@ -2941,6 +2941,9 @@ window.salvarEdicaoModal = async function() {
const operador = estado.operador || full.operador || ''; const operador = estado.operador || full.operador || '';
const updates = { const updates = {
// Chave natural — essencial para o Supabase encontrar o registro
id_fechamento: inp('edit-loja') + '_' + inp('edit-data') + '_' + inp('edit-operador'),
// Identificação // Identificação
loja: inp('edit-loja'), loja: inp('edit-loja'),
data: inp('edit-data'), data: inp('edit-data'),
@@ -3001,13 +3004,15 @@ window.salvarEdicaoModal = async function() {
if (!hasTauri) { alert('Tauri não disponível.'); return; } if (!hasTauri) { alert('Tauri não disponível.'); return; }
try { try {
// Usa uuid (string) — que é o id externo do registro no Supabase // Usa id_fechamento que é a chave natural do registro
const uuid = full.uuid || full.id; const id_fechamento = full.id_fechamento || (full.loja && full.data && full.operador
if (!uuid) { alert('UUID do registro não encontrado.'); return; } ? `${full.loja}_${full.data}_${full.operador}`.toLowerCase().replace(/ /g, '_')
console.log('[DEBUG] salvarEdicaoModal uuid:', uuid, 'updates:', JSON.stringify(updates)); : 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...'); 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); console.log('[DEBUG] invoke result:', result);
closeEditModal(); closeEditModal();
closeRelatorioModal(); closeRelatorioModal();