monopyly 1.4.5__py3-none-any.whl → 1.4.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- monopyly/CHANGELOG.md +187 -0
- monopyly/README.md +13 -2
- monopyly/__init__.py +19 -0
- monopyly/_version.py +2 -2
- monopyly/banking/accounts.py +1 -1
- monopyly/cli/apps.py +25 -4
- monopyly/common/forms/_forms.py +14 -11
- monopyly/core/actions.py +108 -21
- monopyly/core/blueprint.py +1 -1
- monopyly/core/context_processors.py +10 -0
- monopyly/core/errors.py +9 -0
- monopyly/core/filters.py +4 -2
- monopyly/core/routes.py +22 -9
- monopyly/credit/actions.py +29 -2
- monopyly/credit/routes.py +11 -6
- monopyly/credit/statements.py +21 -1
- monopyly/credit/transactions/_transactions.py +1 -1
- monopyly/static/css/style.css +161 -69
- monopyly/static/js/make-payment.js +4 -2
- monopyly/templates/auth/login.html +1 -1
- monopyly/templates/auth/register.html +1 -1
- monopyly/templates/banking/account_summaries.html +26 -12
- monopyly/templates/banking/account_summaries_page.html +2 -1
- monopyly/templates/banking/account_summary.html +7 -2
- monopyly/templates/banking/accounts_page.html +2 -2
- monopyly/templates/banking/transaction_form/transaction_form.html +1 -1
- monopyly/templates/core/credits.html +32 -0
- monopyly/templates/core/errors/400.html +8 -0
- monopyly/templates/core/errors/401.html +8 -0
- monopyly/templates/core/errors/403.html +8 -0
- monopyly/templates/core/errors/404.html +8 -0
- monopyly/templates/core/errors/405.html +8 -0
- monopyly/templates/core/errors/408.html +8 -0
- monopyly/templates/core/errors/418.html +8 -0
- monopyly/templates/core/errors/425.html +8 -0
- monopyly/templates/core/errors/500.html +8 -0
- monopyly/templates/core/errors/error.html +31 -0
- monopyly/templates/{profile.html → core/profile.html} +3 -1
- monopyly/templates/credit/card_graphic/card_back.html +1 -1
- monopyly/templates/credit/statement_summary.html +9 -4
- monopyly/templates/credit/statements.html +7 -6
- {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/METADATA +16 -5
- {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/RECORD +49 -37
- monopyly/templates/credits.html +0 -20
- /monopyly/templates/{index.html → core/index.html} +0 -0
- /monopyly/templates/{story.html → core/story.html} +0 -0
- {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/WHEEL +0 -0
- {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/entry_points.txt +0 -0
- {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/licenses/COPYING +0 -0
- {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/licenses/LICENSE +0 -0
monopyly/credit/actions.py
CHANGED
|
@@ -13,7 +13,7 @@ def get_card_statement_grouping(cards):
|
|
|
13
13
|
|
|
14
14
|
Parameters
|
|
15
15
|
----------
|
|
16
|
-
cards : list of
|
|
16
|
+
cards : list of database.models.CreditCard
|
|
17
17
|
The database card entries for which to get statements.
|
|
18
18
|
|
|
19
19
|
Returns
|
|
@@ -31,6 +31,33 @@ def get_card_statement_grouping(cards):
|
|
|
31
31
|
return card_statements
|
|
32
32
|
|
|
33
33
|
|
|
34
|
+
def get_statement_and_transactions(statement_id, transaction_sort_order="DESC"):
|
|
35
|
+
"""
|
|
36
|
+
Given a statement ID, get the corresponding statement and transactions.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
statement_id : int
|
|
41
|
+
The ID of the statement to acquire.
|
|
42
|
+
transaction_sort_order : str
|
|
43
|
+
The order to sort transactions returned for the statement. The
|
|
44
|
+
default is 'DESC' for transactions sorted in descending order.
|
|
45
|
+
|
|
46
|
+
Returns
|
|
47
|
+
-------
|
|
48
|
+
statement : database.models.CreditStatementView
|
|
49
|
+
The statement with the given ID.
|
|
50
|
+
transactions : list of database.models.CreditTransactionView
|
|
51
|
+
All transactions on the statement with the given ID.
|
|
52
|
+
"""
|
|
53
|
+
statement = CreditStatementHandler.get_entry(statement_id)
|
|
54
|
+
transactions = CreditTransactionHandler.get_transactions(
|
|
55
|
+
statement_ids=(statement_id,),
|
|
56
|
+
sort_order=transaction_sort_order,
|
|
57
|
+
)
|
|
58
|
+
return statement, transactions.all()
|
|
59
|
+
|
|
60
|
+
|
|
34
61
|
def get_potential_preceding_card(card):
|
|
35
62
|
"""
|
|
36
63
|
Get the card that this new card may be intended to replace (if any).
|
|
@@ -42,7 +69,7 @@ def get_potential_preceding_card(card):
|
|
|
42
69
|
|
|
43
70
|
Parameters
|
|
44
71
|
----------
|
|
45
|
-
card :
|
|
72
|
+
card : database.models.CreditCard
|
|
46
73
|
The new card being added to the database.
|
|
47
74
|
|
|
48
75
|
Returns
|
monopyly/credit/routes.py
CHANGED
|
@@ -22,6 +22,7 @@ from .accounts import CreditAccountHandler
|
|
|
22
22
|
from .actions import (
|
|
23
23
|
get_card_statement_grouping,
|
|
24
24
|
get_potential_preceding_card,
|
|
25
|
+
get_statement_and_transactions,
|
|
25
26
|
make_payment,
|
|
26
27
|
transfer_credit_card_statement,
|
|
27
28
|
)
|
|
@@ -177,11 +178,7 @@ def update_statements_display():
|
|
|
177
178
|
@bp.route("/statement/<int:statement_id>")
|
|
178
179
|
@login_required
|
|
179
180
|
def load_statement_details(statement_id):
|
|
180
|
-
statement =
|
|
181
|
-
transactions = CreditTransactionHandler.get_transactions(
|
|
182
|
-
statement_ids=(statement_id,),
|
|
183
|
-
sort_order="DESC",
|
|
184
|
-
)
|
|
181
|
+
statement, transactions = get_statement_and_transactions(statement_id)
|
|
185
182
|
# Get bank accounts for potential payments
|
|
186
183
|
bank_accounts = BankAccountHandler.get_accounts()
|
|
187
184
|
return render_template(
|
|
@@ -219,12 +216,20 @@ def pay_credit_card(card_id, statement_id):
|
|
|
219
216
|
make_payment(card_id, payment_account_id, payment_date, payment_amount)
|
|
220
217
|
# Get the current statement information from the database
|
|
221
218
|
statement = CreditStatementHandler.get_entry(statement_id)
|
|
219
|
+
transactions = CreditTransactionHandler.get_transactions(
|
|
220
|
+
statement_ids=(statement_id,)
|
|
221
|
+
)
|
|
222
222
|
bank_accounts = BankAccountHandler.get_accounts()
|
|
223
|
-
|
|
223
|
+
summary_template = render_template(
|
|
224
224
|
"credit/statement_summary.html",
|
|
225
225
|
statement=statement,
|
|
226
226
|
bank_accounts=bank_accounts,
|
|
227
227
|
)
|
|
228
|
+
transactions_table_template = render_template(
|
|
229
|
+
"credit/transactions_table/transactions.html",
|
|
230
|
+
transactions=transactions,
|
|
231
|
+
)
|
|
232
|
+
return jsonify((summary_template, transactions_table_template))
|
|
228
233
|
|
|
229
234
|
|
|
230
235
|
@bp.route("/transactions", defaults={"card_id": None})
|
monopyly/credit/statements.py
CHANGED
|
@@ -3,6 +3,7 @@ Tools for interacting with the credit statements in the database.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from authanor.database.handler import DatabaseViewHandler
|
|
6
|
+
from dateutil.relativedelta import relativedelta
|
|
6
7
|
|
|
7
8
|
from ..common.utils import get_next_occurrence_of_day
|
|
8
9
|
from ..database.models import (
|
|
@@ -136,7 +137,7 @@ class CreditStatementHandler(
|
|
|
136
137
|
|
|
137
138
|
Returns
|
|
138
139
|
-------
|
|
139
|
-
statement : database.models.
|
|
140
|
+
statement : database.models.CreditStatement
|
|
140
141
|
The inferred statement entry for the transaction.
|
|
141
142
|
"""
|
|
142
143
|
issue_day = card.account.statement_issue_day
|
|
@@ -146,6 +147,25 @@ class CreditStatementHandler(
|
|
|
146
147
|
statement = cls.add_statement(card, issue_date)
|
|
147
148
|
return statement
|
|
148
149
|
|
|
150
|
+
@classmethod
|
|
151
|
+
@DatabaseViewHandler.view_query
|
|
152
|
+
def get_prior_statement(cls, statement):
|
|
153
|
+
"""
|
|
154
|
+
Given a statement, get the immediately preceding statement.
|
|
155
|
+
|
|
156
|
+
Parameters
|
|
157
|
+
----------
|
|
158
|
+
statement : database.models.CreditStatement
|
|
159
|
+
The statement for which to find the preceding statement.
|
|
160
|
+
|
|
161
|
+
Returns
|
|
162
|
+
-------
|
|
163
|
+
statement : database.models.CreditStatementView
|
|
164
|
+
The statement immediately preceding the given statement.
|
|
165
|
+
"""
|
|
166
|
+
issue_date = statement.issue_date + relativedelta(months=-1)
|
|
167
|
+
return cls.find_statement(statement.card.id, issue_date=issue_date)
|
|
168
|
+
|
|
149
169
|
@classmethod
|
|
150
170
|
def add_statement(cls, card, issue_date, due_date=None):
|
|
151
171
|
"""Add a statement to the database."""
|
|
@@ -52,7 +52,7 @@ class CreditTransactionHandler(
|
|
|
52
52
|
|
|
53
53
|
Parameters
|
|
54
54
|
----------
|
|
55
|
-
statement_ids : tuple of
|
|
55
|
+
statement_ids : tuple of int, optional
|
|
56
56
|
A sequence of statement IDs with which to filter
|
|
57
57
|
transactions (if `None`, all statement IDs will be shown).
|
|
58
58
|
card_ids : tuple of int, optional
|
monopyly/static/css/style.css
CHANGED
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
:root {
|
|
8
8
|
--moneytree: #5e8f40;
|
|
9
9
|
--moneytree-leaves: #85bb65;
|
|
10
|
+
--silver-dollar: #cccccc;
|
|
10
11
|
--masthead-height: 50px;
|
|
12
|
+
--masthead-color: #2b2b2b;
|
|
13
|
+
--border-gray: #dddddd;
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
html {
|
|
@@ -94,7 +97,7 @@ header#masthead {
|
|
|
94
97
|
border-width: 0 0 4px 3px;
|
|
95
98
|
border-style: solid;
|
|
96
99
|
border-color: var(--moneytree-leaves);
|
|
97
|
-
background-color:
|
|
100
|
+
background-color: var(--masthead-color);
|
|
98
101
|
opacity: 0.9;
|
|
99
102
|
}
|
|
100
103
|
|
|
@@ -117,7 +120,7 @@ header#masthead {
|
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
.monopyly-logo:hover {
|
|
120
|
-
|
|
123
|
+
filter: brightness(0.95);
|
|
121
124
|
}
|
|
122
125
|
|
|
123
126
|
|
|
@@ -161,7 +164,7 @@ footer#site-info {
|
|
|
161
164
|
}
|
|
162
165
|
|
|
163
166
|
#site-info p {
|
|
164
|
-
color:
|
|
167
|
+
color: var(--silver-dollar);
|
|
165
168
|
font-size: 9pt;
|
|
166
169
|
text-align: center;
|
|
167
170
|
}
|
|
@@ -193,7 +196,7 @@ aside.sidebar {
|
|
|
193
196
|
height: 100%;
|
|
194
197
|
width: 10%;
|
|
195
198
|
min-width: 50px;
|
|
196
|
-
margin-top: 50px; /*
|
|
199
|
+
margin-top: 50px; /* account for content header */
|
|
197
200
|
}
|
|
198
201
|
|
|
199
202
|
#content-header h1 {
|
|
@@ -201,12 +204,40 @@ aside.sidebar {
|
|
|
201
204
|
box-sizing: border-box;
|
|
202
205
|
margin: 0 0 30px 0;
|
|
203
206
|
padding-bottom: 10px;
|
|
204
|
-
border-bottom: 1px solid
|
|
207
|
+
border-bottom: 1px solid var(--border-gray);
|
|
205
208
|
text-align: center;
|
|
206
209
|
font-size: 2em;
|
|
207
210
|
letter-spacing: -2px;
|
|
208
211
|
}
|
|
209
212
|
|
|
213
|
+
#content-header h1.error {
|
|
214
|
+
text-align: left;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
/*
|
|
219
|
+
* Provide styles for error pages
|
|
220
|
+
*/
|
|
221
|
+
.error span.code {
|
|
222
|
+
margin-left: 30px;
|
|
223
|
+
color: var(--silver-dollar);
|
|
224
|
+
font-weight: 300;
|
|
225
|
+
letter-spacing: 1px;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.custom-error-content p {
|
|
229
|
+
font-size: 18pt;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.standard-error-content {
|
|
233
|
+
margin-top: 50px;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.standard-error-content p.error-description {
|
|
237
|
+
font-size: 12pt;
|
|
238
|
+
font-style: oblique;
|
|
239
|
+
}
|
|
240
|
+
|
|
210
241
|
|
|
211
242
|
/*
|
|
212
243
|
* General object characteristics
|
|
@@ -233,7 +264,8 @@ aside.sidebar {
|
|
|
233
264
|
}
|
|
234
265
|
|
|
235
266
|
.button-block {
|
|
236
|
-
|
|
267
|
+
margin: 15px 0;
|
|
268
|
+
border: 1px solid var(--border-gray);
|
|
237
269
|
border-radius: 10px;
|
|
238
270
|
box-shadow: 1px 1px 3px #bbbbbb;
|
|
239
271
|
background-color: #eeeeee;
|
|
@@ -241,6 +273,14 @@ aside.sidebar {
|
|
|
241
273
|
color: inherit;
|
|
242
274
|
}
|
|
243
275
|
|
|
276
|
+
.button-block:first-of-type {
|
|
277
|
+
margin-top: 0;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.button-block:last-of-type {
|
|
281
|
+
margin-bottom: 0;
|
|
282
|
+
}
|
|
283
|
+
|
|
244
284
|
.button-block:hover {
|
|
245
285
|
filter: brightness(0.98);
|
|
246
286
|
text-decoration: none;
|
|
@@ -253,16 +293,34 @@ aside.sidebar {
|
|
|
253
293
|
.screenshot {
|
|
254
294
|
width: 100%; /* override the markdown default */
|
|
255
295
|
margin: 20px 0;
|
|
256
|
-
border: 1px solid #
|
|
296
|
+
border: 1px solid #bbbbbb;
|
|
257
297
|
box-shadow: 3px 3px 5px #bbbbbb;
|
|
258
298
|
}
|
|
259
299
|
|
|
260
|
-
.
|
|
300
|
+
.group-stack {
|
|
301
|
+
margin: 15px 10px 25px;
|
|
302
|
+
padding: 20px 30px;
|
|
261
303
|
border-radius: 15px;
|
|
262
304
|
box-shadow: 0 0 20px #eeeeee;
|
|
263
305
|
background-color: #eef5eb;
|
|
264
306
|
}
|
|
265
307
|
|
|
308
|
+
.group-stack .stack-title {
|
|
309
|
+
display: flex;
|
|
310
|
+
justify-content: space-between;
|
|
311
|
+
margin: 0 0 15px 0;
|
|
312
|
+
padding: 0 15px;
|
|
313
|
+
font-size: 1.1em;
|
|
314
|
+
letter-spacing: 1px;
|
|
315
|
+
text-transform: uppercase;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.group-stack .stack-title-info {
|
|
319
|
+
margin-left: 15px;
|
|
320
|
+
color: #888888;
|
|
321
|
+
font-weight: 400;
|
|
322
|
+
}
|
|
323
|
+
|
|
266
324
|
.paid-notice {
|
|
267
325
|
color: var(--moneytree-leaves);
|
|
268
326
|
font-weight: bold;
|
|
@@ -491,7 +549,8 @@ form .autocomplete-box {
|
|
|
491
549
|
z-index: 99;
|
|
492
550
|
width: 100%;
|
|
493
551
|
padding-right: 10px;
|
|
494
|
-
border: 1px solid
|
|
552
|
+
border: 1px solid var(--silver-dollar);
|
|
553
|
+
box-sizing: border-box;
|
|
495
554
|
background-color: white;
|
|
496
555
|
}
|
|
497
556
|
|
|
@@ -502,7 +561,7 @@ form .autocomplete-box .item {
|
|
|
502
561
|
}
|
|
503
562
|
|
|
504
563
|
form .autocomplete-box .item:hover {
|
|
505
|
-
background-color:
|
|
564
|
+
background-color: var(--silver-dollar);
|
|
506
565
|
}
|
|
507
566
|
|
|
508
567
|
form .autocomplete-box .item.active {
|
|
@@ -643,7 +702,7 @@ form .autocomplete-box .item.active {
|
|
|
643
702
|
position: relative;
|
|
644
703
|
right: -100%;
|
|
645
704
|
width: min-content;
|
|
646
|
-
transition: 0.4s;
|
|
705
|
+
transition: 0.4s 0.2s;
|
|
647
706
|
}
|
|
648
707
|
|
|
649
708
|
.slide-text-gadget:hover .sleeve {
|
|
@@ -653,7 +712,7 @@ form .autocomplete-box .item.active {
|
|
|
653
712
|
.slide-text-gadget .sleeve .main {
|
|
654
713
|
position: absolute;
|
|
655
714
|
transform: translateX(-100%);
|
|
656
|
-
transition: 0.2s;
|
|
715
|
+
transition: 0.2s 0.2s;
|
|
657
716
|
}
|
|
658
717
|
|
|
659
718
|
.slide-text-gadget:hover .sleeve .main {
|
|
@@ -746,8 +805,8 @@ form .autocomplete-box .item.active {
|
|
|
746
805
|
.toggle-switch-gadget .option .slider .switch {
|
|
747
806
|
position: relative;
|
|
748
807
|
left: 0;
|
|
749
|
-
width: 50%;
|
|
750
808
|
height: 100%;
|
|
809
|
+
width: 50%;
|
|
751
810
|
box-sizing: border-box;
|
|
752
811
|
border-radius: 50%;
|
|
753
812
|
background-color: #eeeeee;
|
|
@@ -772,7 +831,7 @@ form .autocomplete-box .item.active {
|
|
|
772
831
|
* Style generic box tables
|
|
773
832
|
*/
|
|
774
833
|
.box-table {
|
|
775
|
-
border: 2px solid
|
|
834
|
+
border: 2px solid var(--border-gray);
|
|
776
835
|
}
|
|
777
836
|
|
|
778
837
|
.box-table .icon-button {
|
|
@@ -789,8 +848,8 @@ form .autocomplete-box .item.active {
|
|
|
789
848
|
}
|
|
790
849
|
|
|
791
850
|
.box-table .box-row {
|
|
792
|
-
border-top: 0.5px solid
|
|
793
|
-
border-bottom: 0.5px solid
|
|
851
|
+
border-top: 0.5px solid var(--border-gray);
|
|
852
|
+
border-bottom: 0.5px solid var(--border-gray);
|
|
794
853
|
background-color: #f5f5f5;
|
|
795
854
|
}
|
|
796
855
|
|
|
@@ -822,7 +881,7 @@ form .autocomplete-box .item.active {
|
|
|
822
881
|
}
|
|
823
882
|
|
|
824
883
|
#card-filter .card:hover {
|
|
825
|
-
background-color:
|
|
884
|
+
background-color: var(--silver-dollar);
|
|
826
885
|
text-decoration: none;
|
|
827
886
|
}
|
|
828
887
|
|
|
@@ -878,7 +937,7 @@ form .autocomplete-box .item.active {
|
|
|
878
937
|
position: absolute;
|
|
879
938
|
height: 100%;
|
|
880
939
|
width: 100%;
|
|
881
|
-
border: 1px solid
|
|
940
|
+
border: 1px solid var(--silver-dollar);
|
|
882
941
|
border-radius: 20px;
|
|
883
942
|
box-shadow: 1px 1px 3px #222222;
|
|
884
943
|
text-align: center;
|
|
@@ -949,7 +1008,7 @@ form .autocomplete-box .item.active {
|
|
|
949
1008
|
}
|
|
950
1009
|
|
|
951
1010
|
.credit-card.inactive .card-face.front {
|
|
952
|
-
color:
|
|
1011
|
+
color: var(--silver-dollar);
|
|
953
1012
|
filter: brightness(0.9);
|
|
954
1013
|
}
|
|
955
1014
|
|
|
@@ -1088,7 +1147,7 @@ form .autocomplete-box .item.active {
|
|
|
1088
1147
|
|
|
1089
1148
|
.transactions-table .titles,
|
|
1090
1149
|
.transactions-table .transaction {
|
|
1091
|
-
border-bottom: 1px solid
|
|
1150
|
+
border-bottom: 1px solid var(--border-gray);
|
|
1092
1151
|
}
|
|
1093
1152
|
|
|
1094
1153
|
.transactions-table .titles {
|
|
@@ -1612,13 +1671,12 @@ form .autocomplete-box .item.active {
|
|
|
1612
1671
|
display: flex;
|
|
1613
1672
|
flex-direction: column;
|
|
1614
1673
|
flex-wrap: wrap;
|
|
1615
|
-
align-items:
|
|
1674
|
+
align-items: stretch;
|
|
1616
1675
|
gap: 10px;
|
|
1617
1676
|
width: 100%;
|
|
1618
1677
|
}
|
|
1619
1678
|
@media screen and (max-width: 1500px) {
|
|
1620
1679
|
.details .primary-info {
|
|
1621
|
-
display: flex;
|
|
1622
1680
|
align-items: center;
|
|
1623
1681
|
}
|
|
1624
1682
|
}
|
|
@@ -1639,14 +1697,16 @@ form .autocomplete-box .item.active {
|
|
|
1639
1697
|
.details .summary-container {
|
|
1640
1698
|
display: flex;
|
|
1641
1699
|
justify-content: center;
|
|
1642
|
-
|
|
1700
|
+
width: 45%;
|
|
1701
|
+
min-width: 500px;
|
|
1643
1702
|
margin: 0 0 0 0;
|
|
1644
1703
|
}
|
|
1645
1704
|
|
|
1646
1705
|
.details .summary-box {
|
|
1647
1706
|
display: flex;
|
|
1648
1707
|
flex-direction: column;
|
|
1649
|
-
width:
|
|
1708
|
+
width: 500px;
|
|
1709
|
+
box-sizing: border-box;
|
|
1650
1710
|
padding: 40px 50px 60px;
|
|
1651
1711
|
border-radius: 25px;
|
|
1652
1712
|
box-shadow: 1px 1px 5px #dddddd;
|
|
@@ -1656,7 +1716,6 @@ form .autocomplete-box .item.active {
|
|
|
1656
1716
|
.details .summary-box .balance {
|
|
1657
1717
|
display: flex;
|
|
1658
1718
|
justify-content: space-between;
|
|
1659
|
-
min-width: 325px;
|
|
1660
1719
|
margin: 20px 0;
|
|
1661
1720
|
font-size: 72pt;
|
|
1662
1721
|
font-weight: bold;
|
|
@@ -1694,12 +1753,13 @@ form .autocomplete-box .item.active {
|
|
|
1694
1753
|
}
|
|
1695
1754
|
|
|
1696
1755
|
.details .transactions-container {
|
|
1697
|
-
width:
|
|
1756
|
+
width: 52.5%;
|
|
1698
1757
|
order: 2;
|
|
1699
1758
|
min-width: 500px;
|
|
1700
1759
|
}
|
|
1701
1760
|
@media screen and (max-width: 1500px) {
|
|
1702
1761
|
.details .transactions-container {
|
|
1762
|
+
width: 50%;
|
|
1703
1763
|
order: 1;
|
|
1704
1764
|
margin-top: 50px;
|
|
1705
1765
|
}
|
|
@@ -1816,10 +1876,10 @@ form .autocomplete-box .item.active {
|
|
|
1816
1876
|
#homepage-block {
|
|
1817
1877
|
margin-bottom: 20px;
|
|
1818
1878
|
padding: 0 0 30px 0;
|
|
1819
|
-
background-color:
|
|
1820
|
-
border: 1px solid
|
|
1879
|
+
background-color: gainsboro;
|
|
1880
|
+
border: 1px solid lightgray;
|
|
1821
1881
|
border-radius: 6px;
|
|
1822
|
-
box-shadow: 2px 2px 5px
|
|
1882
|
+
box-shadow: 2px 2px 5px var(--silver-dollar);
|
|
1823
1883
|
}
|
|
1824
1884
|
|
|
1825
1885
|
#homepage-block h2 {
|
|
@@ -1869,7 +1929,7 @@ form .autocomplete-box .item.active {
|
|
|
1869
1929
|
margin: 20px;
|
|
1870
1930
|
padding: 50px;
|
|
1871
1931
|
border: 1px solid #f5f5f5;
|
|
1872
|
-
box-shadow: 2px 2px 5px
|
|
1932
|
+
box-shadow: 2px 2px 5px var(--silver-dollar);
|
|
1873
1933
|
background-color: #fafafa;
|
|
1874
1934
|
}
|
|
1875
1935
|
|
|
@@ -1957,6 +2017,38 @@ form .autocomplete-box .item.active {
|
|
|
1957
2017
|
margin-top: 50px;
|
|
1958
2018
|
}
|
|
1959
2019
|
|
|
2020
|
+
#readme .warning {
|
|
2021
|
+
padding: 15px 25px;
|
|
2022
|
+
border: 1px solid var(--silver-dollar);
|
|
2023
|
+
border-radius: 10px;
|
|
2024
|
+
box-shadow: 2px 2px 3px var(--silver-dollar);
|
|
2025
|
+
background-color: #f2d7a5;
|
|
2026
|
+
}
|
|
2027
|
+
|
|
2028
|
+
#readme .warning h5 {
|
|
2029
|
+
margin: 0 0 5px 0;
|
|
2030
|
+
}
|
|
2031
|
+
|
|
2032
|
+
#changelog {
|
|
2033
|
+
width: 80%;
|
|
2034
|
+
margin: 0 auto;
|
|
2035
|
+
}
|
|
2036
|
+
|
|
2037
|
+
#changelog h1 {
|
|
2038
|
+
font-size: 32pt;
|
|
2039
|
+
text-align: center;
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
#changelog h2 {
|
|
2043
|
+
border-bottom: 1px solid var(--border-gray);
|
|
2044
|
+
}
|
|
2045
|
+
|
|
2046
|
+
#changelog a.latest-release {
|
|
2047
|
+
display: block;
|
|
2048
|
+
margin: 30px 0;
|
|
2049
|
+
font-size: 1.5em;
|
|
2050
|
+
}
|
|
2051
|
+
|
|
1960
2052
|
#story .signature {
|
|
1961
2053
|
margin-bottom: 100px;
|
|
1962
2054
|
font-weight: bold;
|
|
@@ -1965,6 +2057,14 @@ form .autocomplete-box .item.active {
|
|
|
1965
2057
|
}
|
|
1966
2058
|
|
|
1967
2059
|
|
|
2060
|
+
/*
|
|
2061
|
+
* Customization for the 'Credits' page
|
|
2062
|
+
*/
|
|
2063
|
+
.affiliation-disclaimer {
|
|
2064
|
+
margin-top: 80px;
|
|
2065
|
+
}
|
|
2066
|
+
|
|
2067
|
+
|
|
1968
2068
|
/*
|
|
1969
2069
|
* Customization for the 'Profile' page
|
|
1970
2070
|
*/
|
|
@@ -1998,7 +2098,7 @@ form .autocomplete-box .item.active {
|
|
|
1998
2098
|
flex-basis: 100%;
|
|
1999
2099
|
margin-right: 0;
|
|
2000
2100
|
padding-bottom: 50px;
|
|
2001
|
-
border-bottom: 0.5px solid
|
|
2101
|
+
border-bottom: 0.5px solid var(--border-gray);
|
|
2002
2102
|
}
|
|
2003
2103
|
|
|
2004
2104
|
#profile .banking.profile-section .bank-list {
|
|
@@ -2021,15 +2121,9 @@ form .autocomplete-box .item.active {
|
|
|
2021
2121
|
/*
|
|
2022
2122
|
* Customization for the 'Bank Accounts' page
|
|
2023
2123
|
*/
|
|
2024
|
-
#bank-container .bank-
|
|
2025
|
-
margin: 25px 0;
|
|
2026
|
-
padding: 30px;
|
|
2027
|
-
}
|
|
2028
|
-
|
|
2029
|
-
#bank-container .bank-block h3 {
|
|
2030
|
-
margin-top: 0;
|
|
2124
|
+
#bank-container .bank-stack .stack-title {
|
|
2031
2125
|
padding: 0 30px;
|
|
2032
|
-
|
|
2126
|
+
text-align: left;
|
|
2033
2127
|
}
|
|
2034
2128
|
|
|
2035
2129
|
#bank-container .account-block {
|
|
@@ -2064,7 +2158,7 @@ form .autocomplete-box .item.active {
|
|
|
2064
2158
|
#account-type-container {
|
|
2065
2159
|
width: 30%;
|
|
2066
2160
|
min-width: 350px;
|
|
2067
|
-
border: 2px solid
|
|
2161
|
+
border: 2px solid var(--border-gray);
|
|
2068
2162
|
background-color: #f5f5f5;
|
|
2069
2163
|
}
|
|
2070
2164
|
|
|
@@ -2074,13 +2168,13 @@ form .autocomplete-box .item.active {
|
|
|
2074
2168
|
}
|
|
2075
2169
|
|
|
2076
2170
|
#account-type-container .account-types {
|
|
2077
|
-
border-top: 2px solid
|
|
2171
|
+
border-top: 2px solid var(--border-gray);
|
|
2078
2172
|
}
|
|
2079
2173
|
|
|
2080
2174
|
#account-type-container .account-type {
|
|
2081
2175
|
padding: 10px;
|
|
2082
|
-
border-top: 0.5px solid
|
|
2083
|
-
border-bottom: 0.5px solid
|
|
2176
|
+
border-top: 0.5px solid var(--border-gray);
|
|
2177
|
+
border-bottom: 0.5px solid var(--border-gray);
|
|
2084
2178
|
}
|
|
2085
2179
|
|
|
2086
2180
|
|
|
@@ -2101,10 +2195,22 @@ form#bank-account .hidden {
|
|
|
2101
2195
|
align-items: center
|
|
2102
2196
|
}
|
|
2103
2197
|
|
|
2104
|
-
#bank-account-summaries-container .bank {
|
|
2105
|
-
margin: 0 0
|
|
2198
|
+
#bank-account-summaries-container h2.bank {
|
|
2199
|
+
margin: 0 0 5px;
|
|
2200
|
+
font-size: 1.6em;
|
|
2201
|
+
letter-spacing: 1px;
|
|
2202
|
+
text-transform: uppercase;
|
|
2106
2203
|
text-align: center;
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2206
|
+
#bank-account-summaries-container h3.balance {
|
|
2207
|
+
margin: 0 0 10px;
|
|
2208
|
+
color: gray;
|
|
2209
|
+
font-size: 1em;
|
|
2210
|
+
font-weight: 300;
|
|
2107
2211
|
text-transform: uppercase;
|
|
2212
|
+
text-align: center;
|
|
2213
|
+
letter-spacing: 1px;
|
|
2108
2214
|
}
|
|
2109
2215
|
|
|
2110
2216
|
#bank-account-summaries {
|
|
@@ -2113,29 +2219,21 @@ form#bank-account .hidden {
|
|
|
2113
2219
|
width: 100%;
|
|
2114
2220
|
}
|
|
2115
2221
|
|
|
2116
|
-
#bank-account-summaries .account-type-
|
|
2222
|
+
#bank-account-summaries .account-type-stack {
|
|
2117
2223
|
display: flex;
|
|
2118
2224
|
flex-direction: column;
|
|
2119
|
-
width:
|
|
2225
|
+
width: 60%;
|
|
2120
2226
|
min-width: 400px;
|
|
2121
|
-
margin:
|
|
2122
|
-
padding: 25px;
|
|
2227
|
+
margin: 15px auto 25px;
|
|
2123
2228
|
}
|
|
2124
2229
|
|
|
2125
2230
|
#bank-account-summaries .account-block {
|
|
2126
2231
|
display: flex;
|
|
2127
2232
|
justify-content: space-between;
|
|
2128
2233
|
align-items: center;
|
|
2129
|
-
width: 100%;
|
|
2130
|
-
box-sizing: border-box;
|
|
2131
|
-
margin-bottom: 15px;
|
|
2132
2234
|
padding: 30px 10%;
|
|
2133
2235
|
}
|
|
2134
2236
|
|
|
2135
|
-
#bank-account-summaries a.account-block:last-of-type {
|
|
2136
|
-
margin-bottom: 0;
|
|
2137
|
-
}
|
|
2138
|
-
|
|
2139
2237
|
#bank-account-summaries .account-block .title {
|
|
2140
2238
|
font-size: 16pt;
|
|
2141
2239
|
}
|
|
@@ -2404,27 +2502,21 @@ form#card #statement-due-day-field {
|
|
|
2404
2502
|
justify-content: space-around;
|
|
2405
2503
|
}
|
|
2406
2504
|
|
|
2407
|
-
#credit-statements .card-
|
|
2505
|
+
#credit-statements .card-stack {
|
|
2408
2506
|
display: flex;
|
|
2409
2507
|
flex-direction: column;
|
|
2410
2508
|
height: min-content;
|
|
2411
|
-
margin: 15px 10px;
|
|
2412
|
-
padding: 20px;
|
|
2413
|
-
text-transform: uppercase;
|
|
2414
|
-
text-align: center;
|
|
2415
|
-
font-size: 1.1em;
|
|
2416
2509
|
}
|
|
2417
2510
|
|
|
2418
|
-
#credit-statements
|
|
2419
|
-
|
|
2511
|
+
#credit-statements .card-stack .stack-title {
|
|
2512
|
+
justify-content: center;
|
|
2420
2513
|
}
|
|
2421
2514
|
|
|
2422
2515
|
#credit-statements .statement-block {
|
|
2423
2516
|
display: flex;
|
|
2424
|
-
align-items: center;
|
|
2425
2517
|
justify-content: space-between;
|
|
2518
|
+
align-items: center;
|
|
2426
2519
|
width: 275px;
|
|
2427
|
-
margin: 15px;
|
|
2428
2520
|
padding: 45px 50px;
|
|
2429
2521
|
}
|
|
2430
2522
|
|
|
@@ -2507,7 +2599,7 @@ form#pay input {
|
|
|
2507
2599
|
}
|
|
2508
2600
|
|
|
2509
2601
|
form#pay .form-inputs {
|
|
2510
|
-
border: 1px solid
|
|
2602
|
+
border: 1px solid var(--silver-dollar);
|
|
2511
2603
|
border-radius: inherit;
|
|
2512
2604
|
}
|
|
2513
2605
|
|
|
@@ -2673,7 +2765,7 @@ form#credit-transaction .merchant-field {
|
|
|
2673
2765
|
border-radius: 20px;
|
|
2674
2766
|
text-align: center;
|
|
2675
2767
|
outline: none;
|
|
2676
|
-
caret-color:
|
|
2768
|
+
caret-color: var(--silver-dollar);
|
|
2677
2769
|
transition: border 0.1s ease;
|
|
2678
2770
|
}
|
|
2679
2771
|
|
|
@@ -2729,6 +2821,6 @@ form#credit-transaction .merchant-field {
|
|
|
2729
2821
|
#transaction-tags .subtags {
|
|
2730
2822
|
margin: 0 0 0 10px;
|
|
2731
2823
|
padding-left: 40px;
|
|
2732
|
-
border-left: 1px solid
|
|
2824
|
+
border-left: 1px solid var(--border-gray);
|
|
2733
2825
|
}
|
|
2734
2826
|
|
|
@@ -17,7 +17,8 @@ import { executeAjaxRequest } from './modules/ajax.js';
|
|
|
17
17
|
|
|
18
18
|
(function() {
|
|
19
19
|
|
|
20
|
-
const $
|
|
20
|
+
const $summaryContainer = $('#statement-summary-container');
|
|
21
|
+
const $transactionContainer = $('#statement-transactions-container');
|
|
21
22
|
prepareForm();
|
|
22
23
|
|
|
23
24
|
function prepareForm() {
|
|
@@ -82,7 +83,8 @@ import { executeAjaxRequest } from './modules/ajax.js';
|
|
|
82
83
|
function updateStatementPaymentAjaxRequest(rawData) {
|
|
83
84
|
// Return the newly updated statement payment info
|
|
84
85
|
function updateAction(response) {
|
|
85
|
-
$
|
|
86
|
+
$summaryContainer.html(response[0]);
|
|
87
|
+
$transactionContainer.html(response[1]);
|
|
86
88
|
// Prepare the form again (in case statement is not paid in full)
|
|
87
89
|
prepareForm();
|
|
88
90
|
}
|