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,89 @@
1
+ {% extends 'django_ledger/layouts/content_layout_1.html' %}
2
+ {% load i18n %}
3
+ {% load django_ledger %}
4
+
5
+ {% block view_content %}
6
+ <div class="columns is-centered">
7
+ <div class="column is-8">
8
+ <div class="card">
9
+ <div class="card-content">
10
+ <h2 class="title has-text-weight-light">{% trans 'Receipt' %} {{ receipt.receipt_number }}</h2>
11
+ <p><strong>{% trans 'Date' %}:</strong> {{ receipt.receipt_date }}</p>
12
+ <p><strong>{% trans 'Type' %}:</strong> {{ receipt.get_receipt_type_display }}</p>
13
+
14
+ {# CUSTOMER INFO #}
15
+ {% if receipt.customer_model %}
16
+ <p><strong>{% trans 'Customer' %}:</strong>
17
+ <a href="{{ receipt.get_customer_list_url }}">{{ receipt.customer_model.customer_name }}</a>
18
+ <span class="is-size-7 has-text-grey"> ·
19
+ <a href="{{ receipt.get_customer_report_url }}">{% trans 'Report' %}</a>
20
+ </span>
21
+ </p>
22
+ {% endif %}
23
+
24
+ {# VENDOR INFO #}
25
+ {% if receipt.vendor_model %}
26
+ <p><strong>{% trans 'Vendor' %}:</strong>
27
+ <a href="{{ receipt.get_vendor_list_url }}">{{ receipt.vendor_model.vendor_name }}</a>
28
+ <span class="is-size-7 has-text-grey"> ·
29
+ <a href="{{ receipt.get_vendor_report_url }}">{% trans 'Report' %}</a>
30
+ </span>
31
+ </p>
32
+ {% endif %}
33
+
34
+ <p><strong>{% trans 'Ledger' %}:</strong>
35
+ <a href="{{ receipt.ledger_model.get_absolute_url }}">{{ receipt.ledger_model.name }}</a>
36
+ </p>
37
+
38
+ </div>
39
+ <div class="card-content">
40
+ <h3 class="title is-5 has-text-weight-light">{% trans 'Transaction Journal' %}</h3>
41
+ {% if tx_list %}
42
+ <table class="table is-fullwidth is-striped is-narrow">
43
+ <thead>
44
+ <tr>
45
+ <th>{% trans 'Date/Time' %}</th>
46
+ <th>{% trans 'Journal Entry' %}</th>
47
+ <th>{% trans 'Account' %}</th>
48
+ <th class="has-text-right">{% trans 'Debit' %}</th>
49
+ <th class="has-text-right">{% trans 'Credit' %}</th>
50
+ <th>{% trans 'Unit' %}</th>
51
+ </tr>
52
+ </thead>
53
+ <tbody>
54
+ {% for tx in tx_list %}
55
+ <tr>
56
+ <td>{{ tx.journal_entry.timestamp }}</td>
57
+ <td>
58
+ <a href="{{ tx.get_journal_entry_detail_url }}">{{ tx.journal_entry.description|default:'—' }}</a>
59
+ </td>
60
+ <td>{{ tx.account.code }} - {{ tx.account.name }}</td>
61
+ <td class="has-text-right">{% if tx.is_debit %}{{ tx.amount }}{% endif %}</td>
62
+ <td class="has-text-right">{% if tx.is_credit %}{{ tx.amount }}{% endif %}</td>
63
+ <td>{{ tx.journal_entry.entity_unit.name|default:'—' }}</td>
64
+ </tr>
65
+ {% endfor %}
66
+ </tbody>
67
+ </table>
68
+ {% else %}
69
+ <p class="has-text-grey">{% trans 'No transactions found for this receipt.' %}</p>
70
+ {% endif %}
71
+ {% if import_job %}
72
+ <p class="mt-4">
73
+ <strong>{% trans 'Imported From' %}:</strong>
74
+ <a href="{{ receipt.get_import_job_url }}">
75
+ {% trans 'Bank Feed Job' %} — {{ import_job.description|default:import_job.uuid }}
76
+ </a>
77
+ </p>
78
+ {% endif %}
79
+ </div>
80
+ <div class="card-content">
81
+ <a href="{{ receipt.get_list_url }}"
82
+ class="button is-primary is-outlined">{% trans 'Back to Receipts' %}</a>
83
+ <a href="{{ receipt.get_delete_url }}"
84
+ class="button is-danger is-outlined">{% trans 'Undo/Delete' %}</a>
85
+ </div>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ {% endblock %}
@@ -0,0 +1,134 @@
1
+ {% extends 'django_ledger/layouts/content_layout_1.html' %}
2
+ {% load i18n %}
3
+ {% load django_ledger %}
4
+
5
+ {% block view_content %}
6
+ <div class="box">
7
+ <div class="level">
8
+ <div class="level-left">
9
+ <div class="level-item">
10
+ {% if month %}
11
+ <h1 class="is-size-1 has-text-weight-thin">{{ month|date:'F Y' }} {% trans 'Receipts' %}</h1>
12
+ {% elif year %}
13
+ <h1 class="is-size-1 has-text-weight-thin">{{ year|date:'Y' }} {% trans 'Receipts' %}</h1>
14
+ {% else %}
15
+ <h1 class="is-size-1 has-text-weight-thin">{% trans 'Latest Receipts' %}</h1>
16
+ {% endif %}
17
+ </div>
18
+ </div>
19
+ <div class="level-right">
20
+ {% if page_obj %}
21
+ {% if page_obj.has_previous %}
22
+ <div class="level-item">
23
+ <a href="?page={{ page_obj.previous_page_number }}"
24
+ class="button is-small is-dark is-outlined">
25
+ <span class="icon is-small">{% icon 'ant-design:left-circle-outlined' 24 %}</span>
26
+ </a>
27
+ </div>
28
+ {% endif %}
29
+ <div class="level-item">
30
+ <p class="is-italic">page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</p>
31
+ </div>
32
+ {% if page_obj.has_next %}
33
+ <div class="level-item">
34
+ <a href="?page={{ page_obj.next_page_number }}"
35
+ class="button is-small is-dark is-outlined">
36
+ <span class="icon is-small">{% icon 'ant-design:right-circle-outlined' 24 %}</span>
37
+ </a>
38
+ </div>
39
+ {% endif %}
40
+ {% endif %}
41
+ </div>
42
+ </div>
43
+
44
+ <div class="content">
45
+ <p class="is-size-6 has-text-weight-semibold">{% trans 'Filter by type:' %}
46
+ <a href="{% url 'django_ledger:receipt-list' entity_slug=view.kwargs.entity_slug %}">{% trans 'All' %}</a>
47
+ |
48
+ <a href="{% url 'django_ledger:receipt-list-type' entity_slug=view.kwargs.entity_slug receipt_type='sales' %}">{% trans 'Sales' %}</a>
49
+ |
50
+ <a href="{% url 'django_ledger:receipt-list-type' entity_slug=view.kwargs.entity_slug receipt_type='customer_refund' %}">{% trans 'Customer Refund' %}</a>
51
+ |
52
+ <a href="{% url 'django_ledger:receipt-list-type' entity_slug=view.kwargs.entity_slug receipt_type='expense' %}">{% trans 'Expense' %}</a>
53
+ |
54
+ <a href="{% url 'django_ledger:receipt-list-type' entity_slug=view.kwargs.entity_slug receipt_type='expense_refund' %}">{% trans 'Expense Refund' %}</a>
55
+ |
56
+ <a href="{% url 'django_ledger:receipt-list-type' entity_slug=view.kwargs.entity_slug receipt_type='transfer' %}">{% trans 'Transfer' %}</a>
57
+ </p>
58
+ </div>
59
+
60
+ <table class="table is-fullwidth is-striped">
61
+ <thead>
62
+ <tr>
63
+ <th>{% trans 'Date' %}</th>
64
+ <th>{% trans 'Number' %}</th>
65
+ <th>{% trans 'Type' %}</th>
66
+ <th>{% trans 'Counterparty' %}</th>
67
+ <th>{% trans 'Amount' %}</th>
68
+ <th>{% trans 'Actions' %}</th>
69
+ </tr>
70
+ </thead>
71
+ <tbody>
72
+ {% for r in receipt_list %}
73
+ <tr>
74
+ <td>{{ r.receipt_date }}</td>
75
+ <td><a href="{{ r.get_absolute_url }}">{{ r.receipt_number }}</a></td>
76
+ <td>{{ r.get_receipt_type_display }}</td>
77
+ <td>
78
+ {% if r.customer_model %}
79
+ <a href="{{ r.get_customer_list_url }}">{{ r.customer_model.customer_name }}</a>
80
+ <span class="is-size-7 has-text-grey"> · <a
81
+ href="{{ r.get_customer_report_url }}">{% trans 'Report' %}</a></span>
82
+ {% elif r.vendor_model %}
83
+ <a href="{{ r.get_vendor_list_url }}">{{ r.vendor_model.vendor_name }}</a>
84
+ <span class="is-size-7 has-text-grey"> · <a
85
+ href="{{ r.get_vendor_report_url }}">{% trans 'Report' %}</a></span>
86
+ {% else %}
87
+
88
+ {% endif %}
89
+ </td>
90
+ <td>{% currency_symbol %}{{ r.amount | currency_format }}</td>
91
+ <td>
92
+ <a class="button is-small is-danger is-outlined" href="{{ r.get_delete_url }}">
93
+ {% trans 'Undo/Delete' %}
94
+ </a>
95
+ </td>
96
+ </tr>
97
+ {% empty %}
98
+ <tr>
99
+ <td colspan="5" class="has-text-centered">{% trans 'No receipts found.' %}</td>
100
+ </tr>
101
+ {% endfor %}
102
+ </tbody>
103
+ </table>
104
+
105
+ {% if year %}
106
+ <h5 class="is-size-5">{% trans 'Go to quarter:' %}</h5>
107
+ <p>
108
+ {% for q in '1234' %}
109
+ <a href="{% url 'django_ledger:receipt-list-quarter' entity_slug=view.kwargs.entity_slug year=year quarter=q %}">Q{{ q }}
110
+ {% if not forloop.last %}>{% endif %}</a>
111
+ {% endfor %}
112
+ </p>
113
+ <h5 class="is-size-5">{% trans 'Go to month:' %}</h5>
114
+ <p>
115
+ <a href="{% url 'django_ledger:receipt-list' entity_slug=view.kwargs.entity_slug %}">{% trans 'All' %}
116
+ |</a>
117
+ {% for date in date_list %}
118
+ <a href="{% url 'django_ledger:receipt-list-month' entity_slug=view.kwargs.entity_slug year=date.year month=date.month %}">
119
+ {{ date | date:'F' }}{% if not forloop.last %} > {% endif %}</a>
120
+ {% endfor %}
121
+ </p>
122
+ {% else %}
123
+ <h5 class="is-size-5">{% trans 'Go to year:' %}</h5>
124
+ <p>
125
+ <a href="{% url 'django_ledger:receipt-list' entity_slug=view.kwargs.entity_slug %}">{% trans 'All' %}
126
+ |</a>
127
+ {% for date in date_list %}
128
+ <a href="{% url 'django_ledger:receipt-list-year' entity_slug=view.kwargs.entity_slug year=date.year %}">
129
+ {{ date.year }}{% if not forloop.last %} > {% endif %}</a>
130
+ {% endfor %}
131
+ </p>
132
+ {% endif %}
133
+ </div>
134
+ {% endblock %}
@@ -0,0 +1,115 @@
1
+ {% extends 'django_ledger/layouts/content_layout_1.html' %}
2
+ {% load i18n %}
3
+ {% load django_ledger %}
4
+
5
+ {% block view_content %}
6
+ <div class="box">
7
+ <div class="level">
8
+ <div class="level-left">
9
+ <div class="level-item">
10
+ {% if month %}
11
+ <h1 class="is-size-1 has-text-weight-thin">{{ month|date:'F Y' }} {% trans 'Vendor Receipts' %} — {{ vendor_model.vendor_name }}</h1>
12
+ {% elif year %}
13
+ <h1 class="is-size-1 has-text-weight-thin">{{ year|date:'Y' }} {% trans 'Vendor Receipts' %} — {{ vendor_model.vendor_name }}</h1>
14
+ {% else %}
15
+ <h1 class="is-size-1 has-text-weight-thin">{% trans 'Vendor Receipts' %} — {{ vendor_model.vendor_name }}</h1>
16
+ {% endif %}
17
+ </div>
18
+ </div>
19
+ <div class="level-right">
20
+ {% if page_obj %}
21
+ {% if page_obj.has_previous %}
22
+ <div class="level-item">
23
+ <a href="?page={{ page_obj.previous_page_number }}"
24
+ class="button is-small is-dark is-outlined">
25
+ <span class="icon is-small">{% icon 'ant-design:left-circle-outlined' 24 %}</span>
26
+ </a>
27
+ </div>
28
+ {% endif %}
29
+ <div class="level-item">
30
+ <p class="is-italic">page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</p>
31
+ </div>
32
+ {% if page_obj.has_next %}
33
+ <div class="level-item">
34
+ <a href="?page={{ page_obj.next_page_number }}"
35
+ class="button is-small is-dark is-outlined">
36
+ <span class="icon is-small">{% icon 'ant-design:right-circle-outlined' 24 %}</span>
37
+ </a>
38
+ </div>
39
+ {% endif %}
40
+ {% endif %}
41
+ </div>
42
+ </div>
43
+
44
+ <table class="table is-fullwidth is-striped">
45
+ <thead>
46
+ <tr>
47
+ <th>{% trans 'Date' %}</th>
48
+ <th>{% trans 'Receipt #' %}</th>
49
+ <th>{% trans 'Type' %}</th>
50
+ <th>{% trans 'Imported' %}</th>
51
+ <th>{% trans 'Actions' %}</th>
52
+ </tr>
53
+ </thead>
54
+ <tbody>
55
+ {% for r in receipt_list %}
56
+ <tr>
57
+ <td>{{ r.receipt_date }}</td>
58
+ <td><a href="{{ r.get_absolute_url }}">{{ r.receipt_number }}</a></td>
59
+ <td>{{ r.get_receipt_type_display }}</td>
60
+ <td>
61
+ {% if r.staged_transaction_model %}
62
+ <a href="{{ r.get_staged_tx_url }}">
63
+ {% trans 'Staged TX' %}
64
+ </a>
65
+ <span class="is-size-7 has-text-grey"> · </span>
66
+ <a href="{{ r.get_import_job_url }}">
67
+ {% trans 'Bank Feed Job' %}
68
+ </a>
69
+ {% else %}
70
+
71
+ {% endif %}
72
+ </td>
73
+ <td>
74
+ <a class="button is-small is-danger is-outlined" href="{{ r.get_delete_url }}">
75
+ {% trans 'Undo/Delete' %}
76
+ </a>
77
+ </td>
78
+ </tr>
79
+ {% empty %}
80
+ <tr>
81
+ <td colspan="5" class="has-text-centered">{% trans 'No receipts found.' %}</td>
82
+ </tr>
83
+ {% endfor %}
84
+ </tbody>
85
+ </table>
86
+
87
+ {% if year %}
88
+ <h5 class="is-size-5">{% trans 'Go to quarter:' %}</h5>
89
+ <p>
90
+ {% for q in '1234' %}
91
+ <a href="{% url 'django_ledger:receipt-report-vendor-quarter' entity_slug=view.kwargs.entity_slug vendor_pk=vendor_model.uuid year=year quarter=q %}">Q{{ q }}{% if not forloop.last %} > {% endif %}</a>
92
+ {% endfor %}
93
+ </p>
94
+ <h5 class="is-size-5">{% trans 'Go to month:' %}</h5>
95
+ <p>
96
+ <a href="{% url 'django_ledger:receipt-report-vendor' entity_slug=view.kwargs.entity_slug vendor_pk=vendor_model.uuid %}">{% trans 'All' %} |</a>
97
+ {% for date in date_list %}
98
+ <a href="{% url 'django_ledger:receipt-report-vendor-month' entity_slug=view.kwargs.entity_slug vendor_pk=vendor_model.uuid year=date.year month=date.month %}">
99
+ {{ date | date:'F' }}{% if not forloop.last %} > {% endif %}
100
+ </a>
101
+ {% endfor %}
102
+ </p>
103
+ {% else %}
104
+ <h5 class="is-size-5">{% trans 'Go to year:' %}</h5>
105
+ <p>
106
+ <a href="{% url 'django_ledger:receipt-report-vendor' entity_slug=view.kwargs.entity_slug vendor_pk=vendor_model.uuid %}">{% trans 'All' %} |</a>
107
+ {% for date in date_list %}
108
+ <a href="{% url 'django_ledger:receipt-report-vendor-year' entity_slug=view.kwargs.entity_slug vendor_pk=vendor_model.uuid year=date.year %}">
109
+ {{ date.year }}{% if not forloop.last %} > {% endif %}
110
+ </a>
111
+ {% endfor %}
112
+ </p>
113
+ {% endif %}
114
+ </div>
115
+ {% endblock %}
@@ -19,16 +19,20 @@
19
19
  {% for vendor in vendors %}
20
20
  <tr class="has-text-centered">
21
21
  <td>{{ vendor.vendor_number }}</td>
22
- <td>{{ vendor.vendor_name }}</td>
23
- <td>{{ vendor.address_1 }}</td>
22
+ <td><a href="{% url 'django_ledger:vendor-detail' entity_slug=view.kwargs.entity_slug vendor_pk=vendor.uuid %}">{{ vendor.vendor_name }}</a></td>
23
+ <td>
24
+ {% if vendor.address_1 %}
25
+ {{ vendor.address_1 }}
26
+ {% endif %}
27
+ </td>
24
28
  <td>{% if vendor.vendor_code %}{{ vendor.vendor_code }}{% endif %}</td>
25
29
  <td>
26
30
  {% if vendor.active %}
27
- <span class="icon has-text-success-dark">
31
+ <span class="icon has-text-success">
28
32
  {% icon 'ant-design:check-circle-filled' 24 %}
29
33
  </span>
30
34
  {% elif not vendor.active %}
31
- <span class="icon has-text-danger-dark">
35
+ <span class="icon has-text-danger">
32
36
  {% icon 'mdi:dangerous' 24 %}
33
37
  </span>
34
38
  {% endif %}
@@ -36,11 +40,11 @@
36
40
 
37
41
  <td>
38
42
  {% if vendor.hidden %}
39
- <span class="icon has-text-success-dark">
43
+ <span class="icon has-text-success">
40
44
  {% icon 'ant-design:check-circle-filled' 24 %}
41
45
  </span>
42
46
  {% elif not vendor.hidden %}
43
- <span class="icon has-text-danger-dark">
47
+ <span class="icon has-text-danger">
44
48
  {% icon 'mdi:dangerous' 24 %}
45
49
  </span>
46
50
  {% endif %}
@@ -61,7 +65,8 @@
61
65
  id="dropdown-menu-{{ vendor.uuid }}"
62
66
  role="menu">
63
67
  <div class="dropdown-content">
64
- {# <a href="" class="dropdown-item has-text-success">View</a>#}
68
+ <a href="{% url 'django_ledger:vendor-detail' entity_slug=view.kwargs.entity_slug vendor_pk=vendor.uuid %}"
69
+ class="dropdown-item has-text-weight-bold has-text-success">{% trans 'View' %}</a>
65
70
  <a href="{% url 'django_ledger:vendor-update' entity_slug=view.kwargs.entity_slug vendor_pk=vendor.uuid %}"
66
71
  class="dropdown-item has-text-weight-bold has-text-info">{% trans 'Update' %}</a>
67
72
  </div>
@@ -0,0 +1,86 @@
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/vendor/includes/card_vendor.html' with vendor=vendor %}
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 vendor.' %}</p>
50
+ {% endif %}
51
+
52
+ <hr>
53
+
54
+ <h3 class="title is-4">
55
+ <span class="icon is-small">{% icon 'mdi:file-document-edit' 24 %}</span>
56
+ {% trans 'Bills' %}
57
+ </h3>
58
+ {% if bills %}
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 'Bill Number' %}</th>
64
+ <th class="has-text-centered">{% trans 'Status' %}</th>
65
+ </tr>
66
+ </thead>
67
+ <tbody>
68
+ {% for bill in bills %}
69
+ <tr class="has-text-centered">
70
+ <td><a href="{{ bill.get_absolute_url }}">{{ bill.bill_number }}</a></td>
71
+ <td>{{ bill.get_bill_status_display }}</td>
72
+ </tr>
73
+ {% endfor %}
74
+ </tbody>
75
+ </table>
76
+ </div>
77
+ {% else %}
78
+ <p class="has-text-grey">{% trans 'No bills found for this vendor.' %}</p>
79
+ {% endif %}
80
+
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+
86
+ {% endblock %}