diff --git a/code/src/app.rs b/code/src/app.rs index b4f1c26..88657a1 100644 --- a/code/src/app.rs +++ b/code/src/app.rs @@ -246,13 +246,15 @@ impl egui_dock::TabViewer for MainTabViewer{ } } struct WorkerTabViewer{ + db_oper: DBOperator, workers: Arc>>>, positions: Arc>>>, show_add_modal: bool, add_worker_name: String, - selected_position: String, + selected_position_id: i32, add_worker_hire_date: String, - can_add: bool + can_add: bool, + rt: tokio::runtime::Runtime } impl WorkerTabViewer{ @@ -261,7 +263,7 @@ impl WorkerTabViewer{ if ui.button("Добавить").clicked() { self.show_add_modal = true; self.add_worker_name = String::new(); - self.selected_position = String::new(); + self.selected_position_id = 1; }; if ui.button("Уволить").clicked() { @@ -286,9 +288,11 @@ impl WorkerTabViewer{ egui::ComboBox::from_label("Выбрать!") .selected_text(format!("{}",self.selected_position)) .show_ui(ui, |ui|{ - ui.selectable_value(&mut self.selected_position, "Гойдазовчик".to_owned(), "Гойдазовчик"); - ui.selectable_value(&mut self.selected_position, "Гойдазовчик1".to_owned(), "Гойдазовчик"); - ui.selectable_value(&mut self.selected_position, "Гойдазовчик2".to_owned(), "Гойдазовчик"); + self.rt.block_on(async{ + for pos in self.db_oper.get_position().await.unwrap().iter(){ + ui.selectable_value(&mut self.selected_position, pos.id, pos.name); + } + });p }); }); }); @@ -303,7 +307,27 @@ impl WorkerTabViewer{ ui.vertical_centered(|ui|{ let resp = ui.add_enabled(self.can_add, egui::Button::new("Добавить")); if resp.clicked(){ - todo!(); + self.rt.block_on(async{ + let poss = self.db_oper.get_position().await.unwrap(); + + self.db_oper.add_worker(Worker + { + id: 0, + full_name: self.add_worker_name.clone(), + hire_date: chrono::DateTime::parse_from_str(&self.add_worker_hire_date, "%d-%m-%Y") + .unwrap() + .into(), + position: (|| -> Position{ + for pos in poss{ + if pos.id.to_string() == self.selected_position{ + return pos + } + }) + }, + is_fired: () + }); + }) + } // if ui.button("Добавить").clicked(){ @@ -387,6 +411,8 @@ impl Default for WorkerTabViewer{ selected_position: String::new(), add_worker_hire_date: String::new(), can_add: false, + db_oper. + rt } } } \ No newline at end of file diff --git a/code/src/database.rs b/code/src/database.rs index 6786893..72e5a37 100644 --- a/code/src/database.rs +++ b/code/src/database.rs @@ -3,6 +3,7 @@ use sqlx::mysql::MySqlPool; use dotenvy::dotenv_override; +use sqlx::mysql::MySqlQueryResult; use std::env; // use crate::schema::equipment::dsl::*; // use crate::schema::worker::dsl::*; @@ -61,19 +62,30 @@ impl DBOperator{ } Ok(false) } - pub async fn add_worker(&self, worker: Worker){ - match sqlx::query!("INSERT INTO Brewery.worker (id, position_id, hire_date, is_fired, full_name) VALUES(0, ?, ?, ?, ?);",worker.position.id, worker.hire_date ,worker.is_fired,worker.full_name).fetch(&self.pool).{ + pub async fn add_worker(&self, worker: Worker) -> Result{ + // sqlx::query!("INSERT INTO Brewery.worker (id, position_id, hire_date, is_fired, full_name) VALUES(0, ?, ?, ?, ?);",worker.position.id, worker.hire_date ,worker.is_fired,worker.full_name) + match(sqlx::query("INSERT INTO Brewery.worker (id, position_id, hire_date, is_fired, full_name) VALUES(0, ?, ?, ?, ?);") + .bind(worker.position.id) + .bind(worker.hire_date) + .bind(worker.is_fired) + .bind(worker.full_name) + .execute(&self.pool) + .await){ Ok(_) =>{ - + return Ok(true) + }, + Err(_) =>{ + Ok(false) } } - } + } } + pub async fn estabilish_connection() -> Result<(), sqlx::Error>{ dotenv_override().ok(); let db_url = env::var("DATABASE_URL").expect("DATABASE_URL установи!");