платежи почти всё
parent
8cb2ec92b7
commit
359e254c0a
155
code/src/app.rs
155
code/src/app.rs
|
|
@ -255,6 +255,12 @@ impl Default for MainTabViewer {
|
|||
}
|
||||
}
|
||||
impl MainTabViewer {
|
||||
fn update_salary(&mut self) {
|
||||
self.salaries = Arc::new(RwLock::new(
|
||||
self.rt
|
||||
.block_on(async { self.db_oper.get_salaries().await.unwrap() }),
|
||||
));
|
||||
}
|
||||
fn new(is_admin: bool) -> Self {
|
||||
Self {
|
||||
is_admin,
|
||||
|
|
@ -287,6 +293,7 @@ impl MainTabViewer {
|
|||
let mut table = TableBuilder::new(ui)
|
||||
.striped(true)
|
||||
.resizable(false)
|
||||
.vscroll(false)
|
||||
.cell_layout(egui::Layout::left_to_right(egui::Align::Center))
|
||||
.column(Column::auto())
|
||||
.column(Column::auto())
|
||||
|
|
@ -512,6 +519,7 @@ impl MainTabViewer {
|
|||
.striped(true)
|
||||
.columns(Column::auto(), 5)
|
||||
.sense(egui::Sense::click())
|
||||
.vscroll(false)
|
||||
.header(30.0, |mut header| {
|
||||
header.col(|ui| {
|
||||
ui.heading("Имя сотрудника");
|
||||
|
|
@ -529,7 +537,7 @@ impl MainTabViewer {
|
|||
.body(|mut body| {
|
||||
body.ui_mut().style_mut().interaction.selectable_labels = false;
|
||||
for sal in (self.salaries.read().iter().clone()) {
|
||||
body.row(20.0, |mut row| {
|
||||
body.row(25.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(&sal.worker.full_name);
|
||||
});
|
||||
|
|
@ -540,7 +548,8 @@ impl MainTabViewer {
|
|||
ui.label(&sal.salary_date.date_naive().to_string());
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.label(&sal.comment);
|
||||
let text: String = sal.comment.chars().take(15).collect();
|
||||
ui.label(text);
|
||||
});
|
||||
row.col(|ui| {
|
||||
if ui.button("Удалить").clicked() {
|
||||
|
|
@ -553,9 +562,10 @@ impl MainTabViewer {
|
|||
self.salary_modal_state
|
||||
.data
|
||||
.insert("salary_size".to_owned(), sal.salary_size.to_string());
|
||||
self.salary_modal_state
|
||||
.data
|
||||
.insert("salary_date".to_owned(), sal.salary_date.to_string());
|
||||
self.salary_modal_state.data.insert(
|
||||
"salary_date".to_owned(),
|
||||
sal.salary_date.date_naive().to_string(),
|
||||
);
|
||||
self.salary_modal_state
|
||||
.data
|
||||
.insert("comment".to_owned(), sal.comment.clone());
|
||||
|
|
@ -639,27 +649,146 @@ impl MainTabViewer {
|
|||
size,
|
||||
egui::TextEdit::singleline(
|
||||
self.salary_modal_state.data.get_mut("salary_date").unwrap(),
|
||||
),
|
||||
)
|
||||
.hint_text("1970-01-01"),
|
||||
);
|
||||
ui.end_row();
|
||||
ui.label("Примечание:");
|
||||
ui.add_sized(size,
|
||||
egui::TextEdit::singleline(self.salary_modal_state.data.get_mut("comment").unwrap()));
|
||||
ui.add_sized(
|
||||
size,
|
||||
egui::TextEdit::multiline(
|
||||
self.salary_modal_state.data.get_mut("comment").unwrap(),
|
||||
),
|
||||
);
|
||||
ui.end_row();
|
||||
});
|
||||
|
||||
} else {
|
||||
let wname = self.workers.read().clone().iter().find(|w| w.id.to_string() == self.salary_modal_state.data.get("worker_id").unwrap()).unwrap().full_name;
|
||||
let wname = self
|
||||
.workers
|
||||
.read()
|
||||
.clone()
|
||||
.iter()
|
||||
.find(|w| {
|
||||
&w.id.to_string()
|
||||
== self.salary_modal_state.data.get("worker_id").unwrap()
|
||||
})
|
||||
.unwrap()
|
||||
.full_name
|
||||
.clone();
|
||||
ui.label("Вы уверены, что хотите удалить запись о выплате:");
|
||||
ui.label(format!("{}: {} | ${}", self.salary_modal_state.data.get("salary_date").unwrap(), wname, self.salary_modal_state.data.get("salary_size").unwrap()));
|
||||
ui.label(format!(
|
||||
"{}: {} | ${}",
|
||||
self.salary_modal_state.data.get("salary_date").unwrap(),
|
||||
wname,
|
||||
self.salary_modal_state.data.get("salary_size").unwrap()
|
||||
));
|
||||
}
|
||||
let btext = match self.salary_modal_state.status {
|
||||
ModalStatus::Add => "Добавить",
|
||||
ModalStatus::Edit => "Сохранить",
|
||||
ModalStatus::Remove => "Удалить"
|
||||
ModalStatus::Remove => "Удалить",
|
||||
};
|
||||
if ui.button(btext).clicked() {
|
||||
|
||||
match self.salary_modal_state.status {
|
||||
ModalStatus::Add => {
|
||||
self.rt.block_on(async {
|
||||
for w in self.salary_modal_state.workers.iter() {
|
||||
self.db_oper
|
||||
.add_salary(
|
||||
w.id,
|
||||
chrono::NaiveDate::from_str(
|
||||
self.salary_modal_state
|
||||
.data
|
||||
.get("salary_date")
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap()
|
||||
.and_hms_opt(0, 0, 0)
|
||||
.unwrap()
|
||||
.and_local_timezone(chrono::Local)
|
||||
.unwrap(),
|
||||
BigDecimal::from_str(
|
||||
self.salary_modal_state
|
||||
.data
|
||||
.get("salary_size")
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
Some(
|
||||
self.salary_modal_state
|
||||
.data
|
||||
.get("comment")
|
||||
.unwrap()
|
||||
.clone(),
|
||||
),
|
||||
)
|
||||
.await
|
||||
.ok();
|
||||
}
|
||||
});
|
||||
}
|
||||
ModalStatus::Edit => {
|
||||
let sal = Salary {
|
||||
id: self
|
||||
.salary_modal_state
|
||||
.data
|
||||
.get("id")
|
||||
.unwrap()
|
||||
.parse::<i32>()
|
||||
.unwrap(),
|
||||
worker: self
|
||||
.workers
|
||||
.read()
|
||||
.iter()
|
||||
.find(|w| {
|
||||
&w.id.to_string()
|
||||
== self
|
||||
.salary_modal_state
|
||||
.data
|
||||
.get("worker_id")
|
||||
.unwrap()
|
||||
})
|
||||
.unwrap()
|
||||
.clone(),
|
||||
salary_size: BigDecimal::from_str(
|
||||
self.salary_modal_state.data.get("salary_size").unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
salary_date: chrono::NaiveDate::parse_from_str(
|
||||
self.salary_modal_state.data.get("salary_date").unwrap(),
|
||||
"%Y-%m-%d",
|
||||
)
|
||||
.unwrap()
|
||||
.and_hms_opt(0, 0, 0)
|
||||
.unwrap()
|
||||
.and_local_timezone(chrono::Local)
|
||||
.unwrap(),
|
||||
comment: self
|
||||
.salary_modal_state
|
||||
.data
|
||||
.get("comment")
|
||||
.unwrap()
|
||||
.clone(),
|
||||
};
|
||||
self.rt.block_on(async {
|
||||
self.db_oper.update_salary(sal).await;
|
||||
});
|
||||
}
|
||||
ModalStatus::Remove => self.rt.block_on(async {
|
||||
self.db_oper
|
||||
.remove_salary(
|
||||
self.salary_modal_state
|
||||
.data
|
||||
.get("id")
|
||||
.unwrap()
|
||||
.parse::<i32>()
|
||||
.unwrap(),
|
||||
)
|
||||
.await;
|
||||
}),
|
||||
}
|
||||
self.salary_modal_state.is_open = false;
|
||||
self.update_salary();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -365,14 +365,14 @@ impl DBOperator {
|
|||
}
|
||||
pub async fn add_salary(
|
||||
&self,
|
||||
worker: Worker,
|
||||
worker_id: i32,
|
||||
salary_date: DateTime<chrono::Local>,
|
||||
salary_size: Option<BigDecimal>,
|
||||
salary_size: BigDecimal,
|
||||
comment: Option<String>,
|
||||
) -> Result<bool, sqlx::Error> {
|
||||
match sqlx::query("INSERT INTO Brewery.salary (id, worker_id, salary_size, salary_date, comment) VALUES(0, ?, ?, ?, ?);")
|
||||
.bind(worker.id)
|
||||
.bind(salary_size.unwrap_or(worker.position.wage))
|
||||
.bind(worker_id)
|
||||
.bind(salary_size)
|
||||
.bind(salary_date)
|
||||
.bind(comment.unwrap_or(String::new()))
|
||||
.execute(&self.pool)
|
||||
|
|
@ -381,6 +381,29 @@ impl DBOperator {
|
|||
Err(_) => Ok(false)
|
||||
}
|
||||
}
|
||||
pub async fn update_salary(&self, salary: Salary) -> Result<bool, sqlx::Error> {
|
||||
match sqlx::query("UPDATE Brewery.salary SET worker_id=?, salary_size=?, salary_date=?, comment=? WHERE id=?;")
|
||||
.bind(salary.worker.id)
|
||||
.bind(salary.salary_size)
|
||||
.bind(salary.salary_date)
|
||||
.bind(salary.comment)
|
||||
.bind(salary.id)
|
||||
.execute(&self.pool)
|
||||
.await{
|
||||
Ok(_) => Ok(true),
|
||||
Err(_) => Ok(false)
|
||||
}
|
||||
}
|
||||
pub async fn remove_salary(&self, id: i32) -> Result<bool, sqlx::Error> {
|
||||
match sqlx::query("DELETE FROM Brewery.salary WHERE id=?;")
|
||||
.bind(id)
|
||||
.execute(&self.pool)
|
||||
.await
|
||||
{
|
||||
Ok(_) => Ok(true),
|
||||
Err(_) => Ok(false),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn estabilish_connection() -> Result<(), sqlx::Error> {
|
||||
|
|
|
|||
Loading…
Reference in New Issue