aboutsummaryrefslogtreecommitdiff
path: root/src/templates/index.html
blob: 525f8feefb4e6061e3864560538bfa74bb39da48 (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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
<!doctype html>
<html lang="en">

<head>
    <title>Budget</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="shortcut icon" href="/favicon.ico">
    <!-- <script src="https://cdn.jsdelivr.net/npm/vue"></script> -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="static/main.js"></script>
    <link rel="stylesheet" type="text/css" href="static/styles.css">
</head>

<body>
    <div id="data">
        <h1 v-if="summary.username">{{summary.username}}'s budget</h1>
        <div>
            <button v-bind:class="{ bold: activeTab == 'ledger' }" v-on:click="setTab('ledger')">Ledger</button>
            <button v-bind:class="{ bold: activeTab == 'summary' }" v-on:click="setTab('summary')">Summary</button>
            <button v-bind:class="{ bold: activeTab == 'goals' }" v-on:click="setTab('goals')">Goals</button>
            <button v-bind:class="{ bold: activeTab == 'expected' }" v-on:click="setTab('expected')">Expected</button>
        </div>

        <!-- Ledger -->
        <div v-if="activeTab == 'ledger'">
            <div class="newItem">
                <input v-model="m.when" placeholder="Date" type="date">
                <input v-model="m.where" placeholder="Where">
                <input v-model="m.amount" placeholder="Amount" type="number" step="0.01">
                <input v-model="m.category" placeholder="Category">
                <input v-model="m.subcategory" placeholder="Subcategory">
                <button v-on:click="post(m, '/transaction', 'transactions')">Add</button>
            </div>
            <table class="table">
                <tr class="table-header">
                    <th class="table-index"></th>
                    <th>Date</th>
                    <th>Where</th>
                    <th>Amount</th>
                    <th>Category</th>
                    <th>Subcategory</th>
                    <th></th>
                </tr>
                <tr v-for="(transaction, i) in transactions">
                    <td class="table-index">{{i+1}}</td>
                    <td>{{transaction.when.substring(0,10)}}</td>
                    <td>{{transaction.where}}</td>
                    <td>{{transaction.amount}}</td>
                    <td>{{transaction.category}}</td>
                    <td>{{transaction.subcategory}}</td>
                    <td>
                        <button v-on:click="prepareEntryEdit(transaction)">&#9881;</button>
                        <button v-on:click="remove(transaction, 'transactions')">X</button>
                    </td>
                </tr>

            </table>
        </div>

        <table v-if="activeTab == 'ledger-edit'">
            <tr>
                <th></th>
                <th>Date</th>
                <th>Where</th>
                <th>Amount</th>
                <th>Category</th>
                <th>Subcategory</th>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input v-model="em.when" placeholder="Date" type="date">
                </td>
                <td>
                    <input v-model="em.where" placeholder="Where">
                </td>
                <td>
                    <input v-model="em.amount" placeholder="Amount" type="number" step="0.01">
                </td>
                <td>
                    <input v-model="em.category" placeholder="Category">
                </td>
                <td>
                    <input v-model="em.subcategory" placeholder="Subcategory">
                </td>
                <td><button v-on:click="updateMany(em, 'transactions');activeTab=0;">Update</button></td>
            </tr>
        </table>

        <!-- Summary -->
        <div v-if="activeTab == 'summary'">
            <div class="summary-panel">
                <h2>Weekly</h2>
                <table class="table">
                    <tr>
                        <th>Year</th>
                        <th>Week</th>
                        <th>In</th>
                        <th>Out</th>
                        <th>Net</th>
                    </tr>
                    <tr v-for="(data, i) in summary.week">
                        <td>{{data.y}}</td>
                        <td>{{data.w}}</td>
                        <td>{{data.in}}</td>
                        <td>{{data.out}}</td>
                        <td v-bind:class="{'net-negative': data.negative, 'net-positive':data.positive}">{{data.net}}
                        </td>
                    </tr>
                </table>
            </div>
            <div class="summary-panel">
                <h2>Monthly</h2>
                <table class="table">
                    <tr>
                        <th>Year</th>
                        <th>Month</th>
                        <th>In</th>
                        <th>Out</th>
                        <th>Net</th>
                    </tr>
                    <tr v-for="(data, i) in summary.month">
                        <td>{{data.y}}</td>
                        <td>{{data.m}}</td>
                        <td>{{data.in}}</td>
                        <td>{{data.out}}</td>
                        <td v-bind:class="{'net-negative': data.negative, 'net-positive':data.positive}">{{data.net}}
                        </td v-bind:class="{'net-negative': data.negative, 'net-positive':data.positive}">
                    </tr>
                </table>
            </div>
            <div class="summary-panel">
                <h2>Yearly</h2>
                <table class="table">
                    <tr>
                        <th>Year</th>
                        <th>In</th>
                        <th>Out</th>
                        <th>Net</th>
                    </tr>
                    <tr v-for="(data, i) in summary.year">
                        <td>{{data.y}}</td>
                        <td>{{data.in}}</td>
                        <td>{{data.out}}</td>
                        <td v-bind:class="{'net-negative': data.negative, 'net-positive':data.positive}">{{data.net}}
                        </td v-bind:class="{'net-negative': data.negative, 'net-positive':data.positive}">
                    </tr>
                </table>
            </div>
        </div>

        <!-- Goals -->
        <div v-if="activeTab == 'goals'">
            <div>
                <div class="newItem">
                    <span>New Goal</span>
                    <input v-model="ng.name" placeholder="Name">
                    <input v-model="ng.total" placeholder="Total" type="number" step="0.01">
                    <button v-on:click="post(ng, '/goals', 'goals')">Add</button>
                </div>
                <div class="newAllocation">
                    <span>Allocate funds</span>
                    <select v-model="na.name">
                        <option v-for="option in goals" v-bind:value="option.name">
                            {{ option.name }}
                        </option>
                        <input v-model="na.amount" type="number">
                        <span>out of {{total_to_allocate}}</span>
                    </select>
                    <button v-on:click="post(na, '/allocate', 'goals')">Add</button>
                </div>
                <table>
                    <tr><th></th><th>Name</th><th>Amount</th><th>Total</th><th>Remaining</th></tr>
                    <tr v-for="(goal, i) in goals">
                        <td class="table-index">{{i+1}}</td>
                        <td>{{goal.name}}</td>
                        <td>{{goal.amount}}</td>
                        <td>{{goal.total}}</td>
                        <td>{{goal.total - goal.amount}}</td>
                    </tr>
                </table>
            </div>
        </div>

        <!-- Expected -->
        <div v-if="activeTab == 'expected'">
            <div>
                <div class="newItem">
                    <span>New Expected</span>
                    <input v-model="e.name" placeholder="Name">
                    <input v-model="e.total" placeholder="Total" type="number" step="0.01">
                    <input v-model="e.days" placeholder="Period (days)" type="number" step="1">
                    <button v-on:click="post(e, '/expected', 'expected')">Add</button>
                </div>
                <table>
                    <tr><th></th><th>Name</th><th>Total</th><th>Period</th></tr>
                    <tr v-for="(e, i) in expected">
                        <td class="table-index">{{i+1}}</td>
                        <td>{{e.name}}</td>
                        <td>{{e.total}}</td>
                        <td>{{e.days}}</td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
</body>

</html>