Compare commits

...

21 Commits

Author SHA1 Message Date
root 292d0b85d9 fix: fmtCell inline money formatting (remove fmtMoney ref)
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-06-30 14:34:23 +00:00
root a8edab029d feat: modal edicao completo com todas as grades editaveis — cartoes, vales, despesas, sangrias, pixcnPJ, receber, cancelamentos
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-06-30 14:27:01 +00:00
root cbaef8772d fix: askPassword closure — pw declared inside function (was global ref)
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-06-30 14:06:45 +00:00
root 80740afbf0 fix: parseNum vendas; screen: edit modal separado c/ senha, edited_at/by, fmtBR inputs
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-06-30 13:57:03 +00:00
root 7134c85bb7 fix: carregar dia anterior - cartoes como numeros crus, NaN makeRow, campos sistema populados
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-06-30 13:35:13 +00:00
root 4a157d27cb fix: vendas no buildPrintHTML e consultaToPrintData, fmtMoneyInput R$, auto-migration no Rust
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-06-30 02:52:18 +00:00
root a0f2f91131 fix: IIFE closure no botao Editar caixa completo; feat: campo Vendas em todo lugar
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-06-30 00:33:58 +00:00
root 15f141c191 feat: botao Editar caixa completo - restaura todos os lancamentos detalhados
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-06-29 23:30:58 +00:00
root 96a84ec194 fix: parseNum bug, todos campos do caixa editaveis no modal
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-06-29 13:58:01 +00:00
root 7d0c416248 fix: id do registro em campo oculto, fallback chain no salvar
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-06-29 12:51:35 +00:00
root 60ec60bf29 fix: sb_atualizar_fechamento aceita id numerico ou UUID string
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-06-29 12:39:50 +00:00
root 6d9e28a6f2 fix: salvar usa _currentConsultaId (id numerico), nao full.id
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-06-29 12:06:32 +00:00
root ecb9ce3926 fix: sb_buscar_por_id chama metodo correto (id numerico), tenta id primeiro no openConsultaRegistro
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-06-28 13:54:45 +00:00
root de5d5aaafb fix: salvar edicao com id numerico, relatorio cartoes detalhado
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-06-28 13:44:08 +00:00
root a11db54ffc fix: fmtDiff hoisted, idFechamento snake_case
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-06-28 12:56:30 +00:00
root 674caf2b7a fix: senha admin com asteriscos, imprimir via iframe, relatorio detalhado (80mm)
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-06-28 12:49:37 +00:00
root bdfd54e0cf fix: corrige uuid→id nas queries do Supabase (coluna inexistente)
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-06-28 12:36:55 +00:00
root 9c64c06ed9 fix: normaliza loja (sem acento + lowercase) em listar_recentes
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-06-28 02:55:22 +00:00
root 3cf1864af9 v1.3.31: Dia Anterior — modal consulta com lista do Supabase, relatorio para impressao, edicao com senha admin (saldo_esperado + observacoes)
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-06-28 02:27:42 +00:00
root aa147885a8 v1.3.30: diferença tela lançamento usa sysTotal (troco+credito+debito+alimentacao+vales+receber+pix+pixcnpj) - saldo_esperado - cancelamentos
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-06-28 01:52:50 +00:00
root 00fa17fa52 v1.3.29: ignora HTTP 409 duplicate (ja existe = ok)
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-06-27 23:54:07 +00:00
3 changed files with 1096 additions and 113 deletions
+1
View File
@@ -97,6 +97,7 @@ fn main() {
plugins::supabase::sb_listar_recentes,
plugins::supabase::sb_buscar_por_id,
plugins::supabase::sb_buscar_por_uuid,
plugins::supabase::sb_buscar_por_id_fechamento,
plugins::supabase::sb_atualizar_fechamento,
plugins::supabase::sb_salvar_listas,
plugins::supabase::sb_carregar_listas,
+98 -13
View File
@@ -140,9 +140,10 @@ impl SupabaseClient {
"observacoes": estado.get("observacoes").and_then(|v| v.as_str()).unwrap_or(""),
"clientes": estado.get("clientes").and_then(|v| v.as_i64()).unwrap_or(0),
"frango": estado.get("frango").and_then(|v| v.as_i64()).unwrap_or(0),
"vendas": estado.get("vendas").and_then(|v| v.as_f64()).unwrap_or(0.0),
});
// Upsert via POST com Prefer: resolution=merge-duplicates
// Primeiro tenta INSERT (upsert via Prefer)
let resp = self
.http
.post(&format!("{}/rest/v1/fechamentos_web", self.base_url))
@@ -152,7 +153,7 @@ impl SupabaseClient {
.send()?;
let status = resp.status();
if status.is_success() {
if status.is_success() || status.as_u16() == 409 {
Ok(serde_json::json!({ "ok": true, "id_fechamento": id_fechamento }))
} else {
let body = resp.text().unwrap_or_default();
@@ -193,10 +194,10 @@ impl SupabaseClient {
}
}
/// Busca um fechamento pelo UUID.
/// Busca um fechamento pelo campo "id" (UUID externo).
pub fn buscar_por_uuid(&self, uuid: &str) -> Result<Option<Value>, SupabaseError> {
let url = format!(
"{}/rest/v1/fechamentos_web?uuid=eq.{}&select=*",
"{}/rest/v1/fechamentos_web?id=eq.{}&select=*",
self.base_url, uuid
);
@@ -220,13 +221,42 @@ impl SupabaseClient {
}
}
/// Atualiza campos específicos de um fechamento pelo UUID (PATCH).
pub fn atualizar_fechamento(&self, uuid: &str, updates: &serde_json::Value) -> Result<Value, SupabaseError> {
/// Busca um fechamento pelo id_fechamento (ex: uniao_2026-06-24_silanea).
pub fn buscar_por_id_fechamento(&self, id_fechamento: &str) -> Result<Option<Value>, SupabaseError> {
let url = format!(
"{}/rest/v1/fechamentos_web?uuid=eq.{}",
self.base_url, uuid
"{}/rest/v1/fechamentos_web?id_fechamento=eq.{}&select=*",
self.base_url, urlencoding::encode(id_fechamento)
);
let resp = self
.http
.get(&url)
.headers(self.headers(false))
.send()?;
if resp.status().is_success() {
let arr: Vec<Value> = resp.json()?;
Ok(arr.into_iter().next())
} else {
let status = resp.status();
let body = resp.text().unwrap_or_default();
Err(SupabaseError::Api(format!(
"HTTP {}: {}",
status.as_u16(),
body
)))
}
}
/// Atualiza campos específicos de um fechamento pelo id numérico (pk) ou UUID.
pub fn atualizar_fechamento(&self, id: Option<i64>, uuid: &str, updates: &serde_json::Value) -> Result<Value, SupabaseError> {
// 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)
};
let resp = self
.http
.patch(&url)
@@ -235,7 +265,7 @@ impl SupabaseClient {
.send()?;
if resp.status().is_success() {
Ok(serde_json::json!({ "ok": true, "uuid": uuid }))
Ok(serde_json::json!({ "ok": true, "id": id.unwrap_or(0) }))
} else {
let status = resp.status();
let body = resp.text().unwrap_or_default();
@@ -247,10 +277,11 @@ impl SupabaseClient {
}
}
pub fn listar_recentes(&self, loja: &str, limite: i64) -> Result<Vec<Value>, SupabaseError> {
let loja_normalized = sem_acento(&loja.to_lowercase());
let url = format!(
"{}/rest/v1/fechamentos_web?loja=eq.{}&order=data.desc,atualizado_em.desc&limit={}&select=id,uuid,data,operador,turno,saldo_troco,saldo_esperado,fechamento,sync_status,observacoes,atualizado_em",
"{}/rest/v1/fechamentos_web?loja=eq.{}&order=data.desc,atualizado_em.desc&limit={}&select=id,id_fechamento,data,operador,turno,saldo_troco,saldo_esperado,fechamento_dinheiro,fechamento_cartoes,fechamento_areceber,diferenca,status_diferenca,observacoes,atualizado_em",
self.base_url,
urlencoding::encode(loja),
urlencoding::encode(&loja_normalized),
limite,
);
@@ -366,6 +397,48 @@ impl SupabaseClient {
}
}
/// Tenta forçar PostgREST a recarregar schema com novas colunas (vendas, edited_at, edited_by).
/// Estratégia: INSERT com novas colunas → se PGRST204, espera 1.5s → retry.
/// Fire-and-forget — falha não bloqueia.
pub fn run_migration(&self) {
let payload = serde_json::json!({
"id_fechamento": "_mig_probe_1900",
"loja": "_probe_",
"data": "1900-01-01",
"operador": "_probe_",
"vendas": 0,
"edited_at": null,
"edited_by": null
});
let r1 = self.http
.post(&format!("{}/rest/v1/fechamentos_web", self.base_url))
.headers(self.headers(true))
.header("Prefer", "resolution=merge-duplicates")
.json(&payload)
.send();
if let Ok(resp) = r1 {
if resp.status().as_u16() == 400 {
std::thread::sleep(std::time::Duration::from_millis(1500));
let _ = self.http
.post(&format!("{}/rest/v1/fechamentos_web", self.base_url))
.headers(self.headers(true))
.header("Prefer", "resolution=merge-duplicates")
.json(&serde_json::json!({
"id_fechamento": "_mig_probe_1900",
"vendas": 0,
"edited_at": null,
"edited_by": null
}))
.send();
}
}
// Limpa probe
let _ = self.http
.delete(&format!("{}/rest/v1/fechamentos_web?id_fechamento=eq._mig_probe_1900", self.base_url))
.headers(self.headers(true))
.send();
}
/// Verifica se está online.
pub fn health_check(&self) -> bool {
let url = format!("{}/rest/v1/?limit=0", self.base_url);
@@ -422,13 +495,25 @@ pub fn sb_buscar_por_uuid(
sb.buscar_por_uuid(&uuid)
}
/// Busca um fechamento pelo id_fechamento (ex: uniao_2026-06-24_silanea).
#[tauri::command]
pub fn sb_buscar_por_id_fechamento(
sb: State<'_, SupabaseClient>,
id_fechamento: String,
) -> Result<Option<serde_json::Value>, SupabaseError> {
sb.buscar_por_id_fechamento(&id_fechamento)
}
#[tauri::command]
pub fn sb_atualizar_fechamento(
sb: State<'_, SupabaseClient>,
uuid: String,
id: String,
updates: serde_json::Value,
) -> Result<serde_json::Value, SupabaseError> {
sb.atualizar_fechamento(&uuid, &updates)
// Tenta primeiro como i64 (id numerico), depois como String (UUID)
let id_i64 = id.parse::<i64>().ok();
let id_str = &id;
sb.atualizar_fechamento(id_i64, id_str, &updates)
}
#[tauri::command]
+997 -100
View File
File diff suppressed because it is too large Load Diff