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.

Files changed (51) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/forms/account.py +45 -46
  3. django_ledger/forms/data_import.py +182 -63
  4. django_ledger/io/io_core.py +507 -374
  5. django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
  6. django_ledger/models/__init__.py +2 -1
  7. django_ledger/models/bill.py +337 -300
  8. django_ledger/models/customer.py +47 -34
  9. django_ledger/models/data_import.py +770 -289
  10. django_ledger/models/entity.py +882 -637
  11. django_ledger/models/mixins.py +421 -280
  12. django_ledger/models/receipt.py +1083 -0
  13. django_ledger/models/transactions.py +105 -41
  14. django_ledger/models/unit.py +42 -30
  15. django_ledger/models/utils.py +12 -2
  16. django_ledger/models/vendor.py +85 -66
  17. django_ledger/settings.py +1 -0
  18. django_ledger/templates/django_ledger/components/period_navigator.html +5 -3
  19. django_ledger/templates/django_ledger/customer/customer_detail.html +87 -0
  20. django_ledger/templates/django_ledger/customer/customer_list.html +0 -1
  21. django_ledger/templates/django_ledger/customer/tags/customer_table.html +3 -1
  22. django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +24 -3
  23. django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +26 -10
  24. django_ledger/templates/django_ledger/entity/entity_dashboard.html +2 -2
  25. django_ledger/templates/django_ledger/layouts/base.html +1 -1
  26. django_ledger/templates/django_ledger/layouts/content_layout_1.html +1 -1
  27. django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +115 -0
  28. django_ledger/templates/django_ledger/receipt/receipt_delete.html +30 -0
  29. django_ledger/templates/django_ledger/receipt/receipt_detail.html +89 -0
  30. django_ledger/templates/django_ledger/receipt/receipt_list.html +134 -0
  31. django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +115 -0
  32. django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +3 -2
  33. django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
  34. django_ledger/templatetags/django_ledger.py +338 -191
  35. django_ledger/urls/__init__.py +1 -0
  36. django_ledger/urls/customer.py +3 -0
  37. django_ledger/urls/data_import.py +3 -0
  38. django_ledger/urls/receipt.py +102 -0
  39. django_ledger/urls/vendor.py +1 -0
  40. django_ledger/views/__init__.py +1 -0
  41. django_ledger/views/customer.py +56 -14
  42. django_ledger/views/data_import.py +119 -66
  43. django_ledger/views/mixins.py +112 -86
  44. django_ledger/views/receipt.py +294 -0
  45. django_ledger/views/vendor.py +53 -14
  46. {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/METADATA +1 -1
  47. {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/RECORD +51 -40
  48. {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/WHEEL +0 -0
  49. {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/licenses/AUTHORS.md +0 -0
  50. {django_ledger-0.8.0.dist-info → django_ledger-0.8.1.dist-info}/licenses/LICENSE +0 -0
  51. {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()
@@ -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 ListView, CreateView, UpdateView
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('django_ledger:vendor-list',
60
- kwargs={
61
- 'entity_slug': self.kwargs['entity_slug']
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
- user_model=self.request.user
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('django_ledger:vendor-list',
94
- kwargs={
95
- 'entity_slug': self.kwargs['entity_slug']
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.0
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=oA2aV7RDEdxlKdmJKyX5jwbKd3-B9BtZuL1bMoerPHM,380
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=BXlgcg9tTUfRZgfG0VLccLUu5xX9L1utc9CIGVaIdDA,8681
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=2b6m6-o744l5pDJgTDnI_MddyncqYXLJafF6lqY48V0,5197
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=In19wvKGfmFB7TpCBjaWAtUbCL-v6daOMTDyFmxPydg,6920
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=VUiMCe7S-kvhO4KWbQeArfqH0-PVLJ1JE1Ncqoe3OoA,86664
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=OesBx4My9GnqU1xB5WXuuGLOnmzgxEJxI-WWxRxi658,807
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=4dCh0SDreX5FRH44cE-otUwiQZDVRJLJJyMapVxdoP4,66590
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=CMolYpvPMKIpKL5aE5xhMyom83G8aUgfZGWZXl1h_p0,13116
80
- django_ledger/models/data_import.py,sha256=_hMqwR_q7KtYfNJUOUkoA2Hn7Nl96jZC7RLP4UKZFtk,48723
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=X4LsMdbmuPOHr3XiSmHmNJDC9tJTmfbMWw5W9G51KyA,124643
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=biszaXhnd4ZGc3VeAiEFfZWS5xipsd-pYLL8skgJ8q8,54541
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=MUlqxBUyoyEvTApcoj-083abs1AkGSQAjjiQzIcrpuc,25232
92
- django_ledger/models/unit.py,sha256=SGLdKlCaYmdin2SbbtsulcnhjyGbLewIhFqYSOSvuYA,9946
93
- django_ledger/models/utils.py,sha256=Weta2Cwsn4wRqvxMecIuD7aHYiiXBwUeMqpUDK4CokE,8360
94
- django_ledger/models/vendor.py,sha256=z7BR2apCa4CUErS38HfmLzvKiuxT5dEFGwyTHV8zCJc,13763
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=vyL01E7M62-yKe_wJt9TpwyAs97DWja8cmaUaA_jMHo,1828
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/customer_list.html,sha256=zRBHsbYlZH13U1TRkyfKR9VZ6HnLkDGhvejMBBYTqZY,689
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=TLwl80hmFkrcW7B2QCVGkTGs1TbsrY0iLcRtEPwqt9M,3600
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=LzrDDF_SIsVCH3VwU2c0bu_-YclFIap9F_6rtTVdW-s,1686
218
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=z0wTLneFb9BqYohhD2W6loRc9VpAmuFO93Gy2sFMyPo,3916
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=gX0YXYWh9HKZrAQBCQkjqkpCUDzefV-A9Bw9r6VCugE,5435
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=rt1ZtEtq1uLS9Qi59no89mhiqYNH0xdqJnbP5czExPw,2149
278
- django_ledger/templates/django_ledger/layouts/content_layout_1.html,sha256=U-32AnGwhIOGHtSTlSst580OwrUBIoDIt93_xZRtOTw,936
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=V3HWafgovo_VsXSRqteddObu1ucgISWDC30jThM3Zn4,3655
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=jEez145Hzt_16cubVWEyqGu_EUbnBzu02lJsw6EaLCo,32453
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=i1Aq0yH-T7YE_uS13xrDrjwOWhogWQ-J1LyvpfVl3LE,1869
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=I3tWSb5Gmdr-boBSlCst_5cvCHz6JhpGxuwglqJeaG0,426
344
- django_ledger/urls/data_import.py,sha256=bOi6U8gN2adxQUjOeNCJGuDRB--hwWeUIQOYTMbFarw,780
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=ODHpAwe5lomluj8ZCqbMtugTeeRsv0Yo9SqkZEmfYaw,393
360
- django_ledger/views/__init__.py,sha256=fY9eBoPkx50p-kSalskd4QW1tHm3e64WpwOFuJzn4Xo,1178
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=MM6d4z7j79QN4-3LFdkbFJ35_xDNVxv4NAbqLcnf4pU,3550
368
- django_ledger/views/data_import.py,sha256=BHwOGeAO6coSPFCoXH-5PGryoGDuGPvHbVVJlZLkO5Q,8056
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=IzQTkFwDSXWgeUc4_oarA4r5aD0zTql4LH1z-vUKRP0,23133
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=Arns4YtJO65MxL5ihRP6PHF7Cv7nKLBmCPRP3DiwRzA,3487
385
- django_ledger-0.8.0.dist-info/licenses/AUTHORS.md,sha256=ShPwf-qniJkbjRzX5_lqhmgoLMEYMSHSwKPXHZtWmyk,824
386
- django_ledger-0.8.0.dist-info/licenses/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
387
- django_ledger-0.8.0.dist-info/METADATA,sha256=V8hDNSlUnNCxwqck4EJ1tnt4X7ZGbaZfG61RK_-4mbQ,8458
388
- django_ledger-0.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
389
- django_ledger-0.8.0.dist-info/top_level.txt,sha256=57KG3JBsF9fqPnPGyFfcpKtfFNS9TQONjtfKhUlwiy4,14
390
- django_ledger-0.8.0.dist-info/RECORD,,
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,,