django-ledger 0.7.7__py3-none-any.whl → 0.7.9__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/ofx.py +25 -0
- django_ledger/migrations/0022_bankaccountmodel_financial_institution_and_more.py +52 -0
- django_ledger/models/accounts.py +5 -2
- django_ledger/models/bank_account.py +13 -4
- django_ledger/models/data_import.py +7 -2
- django_ledger/models/entity.py +1 -2
- django_ledger/models/mixins.py +58 -8
- django_ledger/models/unit.py +0 -1
- django_ledger/views/data_import.py +1 -1
- {django_ledger-0.7.7.dist-info → django_ledger-0.7.9.dist-info}/METADATA +1 -1
- {django_ledger-0.7.7.dist-info → django_ledger-0.7.9.dist-info}/RECORD +16 -15
- {django_ledger-0.7.7.dist-info → django_ledger-0.7.9.dist-info}/AUTHORS.md +0 -0
- {django_ledger-0.7.7.dist-info → django_ledger-0.7.9.dist-info}/LICENSE +0 -0
- {django_ledger-0.7.7.dist-info → django_ledger-0.7.9.dist-info}/WHEEL +0 -0
- {django_ledger-0.7.7.dist-info → django_ledger-0.7.9.dist-info}/top_level.txt +0 -0
django_ledger/__init__.py
CHANGED
django_ledger/io/ofx.py
CHANGED
|
@@ -7,6 +7,7 @@ Miguel Sanda <msanda@arrobalytics.com>
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from typing import List, Optional, Dict
|
|
10
|
+
from django_ledger.models.bank_account import BankAccountModel
|
|
10
11
|
|
|
11
12
|
from django.core.exceptions import ValidationError
|
|
12
13
|
from ofxtools import OFXTree
|
|
@@ -64,6 +65,30 @@ class OFXFileManager:
|
|
|
64
65
|
def get_account_number(self):
|
|
65
66
|
return self.get_account_data()['account'].acctid
|
|
66
67
|
|
|
68
|
+
def get_routing_number(self):
|
|
69
|
+
return self.get_account_data()['account'].bankid
|
|
70
|
+
|
|
71
|
+
def get_ofx_account_type(self):
|
|
72
|
+
"""
|
|
73
|
+
Gets the account type as defined in the OFX (Open Financial Exchange) specification.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
str: One of the following standardized account types:
|
|
77
|
+
- 'CHECKING' - Standard checking account
|
|
78
|
+
- 'SAVINGS' - Savings account
|
|
79
|
+
- 'MONEYMRKT' - Money Market account
|
|
80
|
+
- 'CREDITLINE' - Credit line account
|
|
81
|
+
- 'CD' - Certificate of Deposit
|
|
82
|
+
"""
|
|
83
|
+
acc_type = self.get_account_data()['account'].accttype
|
|
84
|
+
|
|
85
|
+
if acc_type not in ['CHECKING', 'SAVINGS', 'MONEYMRKT', 'CREDITLINE', 'CD']:
|
|
86
|
+
raise OFXImportValidationError(f'Account type "{acc_type}" is not supported.')
|
|
87
|
+
return acc_type
|
|
88
|
+
|
|
89
|
+
def get_account_type(self):
|
|
90
|
+
return BankAccountModel.ACCOUNT_TYPE_OFX_MAPPING[self.get_ofx_account_type()]
|
|
91
|
+
|
|
67
92
|
def get_account_txs(self):
|
|
68
93
|
acc_statement = next(iter(
|
|
69
94
|
st for st in self.ofx_data.statements if st.account.acctid == self.get_account_number()
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Generated by Django 5.2.1 on 2025-06-24 21:54
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('django_ledger', '0021_alter_bankaccountmodel_account_model_and_more'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='bankaccountmodel',
|
|
15
|
+
name='financial_institution',
|
|
16
|
+
field=models.CharField(blank=True, help_text='Name of the financial institution (i.e. Bank Name).', max_length=100, null=True, verbose_name='Financial Institution'),
|
|
17
|
+
),
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name='vendormodel',
|
|
20
|
+
name='financial_institution',
|
|
21
|
+
field=models.CharField(blank=True, help_text='Name of the financial institution (i.e. Bank Name).', max_length=100, null=True, verbose_name='Financial Institution'),
|
|
22
|
+
),
|
|
23
|
+
migrations.AlterField(
|
|
24
|
+
model_name='bankaccountmodel',
|
|
25
|
+
name='account_type',
|
|
26
|
+
field=models.CharField(choices=[('checking', 'Checking'), ('savings', 'Savings'), ('money_market', 'Money Market'), ('cert_deposit', 'Certificate of Deposit'), ('credit_card', 'Credit Card'), ('st_loan', 'Short Term Loan'), ('lt_loan', 'Long Term Loan'), ('mortgage', 'Mortgage'), ('other', 'Other')], default='checking', max_length=20, verbose_name='Account Type'),
|
|
27
|
+
),
|
|
28
|
+
migrations.AlterField(
|
|
29
|
+
model_name='billmodel',
|
|
30
|
+
name='bill_items',
|
|
31
|
+
field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', through_fields=('bill_model', 'item_model'), to='django_ledger.itemmodel', verbose_name='Bill Items'),
|
|
32
|
+
),
|
|
33
|
+
migrations.AlterField(
|
|
34
|
+
model_name='invoicemodel',
|
|
35
|
+
name='invoice_items',
|
|
36
|
+
field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', through_fields=('invoice_model', 'item_model'), to='django_ledger.itemmodel', verbose_name='Invoice Items'),
|
|
37
|
+
),
|
|
38
|
+
migrations.AlterField(
|
|
39
|
+
model_name='purchaseordermodel',
|
|
40
|
+
name='po_items',
|
|
41
|
+
field=models.ManyToManyField(through='django_ledger.ItemTransactionModel', through_fields=('po_model', 'item_model'), to='django_ledger.itemmodel', verbose_name='Purchase Order Items'),
|
|
42
|
+
),
|
|
43
|
+
migrations.AlterField(
|
|
44
|
+
model_name='vendormodel',
|
|
45
|
+
name='account_type',
|
|
46
|
+
field=models.CharField(choices=[('checking', 'Checking'), ('savings', 'Savings'), ('money_market', 'Money Market'), ('cert_deposit', 'Certificate of Deposit'), ('credit_card', 'Credit Card'), ('st_loan', 'Short Term Loan'), ('lt_loan', 'Long Term Loan'), ('mortgage', 'Mortgage'), ('other', 'Other')], default='checking', max_length=20, verbose_name='Account Type'),
|
|
47
|
+
),
|
|
48
|
+
migrations.AddIndex(
|
|
49
|
+
model_name='bankaccountmodel',
|
|
50
|
+
index=models.Index(fields=['entity_model'], name='django_ledg_entity__6ad006_idx'),
|
|
51
|
+
),
|
|
52
|
+
]
|
django_ledger/models/accounts.py
CHANGED
|
@@ -65,7 +65,7 @@ from django_ledger.io.roles import (
|
|
|
65
65
|
GROUP_ASSETS, GROUP_LIABILITIES, GROUP_CAPITAL, GROUP_INCOME, GROUP_EXPENSES, GROUP_COGS,
|
|
66
66
|
ROOT_GROUP, BS_BUCKETS, ROOT_ASSETS, ROOT_LIABILITIES,
|
|
67
67
|
ROOT_CAPITAL, ROOT_INCOME, ROOT_EXPENSES, ROOT_COA, VALID_PARENTS,
|
|
68
|
-
ROLES_ORDER_ALL
|
|
68
|
+
ROLES_ORDER_ALL, ASSET_CA_CASH
|
|
69
69
|
)
|
|
70
70
|
from django_ledger.models.mixins import CreateUpdateMixIn
|
|
71
71
|
from django_ledger.models.utils import lazy_loader
|
|
@@ -161,6 +161,10 @@ class AccountModelQuerySet(MP_NodeQuerySet):
|
|
|
161
161
|
codes = [codes]
|
|
162
162
|
return self.filter(code__in=codes)
|
|
163
163
|
|
|
164
|
+
def cash(self):
|
|
165
|
+
"""Retrieve accounts that are of type ASSET_CA_CASH."""
|
|
166
|
+
return self.filter(role__exact=ASSET_CA_CASH)
|
|
167
|
+
|
|
164
168
|
def expenses(self):
|
|
165
169
|
"""
|
|
166
170
|
Retrieve a queryset containing expenses filtered by specified roles.
|
|
@@ -435,7 +439,6 @@ class AccountModelAbstract(MP_Node, CreateUpdateMixIn):
|
|
|
435
439
|
on_delete=models.CASCADE,
|
|
436
440
|
verbose_name=_('Chart of Accounts'))
|
|
437
441
|
objects = AccountModelManager()
|
|
438
|
-
node_order_by = ['uuid']
|
|
439
442
|
|
|
440
443
|
class Meta:
|
|
441
444
|
abstract = True
|
|
@@ -12,7 +12,7 @@ from uuid import uuid4
|
|
|
12
12
|
from django.contrib.auth import get_user_model
|
|
13
13
|
from django.core.exceptions import ValidationError
|
|
14
14
|
from django.db import models
|
|
15
|
-
from django.db.models import Q, QuerySet
|
|
15
|
+
from django.db.models import Q, QuerySet, Manager
|
|
16
16
|
from django.shortcuts import get_object_or_404
|
|
17
17
|
from django.utils.translation import gettext_lazy as _
|
|
18
18
|
|
|
@@ -55,7 +55,7 @@ class BankAccountModelQuerySet(QuerySet):
|
|
|
55
55
|
return self.filter(hidden=True)
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
class BankAccountModelManager(
|
|
58
|
+
class BankAccountModelManager(Manager):
|
|
59
59
|
"""
|
|
60
60
|
Custom defined Model Manager for the BankAccountModel.
|
|
61
61
|
"""
|
|
@@ -126,10 +126,12 @@ class BankAccountModelAbstract(FinancialAccountInfoMixin, CreateUpdateMixIn):
|
|
|
126
126
|
entity_model = models.ForeignKey('django_ledger.EntityModel',
|
|
127
127
|
on_delete=models.CASCADE,
|
|
128
128
|
verbose_name=_('Entity Model'))
|
|
129
|
+
|
|
129
130
|
account_model = models.ForeignKey('django_ledger.AccountModel',
|
|
130
131
|
on_delete=models.RESTRICT,
|
|
131
132
|
help_text=_(
|
|
132
|
-
'Account model be used to map transactions from financial institution'
|
|
133
|
+
'Account model be used to map transactions from financial institution'
|
|
134
|
+
),
|
|
133
135
|
verbose_name=_('Associated Account Model'))
|
|
134
136
|
active = models.BooleanField(default=False)
|
|
135
137
|
hidden = models.BooleanField(default=False)
|
|
@@ -168,7 +170,8 @@ class BankAccountModelAbstract(FinancialAccountInfoMixin, CreateUpdateMixIn):
|
|
|
168
170
|
verbose_name = _('Bank Account')
|
|
169
171
|
indexes = [
|
|
170
172
|
models.Index(fields=['account_type']),
|
|
171
|
-
models.Index(fields=['account_model'])
|
|
173
|
+
models.Index(fields=['account_model']),
|
|
174
|
+
models.Index(fields=['entity_model'])
|
|
172
175
|
]
|
|
173
176
|
unique_together = [
|
|
174
177
|
('entity_model', 'account_number'),
|
|
@@ -178,6 +181,12 @@ class BankAccountModelAbstract(FinancialAccountInfoMixin, CreateUpdateMixIn):
|
|
|
178
181
|
def __str__(self):
|
|
179
182
|
return f'{self.get_account_type_display()} Bank Account: {self.name}'
|
|
180
183
|
|
|
184
|
+
def can_hide(self) -> bool:
|
|
185
|
+
return self.hidden is False
|
|
186
|
+
|
|
187
|
+
def can_unhide(self) -> bool:
|
|
188
|
+
return self.hidden is True
|
|
189
|
+
|
|
181
190
|
def can_activate(self) -> bool:
|
|
182
191
|
return self.active is False
|
|
183
192
|
|
|
@@ -12,7 +12,7 @@ or further processing.
|
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
from decimal import Decimal
|
|
15
|
-
from typing import Optional, Set, Dict, List
|
|
15
|
+
from typing import Optional, Set, Dict, List, Union
|
|
16
16
|
from uuid import uuid4, UUID
|
|
17
17
|
|
|
18
18
|
from django.core.exceptions import ValidationError
|
|
@@ -24,6 +24,7 @@ from django.utils.translation import gettext_lazy as _
|
|
|
24
24
|
|
|
25
25
|
from django_ledger.io import ASSET_CA_CASH, CREDIT, DEBIT
|
|
26
26
|
from django_ledger.models import JournalEntryModel
|
|
27
|
+
from django_ledger.models.entity import EntityModel
|
|
27
28
|
from django_ledger.models.mixins import CreateUpdateMixIn
|
|
28
29
|
from django_ledger.models.utils import lazy_loader
|
|
29
30
|
|
|
@@ -128,8 +129,12 @@ class ImportJobModelManager(Manager):
|
|
|
128
129
|
|
|
129
130
|
)
|
|
130
131
|
|
|
131
|
-
def for_entity(self, entity_slug: str, user_model):
|
|
132
|
+
def for_entity(self, entity_slug: Union[EntityModel, str], user_model):
|
|
132
133
|
qs = self.for_user(user_model)
|
|
134
|
+
if isinstance(entity_slug, EntityModel):
|
|
135
|
+
return qs.filter(
|
|
136
|
+
Q(bank_account_model__entity_model=entity_slug)
|
|
137
|
+
)
|
|
133
138
|
return qs.filter(
|
|
134
139
|
Q(bank_account_model__entity_model__slug__exact=entity_slug)
|
|
135
140
|
)
|
django_ledger/models/entity.py
CHANGED
|
@@ -787,7 +787,6 @@ class EntityModelAbstract(MP_Node,
|
|
|
787
787
|
meta = models.JSONField(default=dict, null=True, blank=True)
|
|
788
788
|
objects = EntityModelManager.from_queryset(queryset_class=EntityModelQuerySet)()
|
|
789
789
|
|
|
790
|
-
node_order_by = ['uuid']
|
|
791
790
|
|
|
792
791
|
class Meta:
|
|
793
792
|
abstract = True
|
|
@@ -2048,7 +2047,7 @@ class EntityModelAbstract(MP_Node,
|
|
|
2048
2047
|
account_model_qs = self.get_coa_accounts(coa_model=coa_model, active=True)
|
|
2049
2048
|
account_model_qs = account_model_qs.with_roles(
|
|
2050
2049
|
roles=[
|
|
2051
|
-
BankAccountModel.
|
|
2050
|
+
BankAccountModel.ACCOUNT_TYPE_DEFAULT_ROLE_MAPPING[account_type]
|
|
2052
2051
|
]
|
|
2053
2052
|
).is_role_default()
|
|
2054
2053
|
|
django_ledger/models/mixins.py
CHANGED
|
@@ -23,7 +23,10 @@ from django.utils.encoding import force_str
|
|
|
23
23
|
from django.utils.translation import gettext_lazy as _
|
|
24
24
|
from markdown import markdown
|
|
25
25
|
|
|
26
|
-
from django_ledger.io import
|
|
26
|
+
from django_ledger.io import (
|
|
27
|
+
ASSET_CA_CASH, LIABILITY_CL_ST_NOTES_PAYABLE, LIABILITY_LTL_MORTGAGE_PAYABLE,
|
|
28
|
+
LIABILITY_CL_ACC_PAYABLE, LIABILITY_CL_OTHER, LIABILITY_LTL_NOTES_PAYABLE
|
|
29
|
+
)
|
|
27
30
|
from django_ledger.io.io_core import validate_io_timestamp, check_tx_balance, get_localtime, get_localdate
|
|
28
31
|
from django_ledger.models.utils import lazy_loader
|
|
29
32
|
|
|
@@ -1123,25 +1126,55 @@ class FinancialAccountInfoMixin(models.Model):
|
|
|
1123
1126
|
|
|
1124
1127
|
ACCOUNT_CHECKING = 'checking'
|
|
1125
1128
|
ACCOUNT_SAVINGS = 'savings'
|
|
1129
|
+
ACCOUNT_MONEY_MKT = 'money_market'
|
|
1130
|
+
ACCOUNT_CERT_DEPOSIT = 'cert_deposit'
|
|
1126
1131
|
ACCOUNT_CREDIT_CARD = 'credit_card'
|
|
1132
|
+
ACCOUNT_ST_LOAN = 'st_loan'
|
|
1133
|
+
ACCOUNT_LT_LOAN = 'lt_loan'
|
|
1127
1134
|
ACCOUNT_MORTGAGE = 'mortgage'
|
|
1135
|
+
ACCOUNT_OTHER = 'other'
|
|
1128
1136
|
|
|
1129
|
-
|
|
1137
|
+
ACCOUNT_TYPE_DEFAULT_ROLE_MAPPING = {
|
|
1130
1138
|
ACCOUNT_CHECKING: ASSET_CA_CASH,
|
|
1131
1139
|
ACCOUNT_SAVINGS: ASSET_CA_CASH,
|
|
1132
|
-
|
|
1133
|
-
|
|
1140
|
+
ACCOUNT_MONEY_MKT: ASSET_CA_CASH,
|
|
1141
|
+
ACCOUNT_CERT_DEPOSIT: ASSET_CA_CASH,
|
|
1142
|
+
ACCOUNT_CREDIT_CARD: LIABILITY_CL_ACC_PAYABLE,
|
|
1143
|
+
ACCOUNT_ST_LOAN: LIABILITY_CL_ST_NOTES_PAYABLE,
|
|
1144
|
+
ACCOUNT_LT_LOAN: LIABILITY_LTL_NOTES_PAYABLE,
|
|
1145
|
+
ACCOUNT_MORTGAGE: LIABILITY_LTL_MORTGAGE_PAYABLE,
|
|
1146
|
+
ACCOUNT_OTHER: LIABILITY_CL_OTHER
|
|
1134
1147
|
}
|
|
1135
1148
|
|
|
1136
1149
|
ACCOUNT_TYPE_CHOICES = [
|
|
1137
1150
|
(ACCOUNT_CHECKING, _('Checking')),
|
|
1138
1151
|
(ACCOUNT_SAVINGS, _('Savings')),
|
|
1152
|
+
(ACCOUNT_MONEY_MKT, _('Money Market')),
|
|
1153
|
+
(ACCOUNT_CERT_DEPOSIT, _('Certificate of Deposit')),
|
|
1139
1154
|
(ACCOUNT_CREDIT_CARD, _('Credit Card')),
|
|
1155
|
+
(ACCOUNT_ST_LOAN, _('Short Term Loan')),
|
|
1156
|
+
(ACCOUNT_LT_LOAN, _('Long Term Loan')),
|
|
1140
1157
|
(ACCOUNT_MORTGAGE, _('Mortgage')),
|
|
1158
|
+
(ACCOUNT_OTHER, _('Other')),
|
|
1141
1159
|
]
|
|
1142
1160
|
|
|
1161
|
+
ACCOUNT_TYPE_OFX_MAPPING = {
|
|
1162
|
+
'CHECKING': ACCOUNT_CHECKING,
|
|
1163
|
+
'SAVINGS': ACCOUNT_SAVINGS,
|
|
1164
|
+
'MONEYMRKT': ACCOUNT_MONEY_MKT,
|
|
1165
|
+
'CREDITLINE': ACCOUNT_CREDIT_CARD,
|
|
1166
|
+
'CD': ACCOUNT_CERT_DEPOSIT
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1143
1169
|
VALID_ACCOUNT_TYPES = tuple(atc[0] for atc in ACCOUNT_TYPE_CHOICES)
|
|
1144
1170
|
|
|
1171
|
+
financial_institution = models.CharField(
|
|
1172
|
+
max_length=100,
|
|
1173
|
+
blank=True,
|
|
1174
|
+
null=True,
|
|
1175
|
+
verbose_name=_('Financial Institution'),
|
|
1176
|
+
help_text=_('Name of the financial institution (i.e. Bank Name).')
|
|
1177
|
+
)
|
|
1145
1178
|
account_number = models.CharField(max_length=30, null=True, blank=True,
|
|
1146
1179
|
validators=[
|
|
1147
1180
|
int_list_validator(sep='', message=_('Only digits allowed'))
|
|
@@ -1152,14 +1185,31 @@ class FinancialAccountInfoMixin(models.Model):
|
|
|
1152
1185
|
], verbose_name=_('Routing Number'))
|
|
1153
1186
|
aba_number = models.CharField(max_length=30, null=True, blank=True, verbose_name=_('ABA Number'))
|
|
1154
1187
|
swift_number = models.CharField(max_length=30, null=True, blank=True, verbose_name=_('SWIFT Number'))
|
|
1155
|
-
account_type = models.CharField(
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1188
|
+
account_type = models.CharField(
|
|
1189
|
+
choices=ACCOUNT_TYPE_CHOICES,
|
|
1190
|
+
max_length=20,
|
|
1191
|
+
default=ACCOUNT_CHECKING,
|
|
1192
|
+
verbose_name=_('Account Type')
|
|
1193
|
+
)
|
|
1159
1194
|
|
|
1160
1195
|
class Meta:
|
|
1161
1196
|
abstract = True
|
|
1162
1197
|
|
|
1198
|
+
def get_account_last_digits(self, n=4) -> str:
|
|
1199
|
+
if not self.account_number:
|
|
1200
|
+
return 'Not Available'
|
|
1201
|
+
return f'*{self.account_number[-n:]}'
|
|
1202
|
+
|
|
1203
|
+
def get_routing_last_digits(self, n=4) -> str:
|
|
1204
|
+
if not self.routing_number:
|
|
1205
|
+
return 'Not Available'
|
|
1206
|
+
return f'*{self.routing_number[-n:]}'
|
|
1207
|
+
|
|
1208
|
+
def get_account_type_from_ofx(self, ofx_type):
|
|
1209
|
+
return self.ACCOUNT_TYPE_OFX_MAPPING.get(
|
|
1210
|
+
ofx_type, self.ACCOUNT_OTHER
|
|
1211
|
+
)
|
|
1212
|
+
|
|
1163
1213
|
|
|
1164
1214
|
class TaxInfoMixIn(models.Model):
|
|
1165
1215
|
tax_id_number = models.CharField(max_length=30,
|
django_ledger/models/unit.py
CHANGED
|
@@ -136,7 +136,6 @@ class EntityUnitModelAbstract(MP_Node,
|
|
|
136
136
|
hidden = models.BooleanField(default=False, verbose_name=_('Is Hidden'))
|
|
137
137
|
|
|
138
138
|
objects = EntityUnitModelManager.from_queryset(queryset_class=EntityUnitModelQuerySet)()
|
|
139
|
-
node_order_by = ['uuid']
|
|
140
139
|
|
|
141
140
|
class Meta:
|
|
142
141
|
abstract = True
|
|
@@ -32,7 +32,7 @@ class ImportJobModelViewBaseView(DjangoLedgerSecurityMixIn):
|
|
|
32
32
|
'bank_account_model__entity_model',
|
|
33
33
|
'bank_account_model__account_model',
|
|
34
34
|
'bank_account_model__account_model__coa_model')
|
|
35
|
-
return
|
|
35
|
+
return self.queryset
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class ImportJobModelCreateView(ImportJobModelViewBaseView, FormView):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.9
|
|
4
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>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
django_ledger/__init__.py,sha256=
|
|
1
|
+
django_ledger/__init__.py,sha256=ihK8afW7Z89n0NPbEPgekMNY6Qt6R9NRQIXgrtHZ1SE,380
|
|
2
2
|
django_ledger/apps.py,sha256=H-zEWUjKGakgSDSZmLIoXChZ2h6e0dth0ZO5SpoT-8U,163
|
|
3
3
|
django_ledger/exceptions.py,sha256=rML8sQQ0Hq-DYMLZ76dfw2RYSAsXWUoyHuyC_yP9o1o,491
|
|
4
4
|
django_ledger/settings.py,sha256=QOMK8mhT8MLrMxVDEzNRJ9W01Pm-Po26y7KaBPLVeNk,8952
|
|
@@ -70,7 +70,7 @@ django_ledger/io/io_core.py,sha256=EmW0zu4P38OubxncBbnDdyAfM8X_epoxEc7iK-pApKA,8
|
|
|
70
70
|
django_ledger/io/io_generator.py,sha256=IN_ZuMlPHXgoEffxA7PMN2fyTvWPJktzVR6yIaocsRs,34725
|
|
71
71
|
django_ledger/io/io_library.py,sha256=CGZABR4P80VfIube4QEryNOi01llrPq0Gh-8vVbtZDY,22496
|
|
72
72
|
django_ledger/io/io_middleware.py,sha256=vbWIBYA4V9nwoiEtB0W9pq19QIwPmaAyVJlo_1Gg2BY,20284
|
|
73
|
-
django_ledger/io/ofx.py,sha256=
|
|
73
|
+
django_ledger/io/ofx.py,sha256=jx8xUuBK0O6Yj8uJdR7-Rgc1wsQ4bbkb8z9yi-n-nus,3415
|
|
74
74
|
django_ledger/io/ratios.py,sha256=dsuCv9-r73SMLv3OrxeoT5JebfRmrDsRKG_YzHggWFw,3542
|
|
75
75
|
django_ledger/io/roles.py,sha256=Rht4MiZ3SS1_uqNTQGt48dLHJxHYdyvw-HEaniUTXz4,20436
|
|
76
76
|
django_ledger/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -97,27 +97,28 @@ django_ledger/migrations/0018_transactionmodel_cleared_transactionmodel_reconcil
|
|
|
97
97
|
django_ledger/migrations/0019_alter_transactionmodel_amount_and_more.py,sha256=FFfEOrsqbL_MLYbWgwCtZNcvCepTxN2x8vS5D7NpcLQ,1367
|
|
98
98
|
django_ledger/migrations/0020_remove_bankaccountmodel_django_ledg_cash_ac_59a8af_idx_and_more.py,sha256=KFQExX3UVpeI9WlmRl2AZ9Q7k-24YBNf9ij4VU7tq_o,1741
|
|
99
99
|
django_ledger/migrations/0021_alter_bankaccountmodel_account_model_and_more.py,sha256=b3eJA_QzNzvx7BPSaj2RCPIbsrCkZrpkvk_qN7v-4OA,1101
|
|
100
|
+
django_ledger/migrations/0022_bankaccountmodel_financial_institution_and_more.py,sha256=MR_E-DYIEsxSfhO5O4iBsShe-tyM3wYZQ4C4_6h1Prw,2959
|
|
100
101
|
django_ledger/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
102
|
django_ledger/models/__init__.py,sha256=OesBx4My9GnqU1xB5WXuuGLOnmzgxEJxI-WWxRxi658,807
|
|
102
|
-
django_ledger/models/accounts.py,sha256=
|
|
103
|
-
django_ledger/models/bank_account.py,sha256=
|
|
103
|
+
django_ledger/models/accounts.py,sha256=LDbDLUiTkxy0k2Qyrq4N6FvpaffXW4vAuM53v5xveg0,36685
|
|
104
|
+
django_ledger/models/bank_account.py,sha256=dar6-iOqCBkeqyxwuV8tc2czFZVX9nGRSPvOLxp4m64,8009
|
|
104
105
|
django_ledger/models/bill.py,sha256=LCuYvyOtkZ6H-tcV4AYN1GFe_C6s__QxEbR0IcfTak8,65000
|
|
105
106
|
django_ledger/models/chart_of_accounts.py,sha256=cMHAc0TQdYD1iMan9qbrq2FX3NlmPYI_g1qwXPa4sSU,30308
|
|
106
107
|
django_ledger/models/closing_entry.py,sha256=ILFNwxvCNvlEKuK2AL8z49izEBtfco-IT_oXcCMcbP8,18294
|
|
107
108
|
django_ledger/models/coa_default.py,sha256=CK4vOZ73QePciZUL93wigDXpxKamdXAKBaQR7r-G7tk,27482
|
|
108
109
|
django_ledger/models/customer.py,sha256=2v6E1Ri9v3yBPMS8wpnqbEdDeLD897DEfR6vSDf2lVY,11336
|
|
109
|
-
django_ledger/models/data_import.py,sha256=
|
|
110
|
-
django_ledger/models/entity.py,sha256=
|
|
110
|
+
django_ledger/models/data_import.py,sha256=nffhWbb-EQN3zmFtJ512ix5ExnlJDSNHieOxR4W6OSE,47802
|
|
111
|
+
django_ledger/models/entity.py,sha256=kiY-VX_ot727sF0VRlfxA7bOVE5aP-hFmDg6TX78msM,124687
|
|
111
112
|
django_ledger/models/estimate.py,sha256=t3ZSBHZUUOdWP6eMCyQwNgvNSY4myKbkdfaFd9zlpH0,58056
|
|
112
113
|
django_ledger/models/invoice.py,sha256=l1yI-kpePNNSp0MfwGeccdPLAmTmvVV4CquNIxMrmc4,63222
|
|
113
114
|
django_ledger/models/items.py,sha256=cGv681aocJJxXSbsz9NlLhPp7kJ-gQrtxl7EcsiwULg,55087
|
|
114
115
|
django_ledger/models/journal_entry.py,sha256=Hqfz7oNUBXt1Vprd5W1adrFmZzCebemc2cvQZTlKVrk,66993
|
|
115
116
|
django_ledger/models/ledger.py,sha256=ltWmPIzauwxODO-FSupphIOkJYPDGT47-xKOst5DEvQ,26266
|
|
116
|
-
django_ledger/models/mixins.py,sha256=
|
|
117
|
+
django_ledger/models/mixins.py,sha256=Y0uRYZAWUExpHdLZy30XQrmr2t05gMvOuDRKjkoauKk,54213
|
|
117
118
|
django_ledger/models/purchase_order.py,sha256=A0fKA1lU12CYePb43T--wSNqf_d6Vwap1deyNXUoFEg,44140
|
|
118
119
|
django_ledger/models/signals.py,sha256=3cm_8--Jz-Jb0fPgrVmm5xx_jKFARV6_A29VDjqHeIw,1563
|
|
119
120
|
django_ledger/models/transactions.py,sha256=b_ChD6FG-ru7FgT7c9D_1ku1YyhCz840wSrnyVQN6AU,24045
|
|
120
|
-
django_ledger/models/unit.py,sha256=
|
|
121
|
+
django_ledger/models/unit.py,sha256=2bH-Tg3OOz7bEcVdB66_CTUhxTY9YP78thwJL5HKC0k,8346
|
|
121
122
|
django_ledger/models/utils.py,sha256=Weta2Cwsn4wRqvxMecIuD7aHYiiXBwUeMqpUDK4CokE,8360
|
|
122
123
|
django_ledger/models/vendor.py,sha256=ha_sTc9BHY7RKk70n50eZ-EvqbKHbDObyf0_khhLWN8,11322
|
|
123
124
|
django_ledger/models/schemas/__init__.py,sha256=8Tvw33tVJtCvxoXje2lrs9C1bsP_iuGcVi1JqzdPUao,157
|
|
@@ -391,7 +392,7 @@ django_ledger/views/bill.py,sha256=5tNb3pyh8GQM4hjV0FXqCXrEQF2LwpEWLkOkpknEdjA,2
|
|
|
391
392
|
django_ledger/views/chart_of_accounts.py,sha256=wMdnXRNWzdPgxl1YeHbdAQXbCBU2VkmxVxxtUuk9NAQ,5485
|
|
392
393
|
django_ledger/views/closing_entry.py,sha256=SbJMyBVG8KTfZ6oo4Gdzx03utKY5CoC7qioU_dm9n5I,8157
|
|
393
394
|
django_ledger/views/customer.py,sha256=FYnwhRx6JXE4bsjXQqFp8b9H8a4m7zv6ohoSj1OkZD8,3678
|
|
394
|
-
django_ledger/views/data_import.py,sha256=
|
|
395
|
+
django_ledger/views/data_import.py,sha256=6xx7vIBk03a_KdxSn9s8gg61aYSP4VRbQCs5cqhLQb0,8170
|
|
395
396
|
django_ledger/views/djl_api.py,sha256=6ADX9fBK8DroTeg8UIeCf2x4wt6-AF5xLlDQnqXBfsM,4411
|
|
396
397
|
django_ledger/views/entity.py,sha256=1K_PswTQKuTwPIMJ-l0m3EM3u6Q1rvTnYUbSuku4UO4,9474
|
|
397
398
|
django_ledger/views/estimate.py,sha256=NjcgiaBuwC_duCwvrAJkthZvPqSQoonH32T-f3DZlDM,12772
|
|
@@ -408,9 +409,9 @@ django_ledger/views/purchase_order.py,sha256=CyftKrQWV1SBz7W0CvZOfZ81OPEiBHPD7b9
|
|
|
408
409
|
django_ledger/views/transactions.py,sha256=3ijtJzdLPFkqG7OYpe-7N4QVjCyR2yl5ht_9RyfquBA,212
|
|
409
410
|
django_ledger/views/unit.py,sha256=CarmOKzXANssVD3qMS1oXvJw614Y3rS0QHhSGJC0jBE,10069
|
|
410
411
|
django_ledger/views/vendor.py,sha256=7gtVK_bgnXxbVwNAHYtI_eNEJPefCz807LgE1vqOov8,3532
|
|
411
|
-
django_ledger-0.7.
|
|
412
|
-
django_ledger-0.7.
|
|
413
|
-
django_ledger-0.7.
|
|
414
|
-
django_ledger-0.7.
|
|
415
|
-
django_ledger-0.7.
|
|
416
|
-
django_ledger-0.7.
|
|
412
|
+
django_ledger-0.7.9.dist-info/AUTHORS.md,sha256=ShPwf-qniJkbjRzX5_lqhmgoLMEYMSHSwKPXHZtWmyk,824
|
|
413
|
+
django_ledger-0.7.9.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
414
|
+
django_ledger-0.7.9.dist-info/METADATA,sha256=Jm46VjpBOjXbwS4omyYP6DCXLXfphxas_poWHhpqLKk,9089
|
|
415
|
+
django_ledger-0.7.9.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
|
416
|
+
django_ledger-0.7.9.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
|
|
417
|
+
django_ledger-0.7.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|