django-ledger 0.7.10__py3-none-any.whl → 0.8.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.
- django_ledger/__init__.py +1 -1
- django_ledger/context.py +12 -0
- django_ledger/forms/bill.py +0 -4
- django_ledger/forms/closing_entry.py +13 -1
- django_ledger/forms/data_import.py +1 -1
- 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 +25 -32
- django_ledger/io/io_generator.py +7 -6
- django_ledger/io/io_library.py +1 -2
- django_ledger/migrations/0024_billmodel_entity_model_invoicemodel_entity_model.py +24 -0
- django_ledger/migrations/0025_alter_billmodel_cash_account_and_more.py +70 -0
- django_ledger/models/accounts.py +109 -69
- django_ledger/models/bank_account.py +40 -23
- django_ledger/models/bill.py +89 -63
- django_ledger/models/chart_of_accounts.py +173 -105
- django_ledger/models/closing_entry.py +99 -48
- django_ledger/models/customer.py +60 -39
- django_ledger/models/data_import.py +55 -41
- django_ledger/models/deprecations.py +61 -0
- django_ledger/models/entity.py +18 -16
- django_ledger/models/estimate.py +57 -28
- django_ledger/models/invoice.py +58 -28
- 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 +16 -10
- django_ledger/models/purchase_order.py +39 -17
- django_ledger/models/transactions.py +152 -113
- django_ledger/models/unit.py +57 -30
- django_ledger/models/vendor.py +75 -43
- django_ledger/report/core.py +2 -14
- django_ledger/settings.py +56 -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/customer/tags/customer_table.html +5 -5
- 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 +6 -1
- django_ledger/templates/django_ledger/vendor/tags/vendor_table.html +9 -5
- 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 +0 -4
- django_ledger/views/bill.py +8 -13
- django_ledger/views/chart_of_accounts.py +6 -4
- django_ledger/views/closing_entry.py +11 -7
- django_ledger/views/customer.py +13 -17
- django_ledger/views/data_import.py +7 -6
- 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 +25 -19
- django_ledger/views/purchase_order.py +24 -35
- django_ledger/views/unit.py +1 -2
- django_ledger/views/vendor.py +1 -2
- {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info}/METADATA +43 -75
- {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info}/RECORD +80 -108
- {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info}/WHEEL +1 -1
- django_ledger-0.8.0.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.10.dist-info/top_level.txt +0 -4
- {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info/licenses}/AUTHORS.md +0 -0
- {django_ledger-0.7.10.dist-info → django_ledger-0.8.0.dist-info/licenses}/LICENSE +0 -0
django_ledger/models/vendor.py
CHANGED
|
@@ -11,7 +11,8 @@ whether temporarily or indefinitely may be flagged as inactive (i.e. active is F
|
|
|
11
11
|
as an option in the UI, but can still be used programmatically (via API).
|
|
12
12
|
"""
|
|
13
13
|
import os
|
|
14
|
-
|
|
14
|
+
import warnings
|
|
15
|
+
from uuid import uuid4, UUID
|
|
15
16
|
|
|
16
17
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
|
17
18
|
from django.db import models, transaction, IntegrityError
|
|
@@ -19,9 +20,14 @@ from django.db.models import Q, F, QuerySet, Manager
|
|
|
19
20
|
from django.utils.text import slugify
|
|
20
21
|
from django.utils.translation import gettext_lazy as _
|
|
21
22
|
|
|
23
|
+
from django_ledger.models.deprecations import deprecated_entity_slug_behavior
|
|
22
24
|
from django_ledger.models.mixins import ContactInfoMixIn, CreateUpdateMixIn, FinancialAccountInfoMixin, TaxInfoMixIn
|
|
23
25
|
from django_ledger.models.utils import lazy_loader
|
|
24
|
-
from django_ledger.settings import
|
|
26
|
+
from django_ledger.settings import (
|
|
27
|
+
DJANGO_LEDGER_DOCUMENT_NUMBER_PADDING,
|
|
28
|
+
DJANGO_LEDGER_VENDOR_NUMBER_PREFIX,
|
|
29
|
+
DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR
|
|
30
|
+
)
|
|
25
31
|
|
|
26
32
|
|
|
27
33
|
def vendor_picture_upload_to(instance, filename):
|
|
@@ -42,7 +48,15 @@ class VendorModelQuerySet(QuerySet):
|
|
|
42
48
|
Custom defined VendorModel QuerySet.
|
|
43
49
|
"""
|
|
44
50
|
|
|
45
|
-
def
|
|
51
|
+
def for_user(self, user_model) -> 'VendorModelQuerySet':
|
|
52
|
+
if user_model.is_superuser:
|
|
53
|
+
return self
|
|
54
|
+
return self.filter(
|
|
55
|
+
Q(entity_model__admin=user_model) |
|
|
56
|
+
Q(entity_model__managers__in=[user_model])
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
def active(self) -> 'VendorModelQuerySet':
|
|
46
60
|
"""
|
|
47
61
|
Active vendors can be assigned to new bills and show on dropdown menus and views.
|
|
48
62
|
|
|
@@ -53,7 +67,7 @@ class VendorModelQuerySet(QuerySet):
|
|
|
53
67
|
"""
|
|
54
68
|
return self.filter(active=True)
|
|
55
69
|
|
|
56
|
-
def inactive(self) ->
|
|
70
|
+
def inactive(self) -> 'VendorModelQuerySet':
|
|
57
71
|
"""
|
|
58
72
|
Active vendors can be assigned to new bills and show on dropdown menus and views.
|
|
59
73
|
Marking VendorModels as inactive can help reduce Database load to populate select inputs and also inactivate
|
|
@@ -67,7 +81,7 @@ class VendorModelQuerySet(QuerySet):
|
|
|
67
81
|
"""
|
|
68
82
|
return self.filter(active=False)
|
|
69
83
|
|
|
70
|
-
def hidden(self) ->
|
|
84
|
+
def hidden(self) -> 'VendorModelQuerySet':
|
|
71
85
|
"""
|
|
72
86
|
Hidden vendors do not show on dropdown menus, but may be used via APIs or any other method that does not
|
|
73
87
|
involve the UI.
|
|
@@ -79,7 +93,7 @@ class VendorModelQuerySet(QuerySet):
|
|
|
79
93
|
"""
|
|
80
94
|
return self.filter(hidden=True)
|
|
81
95
|
|
|
82
|
-
def visible(self) ->
|
|
96
|
+
def visible(self) -> 'VendorModelQuerySet':
|
|
83
97
|
"""
|
|
84
98
|
Visible vendors show on dropdown menus and views. Visible vendors are active and not hidden.
|
|
85
99
|
|
|
@@ -95,49 +109,67 @@ class VendorModelQuerySet(QuerySet):
|
|
|
95
109
|
|
|
96
110
|
class VendorModelManager(Manager):
|
|
97
111
|
"""
|
|
98
|
-
|
|
99
|
-
"""
|
|
112
|
+
Manages operations related to VendorModel instances.
|
|
100
113
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return qs
|
|
105
|
-
return qs.filter(
|
|
106
|
-
Q(entity_model__admin=user_model) |
|
|
107
|
-
Q(entity_model__managers__in=[user_model])
|
|
108
|
-
)
|
|
114
|
+
A specialized manager for handling interactions with VendorModel entities,
|
|
115
|
+
providing additional support for filtering based on associated EntityModel or EntityModel slug.
|
|
116
|
+
"""
|
|
109
117
|
|
|
110
|
-
|
|
118
|
+
@deprecated_entity_slug_behavior
|
|
119
|
+
def for_entity(self, entity_model: 'EntityModel | str | UUID' = None, **kwargs) -> VendorModelQuerySet:
|
|
111
120
|
"""
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
+
Filters the queryset for a given entity model.
|
|
122
|
+
|
|
123
|
+
This method modifies the queryset to include only those records
|
|
124
|
+
associated with the specified entity model. The entity model can
|
|
125
|
+
be provided in various formats such as an instance of `EntityModel`,
|
|
126
|
+
a string representing the entity's slug, or its UUID.
|
|
127
|
+
|
|
128
|
+
If a deprecated parameter `user_model` is provided, it will issue
|
|
129
|
+
a warning and may alter the behavior if the deprecated behavior flag
|
|
130
|
+
`DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR` is set.
|
|
131
|
+
|
|
132
|
+
Parameters
|
|
133
|
+
----------
|
|
134
|
+
entity_model : EntityModel | str | UUID
|
|
135
|
+
The entity model or its identifier (slug or UUID) to filter the
|
|
136
|
+
queryset by.
|
|
137
|
+
|
|
138
|
+
**kwargs
|
|
139
|
+
Additional parameters for optional functionality. The parameter
|
|
140
|
+
`user_model` is supported for backward compatibility but is
|
|
141
|
+
deprecated and should be avoided.
|
|
142
|
+
|
|
143
|
+
Returns
|
|
144
|
+
-------
|
|
145
|
+
VendorModelQuerySet
|
|
146
|
+
A queryset filtered for the given entity model.
|
|
147
|
+
"""
|
|
148
|
+
EntityModel = lazy_loader.get_entity_model()
|
|
121
149
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
150
|
+
qs = self.get_queryset()
|
|
151
|
+
if 'user_model' in kwargs:
|
|
152
|
+
warnings.warn(
|
|
153
|
+
'user_model parameter is deprecated and will be removed in a future release. '
|
|
154
|
+
'Use for_user(user_model).for_entity(entity_model) instead to keep current behavior.',
|
|
155
|
+
DeprecationWarning,
|
|
156
|
+
stacklevel=2
|
|
157
|
+
)
|
|
127
158
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
159
|
+
if DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR:
|
|
160
|
+
qs = qs.for_user(kwargs['user_model'])
|
|
161
|
+
|
|
162
|
+
if isinstance(entity_model, EntityModel):
|
|
163
|
+
qs = qs.filter(entity_model=entity_model)
|
|
164
|
+
elif isinstance(entity_model, str):
|
|
165
|
+
qs = qs.filter(entity_model__slug__exact=entity_model)
|
|
166
|
+
elif isinstance(entity_model, UUID):
|
|
167
|
+
qs = qs.filter(entity_model_id=entity_model)
|
|
168
|
+
else:
|
|
169
|
+
raise VendorModelValidationError(
|
|
170
|
+
'EntityModel slug must be either a string or an EntityModel instance'
|
|
137
171
|
)
|
|
138
|
-
return qs
|
|
139
|
-
Q(entity_model__slug__exact=entity_slug)
|
|
140
|
-
)
|
|
172
|
+
return qs
|
|
141
173
|
|
|
142
174
|
|
|
143
175
|
class VendorModelAbstract(ContactInfoMixIn,
|
django_ledger/report/core.py
CHANGED
|
@@ -6,25 +6,16 @@ from django.core.exceptions import ValidationError
|
|
|
6
6
|
from django_ledger.io.io_context import IODigestContextManager
|
|
7
7
|
from django_ledger.models.ledger import LedgerModel
|
|
8
8
|
from django_ledger.models.unit import EntityUnitModel
|
|
9
|
-
from django_ledger.settings import DJANGO_LEDGER_PDF_SUPPORT_ENABLED
|
|
10
9
|
from django_ledger.templatetags.django_ledger import currency_symbol, currency_format
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
from fpdf import FPDF, XPos, YPos
|
|
11
|
+
from fpdf import FPDF, XPos, YPos
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
class PDFReportValidationError(ValidationError):
|
|
17
15
|
pass
|
|
18
16
|
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
support = list()
|
|
22
|
-
if DJANGO_LEDGER_PDF_SUPPORT_ENABLED:
|
|
23
|
-
support.append(FPDF)
|
|
24
|
-
return support
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class BaseReportSupport(*load_support()):
|
|
18
|
+
class BaseReportSupport(FPDF):
|
|
28
19
|
FOOTER_LOGO_PATH = 'django_ledger/logo/django-ledger-logo-report.png'
|
|
29
20
|
|
|
30
21
|
def __init__(self,
|
|
@@ -33,9 +24,6 @@ class BaseReportSupport(*load_support()):
|
|
|
33
24
|
report_subtitle: Optional[str] = None,
|
|
34
25
|
**kwargs):
|
|
35
26
|
|
|
36
|
-
if not DJANGO_LEDGER_PDF_SUPPORT_ENABLED:
|
|
37
|
-
raise NotImplementedError('PDF support not enabled.')
|
|
38
|
-
|
|
39
27
|
super().__init__(*args, **kwargs)
|
|
40
28
|
self.REPORT_TYPE: Optional[str] = None
|
|
41
29
|
self.REPORT_SUBTITLE: Optional[str] = report_subtitle
|
django_ledger/settings.py
CHANGED
|
@@ -10,49 +10,6 @@ from django.conf import settings
|
|
|
10
10
|
logger = logging.getLogger('Django Ledger Logger')
|
|
11
11
|
logger.setLevel(logging.INFO)
|
|
12
12
|
|
|
13
|
-
try:
|
|
14
|
-
from graphene import __version__
|
|
15
|
-
from graphene_django import __version__
|
|
16
|
-
from oauth2_provider import __version__
|
|
17
|
-
|
|
18
|
-
DJANGO_LEDGER_GRAPHQL_SUPPORT_ENABLED = True
|
|
19
|
-
except ImportError:
|
|
20
|
-
DJANGO_LEDGER_GRAPHQL_SUPPORT_ENABLED = False
|
|
21
|
-
|
|
22
|
-
try:
|
|
23
|
-
from fpdf import FPDF
|
|
24
|
-
|
|
25
|
-
DJANGO_LEDGER_PDF_SUPPORT_ENABLED = True
|
|
26
|
-
except ImportError:
|
|
27
|
-
DJANGO_LEDGER_PDF_SUPPORT_ENABLED = False
|
|
28
|
-
|
|
29
|
-
logger.info(f'Django Ledger GraphQL Enabled: {DJANGO_LEDGER_GRAPHQL_SUPPORT_ENABLED}')
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## MODEL ABSTRACTS ##
|
|
33
|
-
# DJANGO_LEDGER_ACCOUNT_MODEL = getattr(settings, 'DJANGO_LEDGER_ACCOUNT_MODEL', 'django_ledger.AccountModel')
|
|
34
|
-
# DJANGO_LEDGER_CHART_OF_ACCOUNTS_MODEL = getattr(settings, 'DJANGO_LEDGER_ACCOUNT_MODEL', 'django_ledger.ChartOfAccountModel')
|
|
35
|
-
# DJANGO_LEDGER_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_TRANSACTION_MODEL', 'django_ledger.TransactionModel')
|
|
36
|
-
# DJANGO_LEDGER_JOURNAL_ENTRY_MODEL = getattr(settings, 'DJANGO_LEDGER_JOURNAL_ENTRY_MODEL', 'django_ledger.JournalEntryModel')
|
|
37
|
-
# DJANGO_LEDGER_LEDGER_MODEL = getattr(settings, 'DJANGO_LEDGER_LEDGER_MODEL', 'django_ledger.LedgerModel')
|
|
38
|
-
# DJANGO_LEDGER_ENTITY_MODEL = getattr(settings, 'DJANGO_LEDGER_ENTITY_MODEL', 'django_ledger.EntityModel')
|
|
39
|
-
# DJANGO_LEDGER_ENTITY_STATE_MODEL = getattr(settings, 'DJANGO_LEDGER_ENTITY_STATE_MODEL', 'django_ledger.EntityStateModel')
|
|
40
|
-
# DJANGO_LEDGER_ENTITY_UNIT_MODEL = getattr(settings, 'DJANGO_LEDGER_ENTITY_UNIT_MODEL', 'django_ledger.EntityUnitModel')
|
|
41
|
-
# DJANGO_LEDGER_ESTIMATE_MODEL = getattr(settings, 'DJANGO_LEDGER_ESTIMATE_MODEL', 'django_ledger.EstimateModel')
|
|
42
|
-
# DJANGO_LEDGER_BILL_MODEL = getattr(settings, 'DJANGO_LEDGER_BILL_MODEL', 'django_ledger.BillModel')
|
|
43
|
-
# DJANGO_LEDGER_INVOICE_MODEL = getattr(settings, 'DJANGO_LEDGER_INVOICE_MODEL', 'django_ledger.InvoiceModel')
|
|
44
|
-
# DJANGO_LEDGER_PURCHASE_ORDER_MODEL = getattr(settings, 'DJANGO_LEDGER_PURCHASE_ORDER_MODEL', 'django_ledger.PurchaseOrderModel')
|
|
45
|
-
# DJANGO_LEDGER_CUSTOMER_MODEL = getattr(settings, 'DJANGO_LEDGER_CUSTOMER_MODEL', 'django_ledger.CustomerModel')
|
|
46
|
-
# DJANGO_LEDGER_VENDOR_MODEL = getattr(settings, 'DJANGO_LEDGER_VENDOR_MODEL', 'django_ledger.VendorModel')
|
|
47
|
-
# DJANGO_LEDGER_BANK_ACCOUNT_MODEL = getattr(settings, 'DJANGO_LEDGER_BANK_ACCOUNT_MODEL', 'django_ledger.BankAccountModel')
|
|
48
|
-
# DJANGO_LEDGER_CLOSING_ENTRY_MODEL = getattr(settings, 'DJANGO_LEDGER_CLOSING_ENTRY_MODEL', 'django_ledger.ClosingEntryModel')
|
|
49
|
-
# DJANGO_LEDGER_CLOSING_ENTRY_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_CLOSING_ENTRY_TRANSACTION_MODEL', 'django_ledger.ClosingEntryTransactionModel')
|
|
50
|
-
# DJANGO_LEDGER_UNIT_OF_MEASURE_MODEL = getattr(settings, 'DJANGO_LEDGER_UNIT_OF_MEASURE_MODEL', 'django_ledger.UnitOfMeasureModel')
|
|
51
|
-
# DJANGO_LEDGER_ITEM_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_ITEM_TRANSACTION_MODEL', 'django_ledger.ItemTransactionModel')
|
|
52
|
-
# DJANGO_LEDGER_ITEM_MODEL = getattr(settings, 'DJANGO_LEDGER_ITEM_MODEL', 'django_ledger.ItemModel')
|
|
53
|
-
# DJANGO_LEDGER_STAGED_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_STAGED_TRANSACTION_MODEL', 'django_ledger.StagedTransactionModel')
|
|
54
|
-
# DJANGO_LEDGER_IMPORT_JOB_MODEL = getattr(settings, 'DJANGO_LEDGER_IMPORT_JOB_MODEL', 'django_ledger.ImportJobModel')
|
|
55
|
-
|
|
56
13
|
DJANGO_LEDGER_USE_CLOSING_ENTRIES = getattr(settings, 'DJANGO_LEDGER_USE_CLOSING_ENTRIES', True)
|
|
57
14
|
DJANGO_LEDGER_DEFAULT_CLOSING_ENTRY_CACHE_TIMEOUT = getattr(settings,
|
|
58
15
|
'DJANGO_LEDGER_DEFAULT_CLOSING_ENTRY_CACHE_TIMEOUT', 3600)
|
|
@@ -100,65 +57,93 @@ DJANGO_LEDGER_FINANCIAL_ANALYSIS = {
|
|
|
100
57
|
'current_ratio': {
|
|
101
58
|
'good_incremental': True,
|
|
102
59
|
'ranges': {
|
|
103
|
-
'healthy': 2,
|
|
104
|
-
'watch': 1,
|
|
105
|
-
'warning': .
|
|
106
|
-
'critical': .
|
|
60
|
+
'healthy': 2.0,
|
|
61
|
+
'watch': 1.5,
|
|
62
|
+
'warning': 1.0,
|
|
63
|
+
'critical': 0.5,
|
|
107
64
|
}
|
|
108
65
|
},
|
|
109
66
|
'quick_ratio': {
|
|
110
67
|
'good_incremental': True,
|
|
111
68
|
'ranges': {
|
|
112
|
-
'healthy':
|
|
113
|
-
'watch': 1,
|
|
114
|
-
'warning': .5,
|
|
115
|
-
'critical': .25
|
|
69
|
+
'healthy': 1.5,
|
|
70
|
+
'watch': 1.0,
|
|
71
|
+
'warning': 0.5,
|
|
72
|
+
'critical': 0.25
|
|
116
73
|
}
|
|
117
74
|
},
|
|
118
75
|
'debt_to_equity': {
|
|
119
76
|
'good_incremental': False,
|
|
120
77
|
'ranges': {
|
|
121
|
-
'healthy': 0,
|
|
122
|
-
'watch': .
|
|
123
|
-
'warning': .5,
|
|
124
|
-
'critical':
|
|
78
|
+
'healthy': 0.5,
|
|
79
|
+
'watch': 1.0,
|
|
80
|
+
'warning': 1.5,
|
|
81
|
+
'critical': 2.0
|
|
125
82
|
}
|
|
126
83
|
},
|
|
127
84
|
'return_on_equity': {
|
|
128
85
|
'good_incremental': True,
|
|
129
86
|
'ranges': {
|
|
130
|
-
'healthy': .
|
|
131
|
-
'watch': .
|
|
132
|
-
'warning': .
|
|
133
|
-
'critical': .
|
|
87
|
+
'healthy': 0.15,
|
|
88
|
+
'watch': 0.10,
|
|
89
|
+
'warning': 0.05,
|
|
90
|
+
'critical': 0.00
|
|
134
91
|
}
|
|
135
92
|
},
|
|
136
93
|
'return_on_assets': {
|
|
137
94
|
'good_incremental': True,
|
|
138
95
|
'ranges': {
|
|
139
|
-
'healthy': .
|
|
140
|
-
'watch': .
|
|
141
|
-
'warning': .
|
|
142
|
-
'critical': .
|
|
96
|
+
'healthy': 0.05,
|
|
97
|
+
'watch': 0.03,
|
|
98
|
+
'warning': 0.02,
|
|
99
|
+
'critical': 0.01
|
|
143
100
|
}
|
|
144
101
|
},
|
|
145
102
|
'net_profit_margin': {
|
|
146
103
|
'good_incremental': True,
|
|
147
104
|
'ranges': {
|
|
148
|
-
'healthy': .10,
|
|
149
|
-
'watch': .
|
|
150
|
-
'warning': .
|
|
151
|
-
'critical': .
|
|
105
|
+
'healthy': 0.10,
|
|
106
|
+
'watch': 0.05,
|
|
107
|
+
'warning': 0.03,
|
|
108
|
+
'critical': 0.01
|
|
152
109
|
}
|
|
153
110
|
},
|
|
154
111
|
'gross_profit_margin': {
|
|
155
112
|
'good_incremental': True,
|
|
156
113
|
'ranges': {
|
|
157
|
-
'healthy': .
|
|
158
|
-
'watch': .
|
|
159
|
-
'warning': .
|
|
160
|
-
'critical': .
|
|
114
|
+
'healthy': 0.50,
|
|
115
|
+
'watch': 0.30,
|
|
116
|
+
'warning': 0.20,
|
|
117
|
+
'critical': 0.10
|
|
161
118
|
}
|
|
162
119
|
},
|
|
163
120
|
}
|
|
164
121
|
}
|
|
122
|
+
|
|
123
|
+
DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR = getattr(settings, 'DJANGO_LEDGER_USE_DEPRECATED_BEHAVIOR', True)
|
|
124
|
+
DJANGO_LEDGER_THEME = getattr(settings, 'DJANGO_LEDGER_THEME', 'litera')
|
|
125
|
+
|
|
126
|
+
## MODEL ABSTRACTS ##
|
|
127
|
+
|
|
128
|
+
# DJANGO_LEDGER_ACCOUNT_MODEL = getattr(settings, 'DJANGO_LEDGER_ACCOUNT_MODEL', 'django_ledger.AccountModel')
|
|
129
|
+
# DJANGO_LEDGER_CHART_OF_ACCOUNTS_MODEL = getattr(settings, 'DJANGO_LEDGER_ACCOUNT_MODEL', 'django_ledger.ChartOfAccountModel')
|
|
130
|
+
# DJANGO_LEDGER_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_TRANSACTION_MODEL', 'django_ledger.TransactionModel')
|
|
131
|
+
# DJANGO_LEDGER_JOURNAL_ENTRY_MODEL = getattr(settings, 'DJANGO_LEDGER_JOURNAL_ENTRY_MODEL', 'django_ledger.JournalEntryModel')
|
|
132
|
+
# DJANGO_LEDGER_LEDGER_MODEL = getattr(settings, 'DJANGO_LEDGER_LEDGER_MODEL', 'django_ledger.LedgerModel')
|
|
133
|
+
# DJANGO_LEDGER_ENTITY_MODEL = getattr(settings, 'DJANGO_LEDGER_ENTITY_MODEL', 'django_ledger.EntityModel')
|
|
134
|
+
# DJANGO_LEDGER_ENTITY_STATE_MODEL = getattr(settings, 'DJANGO_LEDGER_ENTITY_STATE_MODEL', 'django_ledger.EntityStateModel')
|
|
135
|
+
# DJANGO_LEDGER_ENTITY_UNIT_MODEL = getattr(settings, 'DJANGO_LEDGER_ENTITY_UNIT_MODEL', 'django_ledger.EntityUnitModel')
|
|
136
|
+
# DJANGO_LEDGER_ESTIMATE_MODEL = getattr(settings, 'DJANGO_LEDGER_ESTIMATE_MODEL', 'django_ledger.EstimateModel')
|
|
137
|
+
# DJANGO_LEDGER_BILL_MODEL = getattr(settings, 'DJANGO_LEDGER_BILL_MODEL', 'django_ledger.BillModel')
|
|
138
|
+
# DJANGO_LEDGER_INVOICE_MODEL = getattr(settings, 'DJANGO_LEDGER_INVOICE_MODEL', 'django_ledger.InvoiceModel')
|
|
139
|
+
# DJANGO_LEDGER_PURCHASE_ORDER_MODEL = getattr(settings, 'DJANGO_LEDGER_PURCHASE_ORDER_MODEL', 'django_ledger.PurchaseOrderModel')
|
|
140
|
+
# DJANGO_LEDGER_CUSTOMER_MODEL = getattr(settings, 'DJANGO_LEDGER_CUSTOMER_MODEL', 'django_ledger.CustomerModel')
|
|
141
|
+
# DJANGO_LEDGER_VENDOR_MODEL = getattr(settings, 'DJANGO_LEDGER_VENDOR_MODEL', 'django_ledger.VendorModel')
|
|
142
|
+
# DJANGO_LEDGER_BANK_ACCOUNT_MODEL = getattr(settings, 'DJANGO_LEDGER_BANK_ACCOUNT_MODEL', 'django_ledger.BankAccountModel')
|
|
143
|
+
# DJANGO_LEDGER_CLOSING_ENTRY_MODEL = getattr(settings, 'DJANGO_LEDGER_CLOSING_ENTRY_MODEL', 'django_ledger.ClosingEntryModel')
|
|
144
|
+
# DJANGO_LEDGER_CLOSING_ENTRY_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_CLOSING_ENTRY_TRANSACTION_MODEL', 'django_ledger.ClosingEntryTransactionModel')
|
|
145
|
+
# DJANGO_LEDGER_UNIT_OF_MEASURE_MODEL = getattr(settings, 'DJANGO_LEDGER_UNIT_OF_MEASURE_MODEL', 'django_ledger.UnitOfMeasureModel')
|
|
146
|
+
# DJANGO_LEDGER_ITEM_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_ITEM_TRANSACTION_MODEL', 'django_ledger.ItemTransactionModel')
|
|
147
|
+
# DJANGO_LEDGER_ITEM_MODEL = getattr(settings, 'DJANGO_LEDGER_ITEM_MODEL', 'django_ledger.ItemModel')
|
|
148
|
+
# DJANGO_LEDGER_STAGED_TRANSACTION_MODEL = getattr(settings, 'DJANGO_LEDGER_STAGED_TRANSACTION_MODEL', 'django_ledger.StagedTransactionModel')
|
|
149
|
+
# DJANGO_LEDGER_IMPORT_JOB_MODEL = getattr(settings, 'DJANGO_LEDGER_IMPORT_JOB_MODEL', 'django_ledger.ImportJobModel')
|