summaryrefslogtreecommitdiff
path: root/importers/actualbudget/src/inserters.rs
blob: f3492b80076c240e276876edc0c81f02d28c885e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use crate::models::budgeting_app::{
    account::Account, budget_update::BudgetUpdate, category::Category,
    category_transfer::CategoryTransfer, transaction::Transaction,
    transaction_categorisation::TransactionCategorisation,
};
use sqlite::Connection;

pub fn insert_accounts(connection: &Connection, accounts: &[Account]) {
    for account in accounts {
        let str = format!(
            "
                insert into
                accounts(id, name, opening_balance, opening_date)
                values({0}, '{1}', {2}, '{3}');
            ",
            account.id,
            escape_str(&account.name),
            account.opening_balance,
            account.opening_date
        );
        connection.execute(str).unwrap();
    }
}

pub fn insert_categories(connection: &Connection, categories: &[Category]) {
    for category in categories {
        let str = format!(
            "
                insert into
                categories(id, name, initial_budget, initial_period)
                values({0}, '{1}', {2}, {3});
            ",
            category.id,
            escape_str(&category.name),
            category.initial_budget,
            category.initial_period,
        );
        connection.execute(str).unwrap();
    }
}

pub fn insert_budget_updates(connection: &Connection, budget_updates: &[BudgetUpdate]) {
    for budget_update in budget_updates {
        let str = format!(
            "
                insert into
                budget_updates(id, category_id, date, new_budget, new_period)
                values({0}, {1}, '{2}', {3}, {4});
            ",
            budget_update.id,
            budget_update.category_id,
            budget_update.date,
            budget_update.new_budget,
            budget_update.new_period,
        );
        connection.execute(str).unwrap();
    }
}

pub fn insert_transactions(connection: &Connection, transactions: &[Transaction]) {
    for transaction in transactions {
        let str = format!(
            "
                insert into
                transactions(id, description, payee, quantity, account_id)
                values({0}, '{1}', '{2}', {3}, {4});
             ",
            transaction.id,
            escape_str(&transaction.description),
            escape_str(&transaction.payee),
            transaction.quantity,
            transaction.account_id,
        );
        connection
            .execute(str.clone())
            .unwrap_or_else(|_| panic!("{}", &str.clone()));
    }
}

pub fn insert_transaction_categorisations(
    connection: &Connection,
    transaction_categorisations: &[TransactionCategorisation],
) {
    for transaction_categorisation in transaction_categorisations {
        let str = format!(
            "
                insert into
                transaction_categorisations(id, description, quantity, transaction_id, category_id)
                values({0}, '{1}', {2}, {3}, {4});
             ",
            transaction_categorisation.id,
            escape_str(&transaction_categorisation.description),
            transaction_categorisation.quantity,
            transaction_categorisation.transaction_id,
            transaction_categorisation.category_id,
        );
        connection.execute(str).unwrap();
    }
}

pub fn insert_category_transfers(connection: &Connection, category_transfers: &[CategoryTransfer]) {
    for category_transfer in category_transfers {
        let str = format!(
            "
                insert into
                category_transfers(id, description, quantity, from_category_id, to_category_id)
                values({0}, '{1}', {2}, {3}, {4});
             ",
            category_transfer.id,
            escape_str(&category_transfer.description),
            category_transfer.quantity,
            category_transfer.from_category_id,
            category_transfer.to_category_id,
        );
        connection.execute(str).unwrap();
    }
}

fn escape_str(str: &str) -> String {
    str.replace("'", "''")
}