django-ledger 0.5.6.3__py3-none-any.whl → 0.5.6.5__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 (33) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/admin/coa.py +3 -3
  3. django_ledger/admin/entity.py +14 -0
  4. django_ledger/forms/account.py +14 -5
  5. django_ledger/forms/coa.py +1 -6
  6. django_ledger/io/roles.py +25 -9
  7. django_ledger/migrations/0015_remove_chartofaccountmodel_locked_and_more.py +22 -0
  8. django_ledger/models/accounts.py +9 -9
  9. django_ledger/models/coa.py +261 -50
  10. django_ledger/models/entity.py +43 -28
  11. django_ledger/templates/django_ledger/account/account_create.html +17 -11
  12. django_ledger/templates/django_ledger/account/account_list.html +12 -9
  13. django_ledger/templates/django_ledger/account/account_update.html +18 -16
  14. django_ledger/templates/django_ledger/account/tags/accounts_table.html +97 -93
  15. django_ledger/templates/django_ledger/chart_of_accounts/coa_list.html +17 -0
  16. django_ledger/templates/django_ledger/{code_of_accounts → chart_of_accounts}/coa_update.html +1 -4
  17. django_ledger/templates/django_ledger/chart_of_accounts/includes/coa_card.html +74 -0
  18. django_ledger/templates/django_ledger/invoice/invoice_list.html +91 -94
  19. django_ledger/templatetags/django_ledger.py +1 -1
  20. django_ledger/tests/base.py +23 -1
  21. django_ledger/tests/test_accounts.py +16 -0
  22. django_ledger/tests/test_chart_of_accounts.py +46 -0
  23. django_ledger/urls/account.py +18 -3
  24. django_ledger/urls/chart_of_accounts.py +21 -1
  25. django_ledger/views/account.py +59 -10
  26. django_ledger/views/coa.py +83 -9
  27. django_ledger/views/mixins.py +10 -5
  28. {django_ledger-0.5.6.3.dist-info → django_ledger-0.5.6.5.dist-info}/METADATA +1 -1
  29. {django_ledger-0.5.6.3.dist-info → django_ledger-0.5.6.5.dist-info}/RECORD +33 -28
  30. {django_ledger-0.5.6.3.dist-info → django_ledger-0.5.6.5.dist-info}/AUTHORS.md +0 -0
  31. {django_ledger-0.5.6.3.dist-info → django_ledger-0.5.6.5.dist-info}/LICENSE +0 -0
  32. {django_ledger-0.5.6.3.dist-info → django_ledger-0.5.6.5.dist-info}/WHEEL +0 -0
  33. {django_ledger-0.5.6.3.dist-info → django_ledger-0.5.6.5.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,46 @@
1
+ from django_ledger.models import EntityModelValidationError, ChartOfAccountModel
2
+ from django_ledger.tests.base import DjangoLedgerBaseTest
3
+
4
+
5
+ class ChartOfAccountsTests(DjangoLedgerBaseTest):
6
+
7
+ def test_no_default_coa(self):
8
+ entity_model = self.create_entity_model()
9
+ self.assertFalse(entity_model.has_default_coa(), msg='New entities do not had default coa')
10
+
11
+ with self.assertRaises(EntityModelValidationError, msg='New entities do not have default coa'):
12
+ entity_model.get_default_coa()
13
+
14
+ self.assertEqual(entity_model.get_default_coa(raise_exception=False), None,
15
+ msg='No exception should be raised when raise_exception is False')
16
+
17
+ def test_set_default_coa(self):
18
+ entity_model = self.create_entity_model()
19
+ coa_model = entity_model.create_chart_of_accounts(coa_name='Now CoA For Testing', assign_as_default=False)
20
+ self.assertTrue(isinstance(coa_model, ChartOfAccountModel))
21
+ self.assertFalse(entity_model.has_default_coa())
22
+
23
+ def test_create_coa(self):
24
+ entity_model = self.create_entity_model()
25
+ coa_model = entity_model.create_chart_of_accounts(coa_name='Now CoA For Testing', assign_as_default=False)
26
+
27
+ account_model_qs = coa_model.accountmodel_set.all()
28
+
29
+ account_count = account_model_qs.count()
30
+ self.assertTrue(account_count, 7)
31
+
32
+ ROOT_ACCOUNT_CODES = [
33
+ '00000000', # root_account
34
+ '01000000', # asset account root
35
+ '02000000', # liability accounts root
36
+ '03000000', # capital accounts root
37
+ '04000000', # income accounts root
38
+ '05000000', # cogs accounts root
39
+ '06000000', # expenses accounts root
40
+ ]
41
+
42
+ for account in account_model_qs:
43
+ self.assertTrue(account.code in ROOT_ACCOUNT_CODES)
44
+
45
+ # todo: cannot transact on root account
46
+ # todo: validate parent/child relationship...
@@ -3,15 +3,30 @@ from django.urls import path
3
3
  from django_ledger import views
4
4
 
5
5
  urlpatterns = [
6
+
7
+ # NO COA SLUG USES DEFAULT COA....
8
+ path('<slug:entity_slug>/create/',
9
+ views.AccountModelCreateView.as_view(),
10
+ name='account-create'),
6
11
  path('<slug:entity_slug>/list/',
7
12
  views.AccountModelListView.as_view(),
8
13
  name='account-list'),
9
14
  path('<slug:entity_slug>/list/active/',
10
15
  views.AccountModelListView.as_view(active_only=True),
11
16
  name='account-list-active'),
12
- path('<slug:entity_slug>/create/',
17
+
18
+ # EXPLICIT COA...
19
+ path('<slug:entity_slug>/<slug:coa_slug>/create/',
13
20
  views.AccountModelCreateView.as_view(),
14
- name='account-create'),
21
+ name='account-create-coa'),
22
+ path('<slug:entity_slug>/<slug:coa_slug>/list/',
23
+ views.AccountModelListView.as_view(),
24
+ name='account-list-coa'),
25
+ path('<slug:entity_slug>/<slug:coa_slug>/list/active/',
26
+ views.AccountModelListView.as_view(active_only=True),
27
+ name='account-list-active-coa'),
28
+
29
+ # Account Transaction Detail....
15
30
  path('<slug:entity_slug>/update/<uuid:account_pk>/',
16
31
  views.AccountModelUpdateView.as_view(),
17
32
  name='account-update'),
@@ -31,7 +46,7 @@ urlpatterns = [
31
46
  views.AccountModelDateDetailView.as_view(),
32
47
  name='account-detail-date'),
33
48
 
34
- # Actions...
49
+ # Account Actions...
35
50
  path('<slug:entity_slug>/action/<uuid:account_pk>/activate/',
36
51
  views.AccountModelModelActionView.as_view(action_name='activate'),
37
52
  name='account-action-activate'),
@@ -3,5 +3,25 @@ from django.urls import path
3
3
  from django_ledger import views
4
4
 
5
5
  urlpatterns = [
6
- path('<slug:entity_slug>/<slug:coa_slug>/update/', views.ChartOfAccountsUpdateView.as_view(), name='coa-update'),
6
+ path('<slug:entity_slug>/list/',
7
+ views.ChartOfAccountModelListView.as_view(),
8
+ name='coa-list'),
9
+ path('<slug:entity_slug>/detail/<slug:coa_slug>/',
10
+ views.ChartOfAccountModelListView.as_view(),
11
+ name='coa-detail'),
12
+ path('<slug:entity_slug>/update/<slug:coa_slug>/',
13
+ views.ChartOfAccountModelUpdateView.as_view(),
14
+ name='coa-update'),
15
+
16
+ # ACTIONS....
17
+ path('<slug:entity_slug>/action/<slug:coa_slug>/mark-as-default/',
18
+ views.CharOfAccountModelActionView.as_view(action_name='mark_as_default'),
19
+ name='coa-action-mark-as-default'),
20
+ path('<slug:entity_slug>/action/<slug:coa_slug>/mark-as-active/',
21
+ views.CharOfAccountModelActionView.as_view(action_name='mark_as_active'),
22
+ name='coa-action-mark-as-active'),
23
+ path('<slug:entity_slug>/action/<slug:coa_slug>/mark-as-inactive/',
24
+ views.CharOfAccountModelActionView.as_view(action_name='mark_as_inactive'),
25
+ name='coa-action-mark-as-inactive'),
26
+
7
27
  ]
@@ -17,7 +17,7 @@ from django.views.generic.detail import SingleObjectMixin
17
17
 
18
18
  from django_ledger.forms.account import AccountModelUpdateForm, AccountModelCreateForm
19
19
  from django_ledger.io.io_core import get_localdate
20
- from django_ledger.models import lazy_loader
20
+ from django_ledger.models import ChartOfAccountModel
21
21
  from django_ledger.models.accounts import AccountModel
22
22
  from django_ledger.views.mixins import (
23
23
  YearlyReportMixIn, MonthlyReportMixIn, QuarterlyReportMixIn, DjangoLedgerSecurityMixIn,
@@ -27,16 +27,53 @@ from django_ledger.views.mixins import (
27
27
 
28
28
  class BaseAccountModelViewQuerySetMixIn:
29
29
  queryset = None
30
+ coa_model = None
31
+
32
+ def get_coa_model(self) -> ChartOfAccountModel:
33
+ if self.coa_model is None:
34
+ coa_slug = self.kwargs.get('coa_slug')
35
+ if coa_slug:
36
+ coa_model_qs = self.AUTHORIZED_ENTITY_MODEL.chartofaccountmodel_set.all().active()
37
+ coa_model = get_object_or_404(coa_model_qs, slug__exact=coa_slug)
38
+ else:
39
+ coa_model = self.AUTHORIZED_ENTITY_MODEL.default_coa
40
+ self.coa_model = coa_model
41
+ return self.coa_model
30
42
 
31
43
  def get_queryset(self):
32
44
  if self.queryset is None:
33
- self.queryset = AccountModel.objects.for_entity(
45
+ qs = AccountModel.objects.for_entity(
34
46
  entity_slug=self.kwargs['entity_slug'],
35
47
  user_model=self.request.user,
36
- ).select_related('coa_model', 'coa_model__entity').order_by(
48
+ ).select_related(
49
+ 'coa_model',
50
+ 'coa_model__entity'
51
+ ).order_by(
37
52
  'coa_model', 'role', 'code').not_coa_root()
53
+
54
+ coa_slug = self.kwargs.get('coa_slug')
55
+ account_pk = self.kwargs.get('account_pk')
56
+
57
+ if coa_slug:
58
+ qs = qs.filter(coa_model__slug__exact=coa_slug)
59
+ elif account_pk:
60
+ qs = qs.filter(uuid__exact=account_pk)
61
+ else:
62
+ qs = qs.filter(coa_model__slug__exact=self.AUTHORIZED_ENTITY_MODEL.default_coa.slug)
63
+
64
+ self.queryset = qs
38
65
  return super().get_queryset()
39
66
 
67
+ def get_context_data(self, *args, **kwargs):
68
+ context = super().get_context_data(*args, **kwargs)
69
+ entity_model = self.get_authorized_entity_instance()
70
+ if self.kwargs.get('coa_slug'):
71
+ coa_model_qs = entity_model.chartofaccountmodel_set.all()
72
+ context['coa_model'] = get_object_or_404(coa_model_qs, slug__exact=self.kwargs['coa_slug'])
73
+ else:
74
+ context['coa_model'] = entity_model.default_coa
75
+ return context
76
+
40
77
 
41
78
  # Account Views ----
42
79
  class AccountModelListView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuerySetMixIn, ListView):
@@ -75,7 +112,8 @@ class AccountModelUpdateView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuer
75
112
  # Set here because user_model is needed to instantiate an instance of MoveNodeForm (AccountModelUpdateForm)
76
113
  account_model.USER_MODEL = self.request.user
77
114
  return AccountModelUpdateForm(
78
- entity_slug=self.kwargs['entity_slug'],
115
+ entity_model=self.AUTHORIZED_ENTITY_MODEL,
116
+ coa_model=self.get_coa_model(),
79
117
  user_model=self.request.user,
80
118
  **self.get_form_kwargs()
81
119
  )
@@ -101,25 +139,36 @@ class AccountModelCreateView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuer
101
139
  def get_form(self, form_class=None):
102
140
  return AccountModelCreateForm(
103
141
  user_model=self.request.user,
104
- entity_slug=self.kwargs['entity_slug'],
142
+ entity_model=self.AUTHORIZED_ENTITY_MODEL,
143
+ coa_model=self.get_coa_model(),
105
144
  **self.get_form_kwargs()
106
145
  )
107
146
 
147
+ def get_context_data(self, *args, **kwargs):
148
+ context = super().get_context_data(*args, **kwargs)
149
+ context['header_subtitle'] = f'CoA: {context["coa_model"].name}'
150
+ return context
151
+
108
152
  def form_valid(self, form):
109
- EntityModel = lazy_loader.get_entity_model()
110
- entity_model_qs = EntityModel.objects.for_user(user_model=self.request.user).select_related('default_coa')
111
- entity_model: EntityModel = get_object_or_404(entity_model_qs, slug__exact=self.kwargs['entity_slug'])
153
+ entity_model = self.AUTHORIZED_ENTITY_MODEL
112
154
  account_model: AccountModel = form.save(commit=False)
113
155
 
114
156
  if not entity_model.has_default_coa():
115
157
  entity_model.create_chart_of_accounts(assign_as_default=True, commit=True)
116
158
 
117
- coa_model = entity_model.default_coa
118
- coa_model.create_account(account_model=account_model)
159
+ coa_model = self.get_coa_model()
160
+ coa_model.allocate_account(account_model=account_model)
119
161
  return HttpResponseRedirect(self.get_success_url())
120
162
 
121
163
  def get_success_url(self):
122
164
  entity_slug = self.kwargs.get('entity_slug')
165
+ coa_slug = self.kwargs.get('coa_slug')
166
+ if coa_slug:
167
+ return reverse('django_ledger:account-list-coa',
168
+ kwargs={
169
+ 'entity_slug': entity_slug,
170
+ 'coa_slug': coa_slug
171
+ })
123
172
  return reverse('django_ledger:account-list',
124
173
  kwargs={
125
174
  'entity_slug': entity_slug,
@@ -5,32 +5,70 @@ 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
+ from django.contrib import messages
9
+ from django.core.exceptions import ImproperlyConfigured, ValidationError
10
+ from django.db.models import Count, Q
9
11
  from django.urls import reverse
10
12
  from django.utils.translation import gettext_lazy as _
11
- from django.views.generic import UpdateView
13
+ from django.views.generic import UpdateView, ListView, RedirectView
14
+ from django.views.generic.detail import SingleObjectMixin
12
15
 
13
16
  from django_ledger.forms.coa import ChartOfAccountsModelUpdateForm
14
17
  from django_ledger.models.coa import ChartOfAccountModel
15
18
  from django_ledger.views.mixins import DjangoLedgerSecurityMixIn
16
19
 
17
20
 
18
- class ChartOfAccountsModelModelViewQuerySetMixIn:
21
+ class ChartOfAccountModelModelBaseViewMixIn(DjangoLedgerSecurityMixIn):
19
22
  queryset = None
20
23
 
21
24
  def get_queryset(self):
22
25
  if self.queryset is None:
23
- self.queryset = ChartOfAccountModel.objects.for_entity(
24
- entity_slug=self.kwargs['entity_slug'],
25
- user_model=self.request.user,
26
- ).select_related('entity')
26
+ entity_model = self.get_authorized_entity_instance()
27
+ self.queryset = entity_model.chartofaccountmodel_set.all().select_related(
28
+ 'entity').order_by('-updated')
27
29
  return super().get_queryset()
28
30
 
29
31
 
30
- class ChartOfAccountsUpdateView(DjangoLedgerSecurityMixIn, ChartOfAccountsModelModelViewQuerySetMixIn, UpdateView):
32
+ class ChartOfAccountModelListView(ChartOfAccountModelModelBaseViewMixIn, ListView):
33
+ template_name = 'django_ledger/chart_of_accounts/coa_list.html'
34
+ extra_context = {
35
+ 'page_title': _('Chart of Account List'),
36
+ 'header_title': _('Chart of Account List'),
37
+ }
38
+ context_object_name = 'coa_list'
39
+
40
+ def get_context_data(self, *, object_list=None, **kwargs):
41
+ context = super().get_context_data(object_list=None, **kwargs)
42
+ context['header_subtitle'] = self.AUTHORIZED_ENTITY_MODEL.name
43
+ context['header_subtitle_icon'] = 'gravity-ui:hierarchy'
44
+ return context
45
+
46
+ def get_queryset(self):
47
+ qs = super().get_queryset()
48
+ return qs.annotate(
49
+ accountmodel_total__count=Count(
50
+ 'accountmodel',
51
+ # excludes coa root accounts...
52
+ filter=Q(accountmodel__depth__gt=2)
53
+ ),
54
+ accountmodel_locked__count=Count(
55
+ 'accountmodel',
56
+ # excludes coa root accounts...
57
+ filter=Q(accountmodel__depth__gt=2) & Q(accountmodel__locked=True)
58
+ ),
59
+ accountmodel_active__count=Count(
60
+ 'accountmodel',
61
+ # excludes coa root accounts...
62
+ filter=Q(accountmodel__depth__gt=2) & Q(accountmodel__active=True)
63
+ ),
64
+
65
+ )
66
+
67
+
68
+ class ChartOfAccountModelUpdateView(ChartOfAccountModelModelBaseViewMixIn, UpdateView):
31
69
  context_object_name = 'coa'
32
70
  slug_url_kwarg = 'coa_slug'
33
- template_name = 'django_ledger/code_of_accounts/coa_update.html'
71
+ template_name = 'django_ledger/chart_of_accounts/coa_update.html'
34
72
  form_class = ChartOfAccountsModelUpdateForm
35
73
 
36
74
  def get_context_data(self, **kwargs):
@@ -45,3 +83,39 @@ class ChartOfAccountsUpdateView(DjangoLedgerSecurityMixIn, ChartOfAccountsModelM
45
83
  kwargs={
46
84
  'entity_slug': entity_slug
47
85
  })
86
+
87
+
88
+ # todo: centralize this functionality into a separate class for ALL Action views...
89
+ class CharOfAccountModelActionView(ChartOfAccountModelModelBaseViewMixIn,
90
+ RedirectView,
91
+ SingleObjectMixin):
92
+ http_method_names = ['get']
93
+ slug_url_kwarg = 'coa_slug'
94
+ action_name = None
95
+ commit = True
96
+
97
+ def get_redirect_url(self, *args, **kwargs):
98
+ return reverse('django_ledger:coa-list',
99
+ kwargs={
100
+ 'entity_slug': kwargs['entity_slug']
101
+ })
102
+
103
+ def get(self, request, *args, **kwargs):
104
+ kwargs['user_model'] = self.request.user
105
+ if not self.action_name:
106
+ raise ImproperlyConfigured('View attribute action_name is required.')
107
+ response = super(CharOfAccountModelActionView, self).get(request, *args, **kwargs)
108
+ coa_model: ChartOfAccountModel = self.get_object()
109
+
110
+ try:
111
+ getattr(coa_model, self.action_name)(commit=self.commit, **kwargs)
112
+ messages.add_message(request, level=messages.SUCCESS, extra_tags='is-success',
113
+ message=_('Successfully updated {} Default Chart of Account to '.format(
114
+ self.AUTHORIZED_ENTITY_MODEL.name) +
115
+ '{}'.format(coa_model.name)))
116
+ except ValidationError as e:
117
+ messages.add_message(request,
118
+ message=e.message,
119
+ level=messages.ERROR,
120
+ extra_tags='is-danger')
121
+ return response
@@ -299,11 +299,6 @@ class DjangoLedgerSecurityMixIn(PermissionRequiredMixin):
299
299
  def get_login_url(self):
300
300
  return reverse('django_ledger:login')
301
301
 
302
- def get_authorized_entity_queryset(self):
303
- return EntityModel.objects.for_user(
304
- user_model=self.request.user).only(
305
- 'uuid', 'slug', 'name', 'default_coa', 'admin')
306
-
307
302
  def has_permission(self):
308
303
  if self.request.user.is_superuser:
309
304
  if 'entity_slug' in self.kwargs:
@@ -326,6 +321,16 @@ class DjangoLedgerSecurityMixIn(PermissionRequiredMixin):
326
321
  return True
327
322
  return False
328
323
 
324
+ def get_authorized_entity_queryset(self):
325
+ return EntityModel.objects.for_user(
326
+ user_model=self.request.user).only(
327
+ 'uuid', 'slug', 'name', 'default_coa', 'admin')
328
+
329
+ def get_authorized_entity_instance(self) -> Optional[EntityModel]:
330
+ if self.AUTHORIZED_ENTITY_MODEL is None:
331
+ raise Http404()
332
+ return self.AUTHORIZED_ENTITY_MODEL
333
+
329
334
 
330
335
  class EntityUnitMixIn:
331
336
  UNIT_SLUG_KWARG = 'unit_slug'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-ledger
3
- Version: 0.5.6.3
3
+ Version: 0.5.6.5
4
4
  Summary: Bookkeeping & Financial analysis backend for Django. Balance Sheet, Income Statements, Chart of Accounts, Entities
5
5
  Author-email: Miguel Sanda <msanda@arrobalytics.com>
6
6
  Maintainer-email: Miguel Sanda <msanda@arrobalytics.com>
@@ -48,14 +48,14 @@ assets/node_modules/node-gyp/gyp/tools/pretty_gyp.py,sha256=2ZCRPW-MZfK7gdnCIaqh
48
48
  assets/node_modules/node-gyp/gyp/tools/pretty_sln.py,sha256=b_Fxm-SXUCPL3Tix4EyNwZNmQ-zkeRIFFmuL0R5wFhw,5482
49
49
  assets/node_modules/node-gyp/gyp/tools/pretty_vcproj.py,sha256=AwQrxK1F-jhjsbbT35XQjrvWNbc3IBFaKXoJogqMh_o,10633
50
50
  assets/node_modules/node-gyp/test/fixtures/test-charmap.py,sha256=5raXzaQnO2eJnrlFtlDtWftryhZX7Fj0amFW3hdSnhE,547
51
- django_ledger/__init__.py,sha256=T7xkVJkVf5rYGqvINp-BL3RGtoMKimRuqf-bmoNGyxw,458
51
+ django_ledger/__init__.py,sha256=baak5-S_PQQ_AyoLijK86tI74pLFMsMbReoTxhab9ug,458
52
52
  django_ledger/apps.py,sha256=H-zEWUjKGakgSDSZmLIoXChZ2h6e0dth0ZO5SpoT-8U,163
53
53
  django_ledger/exceptions.py,sha256=rML8sQQ0Hq-DYMLZ76dfw2RYSAsXWUoyHuyC_yP9o1o,491
54
54
  django_ledger/settings.py,sha256=KLujLYwEC3fxfj5u9HnVDsr1rBjE5OAI--bu0MYi4JE,6221
55
55
  django_ledger/utils.py,sha256=l8xq-uSvUdJNpyDjC_0UrsSfjeEpwf7B-tavbnt40a8,4305
56
56
  django_ledger/admin/__init__.py,sha256=MipzxmBhXswpx63uf3Ai2amyBMAP5fZL7mKXKxjNRIY,458
57
- django_ledger/admin/coa.py,sha256=t3NglcPvhXHRUzQaN1UpLiSgUx0via0gqgGEwGjuVeY,3542
58
- django_ledger/admin/entity.py,sha256=Iw7nIjCqqSZZNVyl24fDvCSWjy1YGS7P77r6hfaRNSU,5817
57
+ django_ledger/admin/coa.py,sha256=BcBsvNs4Z1hOyZy4YqCtIfk1aw8DejrI1bAEH93Tkjc,3542
58
+ django_ledger/admin/entity.py,sha256=DhH-6o3kjUdkhVPHzwOSF3crtvf5MCzcc1vPCk9O2Bk,6287
59
59
  django_ledger/admin/ledger.py,sha256=ecwmnuW4119StZDR_1QaK9jdZXw2dEvza-dnx1bHWDM,7876
60
60
  django_ledger/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
61
  django_ledger/contrib/django_ledger_graphene/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -93,13 +93,13 @@ django_ledger/contrib/django_ledger_graphene/unit/schema.py,sha256=orR4tn1ORTfzL
93
93
  django_ledger/contrib/django_ledger_graphene/vendor/mutations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
94
  django_ledger/contrib/django_ledger_graphene/vendor/schema.py,sha256=Y20FR0gut0yNsROL_f1LSHdzn7wM4_voKQv--evVGG4,1453
95
95
  django_ledger/forms/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
96
- django_ledger/forms/account.py,sha256=BmBnCALurNuahX9GhEbvtxHiWu_jefdj833va1d7ooU,5023
96
+ django_ledger/forms/account.py,sha256=-U6OneNfH2bIlMzqXPZk8KmLn-csMhZ4PKzzq-4LdUs,5430
97
97
  django_ledger/forms/app_filters.py,sha256=fHmftiuR1Ei28LhGuu7LoxS4Q5pVjj1wiT0fF4GUcUI,2293
98
98
  django_ledger/forms/auth.py,sha256=HaJDEIRFoAHEAv-s_ZfTe0rZbhzIQ7GkKnaBX1qiAW4,736
99
99
  django_ledger/forms/bank_account.py,sha256=dmmx1BzGq9IeD0jpYOmE83Gat6D3IUeTc0z0jJ7roR4,4513
100
100
  django_ledger/forms/bill.py,sha256=aTAlMWtVA3eI-w0e9Vuxk2GSVey7pmAropPzrQ4OzcI,11007
101
101
  django_ledger/forms/closing_entry.py,sha256=AwEEhphjQ-D4pQ6lRk2zGSmMSMkoamIVICnUY8rgqKU,1494
102
- django_ledger/forms/coa.py,sha256=rdjie9VWEXsdgRChhVDLguxmkPGoNYKj7OAzqW4q3Pc,1485
102
+ django_ledger/forms/coa.py,sha256=-w0GbVde1ve0lEgWCc7kAIfDDVP_nBYgrxykfC301Gw,1312
103
103
  django_ledger/forms/customer.py,sha256=4Ce0J2d3hH5vfT1kdJbspUveIPEsRX_JktzIIu4rNks,2502
104
104
  django_ledger/forms/data_import.py,sha256=6fAS-_kDm3wMgTyQx0SlrU8Cw_hLTsFrdJ76_thlUxY,5635
105
105
  django_ledger/forms/entity.py,sha256=b0QirmsFSnaM8YWDO4V6GQXfFgR_MLmdq27I2q2sGQ0,6880
@@ -122,7 +122,7 @@ django_ledger/io/io_library.py,sha256=kZt61TV6McxH2Ly1INYRmb-T1hNuEKe4WI0YB_YHeK
122
122
  django_ledger/io/io_middleware.py,sha256=3bMTjmBiwoXxyEo5ER-jZxWxT_xbcrtv4F__vJLsVXs,20096
123
123
  django_ledger/io/ofx.py,sha256=JnmDjhIpLySoixK1WVe6DivRuu02rYsBjqI8yi5Opzs,1488
124
124
  django_ledger/io/ratios.py,sha256=dsuCv9-r73SMLv3OrxeoT5JebfRmrDsRKG_YzHggWFw,3542
125
- django_ledger/io/roles.py,sha256=27pqx41wvJf81ywShXQVYjJKPxMrX9_D_F13eQMrE3o,20314
125
+ django_ledger/io/roles.py,sha256=RrErn0-cDOr90UrMBGl-PM_PxG2o_KYbGYeK4Dpwsek,20690
126
126
  django_ledger/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
127
  django_ledger/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  django_ledger/management/commands/generate_oauth2_codes.py,sha256=H92pSOMA0VFjdCLXOqdIWql-aKU12uaAPdXgz2DB9Go,1495
@@ -140,17 +140,18 @@ django_ledger/migrations/0011_importjobmodel_alter_accountmodel_role_and_more.py
140
140
  django_ledger/migrations/0012_stagedtransactionmodel_activity.py,sha256=Tv0rXC1He6_lOVpv-RWT2tKoUTvJVSsM7T1SJR0qxcI,986
141
141
  django_ledger/migrations/0013_stagedtransactionmodel_bundle_split.py,sha256=7Uxd5JEKbP31vSnlP1Us_JA6mtJzAwFnr0XNCKYJDao,469
142
142
  django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py,sha256=UHuEQrnFr1dV4p2mxeUtWk39psSnqwBymDz_xt57sZc,663
143
+ django_ledger/migrations/0015_remove_chartofaccountmodel_locked_and_more.py,sha256=GZDKJDjpqo52pY7sXusHpyvXsUwsuvoZqTQNda9Eo1I,560
143
144
  django_ledger/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
145
  django_ledger/models/__init__.py,sha256=8mn-OGhAVgLs8YASEBwo8dpX6tHyGtMxRHVPGDGECVU,793
145
- django_ledger/models/accounts.py,sha256=vsj1Dc7VgqPqlFZs04sv1bCiAnHXJIBh61qhON6pl74,28665
146
+ django_ledger/models/accounts.py,sha256=Ie5LTiT4zbmJndq1AJC6kZplgaklkXFusgl4LnIkIbQ,28687
146
147
  django_ledger/models/bank_account.py,sha256=0-eTBxxRyvUKOVVNcGqWV1kiOKcXA2KPQIdiVHDUDCY,7678
147
148
  django_ledger/models/bill.py,sha256=vaXdTEfow9SPzactNs6mZdm4tJc8uamKufT9tQGFpJg,63541
148
149
  django_ledger/models/closing_entry.py,sha256=52BLvK4Jr8aXrB4kgFqrqHozkw13gwu0hm9RXWnLYE8,17732
149
- django_ledger/models/coa.py,sha256=2CIP0ex4pypwm_ytX8NWAyDM1c0yFOIwwdrTWBXhZQY,13969
150
+ django_ledger/models/coa.py,sha256=yxkZK6R8-j58i_KE8X1bB0CwnaF-Vhn0Z4qLK5ZycrY,20305
150
151
  django_ledger/models/coa_default.py,sha256=4Zj8OMhgBiYuREjM82cFfyGWd8uCAeqggVkeNhg4SLU,27338
151
152
  django_ledger/models/customer.py,sha256=JQOktcYKUlENJv4frek9rAW6sRerrQ0xXHlC5KPmhWk,11807
152
153
  django_ledger/models/data_import.py,sha256=2H-4oTVLa7qXq03m9fd7T5zSQLkZKOAn2OAeOQBzMPA,19477
153
- django_ledger/models/entity.py,sha256=jlxj1mPM09JydEq9KidzRRQAb6m_tzg6NhEwQP_6lQE,120954
154
+ django_ledger/models/entity.py,sha256=zw8vJ-sjmFAPLcXWDwi60FaSa12QB6aEoCk0VzAo910,121191
154
155
  django_ledger/models/estimate.py,sha256=-qB5t2cEdyYpFUq7tOUQnFqvE6EDUiVdTtzjEbESwEQ,55829
155
156
  django_ledger/models/invoice.py,sha256=FZ7ZxAjyrM2NUwiR3wIX0PnbPXV27F63u8sESb4qM20,61389
156
157
  django_ledger/models/items.py,sha256=JLPFGPQvTKiq3r09wgG2cxBB4ZmcEXK6LyqMUhzWj3k,54938
@@ -195,13 +196,13 @@ django_ledger/static/django_ledger/logo/django-ledger-text@2x.png,sha256=QJVyPER
195
196
  django_ledger/static/django_ledger/logo/django-ledger-text@3x.png,sha256=ddWSMY9dXrAMPTS3LZ6K4sDVvJpYFW4KrVUTqJKU-wg,67707
196
197
  django_ledger/static/django_ledger/logo/django-ledger-text@4x.png,sha256=d5hPUkvmJS_5LXPGgJ5VhcI_2CeteVsiNABv1Q2R6aw,99253
197
198
  django_ledger/static/django_ledger/logo/favicon.png,sha256=7QIRzizQUig3PHi9zyV1tK8kXid410_mmin-WZ3zY4M,6434
198
- django_ledger/templates/django_ledger/account/account_create.html,sha256=MttdEu5epZYKOi89Okz4UNn-_2us4TAKz0PDawgqnt0,860
199
+ django_ledger/templates/django_ledger/account/account_create.html,sha256=3-5LgVrvOm6YhryVGgtYltyHMA98dSNt7_vOvsxSRvU,1166
199
200
  django_ledger/templates/django_ledger/account/account_create_child.html,sha256=i1tBc-N44D2mKnm61nrI11pXxo2STF1ezV9fVckB_qY,1089
200
201
  django_ledger/templates/django_ledger/account/account_detail.html,sha256=m-UTWD9YqoM9JWKug4alY4DIql13jYFrJG2BmdYSZ7s,934
201
- django_ledger/templates/django_ledger/account/account_list.html,sha256=yl63yMHA5oIkw7iyhARlbQeMRVh9G05jdq7Pn0VhfGQ,796
202
- django_ledger/templates/django_ledger/account/account_update.html,sha256=HmFhp7Xi_taIeNsjijrFVkxmmrDNHoAOZK0qGRtsqUI,851
202
+ django_ledger/templates/django_ledger/account/account_list.html,sha256=0kDNrzcMgMewiBQGqjkPCUHErmOiVz6uy1FnwzclMjc,1019
203
+ django_ledger/templates/django_ledger/account/account_update.html,sha256=QR4kT3cv2d00Hlh0j6UUbhtAxJ6J_mQVzGDYCVDnaWE,1151
203
204
  django_ledger/templates/django_ledger/account/tags/account_txs_table.html,sha256=ywGyB-LdCLAfT5vbFyTjPD7tNGwdQEZwrHq0Dtp6zoA,3373
204
- django_ledger/templates/django_ledger/account/tags/accounts_table.html,sha256=BtnmnwDA0bghAnGV1ByT33m9iqC30Huk8dXJ23ECGt4,6626
205
+ django_ledger/templates/django_ledger/account/tags/accounts_table.html,sha256=33rqgVfnfi43l6u3JGOyydF0xH6QXNM2-QQqNK9Cnkg,7476
205
206
  django_ledger/templates/django_ledger/auth/login.html,sha256=UYV2rxjEn9cXBbG6Ww93k6yMPJtOo5vpX6sod61ewKs,1849
206
207
  django_ledger/templates/django_ledger/bank_account/bank_account_create.html,sha256=zoCvV-_2aBAXCnCfHTFI18Pn7hbEcOkgtcgYOQ2IJIg,1258
207
208
  django_ledger/templates/django_ledger/bank_account/bank_account_list.html,sha256=FuwnbPZ8J6paQw02ddSYEpKUy97SKP-00mFDPMghgJI,701
@@ -216,6 +217,9 @@ django_ledger/templates/django_ledger/bills/bill_void.html,sha256=iQt9Nq1DL-Lovk
216
217
  django_ledger/templates/django_ledger/bills/includes/card_bill.html,sha256=7bUT7Sx7oFHAs9ko1x3wBBhrOZnTAmrGR55S1vksm8g,14029
217
218
  django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html,sha256=tmBNZoaHhk6EsCtcdqAQdHJ0XyDFaFRYqxdCf2Xi5KU,4082
218
219
  django_ledger/templates/django_ledger/bills/tags/bill_table.html,sha256=aGy5iMUmlZ1D7L3qnQlOC2L8ScQCoLENEfBqHV-vJvE,2864
220
+ django_ledger/templates/django_ledger/chart_of_accounts/coa_list.html,sha256=v-g1zdj-0JT8FWUcvmfGgJUqpuIIsYoCciettI3UdgE,490
221
+ django_ledger/templates/django_ledger/chart_of_accounts/coa_update.html,sha256=S5RX0z_BGhCwdMuwjLWqWDihkKlhI2d3r_zgDfX1n9k,863
222
+ django_ledger/templates/django_ledger/chart_of_accounts/includes/coa_card.html,sha256=pWqa53tUwf2t0pR8tqu-8S0XMPz0dgw-JI0Rw0Tv66o,3166
219
223
  django_ledger/templates/django_ledger/closing_entry/closing_entry_create.html,sha256=lBx2gKnKLT_12g-dJn1N6xmR_Nnk3Nm2kXjIK0PorMs,1338
220
224
  django_ledger/templates/django_ledger/closing_entry/closing_entry_delete.html,sha256=4PzrIVBUnI6k7NBPiQto3TPM18T2jmTk5rZbx-RRqZo,1087
221
225
  django_ledger/templates/django_ledger/closing_entry/closing_entry_detail.html,sha256=mnyVPRoQh9L6F5dB87ZfuoXjkreac9JRMK4cH6FUnqE,1599
@@ -224,7 +228,6 @@ django_ledger/templates/django_ledger/closing_entry/closing_entry_update.html,sh
224
228
  django_ledger/templates/django_ledger/closing_entry/includes/card_closing_entry.html,sha256=qVmHjS2eKTwyuNl0zN9l4EWNjiJ1Y1lqLzTlVrY0T9U,3814
225
229
  django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_table.html,sha256=277jBIuib2yEA6eHF27DTMFizK8_MJ5QiqzwZ87c120,3109
226
230
  django_ledger/templates/django_ledger/closing_entry/tags/closing_entry_txs_table.html,sha256=Jdeh-d00htUIxcjFq52S1YcNCcwDfd4NIclti5Qoh6E,1212
227
- django_ledger/templates/django_ledger/code_of_accounts/coa_update.html,sha256=ow9HaBcchzdNPtWlWKX4zuTuZqIZklyS2wxHJuqvUkQ,867
228
231
  django_ledger/templates/django_ledger/components/activity_form.html,sha256=J9TNqRp1qKrxsFZKgX3ESK7r5QbjMQi4eE1D-0AOe9U,772
229
232
  django_ledger/templates/django_ledger/components/breadcrumbs.html,sha256=hfaGk-MPGX8PZuhKRbkKaThshJmkJd_maGhMq7QgU10,1147
230
233
  django_ledger/templates/django_ledger/components/chart_container.html,sha256=z0kaTfHYEwJGbQnNVZhCUPRg-sSeaW8HU-QWyoV3CnM,115
@@ -294,7 +297,7 @@ django_ledger/templates/django_ledger/inventory/tags/inventory_table.html,sha256
294
297
  django_ledger/templates/django_ledger/invoice/invoice_create.html,sha256=p6I2SF-tW8Gq6vez_5jG1phudOjVqia6F-TNrTMM4_I,2125
295
298
  django_ledger/templates/django_ledger/invoice/invoice_delete.html,sha256=qkhsW6lPiA4BxbWzHgncN8A6p8EU7MjjFyXZnQa1tF0,1482
296
299
  django_ledger/templates/django_ledger/invoice/invoice_detail.html,sha256=tfJjGtMazJQlnLhvkd_NKdlcotm0Mogzo3B7piP9X7A,10547
297
- django_ledger/templates/django_ledger/invoice/invoice_list.html,sha256=hbS71LNjLFGlVTVA4SJLI8FGa7Q0vB_Z4e8ft4T7_ak,6356
300
+ django_ledger/templates/django_ledger/invoice/invoice_list.html,sha256=b5ysuDP-avrls4OSarSusySAKDFT1sM-jkQgWPPxpNw,5888
298
301
  django_ledger/templates/django_ledger/invoice/invoice_update.html,sha256=cVuth_WbELKi3RWDrIKLcfDAe0RH3OV8N5AireHK298,8640
299
302
  django_ledger/templates/django_ledger/invoice/includes/card_invoice.html,sha256=OHs3XcWxkYT6Sb4rQmNo_EiUVLksuj94AwG6PNtYaTY,13021
300
303
  django_ledger/templates/django_ledger/invoice/tags/invoice_item_formset.html,sha256=ba4J_WINrpYmCaHAyKWDKwZ6ETQXI3NkQ_AV6Y5-2uM,3413
@@ -350,11 +353,13 @@ django_ledger/templates/django_ledger/vendor/vendor_update.html,sha256=4kBUlGgrg
350
353
  django_ledger/templates/django_ledger/vendor/includes/card_vendor.html,sha256=oCXyuqyF7CnJnDQdK0G0jdYLqtPWYSzwlv8oddyGJg8,1290
351
354
  django_ledger/templates/django_ledger/vendor/tags/vendor_table.html,sha256=YC-3T5x4oua3VBg1q690CRzoogKL8qFgQRp5jTKLFgk,3400
352
355
  django_ledger/templatetags/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
353
- django_ledger/templatetags/django_ledger.py,sha256=NxcgYk6wi-0W6UndLstFtnFt4Td2e5EwXLEyIjQFIqc,31697
356
+ django_ledger/templatetags/django_ledger.py,sha256=9lIsihiSJeu7zhdmbgwEaMfQ3c735CYmOv2Rpy-ELno,31693
354
357
  django_ledger/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
- django_ledger/tests/base.py,sha256=s4ifkVcwLUjGodJRcMzeIT6avWAx7_yT0PQOpoyG8Us,9555
358
+ django_ledger/tests/base.py,sha256=Be7BS_bc_m-hCTkBRnvHYfvAfgCcVOsU-He9ON6rOCc,10279
359
+ django_ledger/tests/test_accounts.py,sha256=WznTiYkxGcmeZ0W75ATpMsZGWrtmNV4voe4oLMCpveo,717
356
360
  django_ledger/tests/test_auth.py,sha256=MP4mugLgL0wVFIID8NA0XiQVEtWsCUCCHQn_RsrMF3g,3028
357
361
  django_ledger/tests/test_bill.py,sha256=K61HXbSbOpEfbi0Ia9JtCgLUfDb1MlEQcKmz47gm4Qw,18140
362
+ django_ledger/tests/test_chart_of_accounts.py,sha256=bTo7AXL_wAr_ywku_NwwxS6rgQyBLnJDxiGryhiDMWo,1952
358
363
  django_ledger/tests/test_closing_entry.py,sha256=qrCmzGdXEY1MgbOiyAF1B18no-g6SN9XW_e7fgdJqlc,2540
359
364
  django_ledger/tests/test_entity.py,sha256=do7YXRmd1vj2-q1PzC-Fhjr71dx3TqvxXWMiw9YhHaI,13450
360
365
  django_ledger/tests/test_io.py,sha256=OLZnlC1vKCj226QHecn3q2aRSisy5YaHhTRT__jUNxk,7000
@@ -363,11 +368,11 @@ django_ledger/tests/test_transactions.py,sha256=qeIJr0q43IpI_9YrzjVcnltnk_7puGvd
363
368
  django_ledger/tests/bdd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
364
369
  django_ledger/tests/bdd/features/steps/README.py,sha256=4HMdVjjflcKQBf0LeZbc5i3TXbe5qGxYBcGmHn4i3jU,599
365
370
  django_ledger/urls/__init__.py,sha256=98Dk0iQPeK2chSTY8H-7yuk9OycoUoZJdbpuR0Wv2rw,1994
366
- django_ledger/urls/account.py,sha256=DZ4tvo9us9fBi0MiSvKChMgxm7k2xytop48M3q1OurE,1849
371
+ django_ledger/urls/account.py,sha256=9G6m2mkki8sNtC_mlNIHcn2SCSoG7ienbQ5qg2kHWg0,2399
367
372
  django_ledger/urls/auth.py,sha256=8dY2h6PQkMayUL81guu9JCxm--Tj0rglvvxg9Qh03aY,230
368
373
  django_ledger/urls/bank_account.py,sha256=-dJsrnwej8H96Gc8xltLf3NwUxKk_xG0Mq4mxhe8Cqs,887
369
374
  django_ledger/urls/bill.py,sha256=wvdRqSgnHp1CLdX6Sudu1IiIx4M1Pe8OupanA-9a-nI,2890
370
- django_ledger/urls/chart_of_accounts.py,sha256=K6SCbhn3qOuEtX9q8U-wRGlDxmwkM2PFLA80k521fNY,199
375
+ django_ledger/urls/chart_of_accounts.py,sha256=c9b32U-GY8Ddhy2W7zW8IMnNtQzZHF1bs1SGJ4Ylr3U,1097
371
376
  django_ledger/urls/closing_entry.py,sha256=3W0fCuAWGB3h8cWg0cxOb9EClVrydeIdHEX0q9rge60,1765
372
377
  django_ledger/urls/customer.py,sha256=I3tWSb5Gmdr-boBSlCst_5cvCHz6JhpGxuwglqJeaG0,426
373
378
  django_ledger/urls/data_import.py,sha256=bOi6U8gN2adxQUjOeNCJGuDRB--hwWeUIQOYTMbFarw,780
@@ -387,12 +392,12 @@ django_ledger/urls/transactions.py,sha256=e_x_z5qbkR6i7o8OWWdXshDiY_WVmu9WVhR9A9
387
392
  django_ledger/urls/unit.py,sha256=EaBd1EcSeQYbOH1rTQZdyDEEtLVi7-QfC_wpRPwTpuE,1499
388
393
  django_ledger/urls/vendor.py,sha256=ODHpAwe5lomluj8ZCqbMtugTeeRsv0Yo9SqkZEmfYaw,393
389
394
  django_ledger/views/__init__.py,sha256=l5Pm2_oAW6Q_jJbXf-BiHA3ilCbiGb6gkXCm73K5DGY,1158
390
- django_ledger/views/account.py,sha256=UIOaHWP5QUL33fSBUXUfeR67DSznDoQeTHnNufOpJxc,8669
395
+ django_ledger/views/account.py,sha256=cT-YVWQCDj9IAaG8LVrk_jiH5gfGRrdzeZb63tR3atg,10525
391
396
  django_ledger/views/auth.py,sha256=-zTjMlLpyxHGPlY9EXFQyeVHMmyeJ2H9RptcW7PDeDg,771
392
397
  django_ledger/views/bank_account.py,sha256=bMgqrDydz6WuXina4L27uV-cmQicW0_JoPaXxlO7uN4,5176
393
398
  django_ledger/views/bill.py,sha256=-WWAPF6PKqfaApAJBFwNMmIveDajXD-5a12d-LbcqFA,23087
394
399
  django_ledger/views/closing_entry.py,sha256=y78azZesVgdUoQmaSEYiP7MBaPRE45qAAHPDlcThlUs,8103
395
- django_ledger/views/coa.py,sha256=VY6oO4o5GgLj6ht9teLAE-7P1HUeA2vr1NI7hwpl6t4,1708
400
+ django_ledger/views/coa.py,sha256=WnWQVz-4Ik9v28KHzD_WiKcgix7l6bBj1A60p4k-eos,4934
396
401
  django_ledger/views/customer.py,sha256=RoBsXBxZC9b79DSNNHaoSZtQ2AoXf7DJAGmZEO3xdxs,3672
397
402
  django_ledger/views/data_import.py,sha256=_H8gjGRIE2Jm97ivvEQn0uEWrM3VvKkYQeXQ1GbKn3g,11950
398
403
  django_ledger/views/djl_api.py,sha256=6ADX9fBK8DroTeg8UIeCf2x4wt6-AF5xLlDQnqXBfsM,4411
@@ -406,14 +411,14 @@ django_ledger/views/invoice.py,sha256=iUzTG-EbdYqNX-eYwHBnQRUD_1wTOGutw0BfDMKcI6
406
411
  django_ledger/views/item.py,sha256=FY53vk_giTRgvJ47FRqChQ8vyDYPDp4DGTvVhGAb36E,21347
407
412
  django_ledger/views/journal_entry.py,sha256=21kuiRBlhlkgv8xZKM4mj9djv0Fu0BhB80QOEOHCa-w,12135
408
413
  django_ledger/views/ledger.py,sha256=k3cK9zgGNnPwMPx0uqj_pRMFbM71lbYi7bi-l6B2M5s,12681
409
- django_ledger/views/mixins.py,sha256=dGJ_-AEUGxRGLgZ1fRbNNOMuaMvVfv5ts9LOYRxrYdA,21090
414
+ django_ledger/views/mixins.py,sha256=Zgx85WJ87IQ0yTRdVgVQp70puWaRloUObLgqeCoQLTM,21283
410
415
  django_ledger/views/purchase_order.py,sha256=1J3u4QnCkM7z1Y6DePijVdM67x4CQgfmQJcs3Y4kclU,21082
411
416
  django_ledger/views/transactions.py,sha256=5taQRGLSMkM_N8paQJ07HMspI_Nl7PawF8OohCiRmao,206
412
417
  django_ledger/views/unit.py,sha256=_RgPJO9mR6v5ohBXlnL3T8nTWgS1lwlCvERQcHk0wHE,10232
413
418
  django_ledger/views/vendor.py,sha256=gUdBPTFLeSwlNfdHSA1KFdE_y3QpwpkFhEB0r3-UYdI,3461
414
- django_ledger-0.5.6.3.dist-info/AUTHORS.md,sha256=SRM2cynD89ZfEsL09zrbUVeO17r9zE2ZM7y6ReMqVRo,713
415
- django_ledger-0.5.6.3.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
416
- django_ledger-0.5.6.3.dist-info/METADATA,sha256=r8sfmqOJZqsjcGRxrE0F9UUMT2uDEktR43f-9GlsSPw,12619
417
- django_ledger-0.5.6.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
418
- django_ledger-0.5.6.3.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
419
- django_ledger-0.5.6.3.dist-info/RECORD,,
419
+ django_ledger-0.5.6.5.dist-info/AUTHORS.md,sha256=SRM2cynD89ZfEsL09zrbUVeO17r9zE2ZM7y6ReMqVRo,713
420
+ django_ledger-0.5.6.5.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
421
+ django_ledger-0.5.6.5.dist-info/METADATA,sha256=1MQ9knc-wMCbM6T3EhgetV2sYIyQCzEeqfNOXntPqpM,12619
422
+ django_ledger-0.5.6.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
423
+ django_ledger-0.5.6.5.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
424
+ django_ledger-0.5.6.5.dist-info/RECORD,,