Can export data to FinancesManager
This commit is contained in:
@ -1,15 +1,18 @@
|
||||
use crate::controllers::HttpResult;
|
||||
use crate::converters::finances_manager_converter::FinancesManagerFile;
|
||||
use crate::converters::finances_manager_converter::{
|
||||
FinancesManagerAccount, FinancesManagerFile, FinancesManagerMovement,
|
||||
};
|
||||
use crate::extractors::auth_extractor::AuthExtractor;
|
||||
use crate::extractors::file_extractor::FileExtractor;
|
||||
use crate::models::accounts::AccountType;
|
||||
use crate::services::accounts_service::UpdateAccountQuery;
|
||||
use crate::services::movements_service::UpdateMovementQuery;
|
||||
use crate::services::{accounts_service, movements_service};
|
||||
use crate::utils::time_utils::{format_date, time};
|
||||
use actix_web::HttpResponse;
|
||||
|
||||
/// Import data from a [FinancesManager](https://gitlab.com/pierre42100/cpp-financesmanager) file
|
||||
pub async fn import_financesmanager(auth: AuthExtractor, file: FileExtractor) -> HttpResult {
|
||||
pub async fn finances_manager_import(auth: AuthExtractor, file: FileExtractor) -> HttpResult {
|
||||
let file = FinancesManagerFile::parse(&String::from_utf8_lossy(&file.buff))?;
|
||||
|
||||
// Create each account & push the movements independently
|
||||
@ -38,3 +41,38 @@ pub async fn import_financesmanager(auth: AuthExtractor, file: FileExtractor) ->
|
||||
|
||||
Ok(HttpResponse::Accepted().finish())
|
||||
}
|
||||
|
||||
/// Export data to a [FinancesManager](https://gitlab.com/pierre42100/cpp-financesmanager) file
|
||||
pub async fn finances_manager_export(auth: AuthExtractor) -> HttpResult {
|
||||
let accounts = accounts_service::get_list_user(auth.user_id()).await?;
|
||||
|
||||
let mut out = FinancesManagerFile { accounts: vec![] };
|
||||
|
||||
for account in accounts {
|
||||
let movements = movements_service::get_list_account(account.id()).await?;
|
||||
let mut file_account = FinancesManagerAccount {
|
||||
name: account.name,
|
||||
movements: Vec::with_capacity(movements.len()),
|
||||
};
|
||||
|
||||
for movement in movements {
|
||||
file_account.movements.push(FinancesManagerMovement {
|
||||
label: movement.label,
|
||||
time: movement.time as u64,
|
||||
amount: movement.amount,
|
||||
});
|
||||
}
|
||||
|
||||
out.accounts.push(file_account);
|
||||
}
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.insert_header((
|
||||
"Content-Disposition",
|
||||
format!(
|
||||
"attachment; filename=export_{}.finance",
|
||||
format_date(time() as i64)?.replace('/', "-")
|
||||
),
|
||||
))
|
||||
.body(out.encode()))
|
||||
}
|
||||
|
Reference in New Issue
Block a user