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.

Files changed (139) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/context.py +12 -0
  3. django_ledger/forms/account.py +45 -46
  4. django_ledger/forms/bill.py +0 -4
  5. django_ledger/forms/closing_entry.py +13 -1
  6. django_ledger/forms/data_import.py +182 -63
  7. django_ledger/forms/estimate.py +3 -6
  8. django_ledger/forms/invoice.py +3 -7
  9. django_ledger/forms/item.py +10 -18
  10. django_ledger/forms/purchase_order.py +2 -4
  11. django_ledger/io/io_core.py +515 -400
  12. django_ledger/io/io_generator.py +7 -6
  13. django_ledger/io/io_library.py +1 -2
  14. django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +70 -0
  15. django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
  16. django_ledger/models/__init__.py +2 -1
  17. django_ledger/models/accounts.py +109 -69
  18. django_ledger/models/bank_account.py +40 -23
  19. django_ledger/models/bill.py +386 -333
  20. django_ledger/models/chart_of_accounts.py +173 -105
  21. django_ledger/models/closing_entry.py +99 -48
  22. django_ledger/models/customer.py +100 -66
  23. django_ledger/models/data_import.py +818 -323
  24. django_ledger/models/deprecations.py +61 -0
  25. django_ledger/models/entity.py +891 -644
  26. django_ledger/models/estimate.py +57 -28
  27. django_ledger/models/invoice.py +46 -26
  28. django_ledger/models/items.py +503 -142
  29. django_ledger/models/journal_entry.py +61 -47
  30. django_ledger/models/ledger.py +106 -42
  31. django_ledger/models/mixins.py +424 -281
  32. django_ledger/models/purchase_order.py +39 -17
  33. django_ledger/models/receipt.py +1083 -0
  34. django_ledger/models/transactions.py +242 -139
  35. django_ledger/models/unit.py +93 -54
  36. django_ledger/models/utils.py +12 -2
  37. django_ledger/models/vendor.py +121 -70
  38. django_ledger/report/core.py +2 -14
  39. django_ledger/settings.py +57 -71
  40. django_ledger/static/django_ledger/bundle/djetler.bundle.js +1 -1
  41. django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +25 -0
  42. django_ledger/static/django_ledger/bundle/styles.bundle.js +1 -1
  43. django_ledger/static/django_ledger/css/djl_styles.css +273 -0
  44. django_ledger/templates/django_ledger/bills/includes/card_bill.html +2 -2
  45. django_ledger/templates/django_ledger/components/menu.html +41 -26
  46. django_ledger/templates/django_ledger/components/period_navigator.html +5 -3
  47. django_ledger/templates/django_ledger/customer/customer_detail.html +87 -0
  48. django_ledger/templates/django_ledger/customer/customer_list.html +0 -1
  49. django_ledger/templates/django_ledger/customer/tags/customer_table.html +8 -6
  50. django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +24 -3
  51. django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +26 -10
  52. django_ledger/templates/django_ledger/entity/entity_dashboard.html +2 -2
  53. django_ledger/templates/django_ledger/entity/includes/card_entity.html +12 -6
  54. django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +1 -1
  55. django_ledger/templates/django_ledger/financial_statements/cash_flow.html +4 -1
  56. django_ledger/templates/django_ledger/financial_statements/income_statement.html +4 -1
  57. django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +27 -3
  58. django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +16 -4
  59. django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +73 -18
  60. django_ledger/templates/django_ledger/includes/widget_ratios.html +18 -24
  61. django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +3 -3
  62. django_ledger/templates/django_ledger/layouts/base.html +7 -2
  63. django_ledger/templates/django_ledger/layouts/content_layout_1.html +1 -1
  64. django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +115 -0
  65. django_ledger/templates/django_ledger/receipt/receipt_delete.html +30 -0
  66. django_ledger/templates/django_ledger/receipt/receipt_detail.html +89 -0
  67. django_ledger/templates/django_ledger/receipt/receipt_list.html +134 -0
  68. django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +115 -0
  69. django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +12 -7
  70. django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
  71. django_ledger/templatetags/django_ledger.py +338 -191
  72. django_ledger/tests/test_accounts.py +1 -2
  73. django_ledger/tests/test_io.py +17 -0
  74. django_ledger/tests/test_purchase_order.py +3 -3
  75. django_ledger/tests/test_transactions.py +1 -2
  76. django_ledger/urls/__init__.py +1 -4
  77. django_ledger/urls/customer.py +3 -0
  78. django_ledger/urls/data_import.py +3 -0
  79. django_ledger/urls/receipt.py +102 -0
  80. django_ledger/urls/vendor.py +1 -0
  81. django_ledger/views/__init__.py +1 -0
  82. django_ledger/views/bill.py +8 -11
  83. django_ledger/views/chart_of_accounts.py +6 -4
  84. django_ledger/views/closing_entry.py +11 -7
  85. django_ledger/views/customer.py +68 -30
  86. django_ledger/views/data_import.py +120 -66
  87. django_ledger/views/djl_api.py +3 -5
  88. django_ledger/views/entity.py +2 -4
  89. django_ledger/views/estimate.py +3 -7
  90. django_ledger/views/inventory.py +3 -5
  91. django_ledger/views/invoice.py +4 -6
  92. django_ledger/views/item.py +7 -11
  93. django_ledger/views/journal_entry.py +1 -2
  94. django_ledger/views/mixins.py +125 -93
  95. django_ledger/views/purchase_order.py +24 -35
  96. django_ledger/views/receipt.py +294 -0
  97. django_ledger/views/unit.py +1 -2
  98. django_ledger/views/vendor.py +54 -16
  99. {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/METADATA +43 -75
  100. {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/RECORD +104 -122
  101. {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/WHEEL +1 -1
  102. django_ledger-0.8.1.dist-info/top_level.txt +1 -0
  103. django_ledger/contrib/django_ledger_graphene/__init__.py +0 -0
  104. django_ledger/contrib/django_ledger_graphene/accounts/schema.py +0 -33
  105. django_ledger/contrib/django_ledger_graphene/api.py +0 -42
  106. django_ledger/contrib/django_ledger_graphene/apps.py +0 -6
  107. django_ledger/contrib/django_ledger_graphene/auth/mutations.py +0 -49
  108. django_ledger/contrib/django_ledger_graphene/auth/schema.py +0 -6
  109. django_ledger/contrib/django_ledger_graphene/bank_account/mutations.py +0 -61
  110. django_ledger/contrib/django_ledger_graphene/bank_account/schema.py +0 -34
  111. django_ledger/contrib/django_ledger_graphene/bill/mutations.py +0 -0
  112. django_ledger/contrib/django_ledger_graphene/bill/schema.py +0 -34
  113. django_ledger/contrib/django_ledger_graphene/coa/mutations.py +0 -0
  114. django_ledger/contrib/django_ledger_graphene/coa/schema.py +0 -30
  115. django_ledger/contrib/django_ledger_graphene/customers/__init__.py +0 -0
  116. django_ledger/contrib/django_ledger_graphene/customers/mutations.py +0 -71
  117. django_ledger/contrib/django_ledger_graphene/customers/schema.py +0 -43
  118. django_ledger/contrib/django_ledger_graphene/data_import/mutations.py +0 -0
  119. django_ledger/contrib/django_ledger_graphene/data_import/schema.py +0 -0
  120. django_ledger/contrib/django_ledger_graphene/entity/mutations.py +0 -0
  121. django_ledger/contrib/django_ledger_graphene/entity/schema.py +0 -94
  122. django_ledger/contrib/django_ledger_graphene/item/mutations.py +0 -0
  123. django_ledger/contrib/django_ledger_graphene/item/schema.py +0 -31
  124. django_ledger/contrib/django_ledger_graphene/journal_entry/mutations.py +0 -0
  125. django_ledger/contrib/django_ledger_graphene/journal_entry/schema.py +0 -35
  126. django_ledger/contrib/django_ledger_graphene/ledger/mutations.py +0 -0
  127. django_ledger/contrib/django_ledger_graphene/ledger/schema.py +0 -32
  128. django_ledger/contrib/django_ledger_graphene/purchase_order/mutations.py +0 -0
  129. django_ledger/contrib/django_ledger_graphene/purchase_order/schema.py +0 -31
  130. django_ledger/contrib/django_ledger_graphene/transaction/mutations.py +0 -0
  131. django_ledger/contrib/django_ledger_graphene/transaction/schema.py +0 -36
  132. django_ledger/contrib/django_ledger_graphene/unit/mutations.py +0 -0
  133. django_ledger/contrib/django_ledger_graphene/unit/schema.py +0 -27
  134. django_ledger/contrib/django_ledger_graphene/vendor/mutations.py +0 -0
  135. django_ledger/contrib/django_ledger_graphene/vendor/schema.py +0 -37
  136. django_ledger/contrib/django_ledger_graphene/views.py +0 -12
  137. django_ledger-0.7.11.dist-info/top_level.txt +0 -4
  138. {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info/licenses}/AUTHORS.md +0 -0
  139. {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
- <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 %}
@@ -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-2 has-font-weight-medium">
7
+ <h2 class="is-size-4 has-font-weight-medium">
8
8
  {% if has_year %}Fiscal Year {{ to_date.year }}{% endif %}
9
- {% if has_month %}{{ to_date | date:"F Y" }}{% endif %}
10
- {% if has_quarter %}Q{{ quarter }} {{ year }}{% endif %}
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 %}
@@ -20,5 +20,4 @@
20
20
  {% customer_table %}
21
21
 
22
22
  </div>
23
- </div>
24
23
  {% 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-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 %}
@@ -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
- <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 %}"
33
- class="button is-small is-primary">{% trans 'View JE' %}</a>
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 Split</th>
28
- <th>Add Split</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
- {{ txf.instance.get_prospect_je_activity_display }}
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 }}{% if txf.instance.is_children %}
65
- <span class="content is-small">{{ txf.instance.unit_model.name }}</span>
66
- {% endif %}
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-3 is-hidden-mobile is-hidden-tablet-only">
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">