Add Cash
This commit is contained in:
parent
8a25a5fa82
commit
18814f18e0
5 changed files with 127 additions and 2 deletions
37
Cargo.lock
generated
37
Cargo.lock
generated
|
@ -353,6 +353,7 @@ dependencies = [
|
||||||
"console_error_panic_hook",
|
"console_error_panic_hook",
|
||||||
"curl",
|
"curl",
|
||||||
"leptos",
|
"leptos",
|
||||||
|
"leptos_router",
|
||||||
"openssl",
|
"openssl",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"ring-compat",
|
"ring-compat",
|
||||||
|
@ -2533,6 +2534,42 @@ dependencies = [
|
||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "leptos_router"
|
||||||
|
version = "0.7.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e83cf6033f987f366be6ffa556ee22fa6f9f433cbffd173826fd67327c3ae7ed"
|
||||||
|
dependencies = [
|
||||||
|
"any_spawner",
|
||||||
|
"either_of",
|
||||||
|
"futures",
|
||||||
|
"gloo-net",
|
||||||
|
"js-sys",
|
||||||
|
"leptos",
|
||||||
|
"leptos_router_macro",
|
||||||
|
"once_cell",
|
||||||
|
"or_poisoned",
|
||||||
|
"reactive_graph",
|
||||||
|
"send_wrapper",
|
||||||
|
"tachys",
|
||||||
|
"thiserror 2.0.11",
|
||||||
|
"url",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "leptos_router_macro"
|
||||||
|
version = "0.7.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "84f580227933b49028cd3b6d7cd29ab7c6d30f9777cf0ac774eda2aab000a912"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error2",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.98",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "leptos_server"
|
name = "leptos_server"
|
||||||
version = "0.7.7"
|
version = "0.7.7"
|
||||||
|
|
|
@ -35,6 +35,7 @@ tauri-build = { version = "2", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
leptos = { version = "^0.7", features = ["csr"] }
|
leptos = { version = "^0.7", features = ["csr"] }
|
||||||
|
leptos_router = { version = "^0.7" }
|
||||||
tauri-sys = { path = "../tauri-sys", features = ["core"] }
|
tauri-sys = { path = "../tauri-sys", features = ["core"] }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = { version = "1" }
|
serde_json = { version = "1" }
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
use leptos::prelude::*;
|
use leptos::prelude::*;
|
||||||
use bkbh_lib::commands::*;
|
use bkbh_lib::commands::*;
|
||||||
use leptos::task::spawn_local;
|
use leptos::task::spawn_local;
|
||||||
|
use leptos::web_sys::FormData;
|
||||||
|
use leptos::form::FromFormData;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use bkbh_lib::types::*;
|
use bkbh_lib::types::*;
|
||||||
|
|
||||||
|
@ -54,6 +57,58 @@ fn StoreInput(store: Store) -> impl IntoView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
struct Cash(i64);
|
||||||
|
|
||||||
|
impl std::str::FromStr for Cash {
|
||||||
|
type Err = ();
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
let split: Vec<&str> = s.split(".").collect();
|
||||||
|
let i = i64::from_str(split.get(0).ok_or(())?)
|
||||||
|
.map_err(|e| println!("{:?}", e))?;
|
||||||
|
let f = match split.get(1) {
|
||||||
|
None => 0,
|
||||||
|
Some(fs) => i64::from_str(
|
||||||
|
&format!("00{}", fs)[0..2]
|
||||||
|
)
|
||||||
|
.map_err(|e| println!("{:?}", e))?,
|
||||||
|
};
|
||||||
|
Ok(Cash(i*100+f))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
fn CashInput(value: RwSignal<String>) -> impl IntoView {
|
||||||
|
let txt = "cash";
|
||||||
|
view! {
|
||||||
|
<div
|
||||||
|
class="labelled-input"
|
||||||
|
>
|
||||||
|
<label
|
||||||
|
for=txt.clone()
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
src="assets/cash.svg"
|
||||||
|
class="logo"
|
||||||
|
alt="Bargeld"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
name=txt.clone()
|
||||||
|
id=txt.clone()
|
||||||
|
min=0
|
||||||
|
step=0.01
|
||||||
|
bind:value=value
|
||||||
|
on:change=move |_| {
|
||||||
|
println!("{:?}", value.get());
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
fn AccRadio(acc: Account) -> impl IntoView {
|
fn AccRadio(acc: Account) -> impl IntoView {
|
||||||
let txt = format!("{}", Into::<String>::into(&acc));
|
let txt = format!("{}", Into::<String>::into(&acc));
|
||||||
|
@ -80,9 +135,28 @@ fn AccRadio(acc: Account) -> impl IntoView {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
fn InvForm() -> impl IntoView {
|
fn SubmitButton() -> impl IntoView {
|
||||||
view! {
|
view! {
|
||||||
<form>
|
<button
|
||||||
|
type="submit"
|
||||||
|
class="shout"
|
||||||
|
>
|
||||||
|
"Senden"
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
fn InvForm() -> impl IntoView {
|
||||||
|
let cash = RwSignal::new(String::from("0.00"));
|
||||||
|
view! {
|
||||||
|
<form
|
||||||
|
on:submit=move |ev| {
|
||||||
|
ev.prevent_default();
|
||||||
|
let data = FromFormData::from_event(ev.as_ref()).unwrap();
|
||||||
|
spawn_local(async move {inventory(data).await;});
|
||||||
|
}
|
||||||
|
>
|
||||||
<AccRadio acc=Account::Sumpf />
|
<AccRadio acc=Account::Sumpf />
|
||||||
<AccRadio acc=Account::Heinersyndikat />
|
<AccRadio acc=Account::Heinersyndikat />
|
||||||
<StoreInput store=Store::Aldi />
|
<StoreInput store=Store::Aldi />
|
||||||
|
@ -90,6 +164,8 @@ fn InvForm() -> impl IntoView {
|
||||||
<StoreInput store=Store::Lidl />
|
<StoreInput store=Store::Lidl />
|
||||||
<StoreInput store=Store::Rewe />
|
<StoreInput store=Store::Rewe />
|
||||||
<StoreInput store=Store::Tegut />
|
<StoreInput store=Store::Tegut />
|
||||||
|
<CashInput value=cash />
|
||||||
|
<SubmitButton />
|
||||||
</form>
|
</form>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use tauri_sys::Error;
|
use tauri_sys::Error;
|
||||||
use tauri_sys::core::invoke;
|
use tauri_sys::core::invoke;
|
||||||
use crate::types::*;
|
use crate::types::*;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[derive(serde::Serialize)]
|
#[derive(serde::Serialize)]
|
||||||
pub struct Swap {
|
pub struct Swap {
|
||||||
|
@ -11,3 +12,12 @@ pub async fn swap(store: Store, acc: i64) -> Result<(), Error> {
|
||||||
let args = Swap { store, acc };
|
let args = Swap { store, acc };
|
||||||
invoke("swap", &args).await
|
invoke("swap", &args).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Serialize)]
|
||||||
|
pub struct Inventory {
|
||||||
|
data: HashMap<String, String>,
|
||||||
|
}
|
||||||
|
pub async fn inventory(data: HashMap<String, String>) -> Result<(), Error> {
|
||||||
|
let args = Inventory { data };
|
||||||
|
invoke("inventory", &args).await
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ pub async fn inventory(
|
||||||
data: HashMap<String, String>,
|
data: HashMap<String, String>,
|
||||||
state: State<'_, Mutex<AppState>>,
|
state: State<'_, Mutex<AppState>>,
|
||||||
) -> Result<(), ()> {
|
) -> Result<(), ()> {
|
||||||
|
println!("{:?}", data);
|
||||||
let now = Utc::now().timestamp();
|
let now = Utc::now().timestamp();
|
||||||
let state = state.lock().await;
|
let state = state.lock().await;
|
||||||
let inv = parse_inventory(data)?;
|
let inv = parse_inventory(data)?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue