django-ledger 0.7.11__py3-none-any.whl → 0.8.1__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.
Potentially problematic release.
This version of django-ledger might be problematic. Click here for more details.
- django_ledger/__init__.py +1 -1
- django_ledger/context.py +12 -0
- django_ledger/forms/account.py +45 -46
- django_ledger/forms/bill.py +0 -4
- django_ledger/forms/closing_entry.py +13 -1
- django_ledger/forms/data_import.py +182 -63
- django_ledger/forms/estimate.py +3 -6
- django_ledger/forms/invoice.py +3 -7
- django_ledger/forms/item.py +10 -18
- django_ledger/forms/purchase_order.py +2 -4
- django_ledger/io/io_core.py +515 -400
- django_ledger/io/io_generator.py +7 -6
- django_ledger/io/io_library.py +1 -2
- django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +70 -0
- django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
- django_ledger/models/__init__.py +2 -1
- django_ledger/models/accounts.py +109 -69
- django_ledger/models/bank_account.py +40 -23
- django_ledger/models/bill.py +386 -333
- django_ledger/models/chart_of_accounts.py +173 -105
- django_ledger/models/closing_entry.py +99 -48
- django_ledger/models/customer.py +100 -66
- django_ledger/models/data_import.py +818 -323
- django_ledger/models/deprecations.py +61 -0
- django_ledger/models/entity.py +891 -644
- django_ledger/models/estimate.py +57 -28
- django_ledger/models/invoice.py +46 -26
- django_ledger/models/items.py +503 -142
- django_ledger/models/journal_entry.py +61 -47
- django_ledger/models/ledger.py +106 -42
- django_ledger/models/mixins.py +424 -281
- django_ledger/models/purchase_order.py +39 -17
- django_ledger/models/receipt.py +1083 -0
- django_ledger/models/transactions.py +242 -139
- django_ledger/models/unit.py +93 -54
- django_ledger/models/utils.py +12 -2
- django_ledger/models/vendor.py +121 -70
- django_ledger/report/core.py +2 -14
- django_ledger/settings.py +57 -71
- django_ledger/static/django_ledger/bundle/djetler.bundle.js +1 -1
- django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +25 -0
- django_ledger/static/django_ledger/bundle/styles.bundle.js +1 -1
- django_ledger/static/django_ledger/css/djl_styles.css +273 -0
- django_ledger/templates/django_ledger/bills/includes/card_bill.html +2 -2
- django_ledger/templates/django_ledger/components/menu.html +41 -26
- django_ledger/templates/django_ledger/components/period_navigator.html +5 -3
- django_ledger/templates/django_ledger/customer/customer_detail.html +87 -0
- django_ledger/templates/django_ledger/customer/customer_list.html +0 -1
- django_ledger/templates/django_ledger/customer/tags/customer_table.html +8 -6
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +24 -3
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +26 -10
- django_ledger/templates/django_ledger/entity/entity_dashboard.html +2 -2
- django_ledger/templates/django_ledger/entity/includes/card_entity.html +12 -6
- django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +1 -1
- django_ledger/templates/django_ledger/financial_statements/cash_flow.html +4 -1
- django_ledger/templates/django_ledger/financial_statements/income_statement.html +4 -1
- django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +27 -3
- django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +16 -4
- django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +73 -18
- django_ledger/templates/django_ledger/includes/widget_ratios.html +18 -24
- django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +3 -3
- django_ledger/templates/django_ledger/layouts/base.html +7 -2
- django_ledger/templates/django_ledger/layouts/content_layout_1.html +1 -1
- django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +115 -0
- django_ledger/templates/django_ledger/receipt/receipt_delete.html +30 -0
- django_ledger/templates/django_ledger/receipt/receipt_detail.html +89 -0
- django_ledger/templates/django_ledger/receipt/receipt_list.html +134 -0
- django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +115 -0
- django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +12 -7
- django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
- django_ledger/templatetags/django_ledger.py +338 -191
- django_ledger/tests/test_accounts.py +1 -2
- django_ledger/tests/test_io.py +17 -0
- django_ledger/tests/test_purchase_order.py +3 -3
- django_ledger/tests/test_transactions.py +1 -2
- django_ledger/urls/__init__.py +1 -4
- django_ledger/urls/customer.py +3 -0
- django_ledger/urls/data_import.py +3 -0
- django_ledger/urls/receipt.py +102 -0
- django_ledger/urls/vendor.py +1 -0
- django_ledger/views/__init__.py +1 -0
- django_ledger/views/bill.py +8 -11
- django_ledger/views/chart_of_accounts.py +6 -4
- django_ledger/views/closing_entry.py +11 -7
- django_ledger/views/customer.py +68 -30
- django_ledger/views/data_import.py +120 -66
- django_ledger/views/djl_api.py +3 -5
- django_ledger/views/entity.py +2 -4
- django_ledger/views/estimate.py +3 -7
- django_ledger/views/inventory.py +3 -5
- django_ledger/views/invoice.py +4 -6
- django_ledger/views/item.py +7 -11
- django_ledger/views/journal_entry.py +1 -2
- django_ledger/views/mixins.py +125 -93
- django_ledger/views/purchase_order.py +24 -35
- django_ledger/views/receipt.py +294 -0
- django_ledger/views/unit.py +1 -2
- django_ledger/views/vendor.py +54 -16
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/METADATA +43 -75
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/RECORD +104 -122
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/WHEEL +1 -1
- django_ledger-0.8.1.dist-info/top_level.txt +1 -0
- django_ledger/contrib/django_ledger_graphene/__init__.py +0 -0
- django_ledger/contrib/django_ledger_graphene/accounts/schema.py +0 -33
- django_ledger/contrib/django_ledger_graphene/api.py +0 -42
- django_ledger/contrib/django_ledger_graphene/apps.py +0 -6
- django_ledger/contrib/django_ledger_graphene/auth/mutations.py +0 -49
- django_ledger/contrib/django_ledger_graphene/auth/schema.py +0 -6
- django_ledger/contrib/django_ledger_graphene/bank_account/mutations.py +0 -61
- django_ledger/contrib/django_ledger_graphene/bank_account/schema.py +0 -34
- django_ledger/contrib/django_ledger_graphene/bill/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/bill/schema.py +0 -34
- django_ledger/contrib/django_ledger_graphene/coa/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/coa/schema.py +0 -30
- django_ledger/contrib/django_ledger_graphene/customers/__init__.py +0 -0
- django_ledger/contrib/django_ledger_graphene/customers/mutations.py +0 -71
- django_ledger/contrib/django_ledger_graphene/customers/schema.py +0 -43
- django_ledger/contrib/django_ledger_graphene/data_import/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/data_import/schema.py +0 -0
- django_ledger/contrib/django_ledger_graphene/entity/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/entity/schema.py +0 -94
- django_ledger/contrib/django_ledger_graphene/item/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/item/schema.py +0 -31
- django_ledger/contrib/django_ledger_graphene/journal_entry/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/journal_entry/schema.py +0 -35
- django_ledger/contrib/django_ledger_graphene/ledger/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/ledger/schema.py +0 -32
- django_ledger/contrib/django_ledger_graphene/purchase_order/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/purchase_order/schema.py +0 -31
- django_ledger/contrib/django_ledger_graphene/transaction/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/transaction/schema.py +0 -36
- django_ledger/contrib/django_ledger_graphene/unit/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/unit/schema.py +0 -27
- django_ledger/contrib/django_ledger_graphene/vendor/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/vendor/schema.py +0 -37
- django_ledger/contrib/django_ledger_graphene/views.py +0 -12
- django_ledger-0.7.11.dist-info/top_level.txt +0 -4
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info/licenses}/AUTHORS.md +0 -0
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info/licenses}/LICENSE +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
.djetler_my_1 {
|
|
2
|
+
margin-top: 1rem;
|
|
3
|
+
margin-bottom: 1rem;
|
|
4
|
+
}
|
|
5
|
+
.djetler_mt_1 {
|
|
6
|
+
margin-top: 1rem;
|
|
7
|
+
}
|
|
8
|
+
.djetler_mb_1 {
|
|
9
|
+
margin-bottom: 1rem;
|
|
10
|
+
}
|
|
11
|
+
.djetler_my_2 {
|
|
12
|
+
margin-top: 2rem;
|
|
13
|
+
margin-bottom: 2rem;
|
|
14
|
+
}
|
|
15
|
+
.djetler_mt_2 {
|
|
16
|
+
margin-top: 2rem;
|
|
17
|
+
}
|
|
18
|
+
.djetler_mb_2 {
|
|
19
|
+
margin-bottom: 2rem;
|
|
20
|
+
}
|
|
21
|
+
.djetler_my_3 {
|
|
22
|
+
margin-top: 3rem;
|
|
23
|
+
margin-bottom: 3rem;
|
|
24
|
+
}
|
|
25
|
+
.djetler_mt_3 {
|
|
26
|
+
margin-top: 3rem;
|
|
27
|
+
}
|
|
28
|
+
.djetler_mb_3 {
|
|
29
|
+
margin-bottom: 3rem;
|
|
30
|
+
}
|
|
31
|
+
.djetler_my_4 {
|
|
32
|
+
margin-top: 4rem;
|
|
33
|
+
margin-bottom: 4rem;
|
|
34
|
+
}
|
|
35
|
+
.djetler_mt_4 {
|
|
36
|
+
margin-top: 4rem;
|
|
37
|
+
}
|
|
38
|
+
.djetler_mb_4 {
|
|
39
|
+
margin-bottom: 4rem;
|
|
40
|
+
}
|
|
41
|
+
.djetler_my_5 {
|
|
42
|
+
margin-top: 5rem;
|
|
43
|
+
margin-bottom: 5rem;
|
|
44
|
+
}
|
|
45
|
+
.djetler_mt_5 {
|
|
46
|
+
margin-top: 5rem;
|
|
47
|
+
}
|
|
48
|
+
.djetler_mb_5 {
|
|
49
|
+
margin-bottom: 5rem;
|
|
50
|
+
}
|
|
51
|
+
.djetler_my_6 {
|
|
52
|
+
margin-top: 6rem;
|
|
53
|
+
margin-bottom: 6rem;
|
|
54
|
+
}
|
|
55
|
+
.djetler_mt_6 {
|
|
56
|
+
margin-top: 6rem;
|
|
57
|
+
}
|
|
58
|
+
.djetler_mb_6 {
|
|
59
|
+
margin-bottom: 6rem;
|
|
60
|
+
}
|
|
61
|
+
.djetler_my_7 {
|
|
62
|
+
margin-top: 7rem;
|
|
63
|
+
margin-bottom: 7rem;
|
|
64
|
+
}
|
|
65
|
+
.djetler_mt_7 {
|
|
66
|
+
margin-top: 7rem;
|
|
67
|
+
}
|
|
68
|
+
.djetler_mb_7 {
|
|
69
|
+
margin-bottom: 7rem;
|
|
70
|
+
}
|
|
71
|
+
.djetler_my_8 {
|
|
72
|
+
margin-top: 8rem;
|
|
73
|
+
margin-bottom: 8rem;
|
|
74
|
+
}
|
|
75
|
+
.djetler_mt_8 {
|
|
76
|
+
margin-top: 8rem;
|
|
77
|
+
}
|
|
78
|
+
.djetler_mb_8 {
|
|
79
|
+
margin-bottom: 8rem;
|
|
80
|
+
}
|
|
81
|
+
.djetler_my_9 {
|
|
82
|
+
margin-top: 9rem;
|
|
83
|
+
margin-bottom: 9rem;
|
|
84
|
+
}
|
|
85
|
+
.djetler_mt_9 {
|
|
86
|
+
margin-top: 9rem;
|
|
87
|
+
}
|
|
88
|
+
.djetler_mb_9 {
|
|
89
|
+
margin-bottom: 9rem;
|
|
90
|
+
}
|
|
91
|
+
.djetler_my_10 {
|
|
92
|
+
margin-top: 10rem;
|
|
93
|
+
margin-bottom: 10rem;
|
|
94
|
+
}
|
|
95
|
+
.djetler_mt_10 {
|
|
96
|
+
margin-top: 10rem;
|
|
97
|
+
}
|
|
98
|
+
.djetler_mb_10 {
|
|
99
|
+
margin-bottom: 10rem;
|
|
100
|
+
}
|
|
101
|
+
.djetler_mx_1 {
|
|
102
|
+
margin-left: 1rem;
|
|
103
|
+
margin-right: 1rem;
|
|
104
|
+
}
|
|
105
|
+
.djetler_ml_1 {
|
|
106
|
+
margin-left: 1rem;
|
|
107
|
+
}
|
|
108
|
+
.djetler_mr_1 {
|
|
109
|
+
margin-right: 1rem;
|
|
110
|
+
}
|
|
111
|
+
.djetler_mx_2 {
|
|
112
|
+
margin-left: 2rem;
|
|
113
|
+
margin-right: 2rem;
|
|
114
|
+
}
|
|
115
|
+
.djetler_ml_2 {
|
|
116
|
+
margin-left: 2rem;
|
|
117
|
+
}
|
|
118
|
+
.djetler_mr_2 {
|
|
119
|
+
margin-right: 2rem;
|
|
120
|
+
}
|
|
121
|
+
.djetler_mx_3 {
|
|
122
|
+
margin-left: 3rem;
|
|
123
|
+
margin-right: 3rem;
|
|
124
|
+
}
|
|
125
|
+
.djetler_ml_3 {
|
|
126
|
+
margin-left: 3rem;
|
|
127
|
+
}
|
|
128
|
+
.djetler_mr_3 {
|
|
129
|
+
margin-right: 3rem;
|
|
130
|
+
}
|
|
131
|
+
.djetler_mx_4 {
|
|
132
|
+
margin-left: 4rem;
|
|
133
|
+
margin-right: 4rem;
|
|
134
|
+
}
|
|
135
|
+
.djetler_ml_4 {
|
|
136
|
+
margin-left: 4rem;
|
|
137
|
+
}
|
|
138
|
+
.djetler_mr_4 {
|
|
139
|
+
margin-right: 4rem;
|
|
140
|
+
}
|
|
141
|
+
.djetler_mx_5 {
|
|
142
|
+
margin-left: 5rem;
|
|
143
|
+
margin-right: 5rem;
|
|
144
|
+
}
|
|
145
|
+
.djetler_ml_5 {
|
|
146
|
+
margin-left: 5rem;
|
|
147
|
+
}
|
|
148
|
+
.djetler_mr_5 {
|
|
149
|
+
margin-right: 5rem;
|
|
150
|
+
}
|
|
151
|
+
.djetler_mx_6 {
|
|
152
|
+
margin-left: 6rem;
|
|
153
|
+
margin-right: 6rem;
|
|
154
|
+
}
|
|
155
|
+
.djetler_ml_6 {
|
|
156
|
+
margin-left: 6rem;
|
|
157
|
+
}
|
|
158
|
+
.djetler_mr_6 {
|
|
159
|
+
margin-right: 6rem;
|
|
160
|
+
}
|
|
161
|
+
.djetler_mx_7 {
|
|
162
|
+
margin-left: 7rem;
|
|
163
|
+
margin-right: 7rem;
|
|
164
|
+
}
|
|
165
|
+
.djetler_ml_7 {
|
|
166
|
+
margin-left: 7rem;
|
|
167
|
+
}
|
|
168
|
+
.djetler_mr_7 {
|
|
169
|
+
margin-right: 7rem;
|
|
170
|
+
}
|
|
171
|
+
.djetler_mx_8 {
|
|
172
|
+
margin-left: 8rem;
|
|
173
|
+
margin-right: 8rem;
|
|
174
|
+
}
|
|
175
|
+
.djetler_ml_8 {
|
|
176
|
+
margin-left: 8rem;
|
|
177
|
+
}
|
|
178
|
+
.djetler_mr_8 {
|
|
179
|
+
margin-right: 8rem;
|
|
180
|
+
}
|
|
181
|
+
.djetler_mx_9 {
|
|
182
|
+
margin-left: 9rem;
|
|
183
|
+
margin-right: 9rem;
|
|
184
|
+
}
|
|
185
|
+
.djetler_ml_9 {
|
|
186
|
+
margin-left: 9rem;
|
|
187
|
+
}
|
|
188
|
+
.djetler_mr_9 {
|
|
189
|
+
margin-right: 9rem;
|
|
190
|
+
}
|
|
191
|
+
.djetler_mx_10 {
|
|
192
|
+
margin-left: 10rem;
|
|
193
|
+
margin-right: 10rem;
|
|
194
|
+
}
|
|
195
|
+
.djetler_ml_10 {
|
|
196
|
+
margin-left: 10rem;
|
|
197
|
+
}
|
|
198
|
+
.djetler_mr_10 {
|
|
199
|
+
margin-right: 10rem;
|
|
200
|
+
}
|
|
201
|
+
.djetler-section-min100 {
|
|
202
|
+
min-height: 100px;
|
|
203
|
+
}
|
|
204
|
+
.djetler-section-min200 {
|
|
205
|
+
min-height: 200px;
|
|
206
|
+
}
|
|
207
|
+
.djetler-section-min300 {
|
|
208
|
+
min-height: 300px;
|
|
209
|
+
}
|
|
210
|
+
.djetler-section-min400 {
|
|
211
|
+
min-height: 400px;
|
|
212
|
+
}
|
|
213
|
+
.djetler-section-min500 {
|
|
214
|
+
min-height: 500px;
|
|
215
|
+
}
|
|
216
|
+
.djetler-box-green {
|
|
217
|
+
background-color: #18ff6f;
|
|
218
|
+
}
|
|
219
|
+
.djetler-box-yellow {
|
|
220
|
+
background-color: #ffd931;
|
|
221
|
+
}
|
|
222
|
+
.djetler-box-blue {
|
|
223
|
+
background-color: #374bff;
|
|
224
|
+
}
|
|
225
|
+
.django-ledger-login {
|
|
226
|
+
height: 100vh;
|
|
227
|
+
background-size: cover;
|
|
228
|
+
background-position: center;
|
|
229
|
+
}
|
|
230
|
+
.djl-icon-12 {
|
|
231
|
+
font-size: 12px;
|
|
232
|
+
}
|
|
233
|
+
.djl-icon-24 {
|
|
234
|
+
font-size: 24px;
|
|
235
|
+
}
|
|
236
|
+
.djl-icon-36 {
|
|
237
|
+
font-size: 36px;
|
|
238
|
+
}
|
|
239
|
+
.djl-icon-48 {
|
|
240
|
+
font-size: 48px;
|
|
241
|
+
}
|
|
242
|
+
.djl-icon-60 {
|
|
243
|
+
font-size: 60px;
|
|
244
|
+
}
|
|
245
|
+
.djl-icon-72 {
|
|
246
|
+
font-size: 72px;
|
|
247
|
+
}
|
|
248
|
+
.djl-icon-84 {
|
|
249
|
+
font-size: 84px;
|
|
250
|
+
}
|
|
251
|
+
.djl-icon-96 {
|
|
252
|
+
font-size: 96px;
|
|
253
|
+
}
|
|
254
|
+
.djl-icon-108 {
|
|
255
|
+
font-size: 108px;
|
|
256
|
+
}
|
|
257
|
+
.djl-icon-120 {
|
|
258
|
+
font-size: 120px;
|
|
259
|
+
}
|
|
260
|
+
.django-ledger-table-bottom-margin-75 {
|
|
261
|
+
margin-bottom: 75px;
|
|
262
|
+
}
|
|
263
|
+
.django-ledger-table-bottom-margin-150 {
|
|
264
|
+
margin-bottom: 150px;
|
|
265
|
+
}
|
|
266
|
+
.djl-is-strikethrough {
|
|
267
|
+
text-decoration: line-through;
|
|
268
|
+
}
|
|
269
|
+
#djl-login-bg-image {
|
|
270
|
+
background-repeat: no-repeat;
|
|
271
|
+
background-size: cover;
|
|
272
|
+
}
|
|
273
|
+
/*# sourceMappingURL=djl_styles.css.map */
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
<span class="icon">{% icon "ri:bill-line" 16 %}</span>
|
|
11
11
|
{% trans 'Bill' %}
|
|
12
12
|
</p>
|
|
13
|
-
<
|
|
14
|
-
<
|
|
13
|
+
<h2 class="title">{{ bill.vendor.vendor_name }}</h2>
|
|
14
|
+
<h3 class="has-text-weight-light">{{ bill.vendor.address_1 }}</h3>
|
|
15
15
|
{% if not bill.is_past_due %}
|
|
16
16
|
<p class="is-size-5 has-text-info">{% trans 'Due in' %}: {{ bill.date_due | timeuntil }}</p>
|
|
17
17
|
{% else %}
|
|
@@ -5,57 +5,72 @@
|
|
|
5
5
|
<div class="box">
|
|
6
6
|
<aside class="menu">
|
|
7
7
|
<p class="menu-label">{% session_entity_name request %}</p>
|
|
8
|
-
<ul
|
|
9
|
-
|
|
8
|
+
<ul>
|
|
10
9
|
{% for link in links %}
|
|
11
10
|
{% if link.type == 'link' %}
|
|
12
11
|
<li>
|
|
13
|
-
<a href="{{ link.url }}"
|
|
12
|
+
<a href="{{ link.url }}" class="button is-light has-text-grey is-light is-outlined has-text-weight-bold is-fullwidth is-justify-content-flex-start is-align-items-center mt-1">
|
|
13
|
+
<span class="icon is-small" aria-hidden="true">
|
|
14
|
+
<iconify-icon icon="{{ link.icon }}" width="1em" height="1em"></iconify-icon>
|
|
15
|
+
</span>
|
|
16
|
+
<span class="ml-2">{{ link.title }}</span>
|
|
17
|
+
</a>
|
|
14
18
|
</li>
|
|
15
19
|
{% elif link.type == 'links' %}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
</ul>
|
|
21
|
+
<p class="menu-label">{{ link.title }}</p>
|
|
22
|
+
<ul class="menu-list">
|
|
23
|
+
{% for l in link.links %}
|
|
24
|
+
<li>
|
|
25
|
+
<a href="{{ l.url }}" class="button is-light has-text-grey is-light is-outlined has-text-weight-bold is-fullwidth is-justify-content-flex-start is-align-items-center mt-1">
|
|
26
|
+
<span class="icon is-small" aria-hidden="true">
|
|
27
|
+
<iconify-icon icon="{{ l.icon }}" width="1em" height="1em"></iconify-icon>
|
|
28
|
+
</span>
|
|
29
|
+
<span class="ml-2">{{ l.title }}</span>
|
|
30
|
+
</a>
|
|
31
|
+
</li>
|
|
32
|
+
{% endfor %}
|
|
26
33
|
{% endif %}
|
|
27
34
|
{% endfor %}
|
|
28
|
-
|
|
29
35
|
</ul>
|
|
30
36
|
</aside>
|
|
31
37
|
</div>
|
|
32
38
|
|
|
33
|
-
{# A menu that renders only on mobile devices when the burger menu is opened #}
|
|
34
39
|
{% elif style == 'mobile' %}
|
|
35
40
|
<div class="navbar-start">
|
|
36
|
-
<div class="navbar-item has-text-weight-bold is-hidden-desktop">
|
|
41
|
+
<div class="navbar-item has-text-weight-bold is-hidden-desktop">
|
|
42
|
+
{{ entity.name | upper }}
|
|
43
|
+
</div>
|
|
37
44
|
{% for link in links %}
|
|
38
45
|
|
|
39
46
|
{% if link.type == 'link' %}
|
|
40
|
-
<a class="navbar-item is-hidden-desktop"
|
|
41
|
-
href="{{ link.url }}">
|
|
47
|
+
<a class="navbar-item is-hidden-desktop is-flex is-align-items-center has-text-primary"
|
|
48
|
+
href="{{ link.url }}">
|
|
49
|
+
<span class="icon is-small" aria-hidden="true">
|
|
50
|
+
<iconify-icon icon="{{ link.icon }}" width="1em" height="1em"></iconify-icon>
|
|
51
|
+
</span>
|
|
52
|
+
<span class="ml-2">{{ link.title }}</span>
|
|
53
|
+
</a>
|
|
42
54
|
|
|
43
55
|
{% elif link.type == 'links' %}
|
|
44
56
|
<div class="navbar-item has-dropdown is-hoverable is-hidden-desktop">
|
|
45
|
-
<a class="navbar-link
|
|
46
|
-
|
|
47
|
-
|
|
57
|
+
<a class="navbar-link has-text-primary is-flex is-align-items-center">
|
|
58
|
+
<span class="has-text-weight-semibold">{{ link.title }}</span>
|
|
59
|
+
</a>
|
|
60
|
+
<div class="navbar-dropdown is-boxed">
|
|
48
61
|
{% for l in link.links %}
|
|
49
|
-
<a class="navbar-item"
|
|
50
|
-
href="{{ l.url }}">
|
|
62
|
+
<a class="navbar-item is-flex is-align-items-center has-text-primary"
|
|
63
|
+
href="{{ l.url }}">
|
|
64
|
+
<span class="icon is-small" aria-hidden="true">
|
|
65
|
+
<iconify-icon icon="{{ l.icon }}" width="1em" height="1em"></iconify-icon>
|
|
66
|
+
</span>
|
|
67
|
+
<span class="ml-2">{{ l.title }}</span>
|
|
68
|
+
</a>
|
|
51
69
|
{% endfor %}
|
|
52
|
-
|
|
53
70
|
</div>
|
|
54
71
|
</div>
|
|
55
72
|
{% endif %}
|
|
56
73
|
|
|
57
74
|
{% endfor %}
|
|
58
75
|
</div>
|
|
59
|
-
|
|
60
|
-
|
|
61
76
|
{% endif %}
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
<div class="card">
|
|
5
5
|
<div class="card-content">
|
|
6
6
|
<div class="has-text-centered">
|
|
7
|
-
<h2 class="is-size-
|
|
7
|
+
<h2 class="is-size-4 has-font-weight-medium">
|
|
8
8
|
{% if has_year %}Fiscal Year {{ to_date.year }}{% endif %}
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
</h2>
|
|
10
|
+
<h2 class="is-size-5">
|
|
11
|
+
{% if has_month %}{{ to_date | date:"F" }}{% endif %}
|
|
12
|
+
{% if has_quarter %}Q{{ quarter }}{% endif %}
|
|
11
13
|
{% if has_date %}{{ to_date | date }}{% endif %}
|
|
12
14
|
</h2>
|
|
13
15
|
</div>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{% extends 'django_ledger/layouts/content_layout_1.html' %}
|
|
2
|
+
{% load i18n %}
|
|
3
|
+
{% load django_ledger %}
|
|
4
|
+
|
|
5
|
+
{% block view_content %}
|
|
6
|
+
|
|
7
|
+
<div class="box">
|
|
8
|
+
<div class="columns">
|
|
9
|
+
<div class="column is-one-third">
|
|
10
|
+
{% include 'django_ledger/customer/includes/card_customer.html' with customer=customer %}
|
|
11
|
+
</div>
|
|
12
|
+
<div class="column">
|
|
13
|
+
<div class="content">
|
|
14
|
+
<h3 class="title is-4">
|
|
15
|
+
<span class="icon is-small">{% icon 'mdi:receipt-text' 24 %}</span>
|
|
16
|
+
{% trans 'Receipts' %}
|
|
17
|
+
</h3>
|
|
18
|
+
{% if receipts %}
|
|
19
|
+
<div class="table-container">
|
|
20
|
+
<table class="table is-fullwidth is-narrow is-striped is-bordered">
|
|
21
|
+
<thead>
|
|
22
|
+
<tr>
|
|
23
|
+
<th class="has-text-centered">{% trans 'Receipt Number' %}</th>
|
|
24
|
+
<th class="has-text-centered">{% trans 'Date' %}</th>
|
|
25
|
+
<th class="has-text-centered">{% trans 'Type' %}</th>
|
|
26
|
+
<th class="has-text-centered">{% trans 'Actions' %}</th>
|
|
27
|
+
</tr>
|
|
28
|
+
</thead>
|
|
29
|
+
<tbody>
|
|
30
|
+
{% for receipt in receipts %}
|
|
31
|
+
<tr class="has-text-centered">
|
|
32
|
+
<td>
|
|
33
|
+
<a href="{{ receipt.get_absolute_url }}">{{ receipt.receipt_number }}</a>
|
|
34
|
+
</td>
|
|
35
|
+
<td>{{ receipt.receipt_date }}</td>
|
|
36
|
+
<td>{{ receipt.receipt_type|title }}</td>
|
|
37
|
+
<td>
|
|
38
|
+
{% if receipt.get_import_job_url %}
|
|
39
|
+
<a class="button is-small is-primary"
|
|
40
|
+
href="{{ receipt.get_import_job_url }}">{% trans 'Bank Feed Job' %}</a>
|
|
41
|
+
{% endif %}
|
|
42
|
+
</td>
|
|
43
|
+
</tr>
|
|
44
|
+
{% endfor %}
|
|
45
|
+
</tbody>
|
|
46
|
+
</table>
|
|
47
|
+
</div>
|
|
48
|
+
{% else %}
|
|
49
|
+
<p class="has-text-grey">{% trans 'No receipts found for this customer.' %}</p>
|
|
50
|
+
{% endif %}
|
|
51
|
+
|
|
52
|
+
<hr>
|
|
53
|
+
|
|
54
|
+
<h3 class="title is-4">
|
|
55
|
+
<span class="icon is-small">{% icon 'mdi:file-document-edit-outline' 24 %}</span>
|
|
56
|
+
{% trans 'Invoices' %}
|
|
57
|
+
</h3>
|
|
58
|
+
{% if invoices %}
|
|
59
|
+
<div class="table-container">
|
|
60
|
+
<table class="table is-fullwidth is-narrow is-striped is-bordered">
|
|
61
|
+
<thead>
|
|
62
|
+
<tr>
|
|
63
|
+
<th class="has-text-centered">{% trans 'Invoice Number' %}</th>
|
|
64
|
+
<th class="has-text-centered">{% trans 'Status' %}</th>
|
|
65
|
+
</tr>
|
|
66
|
+
</thead>
|
|
67
|
+
<tbody>
|
|
68
|
+
{% for invoice in invoices %}
|
|
69
|
+
<tr class="has-text-centered">
|
|
70
|
+
<td><a href="{{ invoice.get_absolute_url }}">{{ invoice.invoice_number }}</a>
|
|
71
|
+
</td>
|
|
72
|
+
<td>{{ invoice.get_invoice_status_display }}</td>
|
|
73
|
+
</tr>
|
|
74
|
+
{% endfor %}
|
|
75
|
+
</tbody>
|
|
76
|
+
</table>
|
|
77
|
+
</div>
|
|
78
|
+
{% else %}
|
|
79
|
+
<p class="has-text-grey">{% trans 'No invoices found for this customer.' %}</p>
|
|
80
|
+
{% endif %}
|
|
81
|
+
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
{% endblock %}
|
|
@@ -18,27 +18,27 @@
|
|
|
18
18
|
{% for customer in customers %}
|
|
19
19
|
<tr class="has-text-centered">
|
|
20
20
|
<td>{{ customer.customer_number }}</td>
|
|
21
|
-
<td>{{ customer.customer_name }}</td>
|
|
22
|
-
<td>{{ customer.address_1 }}</td>
|
|
21
|
+
<td><a href="{% url 'django_ledger:customer-detail' entity_slug=view.kwargs.entity_slug customer_pk=customer.uuid %}">{{ customer.customer_name }}</a></td>
|
|
22
|
+
<td>{% if customer.address_1 %}{{ customer.address_1 }}{% endif %}</td>
|
|
23
23
|
<td>{% if customer.customer_code %}{{ customer.customer_code }}{% endif %}</td>
|
|
24
24
|
<td>
|
|
25
25
|
{% if customer.active %}
|
|
26
|
-
<span class="icon has-text-success
|
|
26
|
+
<span class="icon has-text-success">
|
|
27
27
|
{% icon 'ant-design:check-circle-filled' 24 %}
|
|
28
28
|
</span>
|
|
29
29
|
{% elif not customer.active %}
|
|
30
|
-
<span class="icon has-text-danger
|
|
30
|
+
<span class="icon has-text-danger">
|
|
31
31
|
{% icon 'mdi:dangerous' 24 %}
|
|
32
32
|
</span>
|
|
33
33
|
{% endif %}
|
|
34
34
|
</td>
|
|
35
35
|
<td>
|
|
36
36
|
{% if customer.hidden %}
|
|
37
|
-
<span class="icon has-text-success
|
|
37
|
+
<span class="icon has-text-success">
|
|
38
38
|
{% icon 'ant-design:check-circle-filled' 24 %}
|
|
39
39
|
</span>
|
|
40
40
|
{% elif not customer.hidden %}
|
|
41
|
-
<span class="icon has-text-danger
|
|
41
|
+
<span class="icon has-text-danger">
|
|
42
42
|
{% icon 'mdi:dangerous' 24 %}
|
|
43
43
|
</span>
|
|
44
44
|
{% endif %}
|
|
@@ -61,6 +61,8 @@
|
|
|
61
61
|
id="dropdown-menu-{{ customer.uuid }}"
|
|
62
62
|
role="menu">
|
|
63
63
|
<div class="dropdown-content">
|
|
64
|
+
<a href="{% url 'django_ledger:customer-detail' entity_slug=view.kwargs.entity_slug customer_pk=customer.uuid %}"
|
|
65
|
+
class="dropdown-item has-text-weight-bold has-text-success">{% trans 'View' %}</a>
|
|
64
66
|
<a href="{% url 'django_ledger:customer-update' entity_slug=view.kwargs.entity_slug customer_pk=customer.uuid %}"
|
|
65
67
|
class="dropdown-item has-text-weight-bold has-text-info">{% trans 'Update' %}</a>
|
|
66
68
|
</div>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</thead>
|
|
18
18
|
<tbody>
|
|
19
19
|
{% for imported_tx in imported_txs %}
|
|
20
|
-
<tr>
|
|
20
|
+
<tr id="staged-tx-{{ imported_tx.uuid }}">
|
|
21
21
|
<td>{{ imported_tx.date_posted }}</td>
|
|
22
22
|
<td>{{ imported_tx.name }}</td>
|
|
23
23
|
<td class="{% if imported_tx.get_amount < 0.00 %}has-text-danger{% endif %} has-text-centered">
|
|
@@ -29,8 +29,29 @@
|
|
|
29
29
|
<td>{{ imported_tx.account_model }}</td>
|
|
30
30
|
<td>{{ imported_tx.transaction_model }}</td>
|
|
31
31
|
<td class="has-text-centered">
|
|
32
|
-
<
|
|
33
|
-
|
|
32
|
+
<div class="dropdown is-hoverable is-right">
|
|
33
|
+
<div class="dropdown-trigger">
|
|
34
|
+
<button class="button is-small" aria-haspopup="true" aria-controls="actions-{{ imported_tx.uuid }}">
|
|
35
|
+
<span>{% trans 'Actions' %}</span>
|
|
36
|
+
<span class="icon is-small">{% icon 'mdi:chevron-down' 14 %}</span>
|
|
37
|
+
</button>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="dropdown-menu" id="actions-{{ imported_tx.uuid }}" role="menu">
|
|
40
|
+
<div class="dropdown-content">
|
|
41
|
+
<a href="{% url 'django_ledger:je-detail' entity_slug=import_job_model.entity_slug ledger_pk=imported_tx.transaction_model.journal_entry.ledger_id je_pk=imported_tx.transaction_model.journal_entry_id %}"
|
|
42
|
+
class="dropdown-item">{% trans 'View JE' %}</a>
|
|
43
|
+
{% if imported_tx.has_receipt %}
|
|
44
|
+
<a href="{% url 'django_ledger:receipt-detail' entity_slug=import_job_model.entity_slug receipt_pk=imported_tx.receiptmodel.uuid %}"
|
|
45
|
+
class="dropdown-item">{% trans 'View Receipt' %}</a>
|
|
46
|
+
{% endif %}
|
|
47
|
+
<hr class="dropdown-divider">
|
|
48
|
+
<form method="post" action="{% url 'django_ledger:data-import-staged-tx-undo' entity_slug=import_job_model.entity_slug job_pk=import_job_model.uuid staged_tx_pk=imported_tx.uuid %}">
|
|
49
|
+
{% csrf_token %}
|
|
50
|
+
<button type="submit" class="dropdown-item has-text-danger">{% trans 'Undo Import' %}</button>
|
|
51
|
+
</form>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
34
55
|
</td>
|
|
35
56
|
</tr>
|
|
36
57
|
{% endfor %}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
<form method="post">
|
|
6
6
|
|
|
7
7
|
{{ staged_txs_formset.non_form_errors }}
|
|
8
|
-
{% if staged_txs_formset.errors %}
|
|
9
|
-
{{ staged_txs_formset.errors }}
|
|
10
|
-
{% endif %}
|
|
8
|
+
{# {% if staged_txs_formset.errors %}#}
|
|
9
|
+
{# {{ staged_txs_formset.errors }}#}
|
|
10
|
+
{# {% endif %}#}
|
|
11
11
|
{{ staged_txs_formset.management_form }}
|
|
12
12
|
|
|
13
13
|
{% csrf_token %}
|
|
@@ -23,9 +23,11 @@
|
|
|
23
23
|
<th>Split Amount</th>
|
|
24
24
|
<th>Map To</th>
|
|
25
25
|
<th>Unit</th>
|
|
26
|
+
<th>Receipt Type</th>
|
|
27
|
+
<th>Customer/Vendor</th>
|
|
26
28
|
<th>Import</th>
|
|
27
|
-
<th>Bundle
|
|
28
|
-
<th>
|
|
29
|
+
<th>Bundle</th>
|
|
30
|
+
<th>Split</th>
|
|
29
31
|
<th>Delete</th>
|
|
30
32
|
</tr>
|
|
31
33
|
</thead>
|
|
@@ -33,7 +35,7 @@
|
|
|
33
35
|
<tbody>
|
|
34
36
|
|
|
35
37
|
{% for txf in staged_txs_formset %}
|
|
36
|
-
<tr class="{% if txf.instance.is_children %}has-background-primary{% elif txf.instance.has_children %}has-background-primary-light{% endif %}">
|
|
38
|
+
<tr id="staged-tx-{{ txf.instance.uuid }}" class="{% if txf.instance.is_children %}has-background-primary{% elif txf.instance.has_children %}has-background-primary-light{% endif %}">
|
|
37
39
|
<td>{{ forloop.counter }}</td>
|
|
38
40
|
{% for hidden_field in txf.hidden_fields %}{{ hidden_field }}{% endfor %}
|
|
39
41
|
{% if txf.instance.is_children %}
|
|
@@ -54,16 +56,30 @@
|
|
|
54
56
|
|
|
55
57
|
<td>
|
|
56
58
|
{% if txf.instance.get_prospect_je_activity_display %}
|
|
59
|
+
<span class="has-text-success">{% icon 'lets-icons:check-fill' 16 %}</span>
|
|
57
60
|
<span class="is-italic">{% trans 'Transaction Activity' %}:</span>
|
|
58
61
|
<span class="has-text-weight-bold">
|
|
59
|
-
|
|
62
|
+
{{ txf.instance.get_prospect_je_activity_display }}
|
|
60
63
|
</span>
|
|
64
|
+
{% elif not txf.instance.is_children %}
|
|
65
|
+
<span class="has-text-danger">{% icon 'ooui:block' 16 %}</span>
|
|
66
|
+
<span>Invalid or Pending Account Mapping.</span>
|
|
61
67
|
{% endif %}
|
|
62
68
|
{{ txf.account_model }}
|
|
69
|
+
{% if txf.errors %}
|
|
70
|
+
{% for i,err in txf.errors.items %}
|
|
71
|
+
<span class="has-text-danger">{{ err }}</span>
|
|
72
|
+
{% endfor %}
|
|
73
|
+
{% endif %}
|
|
63
74
|
</td>
|
|
64
|
-
<td>{{ txf.unit_model }}
|
|
65
|
-
|
|
66
|
-
|
|
75
|
+
<td>{{ txf.unit_model }}</td>
|
|
76
|
+
<td>{{ txf.receipt_type }}</td>
|
|
77
|
+
<td class="has-text-centered">
|
|
78
|
+
{% if txf.SHOW_CUSTOMER_FIELD %}
|
|
79
|
+
{{ txf.customer_model }}
|
|
80
|
+
{% elif txf.SHOW_VENDOR_FIELD %}
|
|
81
|
+
{{ txf.vendor_model }}
|
|
82
|
+
{% endif %}
|
|
67
83
|
</td>
|
|
68
84
|
<td class="has-text-centered">{{ txf.tx_import }}</td>
|
|
69
85
|
<td class="has-text-centered">{{ txf.bundle_split }}</td>
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
<section class="section">
|
|
8
8
|
<div class="container is-fluid p-0">
|
|
9
9
|
<div class="columns">
|
|
10
|
-
<div class="column is-
|
|
10
|
+
<div class="column is-2 is-hidden-mobile is-hidden-tablet-only">
|
|
11
|
+
|
|
11
12
|
<div class="columns is-multiline">
|
|
12
13
|
<div class="column is-12">
|
|
13
14
|
{% if view.kwargs.unit_slug or request.GET.unit %}
|
|
@@ -21,7 +22,6 @@
|
|
|
21
22
|
</div>
|
|
22
23
|
</div>
|
|
23
24
|
|
|
24
|
-
|
|
25
25
|
</div>
|
|
26
26
|
<div class="column">
|
|
27
27
|
<div class="columns is-multiline is-centered">
|