master
Алексей Алексей 2026-05-26 11:13:49 +10:00
parent 30ad04e444
commit 6cb11f7ccf
2 changed files with 49 additions and 11 deletions

View File

@ -246,13 +246,15 @@ impl egui_dock::TabViewer for MainTabViewer{
} }
} }
struct WorkerTabViewer{ struct WorkerTabViewer{
db_oper: DBOperator,
workers: Arc<RwLock<Option<Vec<Worker>>>>, workers: Arc<RwLock<Option<Vec<Worker>>>>,
positions: Arc<RwLock<Option<Vec<Position>>>>, positions: Arc<RwLock<Option<Vec<Position>>>>,
show_add_modal: bool, show_add_modal: bool,
add_worker_name: String, add_worker_name: String,
selected_position: String, selected_position_id: i32,
add_worker_hire_date: String, add_worker_hire_date: String,
can_add: bool can_add: bool,
rt: tokio::runtime::Runtime
} }
impl WorkerTabViewer{ impl WorkerTabViewer{
@ -261,7 +263,7 @@ impl WorkerTabViewer{
if ui.button("Добавить").clicked() { if ui.button("Добавить").clicked() {
self.show_add_modal = true; self.show_add_modal = true;
self.add_worker_name = String::new(); self.add_worker_name = String::new();
self.selected_position = String::new(); self.selected_position_id = 1;
}; };
if ui.button("Уволить").clicked() { if ui.button("Уволить").clicked() {
@ -286,9 +288,11 @@ impl WorkerTabViewer{
egui::ComboBox::from_label("Выбрать!") egui::ComboBox::from_label("Выбрать!")
.selected_text(format!("{}",self.selected_position)) .selected_text(format!("{}",self.selected_position))
.show_ui(ui, |ui|{ .show_ui(ui, |ui|{
ui.selectable_value(&mut self.selected_position, "Гойдазовчик".to_owned(), "Гойдазовчик"); self.rt.block_on(async{
ui.selectable_value(&mut self.selected_position, "Гойдазовчик1".to_owned(), "Гойдазовчик"); for pos in self.db_oper.get_position().await.unwrap().iter(){
ui.selectable_value(&mut self.selected_position, "Гойдазовчик2".to_owned(), "Гойдазовчик"); ui.selectable_value(&mut self.selected_position, pos.id, pos.name);
}
});p
}); });
}); });
}); });
@ -303,7 +307,27 @@ impl WorkerTabViewer{
ui.vertical_centered(|ui|{ ui.vertical_centered(|ui|{
let resp = ui.add_enabled(self.can_add, egui::Button::new("Добавить")); let resp = ui.add_enabled(self.can_add, egui::Button::new("Добавить"));
if resp.clicked(){ 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(){ // if ui.button("Добавить").clicked(){
@ -387,6 +411,8 @@ impl Default for WorkerTabViewer{
selected_position: String::new(), selected_position: String::new(),
add_worker_hire_date: String::new(), add_worker_hire_date: String::new(),
can_add: false, can_add: false,
db_oper.
rt
} }
} }
} }

View File

@ -3,6 +3,7 @@ use sqlx::mysql::MySqlPool;
use dotenvy::dotenv_override; use dotenvy::dotenv_override;
use sqlx::mysql::MySqlQueryResult;
use std::env; use std::env;
// use crate::schema::equipment::dsl::*; // use crate::schema::equipment::dsl::*;
// use crate::schema::worker::dsl::*; // use crate::schema::worker::dsl::*;
@ -61,14 +62,25 @@ impl DBOperator{
} }
Ok(false) Ok(false)
} }
pub async fn add_worker(&self, worker: Worker){ pub async fn add_worker(&self, worker: Worker) -> Result<bool,sqlx::Error>{
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).{ // 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(_) =>{ Ok(_) =>{
return Ok(true)
},
Err(_) =>{
Ok(false)
}
}
}
}
}
}
}
}