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.
- django_ledger/__init__.py +1 -1
- django_ledger/contrib/django_ledger_graphene/bank_account/schema.py +1 -1
- django_ledger/forms/bank_account.py +16 -12
- django_ledger/forms/data_import.py +70 -33
- django_ledger/io/io_core.py +945 -127
- django_ledger/io/io_generator.py +7 -3
- django_ledger/io/ofx.py +37 -16
- django_ledger/migrations/0020_remove_bankaccountmodel_django_ledg_cash_ac_59a8af_idx_and_more.py +44 -0
- django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py +33 -0
- django_ledger/models/bank_account.py +14 -11
- django_ledger/models/customer.py +3 -13
- django_ledger/models/data_import.py +690 -35
- django_ledger/models/entity.py +39 -24
- django_ledger/models/journal_entry.py +18 -8
- django_ledger/models/mixins.py +17 -3
- django_ledger/models/vendor.py +2 -2
- django_ledger/settings.py +18 -22
- django_ledger/templates/django_ledger/bank_account/tags/bank_accounts_table.html +2 -2
- django_ledger/templates/django_ledger/data_import/data_import_job_txs.html +1 -1
- django_ledger/templates/django_ledger/data_import/import_job_create.html +11 -2
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +1 -1
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +5 -2
- django_ledger/templatetags/django_ledger.py +12 -12
- django_ledger/views/bank_account.py +1 -1
- django_ledger/views/data_import.py +60 -134
- {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/METADATA +44 -17
- {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/RECORD +31 -29
- {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/WHEEL +1 -1
- {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/top_level.txt +1 -0
- {django_ledger-0.7.4.dist-info → django_ledger-0.7.5.1.dist-info}/AUTHORS.md +0 -0
- {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
|
|
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
|
-
'
|
|
37
|
-
'
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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(
|
|
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-
|
|
110
|
+
viewname='django_ledger:data-import-jobs-list',
|
|
167
111
|
kwargs={
|
|
168
|
-
'entity_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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
-
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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
|
-
|
|
214
|
+
|
|
215
|
+
context = self.get_context_data(**kwargs)
|
|
216
|
+
return self.render_to_response(context)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.7.
|
|
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:
|
|
26
|
-
Requires-Dist: django
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist:
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
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
|
|
37
|
-
Requires-Dist: behave
|
|
38
|
-
Requires-Dist: pipenv-setup
|
|
39
|
-
Requires-Dist: pylint
|
|
40
|
-
Requires-Dist: furo
|
|
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
|

|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
70
|
-
django_ledger/io/io_generator.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
107
|
-
django_ledger/models/data_import.py,sha256=
|
|
108
|
-
django_ledger/models/entity.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
240
|
-
django_ledger/templates/django_ledger/data_import/import_job_create.html,sha256=
|
|
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=
|
|
245
|
-
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
413
|
-
django_ledger-0.7.
|
|
414
|
-
django_ledger-0.7.
|
|
415
|
-
django_ledger-0.7.
|
|
416
|
-
django_ledger-0.7.
|
|
417
|
-
django_ledger-0.7.
|
|
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,,
|
|
File without changes
|
|
File without changes
|