v1.3.25: add sem_acento() - remove acentos de loja antes de enviar (União→uniao)
This commit is contained in:
@@ -7,6 +7,29 @@ use std::time::Duration;
|
|||||||
use tauri::State;
|
use tauri::State;
|
||||||
use thiserror::Error;
|
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)]
|
#[derive(Error, Debug)]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub enum SupabaseError {
|
pub enum SupabaseError {
|
||||||
@@ -69,20 +92,29 @@ impl SupabaseClient {
|
|||||||
|
|
||||||
/// Salva/atualiza um fechamento na tabela `fechamentos_web`.
|
/// Salva/atualiza um fechamento na tabela `fechamentos_web`.
|
||||||
pub fn salvar_fechamento(&self, estado: &serde_json::Value) -> Result<Value, SupabaseError> {
|
pub fn salvar_fechamento(&self, estado: &serde_json::Value) -> Result<Value, SupabaseError> {
|
||||||
// id_fechamento = {loja}_{data}_{operador} (唯一, existe na tabela)
|
// Normaliza loja e turno para minúsculo (CHECK constraints do Postgres)
|
||||||
let loja = estado.get("loja").and_then(|v| v.as_str()).unwrap_or("uniao");
|
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 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 operador = estado.get("operador").and_then(|v| v.as_str()).unwrap_or("");
|
||||||
let id_fechamento = format!("{}_{}_{}", loja, data, operador)
|
let id_fechamento = format!("{}_{}_{}", loja, data, operador)
|
||||||
.to_lowercase()
|
.to_lowercase()
|
||||||
.replace(" ", "_");
|
.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!({
|
let payload = serde_json::json!({
|
||||||
"id_fechamento": id_fechamento,
|
"id_fechamento": id_fechamento,
|
||||||
"loja": loja,
|
"loja": loja,
|
||||||
"data": data,
|
"data": data,
|
||||||
"operador": operador,
|
"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_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_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),
|
"saldo_debito": estado.get("debito").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
|||||||
Reference in New Issue
Block a user