django-ledger 0.5.6.5__py3-none-any.whl → 0.6.0.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/io/io_core.py +20 -16
- django_ledger/io/io_digest.py +1 -1
- django_ledger/io/io_middleware.py +2 -4
- django_ledger/models/accounts.py +11 -1
- django_ledger/models/closing_entry.py +4 -4
- django_ledger/models/coa.py +251 -74
- django_ledger/models/entity.py +21 -2
- django_ledger/models/mixins.py +1 -1
- django_ledger/models/transactions.py +209 -111
- django_ledger/models/utils.py +117 -116
- django_ledger/views/account.py +1 -1
- {django_ledger-0.5.6.5.dist-info → django_ledger-0.6.0.1.dist-info}/METADATA +71 -121
- {django_ledger-0.5.6.5.dist-info → django_ledger-0.6.0.1.dist-info}/RECORD +18 -19
- django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt +0 -28
- {django_ledger-0.5.6.5.dist-info → django_ledger-0.6.0.1.dist-info}/AUTHORS.md +0 -0
- {django_ledger-0.5.6.5.dist-info → django_ledger-0.6.0.1.dist-info}/LICENSE +0 -0
- {django_ledger-0.5.6.5.dist-info → django_ledger-0.6.0.1.dist-info}/WHEEL +0 -0
- {django_ledger-0.5.6.5.dist-info → django_ledger-0.6.0.1.dist-info}/top_level.txt +0 -0
django_ledger/models/utils.py
CHANGED
|
@@ -6,152 +6,165 @@ Contributions to this module:
|
|
|
6
6
|
* Miguel Sanda <msanda@arrobalytics.com>
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
from django.apps import apps
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
class LazyLoader:
|
|
11
13
|
"""
|
|
12
|
-
|
|
14
|
+
A class that provides lazy-loading functionality for various models in the django_ledger app.
|
|
15
|
+
|
|
16
|
+
Attributes:
|
|
17
|
+
app_config (AppConfig): The AppConfig object for the django_ledger app.
|
|
18
|
+
|
|
19
|
+
ENTITY_MODEL (str): The name of the entity model.
|
|
20
|
+
LEDGER_MODEL (str): The name of the ledger model.
|
|
21
|
+
JE_MODEL (str): The name of the journal entry model.
|
|
22
|
+
TRANSACTION_MODEL (str): The name of the transaction model.
|
|
23
|
+
ACCOUNT_MODEL (str): The name of the account model.
|
|
24
|
+
COA_MODEL (str): The name of the chart of account model.
|
|
25
|
+
|
|
26
|
+
ENTITY_STATE_MODEL (str): The name of the entity state model.
|
|
27
|
+
ENTITY_UNIT_MODEL (str): The name of the entity unit model.
|
|
28
|
+
CLOSING_ENTRY_MODEL (str): The name of the closing entry model.
|
|
29
|
+
CLOSING_ENTRY_TRANSACTION_MODEL (str): The name of the closing entry transaction model.
|
|
30
|
+
|
|
31
|
+
BANK_ACCOUNT_MODEL (str): The name of the bank account model.
|
|
32
|
+
PURCHASE_ORDER_MODEL (str): The name of the purchase order model.
|
|
33
|
+
|
|
34
|
+
CUSTOMER_MODEL (str): The name of the customer model.
|
|
35
|
+
INVOICE_MODEL (str): The name of the invoice model.
|
|
36
|
+
BILL_MODEL (str): The name of the bill model.
|
|
37
|
+
UOM_MODEL (str): The name of the unit of measure model.
|
|
38
|
+
VENDOR_MODEL (str): The name of the vendor model.
|
|
39
|
+
ESTIMATE_MODEL (str): The name of the estimate model.
|
|
40
|
+
ITEM_MODEL (str): The name of the item model.
|
|
41
|
+
ITEM_TRANSACTION_MODEL (str): The name of the item transaction model.
|
|
42
|
+
|
|
43
|
+
ENTITY_DATA_GENERATOR (EntityDataGenerator): The EntityDataGenerator class used for generating entity data.
|
|
44
|
+
BALANCE_SHEET_REPORT_CLASS (BalanceSheetReport): The BalanceSheetReport class used for generating balance sheet reports.
|
|
45
|
+
INCOME_STATEMENT_REPORT_CLASS (IncomeStatementReport): The IncomeStatementReport class used for generating income statement reports.
|
|
46
|
+
CASH_FLOW_STATEMENT_REPORT_CLASS (CashFlowStatementReport): The CashFlowStatementReport class used for generating cash flow statement reports.
|
|
47
|
+
|
|
48
|
+
Methods:
|
|
49
|
+
get_entity_model() -> Model: Returns the entity model.
|
|
50
|
+
get_entity_unit_model() -> Model: Returns the entity unit model.
|
|
51
|
+
get_entity_state_model() -> Model: Returns the entity state model.
|
|
52
|
+
get_bank_account_model() -> Model: Returns the bank account model.
|
|
53
|
+
get_account_model() -> Model: Returns the account model.
|
|
54
|
+
get_coa_model() -> Model: Returns the chart of account model.
|
|
55
|
+
get_txs_model() -> Model: Returns the transaction model.
|
|
56
|
+
get_purchase_order_model() -> Model: Returns the purchase order model.
|
|
57
|
+
get_ledger_model() -> Model: Returns the ledger model.
|
|
58
|
+
get_journal_entry_model() -> Model: Returns the journal entry model.
|
|
59
|
+
get_item_model() -> Model: Returns the item model.
|
|
60
|
+
get_item_transaction_model() -> Model: Returns the item transaction model.
|
|
61
|
+
get_customer_model() -> Model: Returns the customer model.
|
|
62
|
+
get_bill_model() -> Model: Returns the bill model.
|
|
63
|
+
get_invoice_model() -> Model: Returns the invoice model.
|
|
64
|
+
get_uom_model() -> Model: Returns the unit of measure model.
|
|
65
|
+
get_vendor_model() -> Model: Returns the vendor model.
|
|
66
|
+
get_estimate_model() -> Model: Returns the estimate model.
|
|
67
|
+
get_closing_entry_model() -> Model: Returns the closing entry model.
|
|
68
|
+
get_closing_entry_transaction_model() -> Model: Returns the closing entry transaction model.
|
|
69
|
+
get_entity_data_generator() -> EntityDataGenerator: Returns the EntityDataGenerator class.
|
|
70
|
+
get_balance_sheet_report_class() -> BalanceSheetReport: Returns the BalanceSheetReport class.
|
|
71
|
+
get_income_statement_report_class() -> IncomeStatementReport: Returns the IncomeStatementReport class.
|
|
72
|
+
get_cash_flow_statement_report_class() -> CashFlowStatementReport: Returns the CashFlowStatementReport class.
|
|
13
73
|
"""
|
|
14
|
-
ENTITY_MODEL = None
|
|
15
|
-
ENTITY_STATE_MODEL = None
|
|
16
|
-
UNIT_MODEL = None
|
|
17
|
-
ACCOUNT_MODEL = None
|
|
18
|
-
BANK_ACCOUNT_MODEL = None
|
|
19
|
-
LEDGER_MODEL = None
|
|
20
|
-
TXS_MODEL = None
|
|
21
|
-
JE_MODEL = None
|
|
22
|
-
ITEM_MODEL = None
|
|
23
|
-
ITEM_TRANSACTION_MODEL = None
|
|
24
|
-
CUSTOMER_MODEL = None
|
|
25
|
-
INVOICE_MODEL = None
|
|
26
|
-
BILL_MODEL = None
|
|
27
|
-
UOM_MODEL = None
|
|
28
|
-
VENDOR_MODEL = None
|
|
29
|
-
TRANSACTION_MODEL = None
|
|
30
|
-
ENTITY_UNIT_MODEL = None
|
|
31
|
-
PURCHASE_ORDER_MODEL = None
|
|
32
|
-
ESTIMATE_MODEL = None
|
|
33
|
-
CLOSING_ENTRY_MODEL = None
|
|
34
|
-
CLOSING_ENTRY_TRANSACTION_MODEL = None
|
|
35
74
|
|
|
36
|
-
|
|
75
|
+
app_config = apps.get_app_config(app_label='django_ledger')
|
|
76
|
+
|
|
77
|
+
ENTITY_MODEL = 'entitymodel'
|
|
78
|
+
LEDGER_MODEL = 'ledgermodel'
|
|
79
|
+
JE_MODEL = 'journalentrymodel'
|
|
80
|
+
TRANSACTION_MODEL = 'transactionmodel'
|
|
81
|
+
ACCOUNT_MODEL = 'accountmodel'
|
|
82
|
+
COA_MODEL = 'chartofaccountmodel'
|
|
83
|
+
|
|
84
|
+
ENTITY_STATE_MODEL = 'entitystatemodel'
|
|
85
|
+
ENTITY_UNIT_MODEL = 'entityunitmodel'
|
|
86
|
+
CLOSING_ENTRY_MODEL = 'closingentrymodel'
|
|
87
|
+
CLOSING_ENTRY_TRANSACTION_MODEL = 'closingentrytransactionmodel'
|
|
88
|
+
|
|
89
|
+
BANK_ACCOUNT_MODEL = 'bankaccountmodel'
|
|
90
|
+
PURCHASE_ORDER_MODEL = 'purchaseordermodel'
|
|
91
|
+
|
|
92
|
+
CUSTOMER_MODEL = 'customermodel'
|
|
93
|
+
INVOICE_MODEL = 'invoicemodel'
|
|
94
|
+
BILL_MODEL = 'billmodel'
|
|
95
|
+
UOM_MODEL = 'unitofmeasuremodel'
|
|
96
|
+
VENDOR_MODEL = 'vendormodel'
|
|
97
|
+
ESTIMATE_MODEL = 'estimatemodel'
|
|
98
|
+
ITEM_MODEL = 'itemmodel'
|
|
99
|
+
ITEM_TRANSACTION_MODEL = 'itemtransactionmodel'
|
|
37
100
|
|
|
101
|
+
ENTITY_DATA_GENERATOR = None
|
|
38
102
|
BALANCE_SHEET_REPORT_CLASS = None
|
|
39
103
|
INCOME_STATEMENT_REPORT_CLASS = None
|
|
40
104
|
CASH_FLOW_STATEMENT_REPORT_CLASS = None
|
|
41
105
|
|
|
106
|
+
|
|
107
|
+
|
|
42
108
|
def get_entity_model(self):
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return self.
|
|
109
|
+
return self.app_config.get_model(self.ENTITY_MODEL)
|
|
110
|
+
|
|
111
|
+
def get_entity_unit_model(self):
|
|
112
|
+
return self.app_config.get_model(self.ENTITY_UNIT_MODEL)
|
|
47
113
|
|
|
48
114
|
def get_entity_state_model(self):
|
|
49
|
-
|
|
50
|
-
from django_ledger.models import EntityStateModel
|
|
51
|
-
self.ENTITY_STATE_MODEL = EntityStateModel
|
|
52
|
-
return self.ENTITY_STATE_MODEL
|
|
115
|
+
return self.app_config.get_model(self.ENTITY_STATE_MODEL)
|
|
53
116
|
|
|
54
117
|
def get_bank_account_model(self):
|
|
55
|
-
|
|
56
|
-
from django_ledger.models import BankAccountModel
|
|
57
|
-
self.BANK_ACCOUNT_MODEL = BankAccountModel
|
|
58
|
-
return self.BANK_ACCOUNT_MODEL
|
|
118
|
+
return self.app_config.get_model(self.BANK_ACCOUNT_MODEL)
|
|
59
119
|
|
|
60
120
|
def get_account_model(self):
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return self.
|
|
121
|
+
return self.app_config.get_model(self.ACCOUNT_MODEL)
|
|
122
|
+
|
|
123
|
+
def get_coa_model(self):
|
|
124
|
+
return self.app_config.get_model(self.COA_MODEL)
|
|
65
125
|
|
|
66
126
|
def get_txs_model(self):
|
|
67
|
-
|
|
68
|
-
from django_ledger.models import TransactionModel
|
|
69
|
-
self.TXS_MODEL = TransactionModel
|
|
70
|
-
return self.TXS_MODEL
|
|
127
|
+
return self.app_config.get_model(self.TRANSACTION_MODEL)
|
|
71
128
|
|
|
72
129
|
def get_purchase_order_model(self):
|
|
73
|
-
|
|
74
|
-
from django_ledger.models import PurchaseOrderModel
|
|
75
|
-
self.PURCHASE_ORDER_MODEL = PurchaseOrderModel
|
|
76
|
-
return self.PURCHASE_ORDER_MODEL
|
|
130
|
+
return self.app_config.get_model(self.PURCHASE_ORDER_MODEL)
|
|
77
131
|
|
|
78
132
|
def get_ledger_model(self):
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
self.LEDGER_MODEL = LedgerModel
|
|
82
|
-
return self.LEDGER_MODEL
|
|
83
|
-
|
|
84
|
-
def get_unit_model(self):
|
|
85
|
-
if not self.UNIT_MODEL:
|
|
86
|
-
from django_ledger.models import EntityUnitModel
|
|
87
|
-
self.UNIT_MODEL = EntityUnitModel
|
|
88
|
-
return self.UNIT_MODEL
|
|
133
|
+
self.get_entity_unit_model()
|
|
134
|
+
return self.app_config.get_model(self.LEDGER_MODEL)
|
|
89
135
|
|
|
90
136
|
def get_journal_entry_model(self):
|
|
91
|
-
|
|
92
|
-
from django_ledger.models import JournalEntryModel
|
|
93
|
-
self.JE_MODEL = JournalEntryModel
|
|
94
|
-
return self.JE_MODEL
|
|
137
|
+
return self.app_config.get_model(self.JE_MODEL)
|
|
95
138
|
|
|
96
139
|
def get_item_model(self):
|
|
97
|
-
|
|
98
|
-
from django_ledger.models import ItemModel
|
|
99
|
-
self.ITEM_MODEL = ItemModel
|
|
100
|
-
return self.ITEM_MODEL
|
|
140
|
+
return self.app_config.get_model(self.ITEM_MODEL)
|
|
101
141
|
|
|
102
142
|
def get_item_transaction_model(self):
|
|
103
|
-
|
|
104
|
-
from django_ledger.models import ItemTransactionModel
|
|
105
|
-
self.ITEM_TRANSACTION_MODEL = ItemTransactionModel
|
|
106
|
-
return self.ITEM_TRANSACTION_MODEL
|
|
143
|
+
return self.app_config.get_model(self.ITEM_TRANSACTION_MODEL)
|
|
107
144
|
|
|
108
145
|
def get_customer_model(self):
|
|
109
|
-
|
|
110
|
-
from django_ledger.models import CustomerModel
|
|
111
|
-
self.CUSTOMER_MODEL = CustomerModel
|
|
112
|
-
return self.CUSTOMER_MODEL
|
|
146
|
+
return self.app_config.get_model(self.CUSTOMER_MODEL)
|
|
113
147
|
|
|
114
148
|
def get_bill_model(self):
|
|
115
|
-
|
|
116
|
-
from django_ledger.models import BillModel
|
|
117
|
-
self.BILL_MODEL = BillModel
|
|
118
|
-
return self.BILL_MODEL
|
|
149
|
+
return self.app_config.get_model(self.BILL_MODEL)
|
|
119
150
|
|
|
120
151
|
def get_invoice_model(self):
|
|
121
|
-
|
|
122
|
-
from django_ledger.models import InvoiceModel
|
|
123
|
-
self.INVOICE_MODEL = InvoiceModel
|
|
124
|
-
return self.INVOICE_MODEL
|
|
152
|
+
return self.app_config.get_model(self.INVOICE_MODEL)
|
|
125
153
|
|
|
126
154
|
def get_uom_model(self):
|
|
127
|
-
|
|
128
|
-
from django_ledger.models import UnitOfMeasureModel
|
|
129
|
-
self.UOM_MODEL = UnitOfMeasureModel
|
|
130
|
-
return self.UOM_MODEL
|
|
155
|
+
return self.app_config.get_model(self.UOM_MODEL)
|
|
131
156
|
|
|
132
157
|
def get_vendor_model(self):
|
|
133
|
-
|
|
134
|
-
from django_ledger.models import VendorModel
|
|
135
|
-
self.VENDOR_MODEL = VendorModel
|
|
136
|
-
return self.VENDOR_MODEL
|
|
158
|
+
return self.app_config.get_model(self.VENDOR_MODEL)
|
|
137
159
|
|
|
138
|
-
def
|
|
139
|
-
|
|
140
|
-
from django_ledger.models import TransactionModel
|
|
141
|
-
self.TRANSACTION_MODEL = TransactionModel
|
|
142
|
-
return self.TRANSACTION_MODEL
|
|
160
|
+
def get_estimate_model(self):
|
|
161
|
+
return self.app_config.get_model(self.ESTIMATE_MODEL)
|
|
143
162
|
|
|
144
|
-
def
|
|
145
|
-
|
|
146
|
-
from django_ledger.models import EntityUnitModel
|
|
147
|
-
self.ENTITY_UNIT_MODEL = EntityUnitModel
|
|
148
|
-
return self.ENTITY_UNIT_MODEL
|
|
163
|
+
def get_closing_entry_model(self):
|
|
164
|
+
return self.app_config.get_model(self.CLOSING_ENTRY_MODEL)
|
|
149
165
|
|
|
150
|
-
def
|
|
151
|
-
|
|
152
|
-
from django_ledger.models import EstimateModel
|
|
153
|
-
self.ESTIMATE_MODEL = EstimateModel
|
|
154
|
-
return self.ESTIMATE_MODEL
|
|
166
|
+
def get_closing_entry_transaction_model(self):
|
|
167
|
+
return self.app_config.get_model(self.CLOSING_ENTRY_TRANSACTION_MODEL)
|
|
155
168
|
|
|
156
169
|
def get_entity_data_generator(self):
|
|
157
170
|
if not self.ENTITY_DATA_GENERATOR:
|
|
@@ -159,18 +172,6 @@ class LazyLoader:
|
|
|
159
172
|
self.ENTITY_DATA_GENERATOR = EntityDataGenerator
|
|
160
173
|
return self.ENTITY_DATA_GENERATOR
|
|
161
174
|
|
|
162
|
-
def get_closing_entry_model(self):
|
|
163
|
-
if not self.CLOSING_ENTRY_MODEL:
|
|
164
|
-
from django_ledger.models import ClosingEntryModel
|
|
165
|
-
self.CLOSING_ENTRY_MODEL = ClosingEntryModel
|
|
166
|
-
return self.CLOSING_ENTRY_MODEL
|
|
167
|
-
|
|
168
|
-
def get_closing_entry_transaction_model(self):
|
|
169
|
-
if not self.CLOSING_ENTRY_TRANSACTION_MODEL:
|
|
170
|
-
from django_ledger.models import ClosingEntryTransactionModel
|
|
171
|
-
self.CLOSING_ENTRY_TRANSACTION_MODEL = ClosingEntryTransactionModel
|
|
172
|
-
return self.CLOSING_ENTRY_TRANSACTION_MODEL
|
|
173
|
-
|
|
174
175
|
def get_balance_sheet_report_class(self):
|
|
175
176
|
if not self.BALANCE_SHEET_REPORT_CLASS:
|
|
176
177
|
from django_ledger.report.balance_sheet import BalanceSheetReport
|
django_ledger/views/account.py
CHANGED
|
@@ -157,7 +157,7 @@ class AccountModelCreateView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuer
|
|
|
157
157
|
entity_model.create_chart_of_accounts(assign_as_default=True, commit=True)
|
|
158
158
|
|
|
159
159
|
coa_model = self.get_coa_model()
|
|
160
|
-
coa_model.
|
|
160
|
+
coa_model.insert_account(account_model=account_model)
|
|
161
161
|
return HttpResponseRedirect(self.get_success_url())
|
|
162
162
|
|
|
163
163
|
def get_success_url(self):
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.6.0.1
|
|
4
|
+
Summary: Double entry accounting system built on the Django Web Framework.
|
|
5
5
|
Author-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
6
6
|
Maintainer-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
7
7
|
License: GPLv3 License
|
|
@@ -17,7 +17,7 @@ Classifier: Framework :: Django :: 4.0
|
|
|
17
17
|
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
18
18
|
Classifier: Intended Audience :: End Users/Desktop
|
|
19
19
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
20
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
23
|
License-File: AUTHORS.md
|
|
@@ -27,12 +27,10 @@ Requires-Dist: faker >=15.3.3
|
|
|
27
27
|
Requires-Dist: markdown >=3.4.1
|
|
28
28
|
Requires-Dist: ofxtools >=0.9.5
|
|
29
29
|
Requires-Dist: pillow >=9.3.0
|
|
30
|
-
Requires-Dist: text-unidecode >=1.3
|
|
31
30
|
Requires-Dist: python-dateutil >=2.8.2 ; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
|
|
32
31
|
Requires-Dist: six >=1.16.0 ; python_version >= "2.7" and python_version not in "3.0, 3.1, 3.2, 3.3"
|
|
33
32
|
Requires-Dist: sqlparse >=0.4.3 ; python_version >= "3.5"
|
|
34
33
|
Requires-Dist: asgiref >=3.5.2 ; python_version >= "3.7"
|
|
35
|
-
Requires-Dist: tzdata >=2022.2 ; sys_platform == "win32"
|
|
36
34
|
Provides-Extra: dev
|
|
37
35
|
Requires-Dist: sphinx ~=4.5.0 ; extra == 'dev'
|
|
38
36
|
Requires-Dist: behave ~=1.2.6 ; extra == 'dev'
|
|
@@ -44,29 +42,13 @@ Requires-Dist: furo ; extra == 'dev'
|
|
|
44
42
|
|
|
45
43
|
### An Accounting, Bookkeeping & Financial Analysis Engine for the Django Framework.
|
|
46
44
|
|
|
47
|
-
__Django Ledger__
|
|
48
|
-
the [Django Web Framework](https://www.djangoproject.com),
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
Introducing __Django Ledger__, a powerful double entry accounting system designed for financially driven applications
|
|
46
|
+
using the [Django Web Framework](https://www.djangoproject.com). Developed by lead developer Miguel Sanda, this system
|
|
47
|
+
offers a simplified, high-level API, making it easier for users to navigate the complexities of accounting. If you have
|
|
48
|
+
prior experience with Django, you'll find this software even more effective. And, for those interested in contributing,
|
|
49
|
+
consider joining our new discord channel for further collaboration and discussions.
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
If you want to contribute please consider joining our new discord channel here.
|
|
54
|
-
|
|
55
|
-
### Join our Discord Channel [Here](https://discord.gg/c7PZcbYgrc)
|
|
56
|
-
|
|
57
|
-
The software is still in early stages of development. For more information, please check the
|
|
58
|
-
[Roadmap](https://github.com/arrobalytics/django-ledger/blob/develop/ROADMAP.md).
|
|
59
|
-
|
|
60
|
-
### How long until all features are implemented?
|
|
61
|
-
|
|
62
|
-
Finance and Accounting is a complicated subject. Django Ledger is different from other Django projects
|
|
63
|
-
as it aims to provide a developer-friendly accounting engine while providing a reliable and extensible API to
|
|
64
|
-
power financially driven applications. This project in particular, not only requires Python AND Django programming
|
|
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/J7KDFgCCsw) to learn more.
|
|
67
|
-
|
|
68
|
-
__This project can greatly benefit from contributions towards Documentation and Unit Tests.__
|
|
69
|
-
__This is the best way to get started with this project if you are not familiar with the models.__
|
|
51
|
+
### Questions? Join our Discord Channel [Here](https://discord.gg/c7PZcbYgrc)
|
|
70
52
|
|
|
71
53
|
### Documentation
|
|
72
54
|
|
|
@@ -74,117 +56,49 @@ Access the latest documentation and QuickStart guide [here](https://django-ledge
|
|
|
74
56
|
Also, you may download the QuickStart Jupyter Notebook
|
|
75
57
|
[here](https://github.com/arrobalytics/django-ledger/blob/develop/notebooks/QuickStart%20Notebook.ipynb).
|
|
76
58
|
|
|
77
|
-
|
|
59
|
+
# Main Features
|
|
78
60
|
|
|
79
|
-
-
|
|
80
|
-
-
|
|
61
|
+
- High Level API.
|
|
62
|
+
- Double entry accounting system.
|
|
63
|
+
- Multiple Hierarchical Chart of Accounts.
|
|
81
64
|
- Financial Statements (Income Statement, Balance Sheet & Cash Flow Statement).
|
|
82
65
|
- Purchase Orders, Sales Orders (Estimates), Bills and Invoices.
|
|
83
66
|
- Automatic financial ratio & insight calculations.
|
|
84
|
-
- High Level Entity API.
|
|
85
67
|
- Multi tenancy (multiple companies/users/clients).
|
|
86
68
|
- Self-contained Ledgers, Journal Entries & Transactions.
|
|
87
69
|
- Basic OFX & QFX file import.
|
|
88
|
-
-
|
|
89
|
-
- Basic navigational templates.
|
|
90
|
-
- Entity administration & entity manager support.
|
|
70
|
+
- Closing Entries.
|
|
91
71
|
- Items, lists & inventory management.
|
|
92
72
|
- Unit of Measures.
|
|
93
|
-
- Bank Accounts.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
* __0.4.0__: Items, resources and & lists for bills & invoices itemization:
|
|
100
|
-
* __0.4.0__: Enhance and optimize Django Ledger the random data generation functionality to properly populate relevant
|
|
101
|
-
random data for testing.
|
|
102
|
-
* __0.4.1__: Entity internal organizations, department, branches, etc.
|
|
103
|
-
* __0.4.2__: Custom Accounting Periods.
|
|
104
|
-
* __0.4.3__: Purchase Order Model implementation.
|
|
105
|
-
* Bugfixes & UI/UX Enhancements.
|
|
106
|
-
|
|
107
|
-
### Version 0.5
|
|
108
|
-
|
|
109
|
-
More details available in the [Django Ledger v0.5 Page](https://www.arrobalytics.com/blog/2021/12/07/django-ledger-v05/)
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
* __0.5__: Testing framework implementation that will include:
|
|
113
|
-
* Unit tests using the [Built-in Django](https://docs.djangoproject.com/en/3.1/topics/testing/) unit test modules.
|
|
114
|
-
* Behavioral Driven Testing using [behave](https://behave.readthedocs.io/en/latest/) library.
|
|
115
|
-
* __Need help!!!! If you want to contribute PLEASE ADD UNIT TESTS!!!__
|
|
116
|
-
* Start creating basic package documentation via [Sphinx](https://www.sphinx-doc.org/en/master/)
|
|
117
|
-
* Document code and functions within code base.
|
|
118
|
-
* Generate HTML documentation.
|
|
119
|
-
* Work with Accountants, Subject Experts and Developers to define an initial list of Unit Tests to validate output _
|
|
120
|
-
_(
|
|
121
|
-
help needed!)__.
|
|
122
|
-
* Update package and code documentation.
|
|
123
|
-
* Bugfixes & UI/UX Enhancements.
|
|
124
|
-
* ~~__0.5.0__~~: Inventory tracking.
|
|
125
|
-
* Average Cost.
|
|
126
|
-
* ~~__0.5.1__~~: Customer estimates & contract tracking.
|
|
127
|
-
* Link Estimate/PO/Bill/Invoice workflow.
|
|
128
|
-
* Journal Entry activity determination & validation (for cash flow).
|
|
129
|
-
* ~~__0.5.2__~~: Cash flow statement.
|
|
130
|
-
* Human Readable Journal Entry document numbers.
|
|
131
|
-
* Hierarchical Account Model Management.
|
|
132
|
-
* Generate all Django Ledger Model documentation.
|
|
133
|
-
* ~~__0.5.3__~~: High Level EntityModel API.
|
|
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__: Transaction Library & Blueprints.
|
|
140
|
-
* __0.5.7__: Chart of Accounts Import.
|
|
141
|
-
* __0.5.8__: Trial Balance Import.
|
|
142
|
-
|
|
143
|
-
### Version 0.6
|
|
144
|
-
|
|
145
|
-
* Credit Line Models.
|
|
146
|
-
* Time tracking.
|
|
147
|
-
* Transaction tagging.
|
|
148
|
-
* Update package and code documentation.
|
|
149
|
-
* Bugfixes & UI/UX Enhancements.
|
|
150
|
-
|
|
151
|
-
### Version 0.7
|
|
152
|
-
|
|
153
|
-
* Currency Models implementation as a way to define EntityModel default currency.
|
|
154
|
-
* Produce financial statements in different currencies.
|
|
155
|
-
* Update package and code documentation.
|
|
156
|
-
* Bugfixes & UI/UX Enhancements.
|
|
157
|
-
|
|
158
|
-
### Version 0.8
|
|
159
|
-
|
|
160
|
-
* User roles and permissions on views to support read/write permissions for assigned managers to entities.
|
|
161
|
-
* User preferences and settings & account creation views.
|
|
162
|
-
* Update package and code documentation.
|
|
163
|
-
|
|
164
|
-
### Version 0.9
|
|
165
|
-
|
|
166
|
-
* Enable Hierarchical Entity Structures.
|
|
167
|
-
* Consolidated financial statements.
|
|
168
|
-
* InterCompany transactions.
|
|
169
|
-
* Update package and code documentation.
|
|
170
|
-
|
|
171
|
-
### Version 1.0
|
|
172
|
-
|
|
173
|
-
* Complete Internationalization of all user-related fields.
|
|
174
|
-
|
|
175
|
-
*** Roadmap subject to change based on user feedback and backlog priorities.
|
|
73
|
+
- Bank Accounts Information.
|
|
74
|
+
- Django Admin Classes.
|
|
75
|
+
- Built In Entity Management UI.
|
|
76
|
+
|
|
77
|
+
## Need a new feature or report a bug?
|
|
78
|
+
Feel free to initiate an Issue describing your new feature request.
|
|
176
79
|
|
|
177
80
|
# Want to contribute?
|
|
178
81
|
|
|
179
|
-
|
|
180
|
-
|
|
82
|
+
Finance and Accounting is a complicated subject. Django Ledger stands out from other Django projects due to its focus
|
|
83
|
+
on providing a developer-friendly accounting engine and a reliable, extensible API for financially driven applications.
|
|
84
|
+
The project requires expertise in Python, Django programming, finance, and accounting. In essence, the project is
|
|
85
|
+
seeking assistance from individuals with the specific skill set needed to contribute effectively. So, it's clear that
|
|
86
|
+
they are in need of support from individuals with the right expertise.
|
|
87
|
+
|
|
88
|
+
The project is actively seeking contributors with financial and/or accounting experience. Prior accounting experience
|
|
89
|
+
is a big plus for potential contributors. If you have the relevant experience and want to contribute, feel free to
|
|
90
|
+
reach out to me. You can find the contribution guidelines at the specified link. The project welcomes anyone interested
|
|
91
|
+
in making a contribution.
|
|
92
|
+
|
|
181
93
|
See __[contribution guidelines](https://github.com/arrobalytics/django-ledger/blob/develop/Contribute.md)__.
|
|
182
94
|
|
|
183
95
|
# Installation
|
|
96
|
+
|
|
184
97
|
Django Ledger is a [Django](https://www.djangoproject.com/) application. If you haven't, you need working knowledge of
|
|
185
|
-
Django and a working Django project before you can use Django Ledger.
|
|
98
|
+
Django and a working Django project before you can use Django Ledger. A good place to start
|
|
186
99
|
is [here](https://docs.djangoproject.com/en/4.2/intro/tutorial01/#creating-a-project).
|
|
187
|
-
|
|
100
|
+
|
|
101
|
+
Make sure you refer to the django version you are using.
|
|
188
102
|
|
|
189
103
|
The easiest way to start is to use the zero-config Django Ledger starter template. See
|
|
190
104
|
details [here](https://github.com/arrobalytics/django-ledger-starter). Otherwise, you may create your
|
|
@@ -329,6 +243,42 @@ python manage.py createsuperuser
|
|
|
329
243
|
python manage.py runserver
|
|
330
244
|
```
|
|
331
245
|
|
|
246
|
+
# How To Set Up Django Ledger for Development using Docker
|
|
247
|
+
|
|
248
|
+
1. Navigate to your projects directory.
|
|
249
|
+
|
|
250
|
+
2. Give executable permissions to entrypoint.sh
|
|
251
|
+
|
|
252
|
+
```shell
|
|
253
|
+
sudo chmod +x entrypoint.sh
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
3. Add host '0.0.0.0' into ALLOWED_HOSTS in settings.py.
|
|
257
|
+
|
|
258
|
+
4. Build the image and run the container.
|
|
259
|
+
|
|
260
|
+
```shell
|
|
261
|
+
docker compose up --build
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
5. Add Django Superuser by running command in seprate terminal
|
|
265
|
+
|
|
266
|
+
```shell
|
|
267
|
+
docker ps
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Select container id of running container and execute following command
|
|
271
|
+
|
|
272
|
+
```shell
|
|
273
|
+
docker exec -it containerId /bin/sh
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
```shell
|
|
277
|
+
python manage.py createsuperuser
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
6. Navigate to http://0.0.0.0:8000/ on browser.
|
|
281
|
+
|
|
332
282
|
# Run Test Suite
|
|
333
283
|
|
|
334
284
|
After setting up your development environment you may run tests.
|
|
@@ -48,7 +48,7 @@ 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=
|
|
51
|
+
django_ledger/__init__.py,sha256=jnHCdsWYYamrH0NaMS2Fo0Mw33kRl-BEzEmJJxs6HAw,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
|
|
@@ -115,11 +115,11 @@ django_ledger/forms/unit.py,sha256=rXUefjpuAmUU0vPOqu1ObO4k-bN-_Q6kOqHJ4kp_Vlg,1
|
|
|
115
115
|
django_ledger/forms/utils.py,sha256=sgkwBZs15_rZ5NT7h-8Z7wi3-ItM1E1sqoVDo3NQ5Jc,513
|
|
116
116
|
django_ledger/forms/vendor.py,sha256=Nuh8MmSpz4ycMZwiVe--U9Ec6ezIsfACHDkhA2SyiZ4,2215
|
|
117
117
|
django_ledger/io/__init__.py,sha256=Y9R-mY4peg8EpxmlXKaBER1IHMU-Nos8_dII41Kj0Ho,445
|
|
118
|
-
django_ledger/io/io_core.py,sha256=
|
|
119
|
-
django_ledger/io/io_digest.py,sha256=
|
|
118
|
+
django_ledger/io/io_core.py,sha256=fvMZYLlutL7Pn6F_p7U3whRA4ZeS7IDangm1v6Hcjvw,46479
|
|
119
|
+
django_ledger/io/io_digest.py,sha256=W_bCH6JxGw6eASDb1k43JuGAejvOVfyA7WkCS7AEqDQ,4280
|
|
120
120
|
django_ledger/io/io_generator.py,sha256=JF4plsABUkCIrtI2X-YD7o5eNghRIgLUseNcBIGOj3U,34613
|
|
121
121
|
django_ledger/io/io_library.py,sha256=kZt61TV6McxH2Ly1INYRmb-T1hNuEKe4WI0YB_YHeKk,20564
|
|
122
|
-
django_ledger/io/io_middleware.py,sha256=
|
|
122
|
+
django_ledger/io/io_middleware.py,sha256=c-vwpcjg2HbYbb4O36fdf6011dFOnoNsDHOAQXmJgB8,20052
|
|
123
123
|
django_ledger/io/ofx.py,sha256=JnmDjhIpLySoixK1WVe6DivRuu02rYsBjqI8yi5Opzs,1488
|
|
124
124
|
django_ledger/io/ratios.py,sha256=dsuCv9-r73SMLv3OrxeoT5JebfRmrDsRKG_YzHggWFw,3542
|
|
125
125
|
django_ledger/io/roles.py,sha256=RrErn0-cDOr90UrMBGl-PM_PxG2o_KYbGYeK4Dpwsek,20690
|
|
@@ -143,25 +143,25 @@ django_ledger/migrations/0014_ledgermodel_ledger_xid_and_more.py,sha256=UHuEQrnF
|
|
|
143
143
|
django_ledger/migrations/0015_remove_chartofaccountmodel_locked_and_more.py,sha256=GZDKJDjpqo52pY7sXusHpyvXsUwsuvoZqTQNda9Eo1I,560
|
|
144
144
|
django_ledger/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
145
145
|
django_ledger/models/__init__.py,sha256=8mn-OGhAVgLs8YASEBwo8dpX6tHyGtMxRHVPGDGECVU,793
|
|
146
|
-
django_ledger/models/accounts.py,sha256=
|
|
146
|
+
django_ledger/models/accounts.py,sha256=GQoVBCN_UeXnA2zj4bejXthr2mmL9a_8iS-gDPKI5KY,28937
|
|
147
147
|
django_ledger/models/bank_account.py,sha256=0-eTBxxRyvUKOVVNcGqWV1kiOKcXA2KPQIdiVHDUDCY,7678
|
|
148
148
|
django_ledger/models/bill.py,sha256=vaXdTEfow9SPzactNs6mZdm4tJc8uamKufT9tQGFpJg,63541
|
|
149
|
-
django_ledger/models/closing_entry.py,sha256=
|
|
150
|
-
django_ledger/models/coa.py,sha256=
|
|
149
|
+
django_ledger/models/closing_entry.py,sha256=557vVKhrRZOdzqmmvtVlU48VbzJk8tTV018b0dTfpek,17746
|
|
150
|
+
django_ledger/models/coa.py,sha256=Eue4XTRjM9irR-2z2P-Ynrw0ZrfAMub1m69mBdqok7s,27097
|
|
151
151
|
django_ledger/models/coa_default.py,sha256=4Zj8OMhgBiYuREjM82cFfyGWd8uCAeqggVkeNhg4SLU,27338
|
|
152
152
|
django_ledger/models/customer.py,sha256=JQOktcYKUlENJv4frek9rAW6sRerrQ0xXHlC5KPmhWk,11807
|
|
153
153
|
django_ledger/models/data_import.py,sha256=2H-4oTVLa7qXq03m9fd7T5zSQLkZKOAn2OAeOQBzMPA,19477
|
|
154
|
-
django_ledger/models/entity.py,sha256=
|
|
154
|
+
django_ledger/models/entity.py,sha256=1btxPOJxKmSpT1T12bisVE_QVZmQoniyfpya1JURBt4,121692
|
|
155
155
|
django_ledger/models/estimate.py,sha256=-qB5t2cEdyYpFUq7tOUQnFqvE6EDUiVdTtzjEbESwEQ,55829
|
|
156
156
|
django_ledger/models/invoice.py,sha256=FZ7ZxAjyrM2NUwiR3wIX0PnbPXV27F63u8sESb4qM20,61389
|
|
157
157
|
django_ledger/models/items.py,sha256=JLPFGPQvTKiq3r09wgG2cxBB4ZmcEXK6LyqMUhzWj3k,54938
|
|
158
158
|
django_ledger/models/journal_entry.py,sha256=VfXXvm3tUFuy2Z6j3PLlDk9ndHqsZgn_PuhrxTNqaiY,50918
|
|
159
159
|
django_ledger/models/ledger.py,sha256=qjORKpXHn7d393OLS62F2joyyfZyh7tCg7wc67nAu50,23042
|
|
160
|
-
django_ledger/models/mixins.py,sha256=
|
|
160
|
+
django_ledger/models/mixins.py,sha256=SBcSMfFuFzLqFQv298aDOfAJrF5kT91oXyo384auKqc,51903
|
|
161
161
|
django_ledger/models/purchase_order.py,sha256=CDibi90e7Yhpv_UiyP32mMcsQ0EUElXJ2r8pLzuS7yE,42729
|
|
162
|
-
django_ledger/models/transactions.py,sha256=
|
|
162
|
+
django_ledger/models/transactions.py,sha256=lCwJ68vPy2ePX8dTzDsEwHPk87VN-vYGdxfwSNF60Po,24229
|
|
163
163
|
django_ledger/models/unit.py,sha256=x5FFJXgOi1OdajQejIakW6wGY4DjrJhL3S0Pm5OimMk,8074
|
|
164
|
-
django_ledger/models/utils.py,sha256=
|
|
164
|
+
django_ledger/models/utils.py,sha256=3gkdCrfJp9qwN3Sf8R96AliilzwcKBm31UEao4WJO9o,8436
|
|
165
165
|
django_ledger/models/vendor.py,sha256=akJCO86GIwjlZ_jPUZCDXlMeuJe-8zKTm-52aJXGFpg,11320
|
|
166
166
|
django_ledger/models/schemas/__init__.py,sha256=8Tvw33tVJtCvxoXje2lrs9C1bsP_iuGcVi1JqzdPUao,157
|
|
167
167
|
django_ledger/models/schemas/digest.py,sha256=ME_dJ4g2p3dQ97Skh_RTZMwuNLmwTi19BdLM1G6tyAo,1077
|
|
@@ -174,7 +174,6 @@ django_ledger/report/cash_flow_statement.py,sha256=GosnBzMZWlqNGitOlxvDiHxkT4JrN
|
|
|
174
174
|
django_ledger/report/core.py,sha256=tpVdAOXTx4DGEcTeG-SWRO9af7ZTXdmW0-vhwJDY8hQ,7435
|
|
175
175
|
django_ledger/report/income_statement.py,sha256=m4pG0Yjpl7SELx3-yYKT4dCluKt6nT2bkD9gay9tNKI,11156
|
|
176
176
|
django_ledger/static/django_ledger/bundle/djetler.bundle.js,sha256=1UzHryjoKN43wUa5b6N2ia2yoE-TCrtfNMnuPIf9Im8,547613
|
|
177
|
-
django_ledger/static/django_ledger/bundle/djetler.bundle.js.LICENSE.txt,sha256=YMfGVlI2rGhmdUNumICn7hTQB2SpYAvQ07nJ_F-tAgE,513
|
|
178
177
|
django_ledger/static/django_ledger/bundle/styles.bundle.js,sha256=myDLVMYHwKTxypheUretM6MZ4HhK8Yn0BqB_OGUW3KU,506543
|
|
179
178
|
django_ledger/static/django_ledger/img/daniel-weiss-aj2Os9mYgJU-unsplash.jpg,sha256=zYNOMM56QE4AdRkvdGRNifDqj4OJcUA49oebJqsRjuQ,276317
|
|
180
179
|
django_ledger/static/django_ledger/img/made-with-bulma.png,sha256=eHFH1XGGq3Wn9sN35Jok2jxaCQu7nIravVVHNTAr7n0,19456
|
|
@@ -392,7 +391,7 @@ django_ledger/urls/transactions.py,sha256=e_x_z5qbkR6i7o8OWWdXshDiY_WVmu9WVhR9A9
|
|
|
392
391
|
django_ledger/urls/unit.py,sha256=EaBd1EcSeQYbOH1rTQZdyDEEtLVi7-QfC_wpRPwTpuE,1499
|
|
393
392
|
django_ledger/urls/vendor.py,sha256=ODHpAwe5lomluj8ZCqbMtugTeeRsv0Yo9SqkZEmfYaw,393
|
|
394
393
|
django_ledger/views/__init__.py,sha256=l5Pm2_oAW6Q_jJbXf-BiHA3ilCbiGb6gkXCm73K5DGY,1158
|
|
395
|
-
django_ledger/views/account.py,sha256=
|
|
394
|
+
django_ledger/views/account.py,sha256=d2pzYXKPOF74hCD4ehsQ_WNFsgqyGXXekCh22gDawAM,10523
|
|
396
395
|
django_ledger/views/auth.py,sha256=-zTjMlLpyxHGPlY9EXFQyeVHMmyeJ2H9RptcW7PDeDg,771
|
|
397
396
|
django_ledger/views/bank_account.py,sha256=bMgqrDydz6WuXina4L27uV-cmQicW0_JoPaXxlO7uN4,5176
|
|
398
397
|
django_ledger/views/bill.py,sha256=-WWAPF6PKqfaApAJBFwNMmIveDajXD-5a12d-LbcqFA,23087
|
|
@@ -416,9 +415,9 @@ django_ledger/views/purchase_order.py,sha256=1J3u4QnCkM7z1Y6DePijVdM67x4CQgfmQJc
|
|
|
416
415
|
django_ledger/views/transactions.py,sha256=5taQRGLSMkM_N8paQJ07HMspI_Nl7PawF8OohCiRmao,206
|
|
417
416
|
django_ledger/views/unit.py,sha256=_RgPJO9mR6v5ohBXlnL3T8nTWgS1lwlCvERQcHk0wHE,10232
|
|
418
417
|
django_ledger/views/vendor.py,sha256=gUdBPTFLeSwlNfdHSA1KFdE_y3QpwpkFhEB0r3-UYdI,3461
|
|
419
|
-
django_ledger-0.
|
|
420
|
-
django_ledger-0.
|
|
421
|
-
django_ledger-0.
|
|
422
|
-
django_ledger-0.
|
|
423
|
-
django_ledger-0.
|
|
424
|
-
django_ledger-0.
|
|
418
|
+
django_ledger-0.6.0.1.dist-info/AUTHORS.md,sha256=SRM2cynD89ZfEsL09zrbUVeO17r9zE2ZM7y6ReMqVRo,713
|
|
419
|
+
django_ledger-0.6.0.1.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
420
|
+
django_ledger-0.6.0.1.dist-info/METADATA,sha256=OrUy7UxR0pq7BC-igJag8bYQi_LujihzrpEEvxBwnVM,9700
|
|
421
|
+
django_ledger-0.6.0.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
422
|
+
django_ledger-0.6.0.1.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
|
|
423
|
+
django_ledger-0.6.0.1.dist-info/RECORD,,
|