use bigdecimal::ToPrimitive; use rust_xlsxwriter::{Format, Workbook, XlsxError}; use crate::models::Salary; pub struct Reporter {} impl Reporter { pub fn test_report(&self) -> Result<(), XlsxError> { let mut workbook = Workbook::new(); let mut worksheet = workbook.add_worksheet(); worksheet.write_string(0, 0, "ZOV"); worksheet.write_formula(0, 1, "=RAND()"); workbook.save("test.xlsx"); Ok(()) } pub fn payment_report(&self, sal: Salary) -> Result<(), XlsxError> { let mut wb = Workbook::new(); let mut ws = wb.add_worksheet(); let money_format = Format::new().set_num_format("#,##0.00 ₽"); ws.write_string(0, 0, "ФИО"); ws.write_string(0, 1, "Размер оплаты"); ws.write_string(0, 2, "Дата оплаты"); ws.write_string(0, 3, "Комментарий"); ws.write_string(1, 0, &sal.worker.full_name); ws.write_with_format(1, 1, sal.salary_size.to_f64().unwrap(), &money_format); ws.write_datetime(1, 2, sal.salary_date.date_naive()); ws.write_string(1, 3, sal.comment); ws.autofit(); wb.save(format!( "report-worker-{}.xlsx", chrono::Local::now().to_string() )); Ok(()) } }