v1.3.23: Rust salvar_fechamento envia TODAS colunas numeric + clientes/frango; ADD COLUMN clientes/frango no Postgres
This commit is contained in:
@@ -69,58 +69,66 @@ 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> {
|
||||||
let uuid = estado
|
// id_fechamento = {loja}_{data}_{operador} (唯一, existe na tabela)
|
||||||
.get("uuid")
|
let loja = estado.get("loja").and_then(|v| v.as_str()).unwrap_or("uniao");
|
||||||
.and_then(|v| v.as_str())
|
let data = estado.get("data").and_then(|v| v.as_str()).unwrap_or("");
|
||||||
.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 payload = serde_json::json!({
|
let payload = serde_json::json!({
|
||||||
"uuid": uuid,
|
"id_fechamento": id_fechamento,
|
||||||
"loja": estado["loja"],
|
"loja": loja,
|
||||||
"data": estado["data"],
|
"data": data,
|
||||||
"operador": estado["operador"],
|
"operador": operador,
|
||||||
"turno": estado["turno"],
|
"turno": estado.get("turno").and_then(|v| v.as_str()).unwrap_or(""),
|
||||||
"saldo_troco": estado["saldo_troco"],
|
"saldo_troco": estado.get("saldo_troco").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
"saldo_esperado": estado["saldo_esperado"],
|
"saldo_credito": estado.get("credito").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
"fechamento": estado["fechamento"],
|
"saldo_debito": estado.get("debito").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"saldo_alimentacao": estado.get("alimentacao").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"saldo_vales": estado.get("vales").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"saldo_areceber": estado.get("areceber").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"saldo_pixcnpj": estado.get("pixcnpj").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"fechamento_dinheiro": estado.get("fd").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"fechamento_cartoes": estado.get("fc").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"fechamento_areceber": estado.get("fr").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_sangrias": estado.get("total_sangrias").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_despesas": estado.get("total_despesas").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_cancelamentos": estado.get("total_cancelamentos").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_vales": estado.get("total_vales").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_pixcnpj": estado.get("total_pixcnpj").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_areceber": estado.get("total_areceber").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_cartao_credito": estado.get("total_credito").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_cartao_debito": estado.get("total_debito").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_cartao_alimentacao": estado.get("total_alimentacao").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"total_cartao_pix": estado.get("total_pix").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
|
"saldo_esperado": estado.get("saldo_esperado").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
||||||
"dados": estado,
|
"dados": estado,
|
||||||
"observacoes": "rascunho",
|
"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),
|
||||||
});
|
});
|
||||||
|
|
||||||
let _url = format!(
|
|
||||||
"{}/rest/v1/fechamentos_web?uuid=eq.{}&select=id",
|
|
||||||
self.base_url, uuid
|
|
||||||
);
|
|
||||||
|
|
||||||
// Upsert via POST com Prefer: resolution=merge-duplicates
|
// Upsert via POST com Prefer: resolution=merge-duplicates
|
||||||
let resp = self
|
let resp = self
|
||||||
.http
|
.http
|
||||||
.post(&format!("{}/rest/v1/rpc/upsert_fechamento", self.base_url))
|
.post(&format!("{}/rest/v1/fechamentos_web", self.base_url))
|
||||||
.headers(self.headers(true))
|
.headers(self.headers(true))
|
||||||
|
.header("Prefer", "resolution=merge-duplicates")
|
||||||
.json(&payload)
|
.json(&payload)
|
||||||
.send()?;
|
.send()?;
|
||||||
|
|
||||||
if resp.status().is_success() {
|
let status = resp.status();
|
||||||
Ok(serde_json::json!({ "ok": true, "uuid": uuid }))
|
if status.is_success() {
|
||||||
|
Ok(serde_json::json!({ "ok": true, "id_fechamento": id_fechamento }))
|
||||||
} else {
|
} else {
|
||||||
let body = resp.text().unwrap_or_default();
|
let body = resp.text().unwrap_or_default();
|
||||||
// Fallback: tenta POST direto na tabela
|
Err(SupabaseError::Api(format!(
|
||||||
let resp2 = self
|
"HTTP {}: {}",
|
||||||
.http
|
status.as_u16(),
|
||||||
.post(&format!("{}/rest/v1/fechamentos_web", self.base_url))
|
body
|
||||||
.headers(self.headers(true))
|
)))
|
||||||
.header("Prefer", "resolution=merge-duplicates")
|
|
||||||
.json(&payload)
|
|
||||||
.send()?;
|
|
||||||
if resp2.status().is_success() {
|
|
||||||
Ok(serde_json::json!({ "ok": true, "uuid": uuid }))
|
|
||||||
} else {
|
|
||||||
Err(SupabaseError::Api(format!(
|
|
||||||
"HTTP {}: {}",
|
|
||||||
resp2.status().as_u16(),
|
|
||||||
body
|
|
||||||
)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user