django-ledger 0.5.5.4__py3-none-any.whl → 0.5.6.0__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 (52) hide show
  1. django_ledger/__init__.py +1 -1
  2. django_ledger/admin/__init__.py +10 -0
  3. django_ledger/admin/coa.py +135 -0
  4. django_ledger/admin/entity.py +199 -0
  5. django_ledger/admin/ledger.py +283 -0
  6. django_ledger/forms/entity.py +4 -12
  7. django_ledger/forms/ledger.py +19 -0
  8. django_ledger/forms/transactions.py +1 -1
  9. django_ledger/io/__init__.py +4 -1
  10. django_ledger/io/{io_mixin.py → io_core.py} +95 -35
  11. django_ledger/io/io_digest.py +15 -0
  12. django_ledger/io/{data_generator.py → io_generator.py} +51 -8
  13. django_ledger/io/io_library.py +317 -0
  14. django_ledger/io/{io_context.py → io_middleware.py} +16 -9
  15. django_ledger/migrations/0001_initial.py +413 -132
  16. django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py +22 -0
  17. django_ledger/models/accounts.py +68 -7
  18. django_ledger/models/bank_account.py +12 -11
  19. django_ledger/models/bill.py +5 -9
  20. django_ledger/models/closing_entry.py +14 -14
  21. django_ledger/models/coa.py +60 -18
  22. django_ledger/models/customer.py +5 -11
  23. django_ledger/models/data_import.py +12 -6
  24. django_ledger/models/entity.py +90 -12
  25. django_ledger/models/estimate.py +12 -9
  26. django_ledger/models/invoice.py +10 -4
  27. django_ledger/models/items.py +11 -6
  28. django_ledger/models/journal_entry.py +61 -18
  29. django_ledger/models/ledger.py +90 -24
  30. django_ledger/models/mixins.py +2 -3
  31. django_ledger/models/purchase_order.py +11 -7
  32. django_ledger/models/transactions.py +3 -1
  33. django_ledger/models/unit.py +22 -13
  34. django_ledger/models/vendor.py +12 -11
  35. django_ledger/report/cash_flow_statement.py +1 -1
  36. django_ledger/report/core.py +3 -2
  37. django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html +1 -1
  38. django_ledger/templates/django_ledger/journal_entry/je_list.html +3 -0
  39. django_ledger/templatetags/django_ledger.py +1 -1
  40. django_ledger/tests/base.py +1 -1
  41. django_ledger/tests/test_entity.py +1 -1
  42. django_ledger/urls/ledger.py +3 -0
  43. django_ledger/views/entity.py +9 -3
  44. django_ledger/views/ledger.py +14 -7
  45. django_ledger/views/mixins.py +9 -1
  46. {django_ledger-0.5.5.4.dist-info → django_ledger-0.5.6.0.dist-info}/METADATA +9 -9
  47. {django_ledger-0.5.5.4.dist-info → django_ledger-0.5.6.0.dist-info}/RECORD +51 -46
  48. {django_ledger-0.5.5.4.dist-info → django_ledger-0.5.6.0.dist-info}/top_level.txt +0 -1
  49. django_ledger/admin.py +0 -160
  50. {django_ledger-0.5.5.4.dist-info → django_ledger-0.5.6.0.dist-info}/AUTHORS.md +0 -0
  51. {django_ledger-0.5.5.4.dist-info → django_ledger-0.5.6.0.dist-info}/LICENSE +0 -0
  52. {django_ledger-0.5.5.4.dist-info → django_ledger-0.5.6.0.dist-info}/WHEEL +0 -0
@@ -15,7 +15,6 @@ UserModel = get_user_model()
15
15
 
16
16
 
17
17
  class EntityModelTests(DjangoLedgerBaseTest):
18
- N = 1
19
18
 
20
19
  def setUp(self) -> None:
21
20
  super(EntityModelTests, self).setUp()
@@ -26,6 +25,7 @@ class EntityModelTests(DjangoLedgerBaseTest):
26
25
 
27
26
  # CLOSING ENTRY Tests...
28
27
  def test_closing_entry_dates_meta_key(self):
28
+ self.logger.info('test_closing_entry_dates_meta_key...')
29
29
  for entity_model in self.ENTITY_MODEL_QUERYSET:
30
30
  self.assertTrue(isinstance(entity_model.meta, dict))
31
31
  self.assertTrue(entity_model.META_KEY_CLOSING_ENTRY_DATES in entity_model.meta)
@@ -20,6 +20,9 @@ urlpatterns = [
20
20
  path('<slug:entity_slug>/create/',
21
21
  views.LedgerModelCreateView.as_view(),
22
22
  name='ledger-create'),
23
+ path('<slug:entity_slug>/detail/<uuid:ledger_pk>/',
24
+ views.LedgerModelUpdateView.as_view(),
25
+ name='ledger-detail'),
23
26
  path('<slug:entity_slug>/update/<uuid:ledger_pk>/',
24
27
  views.LedgerModelUpdateView.as_view(),
25
28
  name='ledger-update'),
@@ -17,8 +17,14 @@ from django.utils.translation import gettext_lazy as _
17
17
  from django.views.generic import ListView, DetailView, UpdateView, CreateView, RedirectView, DeleteView
18
18
 
19
19
  from django_ledger.forms.entity import EntityModelUpdateForm, EntityModelCreateForm
20
- from django_ledger.io.data_generator import EntityDataGenerator
21
- from django_ledger.models import (EntityModel, ItemTransactionModel, TransactionModel)
20
+ from django_ledger.io.io_generator import EntityDataGenerator
21
+ from django_ledger.models import (
22
+ EntityModel,
23
+ ItemTransactionModel,
24
+ TransactionModel,
25
+ InvoiceModel,
26
+ BillModel
27
+ )
22
28
  from django_ledger.views.mixins import (
23
29
  QuarterlyReportMixIn, YearlyReportMixIn,
24
30
  MonthlyReportMixIn, DateReportMixIn, DjangoLedgerSecurityMixIn, EntityUnitMixIn,
@@ -97,7 +103,7 @@ class EntityModelCreateView(DjangoLedgerSecurityMixIn, EntityModelModelViewQuery
97
103
  start_dttm=localtime() - timedelta(days=30 * 8),
98
104
  capital_contribution=Decimal.from_float(50000),
99
105
  days_forward=30 * 7,
100
- tx_quantity=cleaned_data['tx_quantity']
106
+ tx_quantity=50
101
107
  )
102
108
  entity_generator.populate_entity()
103
109
 
@@ -7,7 +7,6 @@ Miguel Sanda <msanda@arrobalytics.com>
7
7
  """
8
8
  from django.contrib import messages
9
9
  from django.core.exceptions import ImproperlyConfigured, ValidationError
10
- from django.db.models import Count
11
10
  from django.urls import reverse
12
11
  from django.utils.timezone import localdate
13
12
  from django.utils.translation import gettext_lazy as _
@@ -18,12 +17,12 @@ from django.views.generic import (
18
17
  from django.views.generic.detail import SingleObjectMixin
19
18
 
20
19
  from django_ledger.forms.ledger import LedgerModelCreateForm, LedgerModelUpdateForm
21
- from django_ledger.models.entity import EntityModel
22
20
  from django_ledger.models.ledger import LedgerModel
23
21
  from django_ledger.views.mixins import (
24
22
  YearlyReportMixIn, QuarterlyReportMixIn,
25
23
  MonthlyReportMixIn, DjangoLedgerSecurityMixIn, DateReportMixIn, BaseDateNavigationUrlMixIn,
26
- EntityUnitMixIn, PDFReportMixIn)
24
+ EntityUnitMixIn, PDFReportMixIn
25
+ )
27
26
 
28
27
 
29
28
  class LedgerModelModelViewQuerySetMixIn:
@@ -42,7 +41,7 @@ class LedgerModelListView(DjangoLedgerSecurityMixIn, LedgerModelModelViewQuerySe
42
41
  context_object_name = 'ledger_list'
43
42
  template_name = 'django_ledger/ledger/ledger_list.html'
44
43
  PAGE_TITLE = _('Entity Ledgers')
45
- paginate_by = 15
44
+ paginate_by = 30
46
45
  extra_context = {
47
46
  'page_title': PAGE_TITLE,
48
47
  'header_title': PAGE_TITLE
@@ -106,10 +105,8 @@ class LedgerModelCreateView(DjangoLedgerSecurityMixIn, LedgerModelModelViewQuery
106
105
  )
107
106
 
108
107
  def form_valid(self, form):
109
- entity = EntityModel.objects.for_user(
110
- user_model=self.request.user).get(slug__exact=self.kwargs['entity_slug'])
111
108
  instance = form.save(commit=False)
112
- instance.entity = entity
109
+ instance.entity = self.AUTHORIZED_ENTITY_MODEL
113
110
  self.object = form.save()
114
111
  return super().form_valid(form)
115
112
 
@@ -120,6 +117,16 @@ class LedgerModelCreateView(DjangoLedgerSecurityMixIn, LedgerModelModelViewQuery
120
117
  })
121
118
 
122
119
 
120
+ class LedgerModelDetailView(DjangoLedgerSecurityMixIn, LedgerModelModelViewQuerySetMixIn, RedirectView):
121
+
122
+ def get_redirect_url(self, *args, **kwargs):
123
+ return reverse('django_ledger:je-list',
124
+ kwargs={
125
+ 'ledger_pk': self.kwargs['ledger_pk'],
126
+ 'entity_slug': self.kwargs['entity_slug']
127
+ })
128
+
129
+
123
130
  class LedgerModelUpdateView(DjangoLedgerSecurityMixIn, LedgerModelModelViewQuerySetMixIn, UpdateView):
124
131
  context_object_name = 'ledger'
125
132
  pk_url_kwarg = 'ledger_pk'
@@ -305,7 +305,15 @@ class DjangoLedgerSecurityMixIn(PermissionRequiredMixin):
305
305
  'uuid', 'slug', 'name', 'default_coa', 'admin')
306
306
 
307
307
  def has_permission(self):
308
- if self.request.user.is_authenticated:
308
+ if self.request.user.is_superuser:
309
+ if 'entity_slug' in self.kwargs:
310
+ try:
311
+ entity_model_qs = self.get_authorized_entity_queryset()
312
+ self.AUTHORIZED_ENTITY_MODEL = entity_model_qs.get(slug__exact=self.kwargs['entity_slug'])
313
+ except ObjectDoesNotExist:
314
+ return False
315
+ return True
316
+ elif self.request.user.is_authenticated:
309
317
  has_perm = super().has_permission()
310
318
  if not has_perm:
311
319
  return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-ledger
3
- Version: 0.5.5.4
3
+ Version: 0.5.6.0
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>
@@ -63,7 +63,7 @@ Finance and Accounting is a complicated subject. Django Ledger is different from
63
63
  as it aims to provide a developer-friendly accounting engine while providing a reliable and extensible API to
64
64
  power financially driven applications. This project in particular, not only requires Python AND Django programming
65
65
  experience, but also finance and accounting experience. So, that's the long way of saying, we need your help!
66
- Join our Discord Channel [here](https://discord.gg/c7PZcbYgrc) to learn more.
66
+ Join our Discord Channel [here](https://discord.gg/J7KDFgCCsw) to learn more.
67
67
 
68
68
  __This project can greatly benefit from contributions towards Documentation and Unit Tests.__
69
69
  __This is the best way to get started twith this project if you are not familiar with the models.__
@@ -132,13 +132,13 @@ More details available in the [Django Ledger v0.5 Page](https://www.arrobalytics
132
132
  * Generate all Django Ledger Model documentation.
133
133
  * ~~__0.5.3__~~: High Level EntityModel API.
134
134
  * ~~__0.5.4__~~: Balance Sheet Statement, Income Statement & Cash Flow Statement API & PDF report export.
135
- * __0.5.5__: Closing Entries.
136
- * 0.5.5.1: Open Financial Exchange Imports (OFX) Bugfixes and Optimizations.
137
- * 0.5.5.2: BugFixes and Optimizations..
138
- * 0.5.5.3: Closing Entries will be used if requested date is present. Documentation Update.
139
- * __0.5.6__: Chart of Accounts Import.
140
- * __0.5.7__: Trial Balance Import.
141
- * __0.5.8__: GraphQL API.
135
+ * ~~__0.5.5__~~: Closing Entries.
136
+ * ~~0.5.5.1~~: Open Financial Exchange Imports (OFX) Bugfixes and Optimizations.
137
+ * ~~0.5.5.2~~: BugFixes and Optimizations..
138
+ * ~~0.5.5.3~~: Closing Entries will be used if requested date is present. Documentation Update.
139
+ * __0.5.6__: Transaction Library & Blueprints.
140
+ * __0.5.7__: Chart of Accounts Import.
141
+ * __0.5.8__: Trial Balance Import.
142
142
 
143
143
  ### Version 0.6
144
144
 
@@ -1,9 +1,12 @@
1
- django_ledger/__init__.py,sha256=XkO8qgafVaWw22I_L-24U2PdX1KyR17RXTZGFLRSujE,458
2
- django_ledger/admin.py,sha256=cfaobDIf_ATw_LHL4O3AJxUZhaLa75PC-EXOpmA28mE,3723
1
+ django_ledger/__init__.py,sha256=4TsPrhgiAiZXeyaF0B_LxqWB5mAzERwofbuctk9cAgQ,458
3
2
  django_ledger/apps.py,sha256=H-zEWUjKGakgSDSZmLIoXChZ2h6e0dth0ZO5SpoT-8U,163
4
3
  django_ledger/exceptions.py,sha256=rML8sQQ0Hq-DYMLZ76dfw2RYSAsXWUoyHuyC_yP9o1o,491
5
4
  django_ledger/settings.py,sha256=KLujLYwEC3fxfj5u9HnVDsr1rBjE5OAI--bu0MYi4JE,6221
6
5
  django_ledger/utils.py,sha256=nWXTffn-RD5q3nNA7u812XJECtsMGiwFZh2ILWVPoK4,4294
6
+ django_ledger/admin/__init__.py,sha256=MipzxmBhXswpx63uf3Ai2amyBMAP5fZL7mKXKxjNRIY,458
7
+ django_ledger/admin/coa.py,sha256=t3NglcPvhXHRUzQaN1UpLiSgUx0via0gqgGEwGjuVeY,3542
8
+ django_ledger/admin/entity.py,sha256=8oP8vgfx1Vd1pIpLaxKTmsPRscG65hT356jQmtJauEU,5825
9
+ django_ledger/admin/ledger.py,sha256=ecwmnuW4119StZDR_1QaK9jdZXw2dEvza-dnx1bHWDM,7876
7
10
  django_ledger/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
11
  django_ledger/contrib/django_ledger_graphene/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
12
  django_ledger/contrib/django_ledger_graphene/api.py,sha256=exrsmMcX21-Vhpe2_9X0eRLcdlnoE2ut0KUxBLu-TM8,871
@@ -49,30 +52,31 @@ django_ledger/forms/closing_entry.py,sha256=DKIXvZohO-AP-5Y__XxQYW4YLfOfuU5bAV8s
49
52
  django_ledger/forms/coa.py,sha256=rdjie9VWEXsdgRChhVDLguxmkPGoNYKj7OAzqW4q3Pc,1485
50
53
  django_ledger/forms/customer.py,sha256=4Ce0J2d3hH5vfT1kdJbspUveIPEsRX_JktzIIu4rNks,2502
51
54
  django_ledger/forms/data_import.py,sha256=6fAS-_kDm3wMgTyQx0SlrU8Cw_hLTsFrdJ76_thlUxY,5635
52
- django_ledger/forms/entity.py,sha256=swG24ydHGHNXw_J6tNzeMw1ZarcC--DjMHw9kIyAM9o,7339
55
+ django_ledger/forms/entity.py,sha256=b0QirmsFSnaM8YWDO4V6GQXfFgR_MLmdq27I2q2sGQ0,6880
53
56
  django_ledger/forms/estimate.py,sha256=AotWILz-XYiDHEIpey-KQTFfqcLr_CubtzCoaDm3SL4,5171
54
57
  django_ledger/forms/feedback.py,sha256=WUT-kI4uT6q5aqEYaDYwyIFfhXpmtwMv6qf9BFSYsDo,1850
55
58
  django_ledger/forms/invoice.py,sha256=bl569tav2sMYFF8Ko55zXvq4OI78JCSbvKHgOIEQUNY,9785
56
59
  django_ledger/forms/item.py,sha256=BuZkJKRwlg4JZr4tgP8CbnpgoGrzTQ3v49HAqUEcV80,12308
57
60
  django_ledger/forms/journal_entry.py,sha256=RMFC9QWMwaYH-ZQkZcHldtHCAVJE-MjWlizyyq3Ogjs,2975
58
- django_ledger/forms/ledger.py,sha256=0oLOxCV43vjQtFVD-D6sue5lir-O0o0sW4uKfj8bBR8,1112
61
+ django_ledger/forms/ledger.py,sha256=jz2Ipdj-6hDBGeU4X0rodFT0yPQcFwTQ0EeUqDpKC6g,1739
59
62
  django_ledger/forms/purchase_order.py,sha256=XIi7v6ZaBd9nYgcWLmgNKm9751XBXpbwmUtlpPJklHI,7479
60
- django_ledger/forms/transactions.py,sha256=E_egT5g7gZTWwGYEfdllTaBBb0Cd2lYdg7Ke1uj3ZhE,3308
63
+ django_ledger/forms/transactions.py,sha256=hj7IHRiPy7Pu6n-U_FUyHRs2p_jtBmG5iLMEyd0QZC4,3316
61
64
  django_ledger/forms/unit.py,sha256=rXUefjpuAmUU0vPOqu1ObO4k-bN-_Q6kOqHJ4kp_Vlg,1131
62
65
  django_ledger/forms/utils.py,sha256=sgkwBZs15_rZ5NT7h-8Z7wi3-ItM1E1sqoVDo3NQ5Jc,513
63
66
  django_ledger/forms/vendor.py,sha256=Nuh8MmSpz4ycMZwiVe--U9Ec6ezIsfACHDkhA2SyiZ4,2215
64
- django_ledger/io/__init__.py,sha256=gTWfEu1iEdL-TDJiZzOhgzxWuoWnWKcGIpRa4Q04deU,322
65
- django_ledger/io/data_generator.py,sha256=bbyLkcjxHm1b0pc9JV71ra4hG5JwHI2uRJJ52fxUn58,32678
66
- django_ledger/io/io_context.py,sha256=qbAkDS7RGJ2K3MeG1Ti5Xy4yO5Qjn28JezvkaIv_4d8,19874
67
- django_ledger/io/io_digest.py,sha256=eiiOmqvwHb4QqMqoJZkVWLz3u1LNAL2ITaQNv6kZUHw,3636
68
- django_ledger/io/io_mixin.py,sha256=jOMKOlMkpqSjNiKSGIjoe5MVr1WzVCZ_SKqpmldwdoM,41872
67
+ django_ledger/io/__init__.py,sha256=Y9R-mY4peg8EpxmlXKaBER1IHMU-Nos8_dII41Kj0Ho,445
68
+ django_ledger/io/io_core.py,sha256=QY6iFGoyRDAe42w4MC650RydRD7TmSwuTNsCLsvvnxU,44733
69
+ django_ledger/io/io_digest.py,sha256=zL6y6llyQK2tYPg9VnMXhJe5iq_9YSJH9x5St3iBkMM,4281
70
+ django_ledger/io/io_generator.py,sha256=ZUkH_vmO4LtEOgHCIzzdt1XXrderyr4yl9S0Dcno2Ls,34529
71
+ django_ledger/io/io_library.py,sha256=UXtq-a0ushAfvbYUFd5XtoBLM1KfcH5s1aKqMc0Mhhc,11076
72
+ django_ledger/io/io_middleware.py,sha256=3bMTjmBiwoXxyEo5ER-jZxWxT_xbcrtv4F__vJLsVXs,20096
69
73
  django_ledger/io/ofx.py,sha256=JnmDjhIpLySoixK1WVe6DivRuu02rYsBjqI8yi5Opzs,1488
70
74
  django_ledger/io/ratios.py,sha256=dsuCv9-r73SMLv3OrxeoT5JebfRmrDsRKG_YzHggWFw,3542
71
75
  django_ledger/io/roles.py,sha256=FdvRUMGlOZESJy32Egmv6RcLZNaahTd3bWjCkCy-5fI,20150
72
76
  django_ledger/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
77
  django_ledger/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
78
  django_ledger/management/commands/generate_oauth2_codes.py,sha256=H92pSOMA0VFjdCLXOqdIWql-aKU12uaAPdXgz2DB9Go,1495
75
- django_ledger/migrations/0001_initial.py,sha256=m4ax5hxH-fbT1TkjbdZV7X6TIlfuDemDqshUASsHjaI,74709
79
+ django_ledger/migrations/0001_initial.py,sha256=d2JDZ_0gmlB8RFE9VpVgimmC2vmv3GK0xlXq1bIudxg,85653
76
80
  django_ledger/migrations/0002_alter_journalentrymodel_managers_and_more.py,sha256=-lH3NCGoUX2zJ3GT5VakvPx7VR7lXz4S_FkTccJQzzE,703
77
81
  django_ledger/migrations/0003_remove_accountmodel_django_ledg_role_1bff96_idx_and_more.py,sha256=tw1ZrXynmuUfy8G_NtRJ7ojLFCSk89oDTsLpHWCst1Y,6069
78
82
  django_ledger/migrations/0004_remove_itemmodel_depth_remove_itemmodel_numchild_and_more.py,sha256=w9-ReO6JP7bMYvBX0Ne3_0jIeLUbuVV4J7V_1lT4zR8,586
@@ -85,28 +89,29 @@ django_ledger/migrations/0010_delete_importjobmodel.py,sha256=Qn_fixm_e0M6debAGK
85
89
  django_ledger/migrations/0011_importjobmodel_alter_accountmodel_role_and_more.py,sha256=2jG2O_kxDlRDrdsRDcMp-xl3d1H1WtkR0qo1nyQ8620,6832
86
90
  django_ledger/migrations/0012_stagedtransactionmodel_activity.py,sha256=Tv0rXC1He6_lOVpv-RWT2tKoUTvJVSsM7T1SJR0qxcI,986
87
91
  django_ledger/migrations/0013_stagedtransactionmodel_bundle_split.py,sha256=7Uxd5JEKbP31vSnlP1Us_JA6mtJzAwFnr0XNCKYJDao,469
92
+ django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py,sha256=UHuEQrnFr1dV4p2mxeUtWk39psSnqwBymDz_xt57sZc,663
88
93
  django_ledger/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
94
  django_ledger/models/__init__.py,sha256=8mn-OGhAVgLs8YASEBwo8dpX6tHyGtMxRHVPGDGECVU,793
90
- django_ledger/models/accounts.py,sha256=cYK_SY6SyCGukoFCCqoFBmDTPhok68ZyzdHH-JTBLfg,26582
91
- django_ledger/models/bank_account.py,sha256=rvg4O6R9n-7lHjk1Jse4DZm6hGHJdfGJidPq1Pu-Z5g,7719
92
- django_ledger/models/bill.py,sha256=p4tKYg0pD1IWvXJI5L5fDbOJY0i8uZFL5otehC5RgXQ,63750
93
- django_ledger/models/closing_entry.py,sha256=bY8OjaB8IAC6uJSS6qrjK6Aj9ZRpNnN2t2OSD6iJFOA,17395
94
- django_ledger/models/coa.py,sha256=D482ogfmLoFp45BL6XDXgJNWq_nM4m_EnwYbmJt9hRc,12561
95
+ django_ledger/models/accounts.py,sha256=2qLg25CS_7VBAgNUDY1lP3CS52__xe_ZGcBnMfgQkJc,28505
96
+ django_ledger/models/bank_account.py,sha256=0-eTBxxRyvUKOVVNcGqWV1kiOKcXA2KPQIdiVHDUDCY,7678
97
+ django_ledger/models/bill.py,sha256=JSLroK4BJZjUObQwju9oQH6Vb-2EAczrTNNMOBAZCzs,63508
98
+ django_ledger/models/closing_entry.py,sha256=wDBJorDqeXr7OQIDLgc3S4G5NO09_gmEP3L6vaC3B7c,17351
99
+ django_ledger/models/coa.py,sha256=2CIP0ex4pypwm_ytX8NWAyDM1c0yFOIwwdrTWBXhZQY,13969
95
100
  django_ledger/models/coa_default.py,sha256=4Zj8OMhgBiYuREjM82cFfyGWd8uCAeqggVkeNhg4SLU,27338
96
- django_ledger/models/customer.py,sha256=KjyDdFzJYm_y7ljlDEheInqXxeiExK3sWfDDDO5ZGDE,12057
97
- django_ledger/models/data_import.py,sha256=vj5TxxO79uPD-QHXPTPguat8DcryB3DnPfF0AIZdP88,19352
98
- django_ledger/models/entity.py,sha256=8huPe17-_QuOzlDHwfKQEBM1bgfmNrMwf9bpTWmzHPU,116280
99
- django_ledger/models/estimate.py,sha256=FUelZILyU0r6NsB9tapMRNUTMgVzCDDRQ9idcIsxEWA,55787
100
- django_ledger/models/invoice.py,sha256=mo9IPp8In-E6JI_IT4iK_5Yb1FI9Giz5zhgZMdaZ2Is,61198
101
- django_ledger/models/items.py,sha256=iaMsSwlW0ez_vgA4Jg6f8oInoJMiuN9_pf7TmPM4keY,54814
102
- django_ledger/models/journal_entry.py,sha256=D73LD-7QMc9F7ceGR8VLgGtFyAQ-K1a-XgS8YiOBmnA,49515
103
- django_ledger/models/ledger.py,sha256=UhOBf1sCynCNQrGj0H1ijzt83TLSdPnJovGXI5-YZz8,19467
104
- django_ledger/models/mixins.py,sha256=ynOK6TNjIDwJz2jWeRCfJWD47IiPXl53mGYm_HgRMRc,52008
105
- django_ledger/models/purchase_order.py,sha256=AzRieRAiPTbMTK5h_6vVpoXDgZAZoo3V2qAkpMLB6Ws,42605
106
- django_ledger/models/transactions.py,sha256=nict319hmHsr_1WgCYouFZQLgJU33gLujZYc0s6qi5g,20553
107
- django_ledger/models/unit.py,sha256=PmCnzBe5s7-HSuJdr2x08__-vw2ChwIqMld-LNNTSH0,7865
101
+ django_ledger/models/customer.py,sha256=JQOktcYKUlENJv4frek9rAW6sRerrQ0xXHlC5KPmhWk,11807
102
+ django_ledger/models/data_import.py,sha256=2H-4oTVLa7qXq03m9fd7T5zSQLkZKOAn2OAeOQBzMPA,19477
103
+ django_ledger/models/entity.py,sha256=R0Ae7a6V_myfS61WFPGqDUfijJTBxSlB1RK7zVWNO_Y,119284
104
+ django_ledger/models/estimate.py,sha256=giAdClUpU-RY-yXTtOmymbaIQsmjzX4IrV--JSKv9f0,55786
105
+ django_ledger/models/invoice.py,sha256=lDoAAn7voxploFPpNy2vdLJOBRZZXY_fsLLXL0-15fs,61350
106
+ django_ledger/models/items.py,sha256=JLPFGPQvTKiq3r09wgG2cxBB4ZmcEXK6LyqMUhzWj3k,54938
107
+ django_ledger/models/journal_entry.py,sha256=iMEj0sH7WaMRNbpKux92Fl5qQQ0LZs0t6Y3ilPsvNjA,50805
108
+ django_ledger/models/ledger.py,sha256=h3YX8qSd0sUDftjUMG23yGIlPfmBUkMBFSRZzyJm5KA,21437
109
+ django_ledger/models/mixins.py,sha256=PIKn2BxN6AGS9P6TJRWacRHMrEW8pQ0EiAo65v5ciX4,51914
110
+ django_ledger/models/purchase_order.py,sha256=zL8_Wl2vZjYMRCTMMO0FYtDMLEaX6f2WGar-fuLZ6RY,42694
111
+ django_ledger/models/transactions.py,sha256=nY6dJbyedXAvWZ80SzpJvwXsSdwP8SIDbKlzm4jwhe4,20619
112
+ django_ledger/models/unit.py,sha256=x5FFJXgOi1OdajQejIakW6wGY4DjrJhL3S0Pm5OimMk,8074
108
113
  django_ledger/models/utils.py,sha256=rmlc9ECHV4fXEp-ru_h2-V5_wFMOjutxIzC7jd_ntz0,6859
109
- django_ledger/models/vendor.py,sha256=HiQXfj6qh_xUOdQLQQbqGCAJXXMonp5wNzI9tTgNfIs,11361
114
+ django_ledger/models/vendor.py,sha256=akJCO86GIwjlZ_jPUZCDXlMeuJe-8zKTm-52aJXGFpg,11320
110
115
  django_ledger/models/schemas/__init__.py,sha256=8Tvw33tVJtCvxoXje2lrs9C1bsP_iuGcVi1JqzdPUao,157
111
116
  django_ledger/models/schemas/digest.py,sha256=ME_dJ4g2p3dQ97Skh_RTZMwuNLmwTi19BdLM1G6tyAo,1077
112
117
  django_ledger/models/schemas/net_payable.py,sha256=2FcfLaaJySjZ3Yk_IMu8SxYWNO_sngEtbuFCXInrQUU,958
@@ -114,8 +119,8 @@ django_ledger/models/schemas/net_receivable.py,sha256=JCdi2ZrFy6ORR_6xrze4Yz3Kxh
114
119
  django_ledger/models/schemas/pnl.py,sha256=_M5qZtgXca4LQLsjS0weUAzLX98M4-5HCCGM0HKfKmw,573
115
120
  django_ledger/report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
121
  django_ledger/report/balance_sheet.py,sha256=I-smcYGxjvqYKfTzXjQM1uAgwklyMRVpQV2NdtCzTWc,8432
117
- django_ledger/report/cash_flow_statement.py,sha256=bmABtnZcETse-yvJBulsI5rf86-PysYtG0jHgHphbhc,8687
118
- django_ledger/report/core.py,sha256=3ZFWDOWJuviTKepDGgKTaN6RlPhUg5PnWS7TuELh_fU,7373
122
+ django_ledger/report/cash_flow_statement.py,sha256=Rdw0CmzhnRpQoeGfmFe_d1iS4NXRH4dX26TYm7UlSaA,8697
123
+ django_ledger/report/core.py,sha256=78OldZZp_6hAXWROY_kf-hZP1TYekq4QdvrYoMRfZSY,7427
119
124
  django_ledger/report/income_statement.py,sha256=iX_zITduWA9jo4RDv63oyZlZP0uB3oFPgQZWx4PS8Sw,11148
120
125
  django_ledger/static/django_ledger/bundle/djetler.bundle.js,sha256=HeZMi7ZWfB1r_oqT19NgXf0xgj9YGraVRu5dQ6UKVxo,533512
121
126
  django_ledger/static/django_ledger/bundle/styles.bundle.js,sha256=myDLVMYHwKTxypheUretM6MZ4HhK8Yn0BqB_OGUW3KU,506543
@@ -247,9 +252,9 @@ django_ledger/templates/django_ledger/journal_entry/je_create.html,sha256=UiKc0U
247
252
  django_ledger/templates/django_ledger/journal_entry/je_delete.html,sha256=zy6N1dCtC3j8SSDDda8lXiPkh9RrOJSVtnnSHwo_SmI,1086
248
253
  django_ledger/templates/django_ledger/journal_entry/je_detail.html,sha256=fabWnBy_QVzKqNmXc8QAeKjFCgl3E84m4CXjnCEs7SU,1997
249
254
  django_ledger/templates/django_ledger/journal_entry/je_detail_txs.html,sha256=UcPDx8QBK2T-d9loND8ritCt8bNgywg-AYO3fNaqy-Q,4903
250
- django_ledger/templates/django_ledger/journal_entry/je_list.html,sha256=-wEn8Hvl7IteE-iIecSleA-A1qHgYB1kxxGYZDIqexE,7765
255
+ django_ledger/templates/django_ledger/journal_entry/je_list.html,sha256=2nxNBmcGKMF_YqRgpqkqZbGmsrg6cPsNRZZURIGRzLA,7870
251
256
  django_ledger/templates/django_ledger/journal_entry/je_update.html,sha256=YwSgSaQb5d2ogPsHtD_ZUCDvKKuoxYKEvU7FnZZ5oeA,927
252
- django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html,sha256=FGnYuK5YzdILWugMou-6x2Ko2nruCshsAACTLvxFA_k,2419
257
+ django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html,sha256=r22ZF60YPGfKWz3Ti1_CsNR56Zaf5QmobYUxp0ckkos,2418
253
258
  django_ledger/templates/django_ledger/journal_entry/tags/je_table.html,sha256=zD5pKiucZ4rFM1mNRXu5XLbuoYmGu7EGOwkpN0Xg2cw,5584
254
259
  django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html,sha256=MVkUb_zPHwXmkAftqEmbmdHwPxHlzNFGQShliQ8rX4w,3019
255
260
  django_ledger/templates/django_ledger/layouts/base.html,sha256=SaqRxA4MvJZTOkM94gJvJVAY5KF0zwGFcQChLHmaZFM,1773
@@ -294,13 +299,13 @@ django_ledger/templates/django_ledger/vendor/vendor_update.html,sha256=4kBUlGgrg
294
299
  django_ledger/templates/django_ledger/vendor/includes/card_vendor.html,sha256=oCXyuqyF7CnJnDQdK0G0jdYLqtPWYSzwlv8oddyGJg8,1290
295
300
  django_ledger/templates/django_ledger/vendor/tags/vendor_table.html,sha256=YC-3T5x4oua3VBg1q690CRzoogKL8qFgQRp5jTKLFgk,3400
296
301
  django_ledger/templatetags/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
297
- django_ledger/templatetags/django_ledger.py,sha256=T8umZJMzizDv0SnObtu_j2wqxawUqHa8glR1ixC28LA,31674
302
+ django_ledger/templatetags/django_ledger.py,sha256=FF1II0JkConZkktc09kOEDzlTxCcWunqlw33bpJLrg0,31673
298
303
  django_ledger/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
299
- django_ledger/tests/base.py,sha256=HS5_by9HXXbybIMEtm_HUKyzkxDa0SMIR2XqeFs4Nt8,5028
304
+ django_ledger/tests/base.py,sha256=1VuXQ7IH8SpU0SNbd36K2-0Rgv3k4Lr5RG6B08R92Zg,5026
300
305
  django_ledger/tests/test_auth.py,sha256=6vLkH-ooRFJleorYU5-kVjbqcaD3eZ9c1EU-Kb4tPmU,3059
301
306
  django_ledger/tests/test_bill.py,sha256=g8NmoEvmsTeDsTqy3MGYLOFu7p4dXWs9I0HuaOI-epA,18123
302
307
  django_ledger/tests/test_closing_entry.py,sha256=L2vqX2xgf0lbbVgY0mDVFAaNYLgnKWEzKlFquhGfnv4,2690
303
- django_ledger/tests/test_entity.py,sha256=0NvRxmhh9p9MtmB9maDiWwN3mWt2znqEneF2c880Zxk,13384
308
+ django_ledger/tests/test_entity.py,sha256=nfCS-ml_NRdDUeEl0P4crjrjxN8a58-7EfIW9StDQNE,13439
304
309
  django_ledger/tests/test_io.py,sha256=shiHiqu39ovvCNHXD2HijZCY0yNSg4EQ-n-2_zZ0yi0,164
305
310
  django_ledger/tests/test_purchase_order.py,sha256=vPjPthS6nS8Q1KmZW5zUFogqQKR1MZG4nx8OvHUJpjw,8043
306
311
  django_ledger/tests/bdd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -324,7 +329,7 @@ django_ledger/urls/inventory.py,sha256=n7d4lX_8thDikWbQIGE4gyZIrjpSY1kVO0qYpjLBr
324
329
  django_ledger/urls/invoice.py,sha256=Yf11g0Up_8uaosfyi1w0oc1YWEJSPk8Jo3HDldcE2KU,2999
325
330
  django_ledger/urls/item.py,sha256=PZxdnaUMCegk17b7eSwKpd9k74apHFbzz12KRdp1ryo,2609
326
331
  django_ledger/urls/journal_entry.py,sha256=sKuYtKDSaAVcW--iIe8GQecuVZ7wF6W3vOtgATUIr0c,2094
327
- django_ledger/urls/ledger.py,sha256=fLblSzFyTUWzkn5zVzIwESRCu9Mlueu9e7884BSVFCQ,2320
332
+ django_ledger/urls/ledger.py,sha256=hn2N_dCidrADhmLCGvyi11WO_tnGO_YzAMnRm0R7hfs,2456
328
333
  django_ledger/urls/purchase_order.py,sha256=iUNdzy8dcxkkmDAOt2fO4Up3e0pHDqZNSf9JOKbO4Wo,2388
329
334
  django_ledger/urls/transactions.py,sha256=e_x_z5qbkR6i7o8OWWdXshDiY_WVmu9WVhR9A96fnhI,80
330
335
  django_ledger/urls/unit.py,sha256=EaBd1EcSeQYbOH1rTQZdyDEEtLVi7-QfC_wpRPwTpuE,1499
@@ -339,7 +344,7 @@ django_ledger/views/coa.py,sha256=VY6oO4o5GgLj6ht9teLAE-7P1HUeA2vr1NI7hwpl6t4,17
339
344
  django_ledger/views/customer.py,sha256=RoBsXBxZC9b79DSNNHaoSZtQ2AoXf7DJAGmZEO3xdxs,3672
340
345
  django_ledger/views/data_import.py,sha256=_H8gjGRIE2Jm97ivvEQn0uEWrM3VvKkYQeXQ1GbKn3g,11950
341
346
  django_ledger/views/djl_api.py,sha256=LjTwecDizre2euXQwZRz3PsWLcuYiCbh39IJQAcHk5M,4273
342
- django_ledger/views/entity.py,sha256=ukPnbvLLItGFur2lUqayMCztFEHADv58jj_BU0QxyhA,9416
347
+ django_ledger/views/entity.py,sha256=0UJx_cqmOmZ6Zf5ZZ-MF1gbkx939b83A5vCyThNynZ4,9436
343
348
  django_ledger/views/estimate.py,sha256=ZFG0k2_nAV10EjO-p8yp7EVMa4x2qOcFSHl2xFpNDaM,12811
344
349
  django_ledger/views/feedback.py,sha256=qoIN44fJnblPx-pJFe5yYeO-dMqp-FReFZiyw0qQb_s,2460
345
350
  django_ledger/views/financial_statement.py,sha256=9CGhNqfmDHI_89uxpEjMSPro630VVbwagkuw-3gCKfk,7316
@@ -348,15 +353,15 @@ django_ledger/views/inventory.py,sha256=ZyCmrkdYLu-D7Fnt0if0-wW6-wSWMgK9EQivVATA
348
353
  django_ledger/views/invoice.py,sha256=sGMDYbtMb3bKh0z4HPwldFrifYvIOHdbeYte7h1GhzA,20302
349
354
  django_ledger/views/item.py,sha256=FY53vk_giTRgvJ47FRqChQ8vyDYPDp4DGTvVhGAb36E,21347
350
355
  django_ledger/views/journal_entry.py,sha256=etRmfCyCJTGrZs6SvBQqMkBguNV3a_d5_dxHrGxvUnA,12134
351
- django_ledger/views/ledger.py,sha256=Py9ix_Ln2YttVNh7yiTOnNy4jMdr-sROMdEXH1irKaM,12461
352
- django_ledger/views/mixins.py,sha256=Py5uQtGzRwStBIwiz5II1A4wxzHgF8HKYgKnURMsp7M,20692
356
+ django_ledger/views/ledger.py,sha256=j6l5x4bIYPhkc6aJhKYXC9jDtYXIyUJFmmZNke-Tz2E,12662
357
+ django_ledger/views/mixins.py,sha256=dGJ_-AEUGxRGLgZ1fRbNNOMuaMvVfv5ts9LOYRxrYdA,21090
353
358
  django_ledger/views/purchase_order.py,sha256=1J3u4QnCkM7z1Y6DePijVdM67x4CQgfmQJcs3Y4kclU,21082
354
359
  django_ledger/views/transactions.py,sha256=5taQRGLSMkM_N8paQJ07HMspI_Nl7PawF8OohCiRmao,206
355
360
  django_ledger/views/unit.py,sha256=VSeJrgEj_xmzl8EpOQtH-S8oRetTA_KNVuFSy4SJwEE,10213
356
361
  django_ledger/views/vendor.py,sha256=gUdBPTFLeSwlNfdHSA1KFdE_y3QpwpkFhEB0r3-UYdI,3461
357
- django_ledger-0.5.5.4.dist-info/AUTHORS.md,sha256=SRM2cynD89ZfEsL09zrbUVeO17r9zE2ZM7y6ReMqVRo,713
358
- django_ledger-0.5.5.4.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
359
- django_ledger-0.5.5.4.dist-info/METADATA,sha256=OhxjamzDb8lUPBFmyU15ACOLZ84d42Z0PwcPZcHJsP0,12583
360
- django_ledger-0.5.5.4.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
361
- django_ledger-0.5.5.4.dist-info/top_level.txt,sha256=g6f6tIwlFvhkDfmttGdJyDja8Scm3-jUhZ0dL-J9h_g,52
362
- django_ledger-0.5.5.4.dist-info/RECORD,,
362
+ django_ledger-0.5.6.0.dist-info/AUTHORS.md,sha256=SRM2cynD89ZfEsL09zrbUVeO17r9zE2ZM7y6ReMqVRo,713
363
+ django_ledger-0.5.6.0.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
364
+ django_ledger-0.5.6.0.dist-info/METADATA,sha256=cKRHTfC_Mo8aJvq3kwwHxHukQZX52P4-zAZonkAxaIA,12620
365
+ django_ledger-0.5.6.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
366
+ django_ledger-0.5.6.0.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
367
+ django_ledger-0.5.6.0.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  assets
2
- dev_notebooks
3
2
  django_ledger
4
3
  docs
5
4
  screenshots
django_ledger/admin.py DELETED
@@ -1,160 +0,0 @@
1
- from django.contrib import admin
2
-
3
- from django_ledger.models.accounts import AccountModel
4
- from django_ledger.models.bank_account import BankAccountModel
5
- from django_ledger.models.bill import BillModel
6
- from django_ledger.models.coa import ChartOfAccountModel
7
- from django_ledger.models.customer import CustomerModel
8
- from django_ledger.models.entity import EntityModel, EntityManagementModel
9
- from django_ledger.models.invoice import InvoiceModel
10
- from django_ledger.models.journal_entry import JournalEntryModel
11
- from django_ledger.models.ledger import LedgerModel
12
- from django_ledger.models.transactions import TransactionModel
13
- from django_ledger.models.vendor import VendorModel
14
-
15
-
16
- class TransactionModelInLine(admin.TabularInline):
17
- model = TransactionModel
18
-
19
-
20
- class JournalEntryModelAdmin(admin.ModelAdmin):
21
- readonly_fields = [
22
- 'ledger'
23
- ]
24
- inlines = [
25
- TransactionModelInLine
26
- ]
27
-
28
- class Meta:
29
- model = JournalEntryModel
30
-
31
-
32
- class EntityManagementInLine(admin.TabularInline):
33
- model = EntityManagementModel
34
-
35
-
36
- class EntityModelAdmin(admin.ModelAdmin):
37
- prepopulated_fields = {
38
- 'slug': ('name',)
39
- }
40
- inlines = [
41
- EntityManagementInLine
42
- ]
43
-
44
- class Meta:
45
- model = EntityModel
46
-
47
-
48
- class AccountModelAdmin(admin.ModelAdmin):
49
- actions = [
50
- 'activate',
51
- 'inactivate',
52
- 'lock',
53
- 'unlock'
54
- ]
55
- actions_on_top = True
56
- actions_on_bottom = True
57
- sortable_by = [
58
- 'code'
59
- ]
60
- list_display = [
61
- '__str__',
62
- 'active',
63
- 'locked'
64
- ]
65
- list_filter = [
66
- 'role',
67
- 'balance_type',
68
- ]
69
-
70
- class Meta:
71
- model = AccountModel
72
-
73
- def activate(self, request, queryset):
74
- queryset.update(active=True)
75
-
76
- def inactivate(self, request, queryset):
77
- queryset.update(active=False)
78
-
79
- def lock(self, request, queryset):
80
- queryset.update(locked=True)
81
-
82
- def unlock(self, request, queryset):
83
- queryset.update(locked=False)
84
-
85
- # def role_bs(self, acc):
86
- # return acc.role_bs.upper()
87
-
88
- # role_bs.short_description = 'Balance Sheet Role'
89
-
90
-
91
- class AccountsModelInLine(admin.TabularInline):
92
- model = AccountModel
93
- readonly_fields = [
94
- 'role_bs',
95
- 'role',
96
- 'balance_type',
97
- ]
98
-
99
-
100
- class ChartOfAccountsModelAdmin(admin.ModelAdmin):
101
- inlines = [
102
- AccountsModelInLine
103
- ]
104
-
105
- class Meta:
106
- model = ChartOfAccountModel
107
-
108
-
109
- class LedgerModelAdmin(admin.ModelAdmin):
110
- class Meta:
111
- model = LedgerModel
112
-
113
-
114
- class InvoiceModelAdmin(admin.ModelAdmin):
115
- readonly_fields = [
116
- 'invoice_number',
117
- 'date_due',
118
- 'ledger'
119
- ]
120
-
121
- class Meta:
122
- model = InvoiceModel
123
-
124
-
125
- class BillModelAdmin(admin.ModelAdmin):
126
- readonly_fields = [
127
- 'bill_number',
128
- 'date_due',
129
- 'ledger'
130
- ]
131
-
132
- class Meta:
133
- model = BillModel
134
-
135
-
136
- class BankAccountModelAdmin(admin.ModelAdmin):
137
- class Meta:
138
- model = BankAccountModel
139
-
140
-
141
- class CustomerModelAdmin(admin.ModelAdmin):
142
- class Meta:
143
- model = CustomerModel
144
-
145
-
146
- class VendorModelAdmin(admin.ModelAdmin):
147
- class Meta:
148
- model = VendorModel
149
-
150
-
151
- admin.site.register(EntityModel, EntityModelAdmin)
152
- admin.site.register(JournalEntryModel, JournalEntryModelAdmin)
153
- admin.site.register(LedgerModel, LedgerModelAdmin)
154
- admin.site.register(ChartOfAccountModel, ChartOfAccountsModelAdmin)
155
- admin.site.register(AccountModel, AccountModelAdmin)
156
- admin.site.register(InvoiceModel, InvoiceModelAdmin)
157
- admin.site.register(BillModel, BillModelAdmin)
158
- admin.site.register(BankAccountModel, BankAccountModelAdmin)
159
- admin.site.register(CustomerModel, CustomerModelAdmin)
160
- admin.site.register(VendorModel, VendorModelAdmin)