v1.3.25: add sem_acento() - remove acentos de loja antes de enviar (União→uniao)
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

This commit is contained in:
root
2026-06-26 19:22:10 +00:00
parent 3f6b2ae6e4
commit 77e927fef0
+35 -3
View File
@@ -7,6 +7,29 @@ use std::time::Duration;
use tauri::State;
use thiserror::Error;
/// Remove acentos de uma string (ex: "União" → "Uniao")
fn sem_acento(s: &str) -> String {
s.replace("ã", "a")
.replace("á", "a")
.replace("à", "a")
.replace("â", "a")
.replace("é", "e")
.replace("è", "e")
.replace("ê", "e")
.replace("í", "i")
.replace("ì", "i")
.replace("î", "i")
.replace("õ", "o")
.replace("ó", "o")
.replace("ò", "o")
.replace("ô", "o")
.replace("ú", "u")
.replace("ù", "u")
.replace("û", "u")
.replace("ç", "c")
.replace("ñ", "n")
}
#[derive(Error, Debug)]
#[allow(dead_code)]
pub enum SupabaseError {
@@ -69,20 +92,29 @@ impl SupabaseClient {
/// Salva/atualiza um fechamento na tabela `fechamentos_web`.
pub fn salvar_fechamento(&self, estado: &serde_json::Value) -> Result<Value, SupabaseError> {
// id_fechamento = {loja}_{data}_{operador} (唯一, existe na tabela)
let loja = estado.get("loja").and_then(|v| v.as_str()).unwrap_or("uniao");
// Normaliza loja e turno para minúsculo (CHECK constraints do Postgres)
let loja = estado
.get("loja")
.and_then(|v| v.as_str())
.map(|s| sem_acento(&s.to_lowercase()).replace(" ", "_"))
.unwrap_or_else(|| "uniao".to_string());
let data = estado.get("data").and_then(|v| v.as_str()).unwrap_or("");
let operador = estado.get("operador").and_then(|v| v.as_str()).unwrap_or("");
let id_fechamento = format!("{}_{}_{}", loja, data, operador)
.to_lowercase()
.replace(" ", "_");
let turno = estado
.get("turno")
.and_then(|v| v.as_str())
.map(|s| s.to_lowercase())
.unwrap_or_else(|| "manha".to_string());
let payload = serde_json::json!({
"id_fechamento": id_fechamento,
"loja": loja,
"data": data,
"operador": operador,
"turno": estado.get("turno").and_then(|v| v.as_str()).unwrap_or(""),
"turno": turno,
"saldo_troco": estado.get("saldo_troco").and_then(|v| v.as_f64()).unwrap_or(0.0),
"saldo_credito": estado.get("credito").and_then(|v| v.as_f64()).unwrap_or(0.0),
"saldo_debito": estado.get("debito").and_then(|v| v.as_f64()).unwrap_or(0.0),