diff --git a/moneymgr_backend/src/controllers/backup_controller.rs b/moneymgr_backend/src/controllers/backup_controller.rs index 8b0649f..0a212be 100644 --- a/moneymgr_backend/src/controllers/backup_controller.rs +++ b/moneymgr_backend/src/controllers/backup_controller.rs @@ -16,7 +16,7 @@ use crate::services::{accounts_service, files_service, movements_service}; use crate::utils::time_utils::{format_date, time}; use actix_files::NamedFile; use actix_web::{HttpRequest, HttpResponse}; -use rust_xlsxwriter::{Color, Format, Workbook}; +use rust_xlsxwriter::{Color, Format, Formula, Table, Workbook}; use serde::Serialize; use serde::de::DeserializeOwned; use std::collections::HashMap; @@ -290,6 +290,23 @@ pub async fn xslx_export(auth: AuthExtractor) -> HttpResult { worksheet.write(idx as u32 + 1, 1, &movement.label)?; worksheet.write(idx as u32 + 1, 2, movement.amount)?; } + + // Create table + let table = Table::new(); + worksheet.add_table(0, 0, movements.len() as u32, 2, &table)?; + + // Add total + worksheet.write_with_format(5, 5, "Total", &header_format)?; + worksheet.write_formula( + 6, + 5, + Formula::new(format!("SUM(C1,C{})", movements.len())).set_result( + movements + .iter() + .fold(0f32, |acc, m| acc + m.amount) + .to_string(), + ), + )?; } // Save final Excel Document