django-ledger 0.7.10__py3-none-any.whl → 0.8.0__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.

Files changed (115) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/context.py +12 -0
  3. django_ledger/forms/bill.py +0 -4
  4. django_ledger/forms/closing_entry.py +13 -1
  5. django_ledger/forms/data_import.py +1 -1
  6. django_ledger/forms/estimate.py +3 -6
  7. django_ledger/forms/invoice.py +3 -7
  8. django_ledger/forms/item.py +10 -18
  9. django_ledger/forms/purchase_order.py +2 -4
  10. django_ledger/io/io_core.py +25 -32
  11. django_ledger/io/io_generator.py +7 -6
  12. django_ledger/io/io_library.py +1 -2
  13. django_ledger/migrations/0024_billmodel_entity_model_invoicemodel_entity_model.py +24 -0
  14. django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +70 -0
  15. django_ledger/models/accounts.py +109 -69
  16. django_ledger/models/bank_account.py +40 -23
  17. django_ledger/models/bill.py +89 -63
  18. django_ledger/models/chart_of_accounts.py +173 -105
  19. django_ledger/models/closing_entry.py +99 -48
  20. django_ledger/models/customer.py +60 -39
  21. django_ledger/models/data_import.py +55 -41
  22. django_ledger/models/deprecations.py +61 -0
  23. django_ledger/models/entity.py +18 -16
  24. django_ledger/models/estimate.py +57 -28
  25. django_ledger/models/invoice.py +58 -28
  26. django_ledger/models/items.py +503 -142
  27. django_ledger/models/journal_entry.py +61 -47
  28. django_ledger/models/ledger.py +106 -42
  29. django_ledger/models/mixins.py +16 -10
  30. django_ledger/models/purchase_order.py +39 -17
  31. django_ledger/models/transactions.py +152 -113
  32. django_ledger/models/unit.py +57 -30
  33. django_ledger/models/vendor.py +75 -43
  34. django_ledger/report/core.py +2 -14
  35. django_ledger/settings.py +56 -71
  36. django_ledger/static/django_ledger/bundle/djetler.bundle.js +1 -1
  37. django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +25 -0
  38. django_ledger/static/django_ledger/bundle/styles.bundle.js +1 -1
  39. django_ledger/static/django_ledger/css/djl_styles.css +273 -0
  40. django_ledger/templates/django_ledger/bills/includes/card_bill.html +2 -2
  41. django_ledger/templates/django_ledger/components/menu.html +41 -26
  42. django_ledger/templates/django_ledger/customer/tags/customer_table.html +5 -5
  43. django_ledger/templates/django_ledger/entity/includes/card_entity.html +12 -6
  44. django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +1 -1
  45. django_ledger/templates/django_ledger/financial_statements/cash_flow.html +4 -1
  46. django_ledger/templates/django_ledger/financial_statements/income_statement.html +4 -1
  47. django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +27 -3
  48. django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +16 -4
  49. django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +73 -18
  50. django_ledger/templates/django_ledger/includes/widget_ratios.html +18 -24
  51. django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +3 -3
  52. django_ledger/templates/django_ledger/layouts/base.html +6 -1
  53. django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +9 -5
  54. django_ledger/tests/test_accounts.py +1 -2
  55. django_ledger/tests/test_io.py +17 -0
  56. django_ledger/tests/test_purchase_order.py +3 -3
  57. django_ledger/tests/test_transactions.py +1 -2
  58. django_ledger/urls/__init__.py +0 -4
  59. django_ledger/views/bill.py +8 -13
  60. django_ledger/views/chart_of_accounts.py +6 -4
  61. django_ledger/views/closing_entry.py +11 -7
  62. django_ledger/views/customer.py +13 -17
  63. django_ledger/views/data_import.py +7 -6
  64. django_ledger/views/djl_api.py +3 -5
  65. django_ledger/views/entity.py +2 -4
  66. django_ledger/views/estimate.py +3 -7
  67. django_ledger/views/inventory.py +3 -5
  68. django_ledger/views/invoice.py +4 -6
  69. django_ledger/views/item.py +7 -11
  70. django_ledger/views/journal_entry.py +1 -2
  71. django_ledger/views/mixins.py +25 -19
  72. django_ledger/views/purchase_order.py +24 -35
  73. django_ledger/views/unit.py +1 -2
  74. django_ledger/views/vendor.py +1 -2
  75. {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info}/METADATA +43 -75
  76. {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info}/RECORD +80 -108
  77. {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info}/WHEEL +1 -1
  78. django_ledger-0.8.0.dist-info/top_level.txt +1 -0
  79. django_ledger/contrib/django_ledger_graphene/__init__.py +0 -0
  80. django_ledger/contrib/django_ledger_graphene/accounts/schema.py +0 -33
  81. django_ledger/contrib/django_ledger_graphene/api.py +0 -42
  82. django_ledger/contrib/django_ledger_graphene/apps.py +0 -6
  83. django_ledger/contrib/django_ledger_graphene/auth/mutations.py +0 -49
  84. django_ledger/contrib/django_ledger_graphene/auth/schema.py +0 -6
  85. django_ledger/contrib/django_ledger_graphene/bank_account/mutations.py +0 -61
  86. django_ledger/contrib/django_ledger_graphene/bank_account/schema.py +0 -34
  87. django_ledger/contrib/django_ledger_graphene/bill/mutations.py +0 -0
  88. django_ledger/contrib/django_ledger_graphene/bill/schema.py +0 -34
  89. django_ledger/contrib/django_ledger_graphene/coa/mutations.py +0 -0
  90. django_ledger/contrib/django_ledger_graphene/coa/schema.py +0 -30
  91. django_ledger/contrib/django_ledger_graphene/customers/__init__.py +0 -0
  92. django_ledger/contrib/django_ledger_graphene/customers/mutations.py +0 -71
  93. django_ledger/contrib/django_ledger_graphene/customers/schema.py +0 -43
  94. django_ledger/contrib/django_ledger_graphene/data_import/mutations.py +0 -0
  95. django_ledger/contrib/django_ledger_graphene/data_import/schema.py +0 -0
  96. django_ledger/contrib/django_ledger_graphene/entity/mutations.py +0 -0
  97. django_ledger/contrib/django_ledger_graphene/entity/schema.py +0 -94
  98. django_ledger/contrib/django_ledger_graphene/item/mutations.py +0 -0
  99. django_ledger/contrib/django_ledger_graphene/item/schema.py +0 -31
  100. django_ledger/contrib/django_ledger_graphene/journal_entry/mutations.py +0 -0
  101. django_ledger/contrib/django_ledger_graphene/journal_entry/schema.py +0 -35
  102. django_ledger/contrib/django_ledger_graphene/ledger/mutations.py +0 -0
  103. django_ledger/contrib/django_ledger_graphene/ledger/schema.py +0 -32
  104. django_ledger/contrib/django_ledger_graphene/purchase_order/mutations.py +0 -0
  105. django_ledger/contrib/django_ledger_graphene/purchase_order/schema.py +0 -31
  106. django_ledger/contrib/django_ledger_graphene/transaction/mutations.py +0 -0
  107. django_ledger/contrib/django_ledger_graphene/transaction/schema.py +0 -36
  108. django_ledger/contrib/django_ledger_graphene/unit/mutations.py +0 -0
  109. django_ledger/contrib/django_ledger_graphene/unit/schema.py +0 -27
  110. django_ledger/contrib/django_ledger_graphene/vendor/mutations.py +0 -0
  111. django_ledger/contrib/django_ledger_graphene/vendor/schema.py +0 -37
  112. django_ledger/contrib/django_ledger_graphene/views.py +0 -12
  113. django_ledger-0.7.10.dist-info/top_level.txt +0 -4
  114. {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info/licenses}/AUTHORS.md +0 -0
  115. {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.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
- <p class="title">{{ bill.vendor.vendor_name }}</p>
14
- <p class="subtitle has-text-weight-light">{{ bill.vendor.address_1 }}</p>
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 class="menu-list">
9
-
8
+ <ul>
10
9
  {% for link in links %}
11
10
  {% if link.type == 'link' %}
12
11
  <li>
13
- <a href="{{ link.url }}">{{ link.title }}</a>
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
- <li>
17
- <a>{{ link.title }}</a>
18
- <ul>
19
- {% for l in link.links %}
20
- <li>
21
- <a href="{{ l.url }}">{{ l.title }}</a>
22
- </li>
23
- {% endfor %}
24
- </ul>
25
- </li>
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">{{ entity.name | upper }}</div>
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 }}">{{ link.title }}</a>
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">{{ link.title }}</a>
46
- <div class="navbar-dropdown">
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 }}">{{ l.title }}</a>
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 %}
@@ -19,26 +19,26 @@
19
19
  <tr class="has-text-centered">
20
20
  <td>{{ customer.customer_number }}</td>
21
21
  <td>{{ customer.customer_name }}</td>
22
- <td>{{ customer.address_1 }}</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-dark">
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-dark">
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-dark">
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-dark">
41
+ <span class="icon has-text-danger">
42
42
  {% icon 'mdi:dangerous' 24 %}
43
43
  </span>
44
44
  {% endif %}
@@ -5,10 +5,13 @@
5
5
 
6
6
  <div class="card">
7
7
  <div class="card-content">
8
- <p class="title has-text-weight-light">
9
- <span class="icon is-medium">{% icon "ic:baseline-business" 36 %}</span>{{ entity.name }}
10
- </p>
11
- <p class="subtitle">{{ entity.address_1 }}</p>
8
+ <h1 class="is-size-3 has-text-weight-light">
9
+ <span class="icon is-medium mr-3">
10
+ {% icon "ic:baseline-business" 36 %}
11
+ </span>{{ entity.name }}
12
+ </h1>
13
+ <h2>{{ entity.address_1 }}</h2>
14
+
12
15
  <h3 class="is-size-4 has-text-weight-light">
13
16
  {% if entity.is_accrual_method %}
14
17
  <span class="icon is-medium has-text-info">
@@ -19,11 +22,14 @@
19
22
  {% icon 'bi:cash-stack' 24 %}</span>
20
23
  {% trans 'Cash Method' %}
21
24
  {% endif %}
22
-
23
25
  </h3>
24
26
 
25
27
  <h4>Created: {{ entity.created | timesince }} ago</h4>
26
- <p class="is-italic">{% trans 'Last Closing Date' %}: {{ entity.last_closing_date }}</p>
28
+ {% if entity.last_closing_date %}
29
+ <p class="is-italic">{% trans 'Last Closing Date' %}:
30
+ {{ entity.last_closing_date }}
31
+ </p>
32
+ {% endif %}
27
33
  </div>
28
34
  <footer class="card-footer">
29
35
  <a href="{{ entity.get_dashboard_url }}" class="card-footer-item">Dashboard</a>
@@ -36,7 +36,7 @@
36
36
  {% elif month %}{{ from_date | date:'F, Y' }}
37
37
  {% else %}{% trans 'Fiscal Year' %} {{ year }}
38
38
  {% endif %}</h2>
39
- <h3 class="is-size-4 is-italic has-font-weight-light">As Of {{ to_date | date:'m/d/Y' }}</h3>
39
+ <h3 class="is-size-4 is-italic has-font-weight-light">{% trans 'As of' %} {{ to_date | date:'F j, Y' }}</h3>
40
40
  </div>
41
41
  </div>
42
42
  </div>
@@ -38,7 +38,10 @@
38
38
  {% else %}{% trans 'Fiscal Year' %} {{ year }}
39
39
  {% endif %}</h2>
40
40
  <h3 class="is-size-4 is-italic has-font-weight-light">
41
- {{ from_date | date:'m/d/Y' }} - {{ to_date | date:'m/d/Y' }}
41
+ {% if month %}{% trans 'For the month ended' %} {{ to_date | date:'F j, Y' }}
42
+ {% elif quarter %}{% trans 'For the quarter ended' %} {{ to_date | date:'F j, Y' }}
43
+ {% else %}{% trans 'For the fiscal year ended' %} {{ to_date | date:'F j, Y' }}
44
+ {% endif %}
42
45
  </h3>
43
46
  </div>
44
47
  </div>
@@ -35,7 +35,10 @@
35
35
  {% else %}Fiscal Year {{ year }}
36
36
  {% endif %}</h2>
37
37
  <h3 class="is-size-4 is-italic has-font-weight-light">
38
- {{ from_date | date:'m/d/Y' }} - {{ to_date | date:'m/d/Y' }}
38
+ {% if month %}{% trans 'For the month ended' %} {{ to_date | date:'F j, Y' }}
39
+ {% elif quarter %}{% trans 'For the quarter ended' %} {{ to_date | date:'F j, Y' }}
40
+ {% else %}{% trans 'For the fiscal year ended' %} {{ to_date | date:'F j, Y' }}
41
+ {% endif %}
39
42
  </h3>
40
43
  </div>
41
44
  </div>
@@ -1,8 +1,18 @@
1
1
  {% load django_ledger %}
2
2
  {% load i18n %}
3
3
 
4
+ <style>
5
+ /* Align currency columns on balance sheet tables */
6
+ table.financial-statement thead th:nth-last-child(2),
7
+ table.financial-statement tbody td:nth-last-child(2),
8
+ table.financial-statement thead th:last-child,
9
+ table.financial-statement tbody td:last-child {
10
+ text-align: right;
11
+ }
12
+ </style>
13
+
4
14
  <div class="table-container">
5
- <table class="table is-fullwidth is-narrow is-striped">
15
+ <table class="table is-fullwidth is-narrow is-striped is-hoverable is-bordered financial-statement">
6
16
  <tbody>
7
17
  {% for bs_role, bs_role_data in tx_digest.balance_sheet.items %}
8
18
  {% if bs_role_data.is_block %}
@@ -23,7 +33,7 @@
23
33
  <th class="has-text-centered">{% trans 'Unit' %}</th>
24
34
  {% endif %}
25
35
  <th class="has-text-centered">{% trans 'Balance Type' %}</th>
26
- <th class="has-text-centered">{% trans 'Balance Through' %} {{ tx_digest.to_date | date }}</th>
36
+ <th class="has-text-right">{% trans 'Balance Through' %} {{ tx_digest.to_date | date }}</th>
27
37
  <th class="has-text-centered">{% trans 'Actions' %}</th>
28
38
  </tr>
29
39
 
@@ -46,7 +56,21 @@
46
56
  {% if tx_digest.by_unit %}
47
57
  <td>{% if acc.unit_name %}{{ acc.unit_name }}{% endif %}</td>
48
58
  {% endif %}
49
- <td class="has-text-centered">{{ acc.balance_type.0 | upper }}</td>
59
+ <td class="has-text-centered">
60
+ {% if acc.balance_type == 'debit' %}
61
+ <span class="tag is-info is-light">
62
+ <span class="icon is-small mr-1">{% icon 'bi:arrow-bar-down' 16 %}</span>
63
+ debit
64
+ </span>
65
+ {% elif acc.balance_type == 'credit' %}
66
+ <span class="tag is-success is-light">
67
+ <span class="icon is-small mr-1">{% icon 'bi:arrow-bar-up' 16 %}</span>
68
+ credit
69
+ </span>
70
+ {% else %}
71
+ <span class="tag is-light">{{ acc.balance_type }}</span>
72
+ {% endif %}
73
+ </td>
50
74
  <td class="has-text-right">{% currency_symbol %}{{ acc.balance | currency_format }}</td>
51
75
  <td>
52
76
  <div class="dropdown is-hoverable" id="account-action-{{ account.uuid }}">
@@ -1,10 +1,22 @@
1
1
  {% load django_ledger %}
2
2
  {% load i18n %}
3
3
 
4
+ <style>
5
+ table.financial-statement thead th:last-child,
6
+ table.financial-statement tbody td:last-child,
7
+ table.financial-statement tfoot td:last-child {
8
+ text-align: right;
9
+ }
10
+
11
+ table.financial-statement tfoot td {
12
+ font-weight: 700;
13
+ }
14
+ </style>
15
+
4
16
  <div class="table-container">
5
17
 
6
18
  {# OPERATING ACTIVITIES #}
7
- <table class="table is-fullwidth is-narrow is-striped">
19
+ <table class="table is-fullwidth is-narrow is-striped is-hoverable is-bordered financial-statement">
8
20
  <thead>
9
21
  <tr>
10
22
  <td class="has-text-weight-light is-size-3">{% trans 'Cash from Operating Activities' %}</td>
@@ -96,7 +108,7 @@
96
108
  </table>
97
109
 
98
110
  {# FINANCING ACTIVITIES #}
99
- <table class="table is-fullwidth is-narrow is-striped">
111
+ <table class="table is-fullwidth is-narrow is-striped is-hoverable is-bordered financial-statement">
100
112
  <thead>
101
113
  <tr>
102
114
  <td class="has-text-weight-light is-size-3">{% trans 'Cash from Financing Activities' %}</td>
@@ -146,7 +158,7 @@
146
158
  </table>
147
159
 
148
160
  {# INVESTING ACTIVITIES #}
149
- <table class="table is-fullwidth is-narrow is-striped">
161
+ <table class="table is-fullwidth is-narrow is-striped is-hoverable is-bordered financial-statement">
150
162
  <thead>
151
163
  <tr>
152
164
  <td class="has-text-weight-light is-size-3">{% trans 'Cash from Investing Activities' %}</td>
@@ -185,7 +197,7 @@
185
197
  </table>
186
198
 
187
199
  {# NET CASH #}
188
- <table class="table is-fullwidth is-narrow is-stripped">
200
+ <table class="table is-fullwidth is-narrow is-striped is-hoverable is-bordered financial-statement">
189
201
  <thead>
190
202
  <tr>
191
203
  <td class="has-text-weight-light is-size-3">{% trans 'Net Cashflow' %}</td>