django-ledger 0.7.11__py3-none-any.whl → 0.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of django-ledger might be problematic. Click here for more details.
- django_ledger/__init__.py +1 -1
- django_ledger/context.py +12 -0
- django_ledger/forms/account.py +45 -46
- django_ledger/forms/bill.py +0 -4
- django_ledger/forms/closing_entry.py +13 -1
- django_ledger/forms/data_import.py +182 -63
- django_ledger/forms/estimate.py +3 -6
- django_ledger/forms/invoice.py +3 -7
- django_ledger/forms/item.py +10 -18
- django_ledger/forms/purchase_order.py +2 -4
- django_ledger/io/io_core.py +515 -400
- django_ledger/io/io_generator.py +7 -6
- django_ledger/io/io_library.py +1 -2
- django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +70 -0
- django_ledger/migrations/0026_stagedtransactionmodel_customer_model_and_more.py +56 -0
- django_ledger/models/__init__.py +2 -1
- django_ledger/models/accounts.py +109 -69
- django_ledger/models/bank_account.py +40 -23
- django_ledger/models/bill.py +386 -333
- django_ledger/models/chart_of_accounts.py +173 -105
- django_ledger/models/closing_entry.py +99 -48
- django_ledger/models/customer.py +100 -66
- django_ledger/models/data_import.py +818 -323
- django_ledger/models/deprecations.py +61 -0
- django_ledger/models/entity.py +891 -644
- django_ledger/models/estimate.py +57 -28
- django_ledger/models/invoice.py +46 -26
- django_ledger/models/items.py +503 -142
- django_ledger/models/journal_entry.py +61 -47
- django_ledger/models/ledger.py +106 -42
- django_ledger/models/mixins.py +424 -281
- django_ledger/models/purchase_order.py +39 -17
- django_ledger/models/receipt.py +1083 -0
- django_ledger/models/transactions.py +242 -139
- django_ledger/models/unit.py +93 -54
- django_ledger/models/utils.py +12 -2
- django_ledger/models/vendor.py +121 -70
- django_ledger/report/core.py +2 -14
- django_ledger/settings.py +57 -71
- django_ledger/static/django_ledger/bundle/djetler.bundle.js +1 -1
- django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +25 -0
- django_ledger/static/django_ledger/bundle/styles.bundle.js +1 -1
- django_ledger/static/django_ledger/css/djl_styles.css +273 -0
- django_ledger/templates/django_ledger/bills/includes/card_bill.html +2 -2
- django_ledger/templates/django_ledger/components/menu.html +41 -26
- django_ledger/templates/django_ledger/components/period_navigator.html +5 -3
- django_ledger/templates/django_ledger/customer/customer_detail.html +87 -0
- django_ledger/templates/django_ledger/customer/customer_list.html +0 -1
- django_ledger/templates/django_ledger/customer/tags/customer_table.html +8 -6
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +24 -3
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html +26 -10
- django_ledger/templates/django_ledger/entity/entity_dashboard.html +2 -2
- django_ledger/templates/django_ledger/entity/includes/card_entity.html +12 -6
- django_ledger/templates/django_ledger/financial_statements/balance_sheet.html +1 -1
- django_ledger/templates/django_ledger/financial_statements/cash_flow.html +4 -1
- django_ledger/templates/django_ledger/financial_statements/income_statement.html +4 -1
- django_ledger/templates/django_ledger/financial_statements/tags/balance_sheet_statement.html +27 -3
- django_ledger/templates/django_ledger/financial_statements/tags/cash_flow_statement.html +16 -4
- django_ledger/templates/django_ledger/financial_statements/tags/income_statement.html +73 -18
- django_ledger/templates/django_ledger/includes/widget_ratios.html +18 -24
- django_ledger/templates/django_ledger/invoice/includes/card_invoice.html +3 -3
- django_ledger/templates/django_ledger/layouts/base.html +7 -2
- django_ledger/templates/django_ledger/layouts/content_layout_1.html +1 -1
- django_ledger/templates/django_ledger/receipt/customer_receipt_report.html +115 -0
- django_ledger/templates/django_ledger/receipt/receipt_delete.html +30 -0
- django_ledger/templates/django_ledger/receipt/receipt_detail.html +89 -0
- django_ledger/templates/django_ledger/receipt/receipt_list.html +134 -0
- django_ledger/templates/django_ledger/receipt/vendor_receipt_report.html +115 -0
- django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +12 -7
- django_ledger/templates/django_ledger/vendor/vendor_detail.html +86 -0
- django_ledger/templatetags/django_ledger.py +338 -191
- django_ledger/tests/test_accounts.py +1 -2
- django_ledger/tests/test_io.py +17 -0
- django_ledger/tests/test_purchase_order.py +3 -3
- django_ledger/tests/test_transactions.py +1 -2
- django_ledger/urls/__init__.py +1 -4
- django_ledger/urls/customer.py +3 -0
- django_ledger/urls/data_import.py +3 -0
- django_ledger/urls/receipt.py +102 -0
- django_ledger/urls/vendor.py +1 -0
- django_ledger/views/__init__.py +1 -0
- django_ledger/views/bill.py +8 -11
- django_ledger/views/chart_of_accounts.py +6 -4
- django_ledger/views/closing_entry.py +11 -7
- django_ledger/views/customer.py +68 -30
- django_ledger/views/data_import.py +120 -66
- django_ledger/views/djl_api.py +3 -5
- django_ledger/views/entity.py +2 -4
- django_ledger/views/estimate.py +3 -7
- django_ledger/views/inventory.py +3 -5
- django_ledger/views/invoice.py +4 -6
- django_ledger/views/item.py +7 -11
- django_ledger/views/journal_entry.py +1 -2
- django_ledger/views/mixins.py +125 -93
- django_ledger/views/purchase_order.py +24 -35
- django_ledger/views/receipt.py +294 -0
- django_ledger/views/unit.py +1 -2
- django_ledger/views/vendor.py +54 -16
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/METADATA +43 -75
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/RECORD +104 -122
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info}/WHEEL +1 -1
- django_ledger-0.8.1.dist-info/top_level.txt +1 -0
- django_ledger/contrib/django_ledger_graphene/__init__.py +0 -0
- django_ledger/contrib/django_ledger_graphene/accounts/schema.py +0 -33
- django_ledger/contrib/django_ledger_graphene/api.py +0 -42
- django_ledger/contrib/django_ledger_graphene/apps.py +0 -6
- django_ledger/contrib/django_ledger_graphene/auth/mutations.py +0 -49
- django_ledger/contrib/django_ledger_graphene/auth/schema.py +0 -6
- django_ledger/contrib/django_ledger_graphene/bank_account/mutations.py +0 -61
- django_ledger/contrib/django_ledger_graphene/bank_account/schema.py +0 -34
- django_ledger/contrib/django_ledger_graphene/bill/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/bill/schema.py +0 -34
- django_ledger/contrib/django_ledger_graphene/coa/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/coa/schema.py +0 -30
- django_ledger/contrib/django_ledger_graphene/customers/__init__.py +0 -0
- django_ledger/contrib/django_ledger_graphene/customers/mutations.py +0 -71
- django_ledger/contrib/django_ledger_graphene/customers/schema.py +0 -43
- django_ledger/contrib/django_ledger_graphene/data_import/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/data_import/schema.py +0 -0
- django_ledger/contrib/django_ledger_graphene/entity/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/entity/schema.py +0 -94
- django_ledger/contrib/django_ledger_graphene/item/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/item/schema.py +0 -31
- django_ledger/contrib/django_ledger_graphene/journal_entry/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/journal_entry/schema.py +0 -35
- django_ledger/contrib/django_ledger_graphene/ledger/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/ledger/schema.py +0 -32
- django_ledger/contrib/django_ledger_graphene/purchase_order/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/purchase_order/schema.py +0 -31
- django_ledger/contrib/django_ledger_graphene/transaction/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/transaction/schema.py +0 -36
- django_ledger/contrib/django_ledger_graphene/unit/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/unit/schema.py +0 -27
- django_ledger/contrib/django_ledger_graphene/vendor/mutations.py +0 -0
- django_ledger/contrib/django_ledger_graphene/vendor/schema.py +0 -37
- django_ledger/contrib/django_ledger_graphene/views.py +0 -12
- django_ledger-0.7.11.dist-info/top_level.txt +0 -4
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info/licenses}/AUTHORS.md +0 -0
- {django_ledger-0.7.11.dist-info → django_ledger-0.8.1.dist-info/licenses}/LICENSE +0 -0
|
@@ -12,10 +12,11 @@ starts in draft model by default and goes through different states including InR
|
|
|
12
12
|
Void. The PurchaseOrderModel also keeps track of when these states take place.
|
|
13
13
|
|
|
14
14
|
"""
|
|
15
|
+
import warnings
|
|
15
16
|
from datetime import date
|
|
16
17
|
from string import ascii_uppercase, digits
|
|
17
18
|
from typing import Tuple, List, Union, Optional, Dict
|
|
18
|
-
from uuid import uuid4
|
|
19
|
+
from uuid import uuid4, UUID
|
|
19
20
|
|
|
20
21
|
from django.contrib.auth import get_user_model
|
|
21
22
|
from django.core.exceptions import ValidationError, ObjectDoesNotExist
|
|
@@ -30,6 +31,7 @@ from django.utils.translation import gettext_lazy as _
|
|
|
30
31
|
|
|
31
32
|
from django_ledger.io.io_core import get_localdate
|
|
32
33
|
from django_ledger.models.bill import BillModel, BillModelQuerySet
|
|
34
|
+
from django_ledger.models.deprecations import deprecated_entity_slug_behavior
|
|
33
35
|
from django_ledger.models.entity import EntityModel
|
|
34
36
|
from django_ledger.models.items import ItemTransactionModel, ItemTransactionModelQuerySet, ItemModelQuerySet, ItemModel
|
|
35
37
|
from django_ledger.models.mixins import CreateUpdateMixIn, MarkdownNotesMixIn, ItemizeMixIn
|
|
@@ -42,7 +44,8 @@ from django_ledger.models.signals import (
|
|
|
42
44
|
po_status_in_review
|
|
43
45
|
)
|
|
44
46
|
from django_ledger.models.utils import lazy_loader
|
|
45
|
-
from django_ledger.settings import DJANGO_LEDGER_DOCUMENT_NUMBER_PADDING, DJANGO_LEDGER_PO_NUMBER_PREFIX
|
|
47
|
+
from django_ledger.settings import DJANGO_LEDGER_DOCUMENT_NUMBER_PADDING, DJANGO_LEDGER_PO_NUMBER_PREFIX, \
|
|
48
|
+
DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR
|
|
46
49
|
|
|
47
50
|
PO_NUMBER_CHARS = ascii_uppercase + digits
|
|
48
51
|
|
|
@@ -55,9 +58,17 @@ class PurchaseOrderModelValidationError(ValidationError):
|
|
|
55
58
|
|
|
56
59
|
class PurchaseOrderModelQuerySet(QuerySet):
|
|
57
60
|
"""
|
|
58
|
-
A custom
|
|
61
|
+
A custom-defined PurchaseOrderModel QuerySet.
|
|
59
62
|
"""
|
|
60
63
|
|
|
64
|
+
def for_user(self, user_model):
|
|
65
|
+
if user_model.is_superuser:
|
|
66
|
+
return self
|
|
67
|
+
return self.filter(
|
|
68
|
+
Q(entity__admin=user_model) |
|
|
69
|
+
Q(entity__managers__in=[user_model])
|
|
70
|
+
)
|
|
71
|
+
|
|
61
72
|
def approved(self):
|
|
62
73
|
"""
|
|
63
74
|
Filters the QuerySet to include Approved PurchaseOrderModels only.
|
|
@@ -105,16 +116,8 @@ class PurchaseOrderModelManager(Manager):
|
|
|
105
116
|
A custom defined PurchaseOrderModel Manager.
|
|
106
117
|
"""
|
|
107
118
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if user_model.is_superuser:
|
|
111
|
-
return qs
|
|
112
|
-
return qs.filter(
|
|
113
|
-
Q(entity__admin=user_model) |
|
|
114
|
-
Q(entity__managers__in=[user_model])
|
|
115
|
-
)
|
|
116
|
-
|
|
117
|
-
def for_entity(self, entity_slug, user_model) -> PurchaseOrderModelQuerySet:
|
|
119
|
+
@deprecated_entity_slug_behavior
|
|
120
|
+
def for_entity(self, entity_model: EntityModel | str | UUID = None, **kwargs) -> PurchaseOrderModelQuerySet:
|
|
118
121
|
"""
|
|
119
122
|
Fetches a QuerySet of PurchaseOrderModel associated with a specific EntityModel & UserModel.
|
|
120
123
|
May pass an instance of EntityModel or a String representing the EntityModel slug.
|
|
@@ -124,10 +127,29 @@ class PurchaseOrderModelManager(Manager):
|
|
|
124
127
|
PurchaseOrderModelQuerySet
|
|
125
128
|
A PurchaseOrderModelQuerySet with applied filters.
|
|
126
129
|
"""
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
|
|
131
|
+
qs = self.get_queryset()
|
|
132
|
+
if 'user_model' in kwargs:
|
|
133
|
+
warnings.warn(
|
|
134
|
+
'user_model parameter is deprecated and will be removed in a future release. '
|
|
135
|
+
'Use for_user(user_model).for_entity(entity_model) instead to keep current behavior.',
|
|
136
|
+
DeprecationWarning,
|
|
137
|
+
stacklevel=2
|
|
138
|
+
)
|
|
139
|
+
if DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR:
|
|
140
|
+
qs = qs.for_user(kwargs['user_model'])
|
|
141
|
+
|
|
142
|
+
if isinstance(entity_model, EntityModel):
|
|
143
|
+
qs = qs.filter(entity=entity_model)
|
|
144
|
+
elif isinstance(entity_model, str):
|
|
145
|
+
qs = qs.filter(entity__slug__exact=entity_model)
|
|
146
|
+
elif isinstance(entity_model, UUID):
|
|
147
|
+
qs = qs.filter(entity_id=entity_model)
|
|
148
|
+
else:
|
|
149
|
+
raise PurchaseOrderModelValidationError(
|
|
150
|
+
message='Entity slug must be either an EntityModel or a String representing the EntityModel slug',
|
|
151
|
+
)
|
|
152
|
+
return qs
|
|
131
153
|
|
|
132
154
|
|
|
133
155
|
class PurchaseOrderModelAbstract(CreateUpdateMixIn,
|