django-ledger 0.8.0__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/forms/account.py +45 -46
- django_ledger/forms/data_import.py +182 -63
- django_ledger/io/io_core.py +507 -374
- django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
- django_ledger/models/__init__.py +2 -1
- django_ledger/models/bill.py +337 -300
- django_ledger/models/customer.py +47 -34
- django_ledger/models/data_import.py +770 -289
- django_ledger/models/entity.py +882 -637
- django_ledger/models/mixins.py +421 -280
- django_ledger/models/receipt.py +1083 -0
- django_ledger/models/transactions.py +105 -41
- django_ledger/models/unit.py +42 -30
- django_ledger/models/utils.py +12 -2
- django_ledger/models/vendor.py +85 -66
- django_ledger/settings.py +1 -0
- 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 +3 -1
- 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/layouts/base.html +1 -1
- 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 +3 -2
- django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
- django_ledger/templatetags/django_ledger.py +338 -191
- django_ledger/urls/__init__.py +1 -0
- 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/customer.py +56 -14
- django_ledger/views/data_import.py +119 -66
- django_ledger/views/mixins.py +112 -86
- django_ledger/views/receipt.py +294 -0
- django_ledger/views/vendor.py +53 -14
- {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/METADATA +1 -1
- {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/RECORD +51 -40
- {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/WHEEL +0 -0
- {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/licenses/AUTHORS.md +0 -0
- {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/licenses/LICENSE +0 -0
- {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Django Ledger created by Miguel Sanda <msanda@arrobalytics.com>.
|
|
3
|
+
Copyright© EDMA Group Inc licensed under the GPLv3 Agreement.
|
|
4
|
+
|
|
5
|
+
Contributions to this module:
|
|
6
|
+
* Miguel Sanda <msanda@arrobalytics.com>
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Optional
|
|
10
|
+
from calendar import month_name
|
|
11
|
+
|
|
12
|
+
from django.http import HttpResponseForbidden
|
|
13
|
+
from django.shortcuts import get_object_or_404
|
|
14
|
+
from django.utils.translation import gettext_lazy as _
|
|
15
|
+
from django.views.generic import (
|
|
16
|
+
ArchiveIndexView,
|
|
17
|
+
DeleteView,
|
|
18
|
+
DetailView,
|
|
19
|
+
MonthArchiveView,
|
|
20
|
+
YearArchiveView,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
from django_ledger.models import CustomerModel, EntityModel, LedgerModel, VendorModel
|
|
24
|
+
from django_ledger.models.receipt import ReceiptModel, ReceiptModelQuerySet
|
|
25
|
+
from django_ledger.models.transactions import TransactionModel
|
|
26
|
+
from django_ledger.views.mixins import (
|
|
27
|
+
DjangoLedgerSecurityMixIn,
|
|
28
|
+
QuarterlyReportMixIn,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class BaseReceiptModelViewMixIn(DjangoLedgerSecurityMixIn):
|
|
33
|
+
queryset: Optional[ReceiptModelQuerySet] = None
|
|
34
|
+
|
|
35
|
+
def get_queryset(self):
|
|
36
|
+
if self.queryset is None:
|
|
37
|
+
entity_model: EntityModel = self.AUTHORIZED_ENTITY_MODEL
|
|
38
|
+
qs = entity_model.get_receipts()
|
|
39
|
+
qs = qs.select_related(
|
|
40
|
+
'ledger_model', 'customer_model', 'vendor_model'
|
|
41
|
+
).order_by('-receipt_date', '-created')
|
|
42
|
+
|
|
43
|
+
receipt_type = self.kwargs.get('receipt_type')
|
|
44
|
+
if receipt_type:
|
|
45
|
+
qs = qs.filter(receipt_type__exact=receipt_type)
|
|
46
|
+
if receipt_type in [
|
|
47
|
+
ReceiptModel.SALES_RECEIPT,
|
|
48
|
+
ReceiptModel.SALES_REFUND,
|
|
49
|
+
]:
|
|
50
|
+
qs = qs.filter(
|
|
51
|
+
customer_model__isnull=False, vendor_model__isnull=True
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
elif receipt_type in [
|
|
55
|
+
ReceiptModel.EXPENSE_RECEIPT,
|
|
56
|
+
ReceiptModel.EXPENSE_REFUND,
|
|
57
|
+
]:
|
|
58
|
+
qs = qs.filter(
|
|
59
|
+
vendor_model__isnull=False, customer_model__isnull=True
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
vendor_pk = self.kwargs.get('vendor_pk')
|
|
63
|
+
if vendor_pk:
|
|
64
|
+
qs = qs.for_vendor(vendor_model=vendor_pk)
|
|
65
|
+
|
|
66
|
+
customer_pk = self.kwargs.get('customer_pk')
|
|
67
|
+
if customer_pk:
|
|
68
|
+
qs = qs.for_customer(customer_model=customer_pk)
|
|
69
|
+
|
|
70
|
+
self.queryset = qs
|
|
71
|
+
|
|
72
|
+
return self.queryset
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class ReceiptModelListView(BaseReceiptModelViewMixIn, ArchiveIndexView):
|
|
76
|
+
template_name = 'django_ledger/receipt/receipt_list.html'
|
|
77
|
+
context_object_name = 'receipt_list'
|
|
78
|
+
PAGE_TITLE = _('Receipts List')
|
|
79
|
+
date_field = 'receipt_date'
|
|
80
|
+
paginate_by = 20
|
|
81
|
+
paginate_orphans = 2
|
|
82
|
+
allow_empty = True
|
|
83
|
+
extra_context = {
|
|
84
|
+
'title': PAGE_TITLE,
|
|
85
|
+
'page_title': PAGE_TITLE,
|
|
86
|
+
'header_title': PAGE_TITLE,
|
|
87
|
+
'header_subtitle_icon': 'mdi:receipt',
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
def get_context_data(self, **kwargs):
|
|
91
|
+
context = super().get_context_data(**kwargs)
|
|
92
|
+
subtitle = None
|
|
93
|
+
|
|
94
|
+
receipt_type = self.kwargs.get('receipt_type')
|
|
95
|
+
|
|
96
|
+
if receipt_type:
|
|
97
|
+
context['title'] = ReceiptModel.RECEIPT_TYPES_MAP[receipt_type]
|
|
98
|
+
|
|
99
|
+
vendor_pk = self.kwargs.get('vendor_pk')
|
|
100
|
+
if vendor_pk:
|
|
101
|
+
vendor = VendorModel.objects.for_entity(
|
|
102
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL
|
|
103
|
+
).get(uuid__exact=vendor_pk)
|
|
104
|
+
subtitle = vendor.vendor_name
|
|
105
|
+
customer_pk = self.kwargs.get('customer_pk')
|
|
106
|
+
|
|
107
|
+
if customer_pk:
|
|
108
|
+
customer = CustomerModel.objects.for_entity(
|
|
109
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL
|
|
110
|
+
).get(uuid__exact=customer_pk)
|
|
111
|
+
subtitle = customer.customer_name
|
|
112
|
+
|
|
113
|
+
if subtitle:
|
|
114
|
+
context['header_subtitle'] = subtitle
|
|
115
|
+
return context
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class ReceiptModelYearListView(ReceiptModelListView, YearArchiveView):
|
|
119
|
+
def get_context_data(self, **kwargs):
|
|
120
|
+
context = super().get_context_data(**kwargs)
|
|
121
|
+
context['year'] = self.get_year()
|
|
122
|
+
context['page_title'] = _(f'Receipts List {self.get_year()}')
|
|
123
|
+
context['header_title'] = _(f'Receipts List {self.get_year()}')
|
|
124
|
+
context['header_subtitle'] = self.AUTHORIZED_ENTITY_MODEL.name
|
|
125
|
+
return context
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class ReceiptModelQuarterListView(ReceiptModelYearListView, QuarterlyReportMixIn):
|
|
129
|
+
def get_queryset(self):
|
|
130
|
+
qs = super().get_queryset()
|
|
131
|
+
return qs.for_dates(from_date=self.get_from_date(), to_date=self.get_to_date())
|
|
132
|
+
|
|
133
|
+
def get_context_data(self, **kwargs):
|
|
134
|
+
context = super().get_context_data(**kwargs)
|
|
135
|
+
context['page_title'] = _(f'Receipts List Q{self.get_quarter()}')
|
|
136
|
+
context['header_title'] = _(f'Receipts List Q{self.get_quarter()}')
|
|
137
|
+
context['header_subtitle'] = self.AUTHORIZED_ENTITY_MODEL.name
|
|
138
|
+
return context
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class ReceiptModelMonthListView(ReceiptModelYearListView, MonthArchiveView):
|
|
142
|
+
def get_context_data(self, **kwargs):
|
|
143
|
+
context = super().get_context_data(**kwargs)
|
|
144
|
+
year = self.get_year()
|
|
145
|
+
month_num = int(self.get_month())
|
|
146
|
+
month_label = month_name[month_num]
|
|
147
|
+
context['page_title'] = _(f'Receipts List {month_label} {year}')
|
|
148
|
+
context['header_title'] = _(f'Receipts List {month_label}, {year}')
|
|
149
|
+
context['header_subtitle'] = self.AUTHORIZED_ENTITY_MODEL.name
|
|
150
|
+
return context
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class ReceiptModelDetailView(BaseReceiptModelViewMixIn, DetailView):
|
|
154
|
+
template_name = 'django_ledger/receipt/receipt_detail.html'
|
|
155
|
+
context_object_name = 'receipt'
|
|
156
|
+
slug_field = 'uuid'
|
|
157
|
+
slug_url_kwarg = 'receipt_pk'
|
|
158
|
+
|
|
159
|
+
def get_context_data(self, **kwargs):
|
|
160
|
+
context = super().get_context_data(**kwargs)
|
|
161
|
+
receipt_model: ReceiptModel = self.object
|
|
162
|
+
ledger_model: LedgerModel = receipt_model.ledger_model
|
|
163
|
+
title = _(f'Receipt {receipt_model.receipt_number}')
|
|
164
|
+
context['page_title'] = title
|
|
165
|
+
context['header_title'] = title
|
|
166
|
+
context['header_subtitle'] = receipt_model.receipt_date
|
|
167
|
+
context['header_subtitle_icon'] = 'mdi:receipt'
|
|
168
|
+
|
|
169
|
+
tx_list = (
|
|
170
|
+
TransactionModel.objects.for_entity(
|
|
171
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL
|
|
172
|
+
)
|
|
173
|
+
.for_ledger(ledger_model=ledger_model)
|
|
174
|
+
.posted()
|
|
175
|
+
.not_closing_entry()
|
|
176
|
+
.select_related(
|
|
177
|
+
'account',
|
|
178
|
+
'journal_entry',
|
|
179
|
+
'journal_entry__entity_unit',
|
|
180
|
+
)
|
|
181
|
+
.order_by('journal_entry__timestamp', 'account__code')
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
context['tx_list'] = tx_list
|
|
185
|
+
context['staged_tx'] = receipt_model.staged_transaction_model
|
|
186
|
+
if receipt_model.staged_transaction_model_id:
|
|
187
|
+
context['import_job'] = receipt_model.staged_transaction_model.import_job
|
|
188
|
+
return context
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
# VENDOR VIEWS......
|
|
192
|
+
class VendorReceiptReportListView(ReceiptModelListView):
|
|
193
|
+
template_name = 'django_ledger/receipt/vendor_receipt_report.html'
|
|
194
|
+
|
|
195
|
+
def get_context_data(self, **kwargs):
|
|
196
|
+
context = super().get_context_data(**kwargs)
|
|
197
|
+
vendor_pk = self.kwargs['vendor_pk']
|
|
198
|
+
vendor_model_qs = VendorModel.objects.for_entity(
|
|
199
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL
|
|
200
|
+
)
|
|
201
|
+
vendor_model: VendorModel = get_object_or_404(
|
|
202
|
+
vendor_model_qs, uuid__exact=vendor_pk
|
|
203
|
+
)
|
|
204
|
+
context['vendor_model'] = vendor_model
|
|
205
|
+
context['page_title'] = _(f'Vendor Receipts {vendor_model.vendor_name}')
|
|
206
|
+
context['header_title'] = _('Vendor Receipts')
|
|
207
|
+
context['header_subtitle'] = vendor_model.vendor_name
|
|
208
|
+
context['header_subtitle_icon'] = 'mdi:receipt'
|
|
209
|
+
return context
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
class VendorReceiptReportYearListView(ReceiptModelYearListView):
|
|
213
|
+
template_name = 'django_ledger/receipt/vendor_receipt_report.html'
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class VendorReceiptReportQuarterListView(ReceiptModelQuarterListView):
|
|
217
|
+
template_name = 'django_ledger/receipt/vendor_receipt_report.html'
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
class VendorReceiptReportMonthListView(ReceiptModelMonthListView):
|
|
221
|
+
template_name = 'django_ledger/receipt/vendor_receipt_report.html'
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
# CUSTOMERS VIEWS......
|
|
225
|
+
class CustomerReceiptReportListView(ReceiptModelListView):
|
|
226
|
+
template_name = 'django_ledger/receipt/customer_receipt_report.html'
|
|
227
|
+
allow_empty = True
|
|
228
|
+
|
|
229
|
+
def get_context_data(self, **kwargs):
|
|
230
|
+
context = super().get_context_data(**kwargs)
|
|
231
|
+
customer_model_qs = CustomerModel.objects.for_entity(
|
|
232
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL
|
|
233
|
+
)
|
|
234
|
+
customer_pk = self.kwargs['customer_pk']
|
|
235
|
+
customer_model = get_object_or_404(
|
|
236
|
+
customer_model_qs,
|
|
237
|
+
uuid__exact=customer_pk,
|
|
238
|
+
)
|
|
239
|
+
context['vendor_model'] = customer_model
|
|
240
|
+
context['page_title'] = _(f'Customer Receipts {customer_model.name}')
|
|
241
|
+
context['header_title'] = _('Customer Receipts')
|
|
242
|
+
context['header_subtitle'] = customer_model.vendor_name
|
|
243
|
+
context['header_subtitle_icon'] = 'mdi:receipt'
|
|
244
|
+
return context
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
class CustomerReceiptReportYearListView(CustomerReceiptReportListView):
|
|
248
|
+
template_name = 'django_ledger/receipt/customer_receipt_report.html'
|
|
249
|
+
make_object_list = True
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
class CustomerReceiptReportQuarterListView(ReceiptModelQuarterListView):
|
|
253
|
+
template_name = 'django_ledger/receipt/customer_receipt_report.html'
|
|
254
|
+
make_object_list = True
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class CustomerReceiptReportMonthListView(ReceiptModelMonthListView):
|
|
258
|
+
template_name = 'django_ledger/receipt/customer_receipt_report.html'
|
|
259
|
+
month_format = '%m'
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class ReceiptModelDeleteView(BaseReceiptModelViewMixIn, DeleteView):
|
|
263
|
+
template_name = 'django_ledger/receipt/receipt_delete.html'
|
|
264
|
+
context_object_name = 'receipt'
|
|
265
|
+
slug_field = 'uuid'
|
|
266
|
+
slug_url_kwarg = 'receipt_pk'
|
|
267
|
+
|
|
268
|
+
def get_context_data(self, **kwargs):
|
|
269
|
+
context = super().get_context_data(**kwargs)
|
|
270
|
+
receipt: ReceiptModel = self.object
|
|
271
|
+
title = _(f'Delete Receipt {receipt.receipt_number}')
|
|
272
|
+
context['page_title'] = title
|
|
273
|
+
context['header_title'] = title
|
|
274
|
+
context['header_subtitle_icon'] = 'mdi:receipt'
|
|
275
|
+
return context
|
|
276
|
+
|
|
277
|
+
def can_delete(self, receipt_model: ReceiptModel) -> bool:
|
|
278
|
+
entity_model: EntityModel = self.AUTHORIZED_ENTITY_MODEL
|
|
279
|
+
ce_date = entity_model.get_closing_entry_for_date(
|
|
280
|
+
io_date=receipt_model.receipt_date, inclusive=True
|
|
281
|
+
)
|
|
282
|
+
return ce_date is None
|
|
283
|
+
|
|
284
|
+
def delete(self, request, *args, **kwargs):
|
|
285
|
+
receipt_model: ReceiptModel = self.object
|
|
286
|
+
if not receipt_model.can_delete():
|
|
287
|
+
return HttpResponseForbidden(
|
|
288
|
+
'Receipt cannot be deleted because it falls within a closed period.'
|
|
289
|
+
)
|
|
290
|
+
return super().delete(request, *args, **kwargs)
|
|
291
|
+
|
|
292
|
+
def get_success_url(self):
|
|
293
|
+
receipt_model: ReceiptModel = self.object
|
|
294
|
+
return receipt_model.get_list_url()
|
django_ledger/views/vendor.py
CHANGED
|
@@ -5,13 +5,16 @@ Copyright© EDMA Group Inc licensed under the GPLv3 Agreement.
|
|
|
5
5
|
Contributions to this module:
|
|
6
6
|
* Miguel Sanda <msanda@arrobalytics.com>
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from django.shortcuts import get_object_or_404
|
|
9
10
|
from django.urls import reverse
|
|
10
11
|
from django.utils.translation import gettext_lazy as _
|
|
11
|
-
from django.views.generic import
|
|
12
|
+
from django.views.generic import CreateView, DetailView, ListView, UpdateView
|
|
12
13
|
|
|
13
14
|
from django_ledger.forms.vendor import VendorModelForm
|
|
15
|
+
from django_ledger.models.bill import BillModel
|
|
14
16
|
from django_ledger.models.entity import EntityModel
|
|
17
|
+
from django_ledger.models.receipt import ReceiptModel
|
|
15
18
|
from django_ledger.models.vendor import VendorModel
|
|
16
19
|
from django_ledger.views.mixins import DjangoLedgerSecurityMixIn
|
|
17
20
|
|
|
@@ -34,7 +37,7 @@ class VendorModelListView(VendorModelModelBaseView, ListView):
|
|
|
34
37
|
extra_context = {
|
|
35
38
|
'page_title': PAGE_TITLE,
|
|
36
39
|
'header_title': PAGE_TITLE,
|
|
37
|
-
'header_subtitle_icon': 'bi:person-lines-fill'
|
|
40
|
+
'header_subtitle_icon': 'bi:person-lines-fill',
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
def get_context_data(self, **kwargs):
|
|
@@ -52,21 +55,21 @@ class VendorModelCreateView(VendorModelModelBaseView, CreateView):
|
|
|
52
55
|
extra_context = {
|
|
53
56
|
'page_title': PAGE_TITLE,
|
|
54
57
|
'header_title': PAGE_TITLE,
|
|
55
|
-
'header_subtitle_icon': 'bi:person-lines-fill'
|
|
58
|
+
'header_subtitle_icon': 'bi:person-lines-fill',
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
def get_success_url(self):
|
|
59
|
-
return reverse(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
return reverse(
|
|
63
|
+
'django_ledger:vendor-list',
|
|
64
|
+
kwargs={'entity_slug': self.kwargs['entity_slug']},
|
|
65
|
+
)
|
|
63
66
|
|
|
64
67
|
def form_valid(self, form):
|
|
65
68
|
vendor_model: VendorModel = form.save(commit=False)
|
|
66
|
-
entity_model_qs = EntityModel.objects.for_user(
|
|
67
|
-
|
|
69
|
+
entity_model_qs = EntityModel.objects.for_user(user_model=self.request.user)
|
|
70
|
+
entity_model = get_object_or_404(
|
|
71
|
+
klass=entity_model_qs, slug__exact=self.kwargs['entity_slug']
|
|
68
72
|
)
|
|
69
|
-
entity_model = get_object_or_404(klass=entity_model_qs, slug__exact=self.kwargs['entity_slug'])
|
|
70
73
|
vendor_model.entity_model = entity_model
|
|
71
74
|
return super().form_valid(form)
|
|
72
75
|
|
|
@@ -90,7 +93,43 @@ class VendorModelUpdateView(VendorModelModelBaseView, UpdateView):
|
|
|
90
93
|
return context
|
|
91
94
|
|
|
92
95
|
def get_success_url(self):
|
|
93
|
-
return reverse(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
return reverse(
|
|
97
|
+
'django_ledger:vendor-list',
|
|
98
|
+
kwargs={'entity_slug': self.kwargs['entity_slug']},
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class VendorModelDetailView(VendorModelModelBaseView, DetailView):
|
|
103
|
+
template_name = 'django_ledger/vendor/vendor_detail.html'
|
|
104
|
+
context_object_name = 'vendor'
|
|
105
|
+
PAGE_TITLE = _('Vendor Details')
|
|
106
|
+
slug_url_kwarg = 'vendor_pk'
|
|
107
|
+
slug_field = 'uuid'
|
|
108
|
+
|
|
109
|
+
def get_context_data(self, **kwargs):
|
|
110
|
+
context = super().get_context_data(**kwargs)
|
|
111
|
+
|
|
112
|
+
vendor_model: VendorModel = self.object
|
|
113
|
+
receipts_qs = (
|
|
114
|
+
ReceiptModel.objects.for_entity(entity_model=self.AUTHORIZED_ENTITY_MODEL)
|
|
115
|
+
.for_vendor(vendor_model=vendor_model)
|
|
116
|
+
.order_by('-updated')
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
bills_qs = (
|
|
120
|
+
BillModel.objects.for_entity(entity_model=self.AUTHORIZED_ENTITY_MODEL)
|
|
121
|
+
.filter(vendor=vendor_model)
|
|
122
|
+
.order_by('-updated')
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
context.update(
|
|
126
|
+
{
|
|
127
|
+
'page_title': self.PAGE_TITLE,
|
|
128
|
+
'header_title': self.PAGE_TITLE,
|
|
129
|
+
'header_subtitle': f'{vendor_model.vendor_name} · {vendor_model.vendor_number}',
|
|
130
|
+
'header_subtitle_icon': 'bi:person-lines-fill',
|
|
131
|
+
'receipts': receipts_qs,
|
|
132
|
+
'bills': bills_qs,
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
return context
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.1
|
|
4
4
|
Summary: Double entry accounting system built on the Django Web Framework.
|
|
5
5
|
Author-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
6
6
|
Maintainer-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
django_ledger/__init__.py,sha256=
|
|
1
|
+
django_ledger/__init__.py,sha256=4Paagb2LxtIZA5s1mFEOIJaxpXxH0ohIiuzfajy65o0,380
|
|
2
2
|
django_ledger/apps.py,sha256=H-zEWUjKGakgSDSZmLIoXChZ2h6e0dth0ZO5SpoT-8U,163
|
|
3
3
|
django_ledger/context.py,sha256=OBNHHm6qlt3fBc1_EiOcbzwafsqJBXtdZY5ubW_gga0,301
|
|
4
4
|
django_ledger/exceptions.py,sha256=rML8sQQ0Hq-DYMLZ76dfw2RYSAsXWUoyHuyC_yP9o1o,491
|
|
5
|
-
django_ledger/settings.py,sha256=
|
|
5
|
+
django_ledger/settings.py,sha256=26cusjYOgbfTQMFUQxPI6K-dte5KaK5EutbFmFGslp0,8778
|
|
6
6
|
django_ledger/utils.py,sha256=eGEdrDRrnILIsk69FVN9pjX1VoDVc1nx_MfVAwiY5dg,3519
|
|
7
7
|
django_ledger/admin/__init__.py,sha256=-1h4Qg9dfRq9g-EoDZAq96L8lcOoGlwJXNBsbqVIY7U,472
|
|
8
8
|
django_ledger/admin/chart_of_accounts.py,sha256=tRQXsa5oi9behZc_A_aMsbDoT_wzxR2EvEF-aUuV0H8,3539
|
|
@@ -10,7 +10,7 @@ django_ledger/admin/entity.py,sha256=uep7wT5Rq-rf-z70odSplOznv3yz28Ze8IPB4nixNVA
|
|
|
10
10
|
django_ledger/admin/ledger.py,sha256=WKJCKDT54B_OWtAGlPKKAOBRZAqJ-SPNYiuvV-Wa9y8,7936
|
|
11
11
|
django_ledger/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
django_ledger/forms/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
|
|
13
|
-
django_ledger/forms/account.py,sha256=
|
|
13
|
+
django_ledger/forms/account.py,sha256=dxlN0g8UNkthjIghqaMdbHf50JtLPYCqkL_MKwbcXrk,4977
|
|
14
14
|
django_ledger/forms/app_filters.py,sha256=fHmftiuR1Ei28LhGuu7LoxS4Q5pVjj1wiT0fF4GUcUI,2293
|
|
15
15
|
django_ledger/forms/auth.py,sha256=HaJDEIRFoAHEAv-s_ZfTe0rZbhzIQ7GkKnaBX1qiAW4,736
|
|
16
16
|
django_ledger/forms/bank_account.py,sha256=Ir6eQk4PSL7dii4mYGM895u6twrgvPm8vn3FCozSg8Q,4828
|
|
@@ -18,7 +18,7 @@ django_ledger/forms/bill.py,sha256=u5zJWWq4huEsfqukHCCnlGEcUsArOQmrKyBcRtsSWCU,1
|
|
|
18
18
|
django_ledger/forms/chart_of_accounts.py,sha256=wymLQ8iLNPU_LgS79BOdMUapuLqoTvgqVdAyL1Pw0Ro,2414
|
|
19
19
|
django_ledger/forms/closing_entry.py,sha256=kJQtVqira0rpYvlmMlGAaV5L3Wz3XNXSgrcVfZ2VyLM,1948
|
|
20
20
|
django_ledger/forms/customer.py,sha256=xK1tlA1yYvZM2TWeSumcHOfmw0DiiIzgypOoXDK5fF4,2707
|
|
21
|
-
django_ledger/forms/data_import.py,sha256=
|
|
21
|
+
django_ledger/forms/data_import.py,sha256=7CKbtjTGWpT-9Y6KRqyFtbRPaeOGDaldITe3fUDqSng,11309
|
|
22
22
|
django_ledger/forms/entity.py,sha256=b0QirmsFSnaM8YWDO4V6GQXfFgR_MLmdq27I2q2sGQ0,6880
|
|
23
23
|
django_ledger/forms/estimate.py,sha256=oGx4NbIkySA3a9r4bTNCz7t2swsTQgxuOSOdXIrXcZo,5064
|
|
24
24
|
django_ledger/forms/feedback.py,sha256=WUT-kI4uT6q5aqEYaDYwyIFfhXpmtwMv6qf9BFSYsDo,1850
|
|
@@ -33,7 +33,7 @@ django_ledger/forms/utils.py,sha256=sgkwBZs15_rZ5NT7h-8Z7wi3-ItM1E1sqoVDo3NQ5Jc,
|
|
|
33
33
|
django_ledger/forms/vendor.py,sha256=eLCZiWZLVigTyltQZfBfcE35_9Re4hdXisyWOadMS-s,2417
|
|
34
34
|
django_ledger/io/__init__.py,sha256=8m5AoBRiG2ymrX0Y4LVjq0275i7I5Sk7YRa1BTzVofI,369
|
|
35
35
|
django_ledger/io/io_context.py,sha256=2AiQyJSTkYUCu09Ig0ZPgYj8PtlvUKNS30KvRp9e7zA,4753
|
|
36
|
-
django_ledger/io/io_core.py,sha256=
|
|
36
|
+
django_ledger/io/io_core.py,sha256=ubm60WsMNPonXLG6eWEAhIshiCgQUeETvcDHouqOxYw,87915
|
|
37
37
|
django_ledger/io/io_generator.py,sha256=TNAUGhc7D7SxJkgNhGNfAC-pfm3rKo5pVqSBS87FhgU,34652
|
|
38
38
|
django_ledger/io/io_library.py,sha256=GgeVferuSJTO2aVdMAcSBK91ip9vttAS5J9AVCY1_mU,22480
|
|
39
39
|
django_ledger/io/io_middleware.py,sha256=vbWIBYA4V9nwoiEtB0W9pq19QIwPmaAyVJlo_1Gg2BY,20284
|
|
@@ -68,30 +68,32 @@ django_ledger/migrations/0022_bankaccountmodel_financial_institution_and_more.py
|
|
|
68
68
|
django_ledger/migrations/0023_customermodel_customer_code_customermodel_picture_and_more.py,sha256=M2p8Km55aNE-aKX_XWYZKQeh03MPbyoSQ15sOj-B86E,2095
|
|
69
69
|
django_ledger/migrations/0024_billmodel_entity_model_invoicemodel_entity_model.py,sha256=Fq2HiDJGpK7_dXq94INOs63psxf_q29vYZRVOr3qFRs,839
|
|
70
70
|
django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py,sha256=8pCdTAEEUiLWQm9MbrG4jda2BZkaXlKHQQ_JudpE5zg,3318
|
|
71
|
+
django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py,sha256=qv2PFWhXgAHWGptb8Xgoq0O4TsGqJelnI0-BRSJqZBE,4470
|
|
71
72
|
django_ledger/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
django_ledger/models/__init__.py,sha256=
|
|
73
|
+
django_ledger/models/__init__.py,sha256=kS8Qr1pBIeg2j1jQvDTEGzGMsK4YxKtpyUj8CWpm9yw,851
|
|
73
74
|
django_ledger/models/accounts.py,sha256=Y0EuVy1xCELOLhIMXnku6VlWFC33JctK7NsnJ-L62QM,38924
|
|
74
75
|
django_ledger/models/bank_account.py,sha256=P-62wjQ94EneCseewDV2tyRt0ghlaEh1jFIowWJdHCU,8942
|
|
75
|
-
django_ledger/models/bill.py,sha256=
|
|
76
|
+
django_ledger/models/bill.py,sha256=a15MHAl5HSu536BsWwbcYnGXL8PGo14ToncVNktME2s,64469
|
|
76
77
|
django_ledger/models/chart_of_accounts.py,sha256=TUijaYjGSactS2HcNGzNGIuU3PBAaGgZDgoBV7dzuLw,33161
|
|
77
78
|
django_ledger/models/closing_entry.py,sha256=zxoZOC2ymbrwyPOGPsKXXBwHDGegAtTnqDye0Y-mVAo,20625
|
|
78
79
|
django_ledger/models/coa_default.py,sha256=CK4vOZ73QePciZUL93wigDXpxKamdXAKBaQR7r-G7tk,27482
|
|
79
|
-
django_ledger/models/customer.py,sha256=
|
|
80
|
-
django_ledger/models/data_import.py,sha256=
|
|
80
|
+
django_ledger/models/customer.py,sha256=xe3KrOw9zhLh5ukx1DwHnIKkOSwqkxsKskz44PLHhyU,13282
|
|
81
|
+
django_ledger/models/data_import.py,sha256=3xmXw9HZanZME0mGvpyE09z1CTZTgiDY5f7VyIXVJTs,64863
|
|
81
82
|
django_ledger/models/deprecations.py,sha256=49sLBeVhHMYSf3F3VPCE6_5iNZH1xmElWZsgGIGUErs,2275
|
|
82
|
-
django_ledger/models/entity.py,sha256=
|
|
83
|
+
django_ledger/models/entity.py,sha256=SN73ceuj3kNcfWCrLRZVoMUePGBl6j4SABkwr9OZg_Y,122092
|
|
83
84
|
django_ledger/models/estimate.py,sha256=0DmDs7U5WqaQM9xciuXKR29pGHaLT7z_QmlNvvzUy_0,59406
|
|
84
85
|
django_ledger/models/invoice.py,sha256=zUl0D2ONUaRKEXSRzdD-AsKzUxxk-_EBLL31PNT_08w,64665
|
|
85
86
|
django_ledger/models/items.py,sha256=uxWo9aAHJba6Bu3ZIBs-lYo1R0suJEN4yhT8LA818U0,71082
|
|
86
87
|
django_ledger/models/journal_entry.py,sha256=X3wRhYqOmDGcRZj4WYGCNDQhBBZ1hp5fnCcWDMRxJ0I,67869
|
|
87
88
|
django_ledger/models/ledger.py,sha256=hT5u9IHJy5vun9_bzcC5FKN8ocP0OGdR4RDDe3icgzo,29400
|
|
88
|
-
django_ledger/models/mixins.py,sha256=
|
|
89
|
+
django_ledger/models/mixins.py,sha256=0FrdyxQuhk7faFvMqdzVgmtu3XzkH5Vk1KAIwrkPJUI,54374
|
|
89
90
|
django_ledger/models/purchase_order.py,sha256=X5ZIfwTAMWUbqL79nQCWWltlOiKSEFGocfaWHK3i154,45128
|
|
91
|
+
django_ledger/models/receipt.py,sha256=CxgVLvfWblSZQVTYDwMzsl7cWc5eydNaYWzDpBXFblQ,37176
|
|
90
92
|
django_ledger/models/signals.py,sha256=3cm_8--Jz-Jb0fPgrVmm5xx_jKFARV6_A29VDjqHeIw,1563
|
|
91
|
-
django_ledger/models/transactions.py,sha256=
|
|
92
|
-
django_ledger/models/unit.py,sha256=
|
|
93
|
-
django_ledger/models/utils.py,sha256=
|
|
94
|
-
django_ledger/models/vendor.py,sha256=
|
|
93
|
+
django_ledger/models/transactions.py,sha256=TmHqTVaPx3d0Flaab_cUbKfa7a1hEpkgbsdV6YZlyVc,26431
|
|
94
|
+
django_ledger/models/unit.py,sha256=iP7gMLCPV82uxsDIWa-BhdgLtm8FwGbQ_kOCSC-tJJo,10227
|
|
95
|
+
django_ledger/models/utils.py,sha256=6eNZvIIDdXzn11fRpFYVCEqy23jMmllhvHdGD3C3zRY,8657
|
|
96
|
+
django_ledger/models/vendor.py,sha256=svgKlOGC2j-8yPSt6Wfk3xAFjw-D35I9qPMTNOvyj9w,14020
|
|
95
97
|
django_ledger/models/schemas/__init__.py,sha256=8Tvw33tVJtCvxoXje2lrs9C1bsP_iuGcVi1JqzdPUao,157
|
|
96
98
|
django_ledger/models/schemas/digest.py,sha256=ME_dJ4g2p3dQ97Skh_RTZMwuNLmwTi19BdLM1G6tyAo,1077
|
|
97
99
|
django_ledger/models/schemas/net_payable.py,sha256=2FcfLaaJySjZ3Yk_IMu8SxYWNO_sngEtbuFCXInrQUU,958
|
|
@@ -202,23 +204,24 @@ django_ledger/templates/django_ledger/components/icon.html,sha256=jVJNr_W8-_mdl0
|
|
|
202
204
|
django_ledger/templates/django_ledger/components/menu.html,sha256=sXX3xSPMi__vNIqEFpnAI1p5TmIVVoJQrAUbJDGksYA,3745
|
|
203
205
|
django_ledger/templates/django_ledger/components/modals.html,sha256=wGyR5ZS9VE70CZfd9dFy3WUGKd9zLxIre9daBuPnpFY,1517
|
|
204
206
|
django_ledger/templates/django_ledger/components/modals_v2.html,sha256=9yuKdt-mEDaiGva_4EFgpAfRonVAyN0VeCnwaDfoOeQ,804
|
|
205
|
-
django_ledger/templates/django_ledger/components/period_navigator.html,sha256=
|
|
207
|
+
django_ledger/templates/django_ledger/components/period_navigator.html,sha256=CxW5P6QaeqCLRBQLFZDih65zjsWrGr3jhQTq7p2GLkU,1868
|
|
206
208
|
django_ledger/templates/django_ledger/customer/customer_create.html,sha256=jHJMoASr0pCRbGOz0yk9L_G6PtYVTFqL2PGrOizC-8k,1328
|
|
207
|
-
django_ledger/templates/django_ledger/customer/
|
|
209
|
+
django_ledger/templates/django_ledger/customer/customer_detail.html,sha256=nZ3PQETkXuYbdJyv5kUN3XsEqAyPc0pPATkBFw1K_wg,4340
|
|
210
|
+
django_ledger/templates/django_ledger/customer/customer_list.html,sha256=zWCh9NuBsJa8Lu3UgIJJooTE0w_u34fzOGdoUv8MZoU,678
|
|
208
211
|
django_ledger/templates/django_ledger/customer/customer_update.html,sha256=z1rzw_gDp0rPr_dmtlaZZrDavRiy1FVZ3qEuKKKnclk,1354
|
|
209
212
|
django_ledger/templates/django_ledger/customer/includes/card_customer.html,sha256=z_R_NtbYScvrcuqF-uZggTuPasVS-RXN-4ZHWUVaFxQ,1306
|
|
210
|
-
django_ledger/templates/django_ledger/customer/tags/customer_table.html,sha256=
|
|
213
|
+
django_ledger/templates/django_ledger/customer/tags/customer_table.html,sha256=HLRq8mtY0Iu5kXp4aatPtPB8DZTx1IZr2PWECnMu2s4,3982
|
|
211
214
|
django_ledger/templates/django_ledger/data_import/data_import_job_list.html,sha256=tFb1nX9Ag6g6RhIISFoqC6J7pjKQTOasEUQ5YLtA3SE,592
|
|
212
215
|
django_ledger/templates/django_ledger/data_import/data_import_job_txs.html,sha256=oxaQnblI7JsBQs8I4U5RK00S3_ONvEPl3UV-wDA3a-M,943
|
|
213
216
|
django_ledger/templates/django_ledger/data_import/import_job_create.html,sha256=RpCtH7J2lGujC3kTrYDzWf3hw8Z-0G6LjltTbtRK0JY,3205
|
|
214
217
|
django_ledger/templates/django_ledger/data_import/import_job_delete.html,sha256=qgobtrI-WNYFqhn8de05mcD-FQ0UGSLT6ZoaBlblXAU,944
|
|
215
218
|
django_ledger/templates/django_ledger/data_import/import_job_update.html,sha256=ZDy391RSOXUq3keUs48QrVrI_ZicdNvDeLT_JacH17M,887
|
|
216
219
|
django_ledger/templates/django_ledger/data_import/tags/data_import_job_list_table.html,sha256=y_U1xixMC9YPR4aq6F_cNpyb-dZ5qcVh9D6HSN9Xpps,2919
|
|
217
|
-
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html,sha256=
|
|
218
|
-
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=
|
|
220
|
+
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html,sha256=zOuJk9CQss6vLGehQg_zQVg1skS-an3vKjkWJaCZ-0o,3343
|
|
221
|
+
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=R0mqP4uhYlwndpph8FaKhSKe98_-n9Q0Ud7iLh4UyHE,4850
|
|
219
222
|
django_ledger/templates/django_ledger/entity/entitiy_list.html,sha256=onM9uaWTm2oQ00OPIH5ki2FEfgjx7_EIOT8akuAhQM4,1507
|
|
220
223
|
django_ledger/templates/django_ledger/entity/entity_create.html,sha256=TDayIv2qno7cT3xTCapKV6EZKcTTNfIMxXJFQmHHyz0,1387
|
|
221
|
-
django_ledger/templates/django_ledger/entity/entity_dashboard.html,sha256=
|
|
224
|
+
django_ledger/templates/django_ledger/entity/entity_dashboard.html,sha256=7iQYLYsP_Q1S2wGcYcZUn3FWJBNJPxZ4OvGQjfctoiw,5435
|
|
222
225
|
django_ledger/templates/django_ledger/entity/entity_delete.html,sha256=Kn0a3fff8Jiq4zd4WKqumEqE6PJLa8U3cQ4hSRnR81I,1239
|
|
223
226
|
django_ledger/templates/django_ledger/entity/entity_update.html,sha256=kB4NGg3ndXauTUyFCmm1jvGFsqs_FeI-mSP-rfz5eq0,1024
|
|
224
227
|
django_ledger/templates/django_ledger/entity/home.html,sha256=xt7TLtBV2pcFJDUkwrPFnP2Bxi8kreKXISe8GgyVQsI,995
|
|
@@ -274,8 +277,8 @@ django_ledger/templates/django_ledger/journal_entry/je_update.html,sha256=XXxhA3
|
|
|
274
277
|
django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html,sha256=PU-tOMBuQcwxP73uXyNePaCF8aY0KutWuuAdYUWJofw,2547
|
|
275
278
|
django_ledger/templates/django_ledger/journal_entry/tags/je_table.html,sha256=IQyHXHA3goBjdGM0Hzih46Z82JVhMGPpCRgMVCNGmaA,5747
|
|
276
279
|
django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html,sha256=VN217o-bGEjQ2DHDMhzWOcFMe4EGAu0p3qhc3Dv9X-Y,3446
|
|
277
|
-
django_ledger/templates/django_ledger/layouts/base.html,sha256=
|
|
278
|
-
django_ledger/templates/django_ledger/layouts/content_layout_1.html,sha256=
|
|
280
|
+
django_ledger/templates/django_ledger/layouts/base.html,sha256=7j8wpCgMoSNnHVRv1d6ecqYFuv5e8_k4TAeCk_HHx-o,2160
|
|
281
|
+
django_ledger/templates/django_ledger/layouts/content_layout_1.html,sha256=ToFEmFglQnnm17drEfohu6J1JkwjaM211zqKGTrSJ6s,936
|
|
279
282
|
django_ledger/templates/django_ledger/layouts/content_layout_2.html,sha256=gqXgaGj3ByTI7EziEw0Wo-XBPZEB82selzrXDuCNz_Y,355
|
|
280
283
|
django_ledger/templates/django_ledger/ledger/ledger_create.html,sha256=eyfmLniuAVMUo12HWdMrq0YP3DfP1aCz6M2QZm8fuYc,896
|
|
281
284
|
django_ledger/templates/django_ledger/ledger/ledger_delete.html,sha256=StFckXTo5OSGYzw9XaVvwjnm4aIdJ5aGZIwbxwsexj4,1073
|
|
@@ -296,6 +299,11 @@ django_ledger/templates/django_ledger/purchase_order/includes/card_po.html,sha25
|
|
|
296
299
|
django_ledger/templates/django_ledger/purchase_order/includes/po_item_formset.html,sha256=zfEWV8d3YAicP3XQ_3opathRnzmD1x4SqaA7m6mYC9E,5092
|
|
297
300
|
django_ledger/templates/django_ledger/purchase_order/includes/po_table.html,sha256=VV029wwaCbWPsPcNsI4V5PZXc3BFMmUwrqnTDnl7EUM,2228
|
|
298
301
|
django_ledger/templates/django_ledger/purchase_order/tags/po_item_table.html,sha256=2DK0aaqG4R-GsOr_I4mHVEI8O614FuggpEBN6r-jcu4,1998
|
|
302
|
+
django_ledger/templates/django_ledger/receipt/customer_receipt_report.html,sha256=Z2M4JnelzRRscVgA7jA3gWvDWMv9wiz5IiVVubqn98E,5197
|
|
303
|
+
django_ledger/templates/django_ledger/receipt/receipt_delete.html,sha256=yB5jHmFUOc1ZMulSU5uq8oc1jomRmIZA0aK91iF0Oxc,1226
|
|
304
|
+
django_ledger/templates/django_ledger/receipt/receipt_detail.html,sha256=thlMFiqfZFKuXqX0mbdO4OmRlvAR9CrPuchK8eCMVPw,4757
|
|
305
|
+
django_ledger/templates/django_ledger/receipt/receipt_list.html,sha256=KZSxhgA_uZj015Arx_CM8ghbxTlSLUew6v3NP49AXzM,6810
|
|
306
|
+
django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html,sha256=ySVb7twSChUXEuPSujZZaD8PtNBBsEDLdTKEE8zq4qQ,5149
|
|
299
307
|
django_ledger/templates/django_ledger/service/service_create.html,sha256=kGlqz3-txJojmBEnwXat8V6p4mZ0yozKBYDSlMgGcB8,1431
|
|
300
308
|
django_ledger/templates/django_ledger/service/service_delete.html,sha256=9h8fR5cm5m9HLfOy6r8ZXk_kwT6VP8PiqbHLKBXnb3I,1101
|
|
301
309
|
django_ledger/templates/django_ledger/service/service_list.html,sha256=NO6f4zmOnAmjrHd-lsYDksKJtVuoeXYC6s2g1MUibOs,854
|
|
@@ -312,12 +320,13 @@ django_ledger/templates/django_ledger/uom/uom_list.html,sha256=2uKkhNhPoXrPFX1mX
|
|
|
312
320
|
django_ledger/templates/django_ledger/uom/uom_update.html,sha256=89xE0gtFw__vzwwiniIlsK1U5R2kpKtdlHZvqReVcQg,1436
|
|
313
321
|
django_ledger/templates/django_ledger/uom/tags/uom_table.html,sha256=l8mbdxCWyCZ_Mb5VDQJIRt7HN_RTWv6SrLmypKBVlvw,2472
|
|
314
322
|
django_ledger/templates/django_ledger/vendor/vendor_create.html,sha256=EanF0IsffgLkNch3H7l4BgJ-gdluMLP3lS7FsRq7g08,1319
|
|
323
|
+
django_ledger/templates/django_ledger/vendor/vendor_detail.html,sha256=h-SCtuz-FclvSZmeAMJr8cy7R8avclAeCla5iQgdPDc,4246
|
|
315
324
|
django_ledger/templates/django_ledger/vendor/vendor_list.html,sha256=Jnp_xI76CxrSFEphRLjQKKs2CajyAe3Xy_uQBcjH8lU,672
|
|
316
325
|
django_ledger/templates/django_ledger/vendor/vendor_update.html,sha256=4kBUlGgrgRFhdwhjQAxJrp0ATsTWQ4kcKLlUqpkjLKo,1341
|
|
317
326
|
django_ledger/templates/django_ledger/vendor/includes/card_vendor.html,sha256=oCXyuqyF7CnJnDQdK0G0jdYLqtPWYSzwlv8oddyGJg8,1290
|
|
318
|
-
django_ledger/templates/django_ledger/vendor/tags/vendor_table.html,sha256=
|
|
327
|
+
django_ledger/templates/django_ledger/vendor/tags/vendor_table.html,sha256=qycJrk6lxEOwYg7EHQBc_SqkSCOCwNeeEByfuRmvDOI,3898
|
|
319
328
|
django_ledger/templatetags/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
|
|
320
|
-
django_ledger/templatetags/django_ledger.py,sha256=
|
|
329
|
+
django_ledger/templatetags/django_ledger.py,sha256=XF0MnIOcvyvQfhIg95XksiFNDfZ6nazmF55g1QFLK_E,34852
|
|
321
330
|
django_ledger/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
322
331
|
django_ledger/tests/base.py,sha256=ddsMTzv0-17JD1QRobpTN2CVKL1v0lNplo78JaB36oQ,10842
|
|
323
332
|
django_ledger/tests/test_accounts.py,sha256=p0axVtzU4gDZUwWGnRmE9zSHxT-kxvLiIHyj7-beuUs,6306
|
|
@@ -333,15 +342,15 @@ django_ledger/tests/bdd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
333
342
|
django_ledger/tests/bdd/features/steps/README.py,sha256=4HMdVjjflcKQBf0LeZbc5i3TXbe5qGxYBcGmHn4i3jU,599
|
|
334
343
|
django_ledger/tests/test_io_ofx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
335
344
|
django_ledger/tests/test_io_ofx/tests.py,sha256=v-2xY410a6Tr2TwG5oqc_UkFzXBIAFxWYasZkeiXAfE,1993
|
|
336
|
-
django_ledger/urls/__init__.py,sha256=
|
|
345
|
+
django_ledger/urls/__init__.py,sha256=zgjJxd_V1nZl9LqdAvvl0SGUa9w-1cGuiYfnIhjymLk,1930
|
|
337
346
|
django_ledger/urls/account.py,sha256=OhNj8kBGdrp-1mottTwCJ45gC26FEQ9KWIZaom9D6jg,2448
|
|
338
347
|
django_ledger/urls/auth.py,sha256=8dY2h6PQkMayUL81guu9JCxm--Tj0rglvvxg9Qh03aY,230
|
|
339
348
|
django_ledger/urls/bank_account.py,sha256=-dJsrnwej8H96Gc8xltLf3NwUxKk_xG0Mq4mxhe8Cqs,887
|
|
340
349
|
django_ledger/urls/bill.py,sha256=wvdRqSgnHp1CLdX6Sudu1IiIx4M1Pe8OupanA-9a-nI,2890
|
|
341
350
|
django_ledger/urls/chart_of_accounts.py,sha256=DGr7YSfPHuOoUWRX7EhEhteRJTbCdx6xXExK7lrr0x8,1370
|
|
342
351
|
django_ledger/urls/closing_entry.py,sha256=3W0fCuAWGB3h8cWg0cxOb9EClVrydeIdHEX0q9rge60,1765
|
|
343
|
-
django_ledger/urls/customer.py,sha256=
|
|
344
|
-
django_ledger/urls/data_import.py,sha256=
|
|
352
|
+
django_ledger/urls/customer.py,sha256=o69LRA7f4hNVTHxpY64D69Wl88y7MANlcktReujps14,568
|
|
353
|
+
django_ledger/urls/data_import.py,sha256=3DaXUzExVPsAwhL6wq3tPYonO7vnEXRPgOuI4vrFRQI,957
|
|
345
354
|
django_ledger/urls/djl_api.py,sha256=4BOkWI8MyfJlHXRn21hL08KYF39j7Njd1l7FIxTcsuc,952
|
|
346
355
|
django_ledger/urls/entity.py,sha256=8ysVslj0KhzGeOZyfRMJW6SYROyGM_azwGxFkkG4ICQ,1286
|
|
347
356
|
django_ledger/urls/estimate.py,sha256=4dmIv-IElYgl88HsEuwIYBr6XK4Dhbhtj09TmDa5H8k,2058
|
|
@@ -354,18 +363,19 @@ django_ledger/urls/item.py,sha256=PZxdnaUMCegk17b7eSwKpd9k74apHFbzz12KRdp1ryo,26
|
|
|
354
363
|
django_ledger/urls/journal_entry.py,sha256=sKuYtKDSaAVcW--iIe8GQecuVZ7wF6W3vOtgATUIr0c,2094
|
|
355
364
|
django_ledger/urls/ledger.py,sha256=4Np3M0OuVdyoNRKVMqYIEA6MmwdlJSQp0vrnqYCWSZM,2802
|
|
356
365
|
django_ledger/urls/purchase_order.py,sha256=iUNdzy8dcxkkmDAOt2fO4Up3e0pHDqZNSf9JOKbO4Wo,2388
|
|
366
|
+
django_ledger/urls/receipt.py,sha256=d1oqkqwC_K6J2-LsjajArmHbllIafU6To0QzQM6_IgM,3378
|
|
357
367
|
django_ledger/urls/transactions.py,sha256=e_x_z5qbkR6i7o8OWWdXshDiY_WVmu9WVhR9A96fnhI,80
|
|
358
368
|
django_ledger/urls/unit.py,sha256=QEVKrgcw2dqMaaXsUHfqYecTa5-iaPlS9smrYJ1QsgM,1506
|
|
359
|
-
django_ledger/urls/vendor.py,sha256=
|
|
360
|
-
django_ledger/views/__init__.py,sha256=
|
|
369
|
+
django_ledger/urls/vendor.py,sha256=aXjMBYb-n2zyUJUHb7qOxyNb3XOXCMAy_zxP52yM9eQ,511
|
|
370
|
+
django_ledger/views/__init__.py,sha256=Zm_NodwNtRMsMFI-uXrFHudgJouOq6XPMwzDC8-wHmI,1220
|
|
361
371
|
django_ledger/views/account.py,sha256=fC0PX889DxyKheTF3SIA_aDxermQu8hPhrw5JBwpwS0,9536
|
|
362
372
|
django_ledger/views/auth.py,sha256=I8Mv_aAfW-8Z5VYPOX7P3IUO4Fp5jJPkSuu1ZSVpWtI,777
|
|
363
373
|
django_ledger/views/bank_account.py,sha256=MbiVurJTNK-UsDPn17-ai4G8sE3qIMrdmXaWPX-J8n8,5025
|
|
364
374
|
django_ledger/views/bill.py,sha256=dtp8KqyqvDGPy99lB1bz4jHEhHJ_4b87O6jpRFS-oOI,22036
|
|
365
375
|
django_ledger/views/chart_of_accounts.py,sha256=AlRdX_g-Hjqetv1pVdQRMIYj4D4gnCURUgbAnPt_kpA,5659
|
|
366
376
|
django_ledger/views/closing_entry.py,sha256=JG2uDrqi90S1_Edb6-dsfNgx5xXLQRm6awjf_c8Y8fk,8433
|
|
367
|
-
django_ledger/views/customer.py,sha256=
|
|
368
|
-
django_ledger/views/data_import.py,sha256=
|
|
377
|
+
django_ledger/views/customer.py,sha256=UPdEZ8DJj6FHR-eO2EgqdrYzU6QoAp1QAvPgHK0SXSg,4867
|
|
378
|
+
django_ledger/views/data_import.py,sha256=NdyjYK3Rls3Oyb0LhnM49A999Z-GC-yYvQMelRDANPc,10184
|
|
369
379
|
django_ledger/views/djl_api.py,sha256=W4DooOXtTDvcZ6AyBgcwv86CUytQx_KHxxycU6s3e3I,4359
|
|
370
380
|
django_ledger/views/entity.py,sha256=eY7dDY45Mv3M5pdegXtdkbC0TAzJh7LuG0NrZx56lM8,9394
|
|
371
381
|
django_ledger/views/estimate.py,sha256=z5rlNiiXDXR24yPdzCNXVM_yJRDE4CG4ZrItijaXtmY,12648
|
|
@@ -377,14 +387,15 @@ django_ledger/views/invoice.py,sha256=86toBN3ubaHM9Zlh1fc2f2U49SukpVBsMLqqtTXcS8
|
|
|
377
387
|
django_ledger/views/item.py,sha256=FAaepQdWI_fvMMjoP5I6shrU3fZhYRf_lweORWuc8u4,20478
|
|
378
388
|
django_ledger/views/journal_entry.py,sha256=RfGFCi68W4aZ8wNqtmsPgKJrmJzztIKVKRQnGdxrv6k,11227
|
|
379
389
|
django_ledger/views/ledger.py,sha256=_-y8_Na5JyLYzkYIGrOJzAMWC3Hk8hzsikqXsxf8MkM,12178
|
|
380
|
-
django_ledger/views/mixins.py,sha256=
|
|
390
|
+
django_ledger/views/mixins.py,sha256=KJQ0nuUc8PSKP6gsgvBPhr3fW_BafxF3MONpVYSdM4g,23316
|
|
381
391
|
django_ledger/views/purchase_order.py,sha256=grFEoYNZncsXrJXkrQ98rUkXKc73m9AGOFYhi7OYsak,20308
|
|
392
|
+
django_ledger/views/receipt.py,sha256=mtiHfk529oVVSIrAR28LgQc696HUVFnV4rYd9HTqoV0,10867
|
|
382
393
|
django_ledger/views/transactions.py,sha256=3ijtJzdLPFkqG7OYpe-7N4QVjCyR2yl5ht_9RyfquBA,212
|
|
383
394
|
django_ledger/views/unit.py,sha256=IK0KWf_NkTCzJILtA4SDU9tD4OL3kbAktLdvL6fxRhU,10035
|
|
384
|
-
django_ledger/views/vendor.py,sha256
|
|
385
|
-
django_ledger-0.8.
|
|
386
|
-
django_ledger-0.8.
|
|
387
|
-
django_ledger-0.8.
|
|
388
|
-
django_ledger-0.8.
|
|
389
|
-
django_ledger-0.8.
|
|
390
|
-
django_ledger-0.8.
|
|
395
|
+
django_ledger/views/vendor.py,sha256=-tUs6-flA_SiXuDWs173Sho4JwQr0zMAhqD_-xM0eeA,4746
|
|
396
|
+
django_ledger-0.8.1.dist-info/licenses/AUTHORS.md,sha256=ShPwf-qniJkbjRzX5_lqhmgoLMEYMSHSwKPXHZtWmyk,824
|
|
397
|
+
django_ledger-0.8.1.dist-info/licenses/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
398
|
+
django_ledger-0.8.1.dist-info/METADATA,sha256=SpELgMUrMbdRbjfxVxB-GnB4Yyr7JqCkCl42YvuIQ_Q,8458
|
|
399
|
+
django_ledger-0.8.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
400
|
+
django_ledger-0.8.1.dist-info/top_level.txt,sha256=57KG3JBsF9fqPnPGyFfcpKtfFNS9TQONjtfKhUlwiy4,14
|
|
401
|
+
django_ledger-0.8.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|