fix: 5 problemas recorrentes
1. PIX CNPJ: linha separada no Saldo de Caixa + incluído na soma sys-total 2. Casas decimais: fmtNum sempre 2 casas (padrão dinheiro) 3. btn-anterior: agora busca do Supabase via sb_carregar_rascunho e repovoa todas as tabelas 4. Impressão: reimplementado usb_windows (WriteFile no Windows); adicionado modo teste (grava .bin) 5. Supabase: feedback de erro com console.error; storage salvar_agora persiste TODAS as tabelas (sangrias, pixcnpj, vales, cancelamentos)
This commit is contained in:
@@ -383,39 +383,98 @@ pub fn salvar_fechamento(
|
||||
let saldo_troco = estado.get("saldo_troco").and_then(|v| v.as_f64()).unwrap_or(0.0);
|
||||
let fechamento = estado.get("fechamento").and_then(|v| v.as_f64()).unwrap_or(0.0);
|
||||
let saldo_esperado = saldo_troco + fechamento;
|
||||
let diferenca = estado.get("diferenca").and_then(|v| v.as_f64()).unwrap_or(0.0);
|
||||
|
||||
// Constrói TableData a partir de despesas/receber arrays
|
||||
let despesas: Vec<serde_json::Value> = estado.get("despesas")
|
||||
// Constrói TableData a partir de todas as tabelas do frontend
|
||||
let despesas: Vec<serde_json::Value> = estado
|
||||
.get("despesas")
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| arr.to_vec())
|
||||
.unwrap_or_default();
|
||||
let receber: Vec<serde_json::Value> = estado.get("receber")
|
||||
let sangrias: Vec<serde_json::Value> = estado
|
||||
.get("sangrias")
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| arr.to_vec())
|
||||
.unwrap_or_default();
|
||||
let pixcnpj: Vec<serde_json::Value> = estado
|
||||
.get("pixcnpj")
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| arr.to_vec())
|
||||
.unwrap_or_default();
|
||||
let vales: Vec<serde_json::Value> = estado
|
||||
.get("vales")
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| arr.to_vec())
|
||||
.unwrap_or_default();
|
||||
let receber: Vec<serde_json::Value> = estado
|
||||
.get("receber")
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| arr.to_vec())
|
||||
.unwrap_or_default();
|
||||
let cancelamentos: Vec<serde_json::Value> = estado
|
||||
.get("cancelamentos")
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| arr.to_vec())
|
||||
.unwrap_or_default();
|
||||
let cartoes_json = estado.get("cartoes");
|
||||
|
||||
let to_table_row = |v: &serde_json::Value| -> TableRow {
|
||||
let to_table_row = |v: &serde_json::Value, _tipo: &str| -> TableRow {
|
||||
TableRow {
|
||||
descricao: v.get("desc").and_then(|s| s.as_str()).map(String::from),
|
||||
descricao: v.get("desc").or_else(|| v.get("nome")).and_then(|s| s.as_str()).map(String::from),
|
||||
retirada: v.get("retirada").and_then(|n| n.as_f64()),
|
||||
valor: v.get("valor").and_then(|n| n.as_f64()),
|
||||
motivo: v.get("motivo").and_then(|s| s.as_str()).map(String::from),
|
||||
cliente: v.get("nome").and_then(|s| s.as_str()).map(String::from),
|
||||
// hora, gerente, obs, numero vão para extra via flatten
|
||||
extra: std::collections::HashMap::new(),
|
||||
..Default::default()
|
||||
}
|
||||
};
|
||||
|
||||
let tabelas = TableData {
|
||||
despesas: despesas.iter().map(to_table_row).collect(),
|
||||
areceber: receber.iter().map(to_table_row).collect(),
|
||||
..Default::default()
|
||||
despesas: despesas.iter().map(|v| to_table_row(v, "despesas")).collect(),
|
||||
sangrias: sangrias.iter().map(|v| to_table_row(v, "sangrias")).collect(),
|
||||
pixcnpj: pixcnpj.iter().map(|v| to_table_row(v, "pixcnpj")).collect(),
|
||||
vales: vales.iter().map(|v| to_table_row(v, "vales")).collect(),
|
||||
areceber: receber.iter().map(|v| to_table_row(v, "receber")).collect(),
|
||||
cancelamentos: cancelamentos.iter().map(|v| to_table_row(v, "cancelamentos")).collect(),
|
||||
};
|
||||
|
||||
// Cartoes como scalars
|
||||
let cartoes_json = estado.get("cartoes");
|
||||
let cartoes = CartaoData {
|
||||
credito: vec![TableRow { valor: cartoes_json.and_then(|c| c.get("credito")).and_then(|v| v.as_f64()), ..Default::default() }],
|
||||
debito: vec![TableRow { valor: cartoes_json.and_then(|c| c.get("debito")).and_then(|v| v.as_f64()), ..Default::default() }],
|
||||
alimentacao: vec![TableRow { valor: cartoes_json.and_then(|c| c.get("alimentacao")).and_then(|v| v.as_f64()), ..Default::default() }],
|
||||
voucher: vec![TableRow { valor: cartoes_json.and_then(|c| c.get("voucher")).and_then(|v| v.as_f64()), ..Default::default() }],
|
||||
credito: cartoes_json
|
||||
.and_then(|c| c.get("credito"))
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| {
|
||||
arr.iter()
|
||||
.map(|v| TableRow { valor: v.as_f64(), ..Default::default() })
|
||||
.collect()
|
||||
})
|
||||
.unwrap_or_default(),
|
||||
debito: cartoes_json
|
||||
.and_then(|c| c.get("debito"))
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| {
|
||||
arr.iter()
|
||||
.map(|v| TableRow { valor: v.as_f64(), ..Default::default() })
|
||||
.collect()
|
||||
})
|
||||
.unwrap_or_default(),
|
||||
alimentacao: cartoes_json
|
||||
.and_then(|c| c.get("alimentacao"))
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| {
|
||||
arr.iter()
|
||||
.map(|v| TableRow { valor: v.as_f64(), ..Default::default() })
|
||||
.collect()
|
||||
})
|
||||
.unwrap_or_default(),
|
||||
voucher: cartoes_json
|
||||
.and_then(|c| c.get("pix"))
|
||||
.and_then(|v| v.as_array())
|
||||
.map(|arr| {
|
||||
arr.iter()
|
||||
.map(|v| TableRow { valor: v.as_f64(), ..Default::default() })
|
||||
.collect()
|
||||
})
|
||||
.unwrap_or_default(),
|
||||
};
|
||||
|
||||
let estado_rust = FechamentoEstado {
|
||||
|
||||
Reference in New Issue
Block a user