django-ledger 0.7.4__py3-none-any.whl → 0.7.5.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 (31) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/contrib/django_ledger_graphene/bank_account/schema.py +1 -1
  3. django_ledger/forms/bank_account.py +16 -12
  4. django_ledger/forms/data_import.py +70 -33
  5. django_ledger/io/io_core.py +945 -127
  6. django_ledger/io/io_generator.py +7 -3
  7. django_ledger/io/ofx.py +37 -16
  8. django_ledger/migrations/0020_remove_bankaccountmodel_django_ledg_cash_ac_59a8af_idx_and_more.py +44 -0
  9. django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py +33 -0
  10. django_ledger/models/bank_account.py +14 -11
  11. django_ledger/models/customer.py +3 -13
  12. django_ledger/models/data_import.py +690 -35
  13. django_ledger/models/entity.py +39 -24
  14. django_ledger/models/journal_entry.py +18 -8
  15. django_ledger/models/mixins.py +17 -3
  16. django_ledger/models/vendor.py +2 -2
  17. django_ledger/settings.py +18 -22
  18. django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html +2 -2
  19. django_ledger/templates/django_ledger/data_import/data_import_job_txs.html +1 -1
  20. django_ledger/templates/django_ledger/data_import/import_job_create.html +11 -2
  21. django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +1 -1
  22. django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +5 -2
  23. django_ledger/templatetags/django_ledger.py +12 -12
  24. django_ledger/views/bank_account.py +1 -1
  25. django_ledger/views/data_import.py +60 -134
  26. {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/METADATA +44 -17
  27. {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/RECORD +31 -29
  28. {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/WHEEL +1 -1
  29. {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/top_level.txt +1 -0
  30. {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/AUTHORS.md +0 -0
  31. {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/LICENSE +0 -0
@@ -8,10 +8,7 @@ Contributions to this module:
8
8
  from datetime import datetime, time
9
9
 
10
10
  from django.contrib import messages
11
- from django.core.exceptions import ObjectDoesNotExist
12
11
  from django.urls import reverse
13
- from django.utils.html import format_html
14
- from django.utils.safestring import mark_safe
15
12
  from django.utils.timezone import make_aware
16
13
  from django.utils.translation import gettext_lazy as _
17
14
  from django.views.generic import ListView, FormView, DetailView, UpdateView, DeleteView
@@ -23,7 +20,7 @@ from django_ledger.models.data_import import ImportJobModel, StagedTransactionMo
23
20
  from django_ledger.views.mixins import DjangoLedgerSecurityMixIn
24
21
 
25
22
 
26
- class ImportJobModelViewQuerySetMixIn:
23
+ class ImportJobModelViewBaseView(DjangoLedgerSecurityMixIn):
27
24
  queryset = None
28
25
 
29
26
  def get_queryset(self):
@@ -33,12 +30,12 @@ class ImportJobModelViewQuerySetMixIn:
33
30
  user_model=self.request.user
34
31
  ).order_by('-created').select_related('bank_account_model',
35
32
  'bank_account_model__entity_model',
36
- 'bank_account_model__cash_account',
37
- 'bank_account_model__cash_account__coa_model')
33
+ 'bank_account_model__account_model',
34
+ 'bank_account_model__account_model__coa_model')
38
35
  return super().get_queryset()
39
36
 
40
37
 
41
- class ImportJobModelCreateView(DjangoLedgerSecurityMixIn, FormView):
38
+ class ImportJobModelCreateView(ImportJobModelViewBaseView, FormView):
42
39
  template_name = 'django_ledger/data_import/import_job_create.html'
43
40
  PAGE_TITLE = _('Create Import Job')
44
41
  extra_context = {
@@ -47,6 +44,12 @@ class ImportJobModelCreateView(DjangoLedgerSecurityMixIn, FormView):
47
44
  }
48
45
  form_class = ImportJobModelCreateForm
49
46
 
47
+ def get_form(self, form_class=None, **kwargs):
48
+ return self.form_class(
49
+ entity_model=self.get_authorized_entity_instance(),
50
+ **self.get_form_kwargs()
51
+ )
52
+
50
53
  def get_success_url(self):
51
54
  return reverse('django_ledger:data-import-jobs-list',
52
55
  kwargs={
@@ -54,72 +57,12 @@ class ImportJobModelCreateView(DjangoLedgerSecurityMixIn, FormView):
54
57
  })
55
58
 
56
59
  def form_valid(self, form):
57
- ofx = OFXFileManager(ofx_file_or_path=form.files['ofx_file'])
58
-
59
- # Pulls accounts from OFX file...
60
- account_models = ofx.get_accounts()
61
- ofx_account_number = [a['account_number'] for a in account_models]
62
-
63
- # OFX file has multiple statements in it... Not supported...
64
- # All transactions must come from a single account...
65
- if len(ofx_account_number) > 1:
66
- messages.add_message(
67
- self.request,
68
- level=messages.ERROR,
69
- message=_('Multiple statements detected. Multiple account import is not supported.'),
70
- extra_tags='is-danger'
71
- )
72
- return self.form_invalid(form=form)
73
-
74
- ofx_account_number = ofx_account_number[0]
75
-
76
- # account has not been created yet...
77
- try:
78
- ba_model = self.AUTHORIZED_ENTITY_MODEL.bankaccountmodel_set.filter(
79
- account_number__exact=ofx_account_number
80
- ).select_related('cash_account', 'entity_model').get()
81
- except ObjectDoesNotExist:
82
- create_url = reverse(
83
- viewname='django_ledger:bank-account-create',
84
- kwargs={
85
- 'entity_slug': self.AUTHORIZED_ENTITY_MODEL.slug
86
- }
87
- )
88
- create_link = format_html('<a href={}>create</a>', create_url)
89
- messages.add_message(
90
- self.request,
91
- level=messages.ERROR,
92
- message=_(f'Account Number ***{ofx_account_number[-4:]} not recognized. Please {create_link} Bank '
93
- 'Account model before importing transactions'),
94
- extra_tags='is-danger'
95
- )
96
- return self.form_invalid(form=form)
97
-
98
- # account is not active...
99
- if not ba_model.is_active():
100
- create_url = reverse(
101
- viewname='django_ledger:bank-account-update',
102
- kwargs={
103
- 'entity_slug': self.AUTHORIZED_ENTITY_MODEL.slug,
104
- 'bank_account_pk': ba_model.uuid
105
- }
106
- )
107
- activate_link = format_html('<a href={}>mark account active</a>', create_url)
108
- messages.add_message(
109
- self.request,
110
- level=messages.ERROR,
111
- message=_(f'Account Number ***{ofx_account_number[-4:]} not active. Please {activate_link} '
112
- ' before importing new transactions'),
113
- extra_tags='is-danger'
114
- )
115
- return self.form_invalid(form=form)
116
-
60
+ ofx_manager = OFXFileManager(ofx_file_or_path=form.files['ofx_file'])
117
61
  import_job: ImportJobModel = form.save(commit=False)
118
- import_job.bank_account_model = ba_model
119
62
  import_job.configure(commit=False)
120
63
  import_job.save()
121
64
 
122
- txs_to_stage = ofx.get_account_txs(account=ba_model.account_number)
65
+ txs_to_stage = ofx_manager.get_account_txs()
123
66
  staged_txs_model_list = [
124
67
  StagedTransactionModel(
125
68
  date_posted=make_aware(value=datetime.combine(date=tx.dtposted.date(), time=time.min)),
@@ -137,7 +80,7 @@ class ImportJobModelCreateView(DjangoLedgerSecurityMixIn, FormView):
137
80
  return super().form_valid(form=form)
138
81
 
139
82
 
140
- class ImportJobModelListView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuerySetMixIn, ListView):
83
+ class ImportJobModelListView(ImportJobModelViewBaseView, ListView):
141
84
  PAGE_TITLE = _('Data Import Jobs')
142
85
  extra_context = {
143
86
  'page_title': PAGE_TITLE,
@@ -147,7 +90,7 @@ class ImportJobModelListView(DjangoLedgerSecurityMixIn, ImportJobModelViewQueryS
147
90
  template_name = 'django_ledger/data_import/data_import_job_list.html'
148
91
 
149
92
 
150
- class ImportJobModelUpdateView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuerySetMixIn, UpdateView):
93
+ class ImportJobModelUpdateView(ImportJobModelViewBaseView, UpdateView):
151
94
  template_name = 'django_ledger/data_import/import_job_update.html'
152
95
  context_object_name = 'import_job_model'
153
96
  pk_url_kwarg = 'job_pk'
@@ -162,11 +105,11 @@ class ImportJobModelUpdateView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuer
162
105
  return ctx
163
106
 
164
107
  def get_success_url(self):
108
+ entity_model = self.get_authorized_entity_instance()
165
109
  return reverse(
166
- viewname='django_ledger:data-import-jobs-update',
110
+ viewname='django_ledger:data-import-jobs-list',
167
111
  kwargs={
168
- 'entity_slug': self.AUTHORIZED_ENTITY_MODEL.slug,
169
- 'job_pk': self.kwargs['job_pk']
112
+ 'entity_slug': entity_model.slug
170
113
  }
171
114
  )
172
115
 
@@ -180,7 +123,7 @@ class ImportJobModelUpdateView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuer
180
123
  return super().form_valid(form=form)
181
124
 
182
125
 
183
- class ImportJobModelDeleteView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuerySetMixIn, DeleteView):
126
+ class ImportJobModelDeleteView(ImportJobModelViewBaseView, DeleteView):
184
127
  template_name = 'django_ledger/data_import/import_job_delete.html'
185
128
  context_object_name = 'import_job_model'
186
129
  pk_url_kwarg = 'job_pk'
@@ -202,89 +145,72 @@ class ImportJobModelDeleteView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuer
202
145
  )
203
146
 
204
147
 
205
- class DataImportJobDetailView(DjangoLedgerSecurityMixIn, ImportJobModelViewQuerySetMixIn, DetailView):
148
+ class DataImportJobDetailView(ImportJobModelViewBaseView, DetailView):
206
149
  template_name = 'django_ledger/data_import/data_import_job_txs.html'
207
150
  PAGE_TITLE = _('Import Job Staged Txs')
208
151
  context_object_name = 'import_job'
209
152
  pk_url_kwarg = 'job_pk'
210
153
  import_transactions = False
154
+ form_class = StagedTransactionModelFormSet
155
+ http_method_names = ['get', 'post']
156
+
157
+ def get_form_kwargs(self):
158
+ return {
159
+ 'entity_model': self.get_authorized_entity_instance(),
160
+ 'import_job_model': self.get_object(),
161
+ }
211
162
 
212
163
  def get_context_data(self, **kwargs):
213
- ctx = super().get_context_data(**kwargs)
164
+ context = super().get_context_data(**kwargs)
165
+
166
+ # job_model: ImportJobModel = getattr(self, 'object', self.get_object())
214
167
  job_model: ImportJobModel = self.object
215
- ctx['page_title'] = job_model.description
216
- ctx['header_title'] = self.PAGE_TITLE
217
- ctx['header_subtitle'] = job_model.description
218
- ctx['header_subtitle_icon'] = 'tabler:table-import'
219
- bank_account_model = job_model.bank_account_model
220
- cash_account_model = job_model.bank_account_model.cash_account
221
- if not cash_account_model:
222
- bank_acct_url = reverse('django_ledger:bank-account-update',
223
- kwargs={
224
- 'entity_slug': self.kwargs['entity_slug'],
225
- 'bank_account_pk': bank_account_model.uuid
226
- })
227
- messages.add_message(
228
- self.request,
229
- messages.ERROR,
230
- mark_safe(f'Warning! No cash account has been set for {job_model.bank_account_model}. '
231
- f'Importing has been disabled until Cash Account is assigned. '
232
- f'Click <a href="{bank_acct_url}">here</a> to assign'),
233
- extra_tags='is-danger'
234
- )
235
-
236
- staged_txs_qs = job_model.stagedtransactionmodel_set.all()
237
- ctx['staged_txs_qs'] = staged_txs_qs
238
168
 
239
- txs_formset = StagedTransactionModelFormSet(
240
- user_model=self.request.user,
241
- entity_slug=self.kwargs['entity_slug'],
242
- exclude_account=cash_account_model,
243
- queryset=staged_txs_qs.is_pending(),
169
+ context['page_title'] = job_model.description
170
+ context['header_title'] = self.PAGE_TITLE
171
+ context['header_subtitle'] = job_model.description
172
+ context['header_subtitle_icon'] = 'tabler:table-import'
173
+
174
+ staged_txs_formset = StagedTransactionModelFormSet(
175
+ entity_model=self.get_authorized_entity_instance(),
176
+ import_job_model=job_model
244
177
  )
245
178
 
246
- ctx['staged_txs_formset'] = txs_formset
247
- ctx['cash_account_model'] = cash_account_model
248
- ctx['bank_account_model'] = bank_account_model
249
- return ctx
179
+ context['staged_txs_formset'] = staged_txs_formset
180
+
181
+ return context
250
182
 
251
183
  def post(self, request, **kwargs):
252
- _ = super().get(request, **kwargs)
253
- job_model: ImportJobModel = self.object
254
- staged_txs_qs = job_model.stagedtransactionmodel_set.all()
184
+ self.object = self.get_object()
255
185
 
256
186
  txs_formset = StagedTransactionModelFormSet(
257
- data=request.POST,
258
- user_model=self.request.user,
259
- queryset=staged_txs_qs,
260
- entity_slug=kwargs['entity_slug']
187
+ entity_model=self.get_authorized_entity_instance(),
188
+ import_job_model=self.object,
189
+ data=request.POST
261
190
  )
262
191
 
263
- if txs_formset.has_changed():
264
- if txs_formset.is_valid():
265
- txs_formset.save()
266
- for tx_form in txs_formset:
192
+ # if txs_formset.is_valid():
193
+ for tx_form in txs_formset:
194
+ if tx_form.has_changed():
195
+ # perform work only if form has changed...
196
+ if tx_form.is_valid():
197
+ tx_form.save()
198
+ # import entry was selected to be split....
267
199
  is_split = tx_form.cleaned_data['tx_split'] is True
268
200
  if is_split:
269
201
  tx_form.instance.add_split()
202
+
203
+ # import entry was selected for import...
270
204
  is_import = tx_form.cleaned_data['tx_import']
271
205
  if is_import:
272
- is_split_bundled = tx_form.cleaned_data['bundle_split']
273
- if not is_split_bundled:
274
- tx_form.instance.migrate(split_txs=True)
275
- else:
276
- tx_form.instance.migrate()
277
- else:
278
- context = self.get_context_data(**kwargs)
279
- context['staged_txs_formset'] = txs_formset
280
- messages.add_message(request,
281
- messages.ERROR,
282
- 'Hmmm, this doesn\'t add up!. Check your math!',
283
- extra_tags='is-danger')
284
- return self.render_to_response(context)
206
+ # all entries in split will be going so the same journal entry... (same unit...)
207
+ is_bundled = tx_form.cleaned_data['bundle_split']
208
+ tx_form.instance.migrate() if is_bundled else tx_form.instance.migrate(split_txs=True)
285
209
 
286
210
  messages.add_message(request,
287
211
  messages.SUCCESS,
288
212
  'Successfully saved transactions.',
289
213
  extra_tags='is-success')
290
- return self.render_to_response(context=self.get_context_data())
214
+
215
+ context = self.get_context_data(**kwargs)
216
+ return self.render_to_response(context)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: django-ledger
3
- Version: 0.7.4
3
+ Version: 0.7.5.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>
@@ -22,22 +22,22 @@ Requires-Python: >=3.10
22
22
  Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  License-File: AUTHORS.md
25
- Requires-Dist: django >=2.2
26
- Requires-Dist: django-treebeard >=4.5.1
27
- Requires-Dist: faker >=15.3.3
28
- Requires-Dist: markdown >=3.4.1
29
- Requires-Dist: ofxtools >=0.9.5
30
- Requires-Dist: pillow >=9.3.0
31
- Requires-Dist: python-dateutil >=2.8.2 ; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
32
- Requires-Dist: six >=1.16.0 ; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
33
- Requires-Dist: sqlparse >=0.4.3 ; python_version >= "3.5"
34
- Requires-Dist: asgiref >=3.5.2 ; python_version >= "3.7"
25
+ Requires-Dist: asgiref>=3.5.2; python_version >= "3.7"
26
+ Requires-Dist: django>=2.2
27
+ Requires-Dist: django-treebeard>=4.5.1
28
+ Requires-Dist: faker>=15.3.3
29
+ Requires-Dist: markdown>=3.4.1
30
+ Requires-Dist: ofxtools>=0.9.5
31
+ Requires-Dist: pillow>=9.3.0
32
+ Requires-Dist: python-dateutil>=2.8.2; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
33
+ Requires-Dist: six>=1.16.0; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
34
+ Requires-Dist: sqlparse>=0.4.3; python_version >= "3.5"
35
35
  Provides-Extra: dev
36
- Requires-Dist: sphinx ~=4.5.0 ; extra == 'dev'
37
- Requires-Dist: behave ~=1.2.6 ; extra == 'dev'
38
- Requires-Dist: pipenv-setup ; extra == 'dev'
39
- Requires-Dist: pylint ; extra == 'dev'
40
- Requires-Dist: furo ; extra == 'dev'
36
+ Requires-Dist: sphinx~=4.5.0; extra == "dev"
37
+ Requires-Dist: behave~=1.2.6; extra == "dev"
38
+ Requires-Dist: pipenv-setup; extra == "dev"
39
+ Requires-Dist: pylint; extra == "dev"
40
+ Requires-Dist: furo; extra == "dev"
41
41
 
42
42
  ![django ledger logo](https://us-east-1.linodeobjects.com/django-ledger/logo/django-ledger-logo@2x.png)
43
43
 
@@ -150,6 +150,33 @@ INSTALLED_APPS = [
150
150
  ]
151
151
  ```
152
152
 
153
+
154
+ * Add django_ledger settings to project settings.py file.
155
+
156
+ ```python
157
+ DJANGO_LEDGER_ACCOUNT_MODEL = 'django_ledger.AccountModel'
158
+ DJANGO_LEDGER_CHART_OF_ACCOUNTS_MODEL = 'django_ledger.ChartOfAccountModel'
159
+ DJANGO_LEDGER_TRANSACTION_MODEL = 'django_ledger.TransactionModel'
160
+ DJANGO_LEDGER_JOURNAL_ENTRY_MODEL = 'django_ledger.JournalEntryModel'
161
+ DJANGO_LEDGER_LEDGER_MODEL = 'django_ledger.LedgerModel'
162
+ DJANGO_LEDGER_ENTITY_MODEL = 'django_ledger.EntityModel'
163
+ DJANGO_LEDGER_ENTITY_STATE_MODEL = 'django_ledger.EntityStateModel'
164
+ DJANGO_LEDGER_ENTITY_UNIT_MODEL = 'django_ledger.EntityUnitModel'
165
+ DJANGO_LEDGER_ESTIMATE_MODEL = 'django_ledger.EstimateModel'
166
+ DJANGO_LEDGER_BILL_MODEL = 'django_ledger.BillModel'
167
+ DJANGO_LEDGER_INVOICE_MODEL = 'django_ledger.InvoiceModel'
168
+ DJANGO_LEDGER_PURCHASE_ORDER_MODEL = 'django_ledger.PurchaseOrderModel'
169
+ DJANGO_LEDGER_CUSTOMER_MODEL = 'django_ledger.CustomerModel'
170
+ DJANGO_LEDGER_VENDOR_MODEL = 'django_ledger.VendorModel'
171
+ DJANGO_LEDGER_BANK_ACCOUNT_MODEL = 'django_ledger.BankAccountModel'
172
+ DJANGO_LEDGER_CLOSING_ENTRY_MODEL = 'django_ledger.ClosingEntryModel'
173
+ DJANGO_LEDGER_UNIT_OF_MEASURE_MODEL = 'django_ledger.UnitOfMeasureModel'
174
+ DJANGO_LEDGER_ITEM_TRANSACTION_MODEL = 'django_ledger.ItemTransactionModel'
175
+ DJANGO_LEDGER_ITEM_MODEL = 'django_ledger.ItemModel'
176
+ DJANGO_LEDGER_STAGED_TRANSACTION_MODEL = 'django_ledger.StagedTransactionModel'
177
+ DJANGO_LEDGER_IMPORT_JOB_MODEL = 'django_ledger.ImportJobModel'
178
+ ```
179
+
153
180
  * Perform database migrations:
154
181
 
155
182
  ```shell
@@ -1,7 +1,7 @@
1
- django_ledger/__init__.py,sha256=EAHGrNvVngqu1bpTSZK7_BEJid8za1_RDT_7_O7k0to,380
1
+ django_ledger/__init__.py,sha256=pePovG3ZtcRqEYjxui6uo4umvQQC0lrvQMS29LnXb5Q,382
2
2
  django_ledger/apps.py,sha256=H-zEWUjKGakgSDSZmLIoXChZ2h6e0dth0ZO5SpoT-8U,163
3
3
  django_ledger/exceptions.py,sha256=rML8sQQ0Hq-DYMLZ76dfw2RYSAsXWUoyHuyC_yP9o1o,491
4
- django_ledger/settings.py,sha256=LX2QVtwm4YwAJrfN1VplJlQ310-NeIg-wpRz5QdFJTk,8906
4
+ django_ledger/settings.py,sha256=S5AwPEk8JvKMtU230VfP3q8tv6hxzgPd1FDGRD5zYpY,8747
5
5
  django_ledger/utils.py,sha256=eGEdrDRrnILIsk69FVN9pjX1VoDVc1nx_MfVAwiY5dg,3519
6
6
  django_ledger/admin/__init__.py,sha256=-1h4Qg9dfRq9g-EoDZAq96L8lcOoGlwJXNBsbqVIY7U,472
7
7
  django_ledger/admin/chart_of_accounts.py,sha256=tRQXsa5oi9behZc_A_aMsbDoT_wzxR2EvEF-aUuV0H8,3539
@@ -16,7 +16,7 @@ django_ledger/contrib/django_ledger_graphene/accounts/schema.py,sha256=2tewLRvAk
16
16
  django_ledger/contrib/django_ledger_graphene/auth/mutations.py,sha256=Z3t60CPesknVeZGJSszbiy_HWNci3yZnna9n1F-Nqvk,1871
17
17
  django_ledger/contrib/django_ledger_graphene/auth/schema.py,sha256=7yuTICsJz_z41sCyzkMhX1sv7Ly5QC_MMUKCsFEUAyQ,135
18
18
  django_ledger/contrib/django_ledger_graphene/bank_account/mutations.py,sha256=gF6tXRoDVfgntBiHYfeZEFTH5wyjNXwNKCLBxWg64l8,1923
19
- django_ledger/contrib/django_ledger_graphene/bank_account/schema.py,sha256=V2257bGl0OqRi5HW_1UmTNlhFXp6Mml_PGosJSJ0oDA,1277
19
+ django_ledger/contrib/django_ledger_graphene/bank_account/schema.py,sha256=oEYgKPOonIJZVzjytSHGoVJ2MHH6Xtp9dmtUXeEJ6-E,1278
20
20
  django_ledger/contrib/django_ledger_graphene/bill/mutations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  django_ledger/contrib/django_ledger_graphene/bill/schema.py,sha256=OlcJFnHXDfVE_3YD8vV0XXhGqd81kn5CZknxAU5VsxU,1186
22
22
  django_ledger/contrib/django_ledger_graphene/coa/mutations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -46,12 +46,12 @@ django_ledger/forms/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsT
46
46
  django_ledger/forms/account.py,sha256=1-L3-fy63sqz_pV1Wd0nxFsFzEW5WLKDAvjGv9aUN4M,5284
47
47
  django_ledger/forms/app_filters.py,sha256=fHmftiuR1Ei28LhGuu7LoxS4Q5pVjj1wiT0fF4GUcUI,2293
48
48
  django_ledger/forms/auth.py,sha256=HaJDEIRFoAHEAv-s_ZfTe0rZbhzIQ7GkKnaBX1qiAW4,736
49
- django_ledger/forms/bank_account.py,sha256=kCRZnhxN54MBBinRp_L0N5g7yUIOvIkXbJtuB8Cu2D4,4640
49
+ django_ledger/forms/bank_account.py,sha256=Ir6eQk4PSL7dii4mYGM895u6twrgvPm8vn3FCozSg8Q,4828
50
50
  django_ledger/forms/bill.py,sha256=vJbLZhHpolhzM0WKZdSAcuBnQAXDGGeKmY3RrswB-ZM,10813
51
51
  django_ledger/forms/chart_of_accounts.py,sha256=wymLQ8iLNPU_LgS79BOdMUapuLqoTvgqVdAyL1Pw0Ro,2414
52
52
  django_ledger/forms/closing_entry.py,sha256=AwEEhphjQ-D4pQ6lRk2zGSmMSMkoamIVICnUY8rgqKU,1494
53
53
  django_ledger/forms/customer.py,sha256=GrpREV8c3UsNhg5KzwNsofnuW5uv25Ue-Aa-pJeyXUc,2501
54
- django_ledger/forms/data_import.py,sha256=57iBUDBISSJAoE0Lj4UbloTCJrwDSTeCIpncGRZPITY,5677
54
+ django_ledger/forms/data_import.py,sha256=AMb8C867KZ6qxTHtGkpexj7VY1yehPJX0DE0-4pFIcA,6930
55
55
  django_ledger/forms/entity.py,sha256=b0QirmsFSnaM8YWDO4V6GQXfFgR_MLmdq27I2q2sGQ0,6880
56
56
  django_ledger/forms/estimate.py,sha256=0A30F4mosT4uvIde61lAWbPV4JePUQIX87VAcTtby3c,5180
57
57
  django_ledger/forms/feedback.py,sha256=WUT-kI4uT6q5aqEYaDYwyIFfhXpmtwMv6qf9BFSYsDo,1850
@@ -66,11 +66,11 @@ django_ledger/forms/utils.py,sha256=sgkwBZs15_rZ5NT7h-8Z7wi3-ItM1E1sqoVDo3NQ5Jc,
66
66
  django_ledger/forms/vendor.py,sha256=Nuh8MmSpz4ycMZwiVe--U9Ec6ezIsfACHDkhA2SyiZ4,2215
67
67
  django_ledger/io/__init__.py,sha256=8m5AoBRiG2ymrX0Y4LVjq0275i7I5Sk7YRa1BTzVofI,369
68
68
  django_ledger/io/io_context.py,sha256=xgykRoB6hVSN2q20f62j_4zbOeAHU5ZgbZaSwRaSkOU,4444
69
- django_ledger/io/io_core.py,sha256=uVNmwZVKazI_cVqm3qYe2gocACHNbDu1mknin7aV4mc,46990
70
- django_ledger/io/io_generator.py,sha256=JF4plsABUkCIrtI2X-YD7o5eNghRIgLUseNcBIGOj3U,34613
69
+ django_ledger/io/io_core.py,sha256=hsvRnkfP2gC19easYu8U_lbphcko75uATYcYgDdqgS4,86073
70
+ django_ledger/io/io_generator.py,sha256=IN_ZuMlPHXgoEffxA7PMN2fyTvWPJktzVR6yIaocsRs,34725
71
71
  django_ledger/io/io_library.py,sha256=CGZABR4P80VfIube4QEryNOi01llrPq0Gh-8vVbtZDY,22496
72
72
  django_ledger/io/io_middleware.py,sha256=vbWIBYA4V9nwoiEtB0W9pq19QIwPmaAyVJlo_1Gg2BY,20284
73
- django_ledger/io/ofx.py,sha256=tsggMXfAz9rslCTUcxlandPapcHXbGqLO9Diel5z_jE,1677
73
+ django_ledger/io/ofx.py,sha256=7QiceYFxekqvqWDlioeYKNCMACMXhFPl6au7yNQ7Kc8,2368
74
74
  django_ledger/io/ratios.py,sha256=dsuCv9-r73SMLv3OrxeoT5JebfRmrDsRKG_YzHggWFw,3542
75
75
  django_ledger/io/roles.py,sha256=Rht4MiZ3SS1_uqNTQGt48dLHJxHYdyvw-HEaniUTXz4,20436
76
76
  django_ledger/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -95,29 +95,31 @@ django_ledger/migrations/0016_remove_accountmodel_django_ledg_coa_mod_e19964_idx
95
95
  django_ledger/migrations/0017_alter_accountmodel_unique_together_and_more.py,sha256=8wFeqrVsCZFi16URzVMvZnCVankBcCmGyb8YfX85_a0,1289
96
96
  django_ledger/migrations/0018_transactionmodel_cleared_transactionmodel_reconciled_and_more.py,sha256=HrwS6Jxs_rgKQm3OeROQi1peEPSF7HtjbYKbTX0DT14,1284
97
97
  django_ledger/migrations/0019_alter_transactionmodel_amount_and_more.py,sha256=FFfEOrsqbL_MLYbWgwCtZNcvCepTxN2x8vS5D7NpcLQ,1367
98
+ django_ledger/migrations/0020_remove_bankaccountmodel_django_ledg_cash_ac_59a8af_idx_and_more.py,sha256=KFQExX3UVpeI9WlmRl2AZ9Q7k-24YBNf9ij4VU7tq_o,1741
99
+ django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py,sha256=Q_qkBIIFJwnJRUXPDCTVn-YptNQ1-uj4h8tK6H-mumA,1151
98
100
  django_ledger/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
101
  django_ledger/models/__init__.py,sha256=OesBx4My9GnqU1xB5WXuuGLOnmzgxEJxI-WWxRxi658,807
100
102
  django_ledger/models/accounts.py,sha256=PR0s0oJntnhFaJsiUuKY50NJWyXaAXu1WgTCso1oovI,34969
101
- django_ledger/models/bank_account.py,sha256=YQSarOR3yahHYv_JIBPgz6SJE9gj079uNmNiiAjXiLY,7682
103
+ django_ledger/models/bank_account.py,sha256=62WSTc2Oiftbny-pSKNOsF767WOjYbW00YmTLDK7MZQ,7832
102
104
  django_ledger/models/bill.py,sha256=iMdON5tLOcolkm2c9XTJzXGWqqxyLZOYB2MkPd__9EY,65047
103
105
  django_ledger/models/chart_of_accounts.py,sha256=t7E4rHToyeM2IV5JSQJBYE0FkDFG_zzuzhyUrxorT8Q,30368
104
106
  django_ledger/models/closing_entry.py,sha256=b0EwuYFdGH1GbwWdT_rtQqHSQO8Je62BUJHQLNmeJ8w,17914
105
107
  django_ledger/models/coa_default.py,sha256=CK4vOZ73QePciZUL93wigDXpxKamdXAKBaQR7r-G7tk,27482
106
- django_ledger/models/customer.py,sha256=EeynuiYFx7ME7iCtUzvaURUnY4yRqKA-9hrSiv6Bs0Y,11806
107
- django_ledger/models/data_import.py,sha256=3NHL5mrSLXSG-NDn8EK8KCJiX35Z8gRWExc4fZcQhz8,20496
108
- django_ledger/models/entity.py,sha256=XXvpD-AMcNQP6k6JlHy9dAHUfIQQesvaRol9sJCBais,123770
108
+ django_ledger/models/customer.py,sha256=YX7IQYa_6hx5GobDLxq30aPsscXdEA0kMthM_YPC9Jw,11387
109
+ django_ledger/models/data_import.py,sha256=lD2qRgvj8T0a-ONUHHqx8wuObKvtB7jc07csQPIwZAc,47688
110
+ django_ledger/models/entity.py,sha256=y4pbPM6c0-AzdNJ_jxP-GrvufeWcPPDDNvYW9qGV1bM,124425
109
111
  django_ledger/models/estimate.py,sha256=EPkGMJwn3bkyYYeVHOfyLeWqtlJIyjF8fUc36dLz_18,58107
110
112
  django_ledger/models/invoice.py,sha256=me_3JunnYYQYNhaPeytK9Ts4fgwBPj6vU-w7V3xV0RM,63272
111
113
  django_ledger/models/items.py,sha256=-l_ibAiJTu4dO7TZUdGD4sq524Ew8oIwhq_hiHVUDeY,55251
112
- django_ledger/models/journal_entry.py,sha256=ULYRhqIbqyuqWMbcRv0u1hUeFnjETllmtZbkfBx06-E,66755
114
+ django_ledger/models/journal_entry.py,sha256=XLht0Q6irj-aObcJRawSgBmUg77MdgR4PZlogOCvI5c,66941
113
115
  django_ledger/models/ledger.py,sha256=3C_q3xj06XtZyHDEo4BwMFHyTeMfPeRFXqodyxkG9KA,26315
114
- django_ledger/models/mixins.py,sha256=hsM5XC6LzSYHqv0hg1yxia8qirm8pZGafGPNmGOrGEg,52056
116
+ django_ledger/models/mixins.py,sha256=NKBbtARYi9Z3sWuZajYNQB7Tsx4VEAN5cL-VaVZgoAU,52575
115
117
  django_ledger/models/purchase_order.py,sha256=YFbtRGO0FW4nOnKy2OAQoI6pdA-kt3IhqjpyxKxNvwg,44197
116
118
  django_ledger/models/signals.py,sha256=3cm_8--Jz-Jb0fPgrVmm5xx_jKFARV6_A29VDjqHeIw,1563
117
119
  django_ledger/models/transactions.py,sha256=P8i6ngy5Ywb6E73lPxOSpkaC4hCzLo-gEvQzL64g0Es,23214
118
120
  django_ledger/models/unit.py,sha256=QbQYXqq5KxddzkOausWVyxgtBeXkU3ebYIDnI-YH4FY,8429
119
121
  django_ledger/models/utils.py,sha256=Weta2Cwsn4wRqvxMecIuD7aHYiiXBwUeMqpUDK4CokE,8360
120
- django_ledger/models/vendor.py,sha256=74SIqtnRsEMXhjFwEHSWq5yF0vlSaytiR31Rv5mUCxw,11361
122
+ django_ledger/models/vendor.py,sha256=TyQdiH9GHQlGQleyKh1IOZyvroC31BOG92qiJbMotlw,11371
121
123
  django_ledger/models/schemas/__init__.py,sha256=8Tvw33tVJtCvxoXje2lrs9C1bsP_iuGcVi1JqzdPUao,157
122
124
  django_ledger/models/schemas/digest.py,sha256=ME_dJ4g2p3dQ97Skh_RTZMwuNLmwTi19BdLM1G6tyAo,1077
123
125
  django_ledger/models/schemas/net_payable.py,sha256=2FcfLaaJySjZ3Yk_IMu8SxYWNO_sngEtbuFCXInrQUU,958
@@ -196,7 +198,7 @@ django_ledger/templates/django_ledger/auth/login.html,sha256=UYV2rxjEn9cXBbG6Ww9
196
198
  django_ledger/templates/django_ledger/bank_account/bank_account_create.html,sha256=zoCvV-_2aBAXCnCfHTFI18Pn7hbEcOkgtcgYOQ2IJIg,1258
197
199
  django_ledger/templates/django_ledger/bank_account/bank_account_list.html,sha256=FuwnbPZ8J6paQw02ddSYEpKUy97SKP-00mFDPMghgJI,701
198
200
  django_ledger/templates/django_ledger/bank_account/bank_account_update.html,sha256=rTBdMtCYjihY4Ee0qg609gdOpHcMX4O5F7Gp4LH33yw,1524
199
- django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html,sha256=dCqqUmQ49jRvllj0A8DzQnD6L38DaD8SQ2FAchUOky8,3476
201
+ django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html,sha256=kFwA7QZpI-KOKcBRqsuuq-JtQgF3TQ-qEHNt6rm5SjE,3472
200
202
  django_ledger/templates/django_ledger/bills/bill_create.html,sha256=fUskaN-ORsj_WhIYxr1cUvgr4j9b7rgC8nBR9d2TI0Y,2106
201
203
  django_ledger/templates/django_ledger/bills/bill_delete.html,sha256=IHqXETgrbmMWnrymJv7iAAcDcBvRV9tFgoqHWAUKlQE,1606
202
204
  django_ledger/templates/django_ledger/bills/bill_detail.html,sha256=FvssQo6Y_3jQXxieCFaXySSGch4IbUDo5ONUjFB8HFw,11760
@@ -236,13 +238,13 @@ django_ledger/templates/django_ledger/customer/customer_update.html,sha256=z1rzw
236
238
  django_ledger/templates/django_ledger/customer/includes/card_customer.html,sha256=z_R_NtbYScvrcuqF-uZggTuPasVS-RXN-4ZHWUVaFxQ,1306
237
239
  django_ledger/templates/django_ledger/customer/tags/customer_table.html,sha256=gd7_NsxaZk_iG8siYpZWfwyjIiY2HPv6FnJ5kExBOyY,3411
238
240
  django_ledger/templates/django_ledger/data_import/data_import_job_list.html,sha256=tFb1nX9Ag6g6RhIISFoqC6J7pjKQTOasEUQ5YLtA3SE,592
239
- django_ledger/templates/django_ledger/data_import/data_import_job_txs.html,sha256=LFrjzDNz0T32EjLAQx7RaGCwBURIrPfsSKQvS1V5df0,946
240
- django_ledger/templates/django_ledger/data_import/import_job_create.html,sha256=d3cr04L6I8E4XFBfjSCSC4Z-_OxUOa_6b5Idp6XSWvg,2873
241
+ django_ledger/templates/django_ledger/data_import/data_import_job_txs.html,sha256=oxaQnblI7JsBQs8I4U5RK00S3_ONvEPl3UV-wDA3a-M,943
242
+ django_ledger/templates/django_ledger/data_import/import_job_create.html,sha256=RpCtH7J2lGujC3kTrYDzWf3hw8Z-0G6LjltTbtRK0JY,3205
241
243
  django_ledger/templates/django_ledger/data_import/import_job_delete.html,sha256=qgobtrI-WNYFqhn8de05mcD-FQ0UGSLT6ZoaBlblXAU,944
242
244
  django_ledger/templates/django_ledger/data_import/import_job_update.html,sha256=ZDy391RSOXUq3keUs48QrVrI_ZicdNvDeLT_JacH17M,887
243
245
  django_ledger/templates/django_ledger/data_import/tags/data_import_job_list_table.html,sha256=y_U1xixMC9YPR4aq6F_cNpyb-dZ5qcVh9D6HSN9Xpps,2919
244
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html,sha256=XSmY4PAnWaeLOzamwMrlZz1koJWmbQwptGDiqTGO9rg,1624
245
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=f-RJr7uw4v_s3XqMA9T7n0JDeIL0s-xdbdLmM1grvCk,3835
246
+ django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html,sha256=84jIGQG5s_mC8vEYfHu3I1fCkd_wslJ2ScwDO20FENM,1641
247
+ django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=z0wTLneFb9BqYohhD2W6loRc9VpAmuFO93Gy2sFMyPo,3916
246
248
  django_ledger/templates/django_ledger/entity/entitiy_list.html,sha256=onM9uaWTm2oQ00OPIH5ki2FEfgjx7_EIOT8akuAhQM4,1507
247
249
  django_ledger/templates/django_ledger/entity/entity_create.html,sha256=TDayIv2qno7cT3xTCapKV6EZKcTTNfIMxXJFQmHHyz0,1387
248
250
  django_ledger/templates/django_ledger/entity/entity_dashboard.html,sha256=krofkugevRNaRm-us184gbQph2h8xpV5u8Ww0TVxmho,5365
@@ -344,7 +346,7 @@ django_ledger/templates/django_ledger/vendor/vendor_update.html,sha256=4kBUlGgrg
344
346
  django_ledger/templates/django_ledger/vendor/includes/card_vendor.html,sha256=oCXyuqyF7CnJnDQdK0G0jdYLqtPWYSzwlv8oddyGJg8,1290
345
347
  django_ledger/templates/django_ledger/vendor/tags/vendor_table.html,sha256=YC-3T5x4oua3VBg1q690CRzoogKL8qFgQRp5jTKLFgk,3400
346
348
  django_ledger/templatetags/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
347
- django_ledger/templatetags/django_ledger.py,sha256=_HF25wnxLzTKZpOW_9DZDoy6qeUtRvVISgjVe71fntk,31300
349
+ django_ledger/templatetags/django_ledger.py,sha256=KS6Tb5z7IcRW9ddCDfrHeSFz9in3hV2sseqrq3bL9m0,31251
348
350
  django_ledger/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
349
351
  django_ledger/tests/base.py,sha256=ddsMTzv0-17JD1QRobpTN2CVKL1v0lNplo78JaB36oQ,10842
350
352
  django_ledger/tests/test_accounts.py,sha256=bASqtQjp6twya8JrNkBXVMsOnK8E8Hl7B0J6RfDJGB0,6345
@@ -387,12 +389,12 @@ django_ledger/urls/vendor.py,sha256=ODHpAwe5lomluj8ZCqbMtugTeeRsv0Yo9SqkZEmfYaw,
387
389
  django_ledger/views/__init__.py,sha256=fY9eBoPkx50p-kSalskd4QW1tHm3e64WpwOFuJzn4Xo,1178
388
390
  django_ledger/views/account.py,sha256=mxFmBu9RsFfd_lQK1JJevmAVHMEW4SBeAJ0prZNK57E,9083
389
391
  django_ledger/views/auth.py,sha256=I8Mv_aAfW-8Z5VYPOX7P3IUO4Fp5jJPkSuu1ZSVpWtI,777
390
- django_ledger/views/bank_account.py,sha256=9eeo2Y71PGt0yTOK1qIojV7024AZIQybynWAsw7Nd9Q,5024
392
+ django_ledger/views/bank_account.py,sha256=MbiVurJTNK-UsDPn17-ai4G8sE3qIMrdmXaWPX-J8n8,5025
391
393
  django_ledger/views/bill.py,sha256=5tNb3pyh8GQM4hjV0FXqCXrEQF2LwpEWLkOkpknEdjA,22239
392
394
  django_ledger/views/chart_of_accounts.py,sha256=wMdnXRNWzdPgxl1YeHbdAQXbCBU2VkmxVxxtUuk9NAQ,5485
393
395
  django_ledger/views/closing_entry.py,sha256=_6y-0QjNPYBD-E3KlFXi8SavDtBXA9K2qgBa_EL6VbA,8316
394
396
  django_ledger/views/customer.py,sha256=FYnwhRx6JXE4bsjXQqFp8b9H8a4m7zv6ohoSj1OkZD8,3678
395
- django_ledger/views/data_import.py,sha256=z8biQCHGor2Fq9LIlVhI31_1gBmpnNV05kExzrEyRV0,11956
397
+ django_ledger/views/data_import.py,sha256=bRCCxfFJCzmthMkDcELDI_JfkgGjchTATrNnojv9p6c,8179
396
398
  django_ledger/views/djl_api.py,sha256=6ADX9fBK8DroTeg8UIeCf2x4wt6-AF5xLlDQnqXBfsM,4411
397
399
  django_ledger/views/entity.py,sha256=1K_PswTQKuTwPIMJ-l0m3EM3u6Q1rvTnYUbSuku4UO4,9474
398
400
  django_ledger/views/estimate.py,sha256=NjcgiaBuwC_duCwvrAJkthZvPqSQoonH32T-f3DZlDM,12772
@@ -409,9 +411,9 @@ django_ledger/views/purchase_order.py,sha256=CyftKrQWV1SBz7W0CvZOfZ81OPEiBHPD7b9
409
411
  django_ledger/views/transactions.py,sha256=3ijtJzdLPFkqG7OYpe-7N4QVjCyR2yl5ht_9RyfquBA,212
410
412
  django_ledger/views/unit.py,sha256=MF9tEeWCOt5XrtK-UFmHFisyBM-h3WzgL6v8IX2Ynbk,10446
411
413
  django_ledger/views/vendor.py,sha256=qlkd3gsjZ6RYuPrRYDVZp-Im65calM9ed3KxsaT4cxw,3467
412
- django_ledger-0.7.4.dist-info/AUTHORS.md,sha256=ShPwf-qniJkbjRzX5_lqhmgoLMEYMSHSwKPXHZtWmyk,824
413
- django_ledger-0.7.4.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
414
- django_ledger-0.7.4.dist-info/METADATA,sha256=mJxhUJGH3alZN_V9qbRTEOMOtPxOTBUzSG4SUN7qKno,8771
415
- django_ledger-0.7.4.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
416
- django_ledger-0.7.4.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
417
- django_ledger-0.7.4.dist-info/RECORD,,
414
+ django_ledger-0.7.5.1.dist-info/AUTHORS.md,sha256=ShPwf-qniJkbjRzX5_lqhmgoLMEYMSHSwKPXHZtWmyk,824
415
+ django_ledger-0.7.5.1.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
416
+ django_ledger-0.7.5.1.dist-info/METADATA,sha256=u2WHu7lY-JpDFNU_Jci8_R86b2ljML87qdanttmUOqg,10194
417
+ django_ledger-0.7.5.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
418
+ django_ledger-0.7.5.1.dist-info/top_level.txt,sha256=g6f6tIwlFvhkDfmttGdJyDja8Scm3-jUhZ0dL-J9h_g,52
419
+ django_ledger-0.7.5.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,4 +1,5 @@
1
1
  assets
2
+ dev_notebooks
2
3
  django_ledger
3
4
  docs
4
5
  screenshots