django-ledger 0.7.6.1__py3-none-any.whl → 0.7.8__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 +4 -0
- 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 -1
- django_ledger/models/bank_account.py +13 -4
- django_ledger/models/entity.py +1 -1
- django_ledger/models/mixins.py +58 -8
- django_ledger/templates/django_ledger/account/account_list.html +1 -1
- django_ledger/templates/django_ledger/account/tags/account_txs_table.html +4 -4
- django_ledger/templates/django_ledger/account/tags/accounts_table.html +7 -11
- django_ledger/templates/django_ledger/bills/bill_update.html +6 -6
- django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html +2 -1
- django_ledger/templates/django_ledger/invoice/invoice_update.html +6 -6
- django_ledger/templates/django_ledger/invoice/tags/invoice_table.html +2 -2
- django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html +4 -4
- django_ledger/templates/django_ledger/transactions/tags/txs_table.html +4 -4
- django_ledger/views/account.py +9 -0
- django_ledger/views/data_import.py +1 -1
- {django_ledger-0.7.6.1.dist-info → django_ledger-0.7.8.dist-info}/METADATA +4 -1
- {django_ledger-0.7.6.1.dist-info → django_ledger-0.7.8.dist-info}/RECORD +25 -24
- {django_ledger-0.7.6.1.dist-info → django_ledger-0.7.8.dist-info}/AUTHORS.md +0 -0
- {django_ledger-0.7.6.1.dist-info → django_ledger-0.7.8.dist-info}/LICENSE +0 -0
- {django_ledger-0.7.6.1.dist-info → django_ledger-0.7.8.dist-info}/WHEEL +0 -0
- {django_ledger-0.7.6.1.dist-info → django_ledger-0.7.8.dist-info}/top_level.txt +0 -0
django_ledger/__init__.py
CHANGED
|
@@ -6,7 +6,7 @@ Copyright© EDMA Group Inc licensed under the GPLv3 Agreement.
|
|
|
6
6
|
default_app_config = 'django_ledger.apps.DjangoLedgerConfig'
|
|
7
7
|
|
|
8
8
|
"""Django Ledger"""
|
|
9
|
-
__version__ = '0.7.
|
|
9
|
+
__version__ = '0.7.8'
|
|
10
10
|
__license__ = 'GPLv3 License'
|
|
11
11
|
|
|
12
12
|
__author__ = 'Miguel Sanda'
|
django_ledger/io/io_core.py
CHANGED
|
@@ -1442,6 +1442,10 @@ class IODatabaseMixIn:
|
|
|
1442
1442
|
]
|
|
1443
1443
|
|
|
1444
1444
|
for tx, txm_kwargs in txs_models:
|
|
1445
|
+
if not getattr(tx, 'ledger_id', None):
|
|
1446
|
+
tx.ledger_id = je_model.ledger_id
|
|
1447
|
+
if not getattr(tx, 'timestamp', None):
|
|
1448
|
+
tx.timestamp = je_model.timestamp
|
|
1445
1449
|
staged_tx_model = txm_kwargs.get('staged_tx_model')
|
|
1446
1450
|
if staged_tx_model:
|
|
1447
1451
|
staged_tx_model.transaction_model = tx
|
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.
|
|
@@ -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
|
|
django_ledger/models/entity.py
CHANGED
|
@@ -2048,7 +2048,7 @@ class EntityModelAbstract(MP_Node,
|
|
|
2048
2048
|
account_model_qs = self.get_coa_accounts(coa_model=coa_model, active=True)
|
|
2049
2049
|
account_model_qs = account_model_qs.with_roles(
|
|
2050
2050
|
roles=[
|
|
2051
|
-
BankAccountModel.
|
|
2051
|
+
BankAccountModel.ACCOUNT_TYPE_DEFAULT_ROLE_MAPPING[account_type]
|
|
2052
2052
|
]
|
|
2053
2053
|
).is_role_default()
|
|
2054
2054
|
|
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,
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<div class="box">
|
|
8
8
|
<div class="columns is-multiline">
|
|
9
9
|
<div class="column is-12 has-text-centered">
|
|
10
|
-
<h1 class="is-size-3">{% trans '
|
|
10
|
+
<h1 class="is-size-3">{% trans 'CoA Account List' %}</h1>
|
|
11
11
|
<h2 class="is-size-1 has-text-info">{{ coa_model.name }}</h2>
|
|
12
12
|
<p class="is-italic has-text-danger">({{ coa_model.slug }})</p>
|
|
13
13
|
</div>
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
<tr class="has-text-centered">
|
|
17
17
|
<td>{{ tx.journal_entry.je_number }}</td>
|
|
18
18
|
<td>{{ tx.journal_entry.timestamp }}</td>
|
|
19
|
-
<td>{% if tx.tx_type == 'credit' %}
|
|
20
|
-
<td>{% if tx.tx_type == 'debit' %}
|
|
19
|
+
<td>{% if tx.tx_type == 'credit' %}{% currency_symbol %}{{ tx.amount | currency_format }}{% endif %}</td>
|
|
20
|
+
<td>{% if tx.tx_type == 'debit' %}{% currency_symbol %}{{ tx.amount | currency_format }}{% endif %}</td>
|
|
21
21
|
<td>{{ tx.description }}</td>
|
|
22
22
|
<td>{{ tx.journal_entry.entity_unit.name }}</td>
|
|
23
23
|
<td>
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
<tr class="has-text-weight-bold">
|
|
52
52
|
<td></td>
|
|
53
53
|
<td class="has-text-right">Total</td>
|
|
54
|
-
<td class="has-text-centered"
|
|
55
|
-
<td class="has-text-centered"
|
|
54
|
+
<td class="has-text-centered">{% currency_symbol %}{{ total_credits | currency_format }}</td>
|
|
55
|
+
<td class="has-text-centered">{% currency_symbol %}{{ total_debits | currency_format }}</td>
|
|
56
56
|
<td></td>
|
|
57
57
|
<td></td>
|
|
58
58
|
<td></td>
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
<td>{{ account.get_balance_type_display }}</td>
|
|
52
52
|
<td class="has-text-centered">
|
|
53
53
|
{% if account.is_active %}
|
|
54
|
-
<span class="icon has-text-success
|
|
54
|
+
<span class="icon has-text-success">
|
|
55
55
|
{% icon 'ant-design:check-circle-filled' 24 %}
|
|
56
56
|
</span>
|
|
57
57
|
{% else %}
|
|
58
|
-
<span class="icon has-text-danger
|
|
58
|
+
<span class="icon has-text-danger">
|
|
59
59
|
{% icon 'mdi:dangerous' 24 %}
|
|
60
60
|
</span>
|
|
61
61
|
{% endif %}
|
|
@@ -63,11 +63,11 @@
|
|
|
63
63
|
|
|
64
64
|
<td class="has-text-centered">
|
|
65
65
|
{% if account.is_locked %}
|
|
66
|
-
<span class="icon has-text-success
|
|
66
|
+
<span class="icon has-text-success">
|
|
67
67
|
{% icon 'ooui:lock' 24 %}
|
|
68
68
|
</span>
|
|
69
69
|
{% else %}
|
|
70
|
-
<span class="icon has-text-danger
|
|
70
|
+
<span class="icon has-text-danger">
|
|
71
71
|
{% icon 'ooui:un-lock' 24 %}
|
|
72
72
|
</span>
|
|
73
73
|
{% endif %}
|
|
@@ -75,13 +75,9 @@
|
|
|
75
75
|
|
|
76
76
|
<td class="has-text-centered">
|
|
77
77
|
{% if account.role_default %}
|
|
78
|
-
<span class="icon has-text-success
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{% elif not account.role_default %}
|
|
82
|
-
<span class="icon has-text-danger-dark">
|
|
83
|
-
{% icon 'mdi:dangerous' 24 %}
|
|
84
|
-
</span>
|
|
78
|
+
<span class="icon has-text-success">
|
|
79
|
+
{% icon 'ant-design:check-circle-filled' 24 %}
|
|
80
|
+
</span>
|
|
85
81
|
{% endif %}
|
|
86
82
|
</td>
|
|
87
83
|
<td>
|
|
@@ -43,20 +43,20 @@
|
|
|
43
43
|
<div class="column is-12">
|
|
44
44
|
<h3 class="is-size-3">{% trans 'Bill State' %}</h3>
|
|
45
45
|
<p>{{ bill_model.cash_account }}:
|
|
46
|
-
|
|
46
|
+
{% currency_symbol %}{{ bill_model.get_amount_cash | currency_format }}</p>
|
|
47
47
|
<p>{{ bill_model.prepaid_account }}:
|
|
48
|
-
|
|
48
|
+
{% currency_symbol %}{{ bill_model.get_amount_prepaid | currency_format }}</p>
|
|
49
49
|
<p>{{ bill_model.unearned_account }}:
|
|
50
|
-
|
|
50
|
+
{% currency_symbol %}{{ bill_model.get_amount_unearned | currency_format }}</p>
|
|
51
51
|
</div>
|
|
52
52
|
<div class="column is-12">
|
|
53
53
|
<h3 class="is-size-3">{% trans 'Ledger State' %}</h3>
|
|
54
54
|
<p>{{ bill_model.cash_account }}:
|
|
55
|
-
|
|
55
|
+
{% currency_symbol %}{{ bill_model.amount_paid | currency_format }}</p>
|
|
56
56
|
<p>{{ bill_model.prepaid_account }}:
|
|
57
|
-
|
|
57
|
+
{% currency_symbol %}{{ bill_model.amount_receivable | currency_format }}</p>
|
|
58
58
|
<p>{{ bill_model.unearned_account }}:
|
|
59
|
-
|
|
59
|
+
{% currency_symbol %}{{ bill_model.amount_unearned | currency_format }}</p>
|
|
60
60
|
</div>
|
|
61
61
|
{% now "Y" as current_year %}
|
|
62
62
|
{% now "m" as current_month %}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{% load i18n %}
|
|
2
|
+
{% load django_ledger %}
|
|
2
3
|
|
|
3
4
|
<div class="table-container">
|
|
4
5
|
<table class="table is-narrow is-fullwidth is-bordered django-ledger-table-bottom-margin-75">
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
<td>{{ imported_tx.date_posted }}</td>
|
|
21
22
|
<td>{{ imported_tx.name }}</td>
|
|
22
23
|
<td class="{% if imported_tx.get_amount < 0.00 %}has-text-danger{% endif %} has-text-centered">
|
|
23
|
-
|
|
24
|
+
{% currency_symbol %}{{ imported_tx.get_amount }}</td>
|
|
24
25
|
<td>{% if imported_tx.activity %}
|
|
25
26
|
{{ imported_tx.get_activity_display }}
|
|
26
27
|
{% endif %}</td>
|
|
@@ -42,20 +42,20 @@
|
|
|
42
42
|
<div class="column is-12">
|
|
43
43
|
<h3 class="is-size-3">{% trans 'Invoice State' %}</h3>
|
|
44
44
|
<p>{{ invoice.cash_account }}:
|
|
45
|
-
|
|
45
|
+
{% currency_symbol %}{{ invoice.get_amount_cash | currency_format }}</p>
|
|
46
46
|
<p>{{ invoice.prepaid_account }}:
|
|
47
|
-
|
|
47
|
+
{% currency_symbol %}{{ invoice.get_amount_prepaid | currency_format }}</p>
|
|
48
48
|
<p>{{ invoice.unearned_account }}:
|
|
49
|
-
|
|
49
|
+
{% currency_symbol %}{{ invoice.get_amount_unearned | currency_format }}</p>
|
|
50
50
|
</div>
|
|
51
51
|
<div class="column is-12">
|
|
52
52
|
<h3 class="is-size-3">{% trans 'Ledger State' %}</h3>
|
|
53
53
|
<p>{{ invoice.cash_account }}:
|
|
54
|
-
|
|
54
|
+
{% currency_symbol %}{{ invoice.amount_paid | currency_format }}</p>
|
|
55
55
|
<p>{{ invoice.prepaid_account }}:
|
|
56
|
-
|
|
56
|
+
{% currency_symbol %}{{ invoice.amount_receivable | currency_format }}</p>
|
|
57
57
|
<p>{{ invoice.unearned_account }}:
|
|
58
|
-
|
|
58
|
+
{% currency_symbol %}{{ invoice.amount_unearned | currency_format }}</p>
|
|
59
59
|
</div>
|
|
60
60
|
{% now "Y" as current_year %}
|
|
61
61
|
{% now "m" as current_month %}
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
<td>{{ invoice.get_status_action_date }}</td>
|
|
23
23
|
<td>{{ invoice.get_invoice_status_display }}</td>
|
|
24
24
|
<td>{{ invoice.customer.customer_name }}</td>
|
|
25
|
-
<td
|
|
26
|
-
<td
|
|
25
|
+
<td>{% currency_symbol %}{{ invoice.amount_due | currency_format }}</td>
|
|
26
|
+
<td>{% currency_symbol %}{{ invoice.amount_paid | currency_format }}</td>
|
|
27
27
|
<td>
|
|
28
28
|
{% if invoice.is_past_due %}
|
|
29
29
|
<span class="icon is-small has-text-danger">{% icon 'bi:check-circle-fill' 24 %}</span>
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
<td>{{ transaction_model.account_name }}</td>
|
|
21
21
|
<td>{% if transaction_model.entity_unit_name %}
|
|
22
22
|
{{ transaction_model.entity_unit_name }}{% endif %}</td>
|
|
23
|
-
<td>{% if transaction_model.is_credit %}
|
|
23
|
+
<td>{% if transaction_model.is_credit %}{% currency_symbol %}
|
|
24
24
|
{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
25
|
-
<td>{% if transaction_model.is_debit %}
|
|
25
|
+
<td>{% if transaction_model.is_debit %}{% currency_symbol %}
|
|
26
26
|
{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
27
27
|
<td>{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}</td>
|
|
28
28
|
</tr>
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
<tr>
|
|
53
53
|
<td>{{ transaction_model.account_code }}</td>
|
|
54
54
|
<td>{{ transaction_model.account_name }}</td>
|
|
55
|
-
<td>{% if transaction_model.is_credit %}
|
|
56
|
-
<td>{% if transaction_model.is_debit %}
|
|
55
|
+
<td>{% if transaction_model.is_credit %}{% currency_symbol %}{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
56
|
+
<td>{% if transaction_model.is_debit %}{% currency_symbol %}{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
57
57
|
<td>{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}</td>
|
|
58
58
|
</tr>
|
|
59
59
|
{% endfor %}
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
<td>{{ transaction_model.account_name }}</td>
|
|
21
21
|
<td>{% if transaction_model.entity_unit_name %}
|
|
22
22
|
{{ transaction_model.entity_unit_name }}{% endif %}</td>
|
|
23
|
-
<td>{% if transaction_model.is_credit %}
|
|
23
|
+
<td>{% if transaction_model.is_credit %}{% currency_symbol %}
|
|
24
24
|
{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
25
|
-
<td>{% if transaction_model.is_debit %}
|
|
25
|
+
<td>{% if transaction_model.is_debit %}{% currency_symbol %}
|
|
26
26
|
{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
27
27
|
<td>{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}</td>
|
|
28
28
|
</tr>
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
<tr>
|
|
53
53
|
<td>{{ transaction_model.account_code }}</td>
|
|
54
54
|
<td>{{ transaction_model.account_name }}</td>
|
|
55
|
-
<td>{% if transaction_model.is_credit %}
|
|
56
|
-
<td>{% if transaction_model.is_debit %}
|
|
55
|
+
<td>{% if transaction_model.is_credit %}{% currency_symbol %}{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
56
|
+
<td>{% if transaction_model.is_debit %}{% currency_symbol %}{{ transaction_model.amount | currency_format }}{% endif %}</td>
|
|
57
57
|
<td>{% if transaction_model.description %}{{ transaction_model.description }}{% endif %}</td>
|
|
58
58
|
</tr>
|
|
59
59
|
{% endfor %}
|
django_ledger/views/account.py
CHANGED
|
@@ -76,6 +76,15 @@ class AccountModelListView(BaseAccountModelBaseView, ListView):
|
|
|
76
76
|
}
|
|
77
77
|
active_only = False
|
|
78
78
|
|
|
79
|
+
def get_context_data(self, **kwargs):
|
|
80
|
+
context = super().get_context_data(**kwargs)
|
|
81
|
+
coa_model: ChartOfAccountModel = self.get_coa_model()
|
|
82
|
+
context['page_title'] = f'{coa_model.name} Accounts'
|
|
83
|
+
context['header_title'] = f'{coa_model.name} Accounts'
|
|
84
|
+
context['header_subtitle'] = self.get_authorized_entity_instance_name()
|
|
85
|
+
context['header_subtitle_icon'] = 'ic:twotone-account-tree'
|
|
86
|
+
return context
|
|
87
|
+
|
|
79
88
|
def get_queryset(self):
|
|
80
89
|
qs = super().get_queryset()
|
|
81
90
|
if self.active_only:
|
|
@@ -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.8
|
|
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>
|
|
@@ -72,6 +72,9 @@ Created and developed by [Miguel Sanda](https://www.miguelsanda.com).
|
|
|
72
72
|
|
|
73
73
|
## Getting Involved
|
|
74
74
|
|
|
75
|
+
All pull requests are welcome, as long as they address bugfixes, enhancements, new ideas, or add value to the project in any shape or form.
|
|
76
|
+
Please refrain from submitting pull requests that focus solely on code linting, refactoring, or similar cosmetic changes.
|
|
77
|
+
|
|
75
78
|
- **Feature Requests/Bug Reports**: Open an issue in the repository
|
|
76
79
|
- **For software customization, advanced features and consulting services**:
|
|
77
80
|
[Contact us](https://www.miguelsanda.com/work-with-me/) or email msanda@arrobalytics.com
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
django_ledger/__init__.py,sha256=
|
|
1
|
+
django_ledger/__init__.py,sha256=_0nLBqiSX__10m2Qlwh2CoT5GsoaxA7in0KLao_dNss,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
|
|
@@ -66,11 +66,11 @@ django_ledger/forms/utils.py,sha256=sgkwBZs15_rZ5NT7h-8Z7wi3-ItM1E1sqoVDo3NQ5Jc,
|
|
|
66
66
|
django_ledger/forms/vendor.py,sha256=Nuh8MmSpz4ycMZwiVe--U9Ec6ezIsfACHDkhA2SyiZ4,2215
|
|
67
67
|
django_ledger/io/__init__.py,sha256=8m5AoBRiG2ymrX0Y4LVjq0275i7I5Sk7YRa1BTzVofI,369
|
|
68
68
|
django_ledger/io/io_context.py,sha256=2AiQyJSTkYUCu09Ig0ZPgYj8PtlvUKNS30KvRp9e7zA,4753
|
|
69
|
-
django_ledger/io/io_core.py,sha256=
|
|
69
|
+
django_ledger/io/io_core.py,sha256=EmW0zu4P38OubxncBbnDdyAfM8X_epoxEc7iK-pApKA,87335
|
|
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,23 +97,24 @@ 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=7WzWcCmoTG49-UJl6dCWXNr1wZYYL-AZ2Jr5clnoAPw,36714
|
|
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
110
|
django_ledger/models/data_import.py,sha256=uD2rdmguH6L8gTSltImFRZZ3vrBrmCEG-EWWdSJB0k8,47574
|
|
110
|
-
django_ledger/models/entity.py,sha256=
|
|
111
|
+
django_ledger/models/entity.py,sha256=xAqQpmBxpdTPqxav2WBR0ZRJO6SXHDYMiu1gHDkoUT8,124716
|
|
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
|
|
@@ -187,10 +188,10 @@ django_ledger/static/django_ledger/logo_2/djl-txt-horiz@3x.png,sha256=5YgNwxCiCB
|
|
|
187
188
|
django_ledger/templates/django_ledger/account/account_create.html,sha256=EeU4mxRw9YVE_ugXGF_cPfJvJ1CJsmIRGr1mXfxfwFI,1152
|
|
188
189
|
django_ledger/templates/django_ledger/account/account_create_child.html,sha256=i1tBc-N44D2mKnm61nrI11pXxo2STF1ezV9fVckB_qY,1089
|
|
189
190
|
django_ledger/templates/django_ledger/account/account_detail.html,sha256=m-UTWD9YqoM9JWKug4alY4DIql13jYFrJG2BmdYSZ7s,934
|
|
190
|
-
django_ledger/templates/django_ledger/account/account_list.html,sha256=
|
|
191
|
+
django_ledger/templates/django_ledger/account/account_list.html,sha256=gVWwvmSUtIaiDN2CpfCDuyre17UZgMPfNyxEnKb1D5I,1022
|
|
191
192
|
django_ledger/templates/django_ledger/account/account_update.html,sha256=FzNFcARbhZUUTTi6Sv-PQJi7XzjLsOfrUnR7lIvIlhc,1113
|
|
192
|
-
django_ledger/templates/django_ledger/account/tags/account_txs_table.html,sha256=
|
|
193
|
-
django_ledger/templates/django_ledger/account/tags/accounts_table.html,sha256=
|
|
193
|
+
django_ledger/templates/django_ledger/account/tags/account_txs_table.html,sha256=dbqMmFP7xzwsPGjva9APoU9wuZKs_TXIRYZaz7DP7DA,3563
|
|
194
|
+
django_ledger/templates/django_ledger/account/tags/accounts_table.html,sha256=58GiazOeJuG-z26-K-FmFoIkewx115_91ok7YLpK6t8,7236
|
|
194
195
|
django_ledger/templates/django_ledger/auth/login.html,sha256=UYV2rxjEn9cXBbG6Ww93k6yMPJtOo5vpX6sod61ewKs,1849
|
|
195
196
|
django_ledger/templates/django_ledger/bank_account/bank_account_create.html,sha256=zoCvV-_2aBAXCnCfHTFI18Pn7hbEcOkgtcgYOQ2IJIg,1258
|
|
196
197
|
django_ledger/templates/django_ledger/bank_account/bank_account_list.html,sha256=FuwnbPZ8J6paQw02ddSYEpKUy97SKP-00mFDPMghgJI,701
|
|
@@ -200,7 +201,7 @@ django_ledger/templates/django_ledger/bills/bill_create.html,sha256=fUskaN-ORsj_
|
|
|
200
201
|
django_ledger/templates/django_ledger/bills/bill_delete.html,sha256=IHqXETgrbmMWnrymJv7iAAcDcBvRV9tFgoqHWAUKlQE,1606
|
|
201
202
|
django_ledger/templates/django_ledger/bills/bill_detail.html,sha256=FvssQo6Y_3jQXxieCFaXySSGch4IbUDo5ONUjFB8HFw,11760
|
|
202
203
|
django_ledger/templates/django_ledger/bills/bill_list.html,sha256=-KAmz0bghVZ81DMzFbqaeu_93XmuuMEI6REtYc_P0PE,6336
|
|
203
|
-
django_ledger/templates/django_ledger/bills/bill_update.html,sha256=
|
|
204
|
+
django_ledger/templates/django_ledger/bills/bill_update.html,sha256=mghbdN_8UWfp_5Mf86e8TpYfrEcLd8I2V1biZSaZlXo,8758
|
|
204
205
|
django_ledger/templates/django_ledger/bills/bill_void.html,sha256=iQt9Nq1DL-LovkrMrvUwI87LO8jXZ3R0dL7YKPoZKDM,1354
|
|
205
206
|
django_ledger/templates/django_ledger/bills/includes/card_bill.html,sha256=7bUT7Sx7oFHAs9ko1x3wBBhrOZnTAmrGR55S1vksm8g,14029
|
|
206
207
|
django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html,sha256=tmBNZoaHhk6EsCtcdqAQdHJ0XyDFaFRYqxdCf2Xi5KU,4082
|
|
@@ -240,7 +241,7 @@ django_ledger/templates/django_ledger/data_import/import_job_create.html,sha256=
|
|
|
240
241
|
django_ledger/templates/django_ledger/data_import/import_job_delete.html,sha256=qgobtrI-WNYFqhn8de05mcD-FQ0UGSLT6ZoaBlblXAU,944
|
|
241
242
|
django_ledger/templates/django_ledger/data_import/import_job_update.html,sha256=ZDy391RSOXUq3keUs48QrVrI_ZicdNvDeLT_JacH17M,887
|
|
242
243
|
django_ledger/templates/django_ledger/data_import/tags/data_import_job_list_table.html,sha256=y_U1xixMC9YPR4aq6F_cNpyb-dZ5qcVh9D6HSN9Xpps,2919
|
|
243
|
-
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html,sha256=
|
|
244
|
+
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_imported.html,sha256=LzrDDF_SIsVCH3VwU2c0bu_-YclFIap9F_6rtTVdW-s,1686
|
|
244
245
|
django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html,sha256=z0wTLneFb9BqYohhD2W6loRc9VpAmuFO93Gy2sFMyPo,3916
|
|
245
246
|
django_ledger/templates/django_ledger/entity/entitiy_list.html,sha256=onM9uaWTm2oQ00OPIH5ki2FEfgjx7_EIOT8akuAhQM4,1507
|
|
246
247
|
django_ledger/templates/django_ledger/entity/entity_create.html,sha256=TDayIv2qno7cT3xTCapKV6EZKcTTNfIMxXJFQmHHyz0,1387
|
|
@@ -287,10 +288,10 @@ django_ledger/templates/django_ledger/invoice/invoice_create.html,sha256=p6I2SF-
|
|
|
287
288
|
django_ledger/templates/django_ledger/invoice/invoice_delete.html,sha256=qkhsW6lPiA4BxbWzHgncN8A6p8EU7MjjFyXZnQa1tF0,1482
|
|
288
289
|
django_ledger/templates/django_ledger/invoice/invoice_detail.html,sha256=Z2iNxBY5hEJ6qz7pkqxakPFoYlCchv_h4N7cBjWv8sU,10690
|
|
289
290
|
django_ledger/templates/django_ledger/invoice/invoice_list.html,sha256=b5ysuDP-avrls4OSarSusySAKDFT1sM-jkQgWPPxpNw,5888
|
|
290
|
-
django_ledger/templates/django_ledger/invoice/invoice_update.html,sha256=
|
|
291
|
+
django_ledger/templates/django_ledger/invoice/invoice_update.html,sha256=ygyFOpz5o3Q0j5CHEFI0t_7xBR6AG7990ne9QM3C7aQ,8760
|
|
291
292
|
django_ledger/templates/django_ledger/invoice/includes/card_invoice.html,sha256=MwHTCGqTWTyzIICuyfR173tIu9k8I0IdYHtGsKtZAs8,12749
|
|
292
293
|
django_ledger/templates/django_ledger/invoice/tags/invoice_item_formset.html,sha256=ba4J_WINrpYmCaHAyKWDKwZ6ETQXI3NkQ_AV6Y5-2uM,3413
|
|
293
|
-
django_ledger/templates/django_ledger/invoice/tags/invoice_table.html,sha256=
|
|
294
|
+
django_ledger/templates/django_ledger/invoice/tags/invoice_table.html,sha256=6FZYwBmL3BDKBQ2dk4M3LaQLUWM4nWMJlpfDs344aiI,2636
|
|
294
295
|
django_ledger/templates/django_ledger/journal_entry/je_create.html,sha256=VHMBnJ_ovi9ovuUyBqJr5-wfFRP9-sHnnzN6t1Cue1w,930
|
|
295
296
|
django_ledger/templates/django_ledger/journal_entry/je_delete.html,sha256=WcVhR16oCsL8eOEyL3g3NPLgkvl2CdBpOkHo5-N5zz4,949
|
|
296
297
|
django_ledger/templates/django_ledger/journal_entry/je_detail.html,sha256=Lr9IdchYJ5rtJhJSXKzeUX3WQrR6yQPj1ao8KTkT6t0,1999
|
|
@@ -299,7 +300,7 @@ django_ledger/templates/django_ledger/journal_entry/je_list.html,sha256=blJNSwcr
|
|
|
299
300
|
django_ledger/templates/django_ledger/journal_entry/je_update.html,sha256=XXxhA31Ltivxkqqa40z9IWh1JeLjWk9NNrp32t7Ee7U,712
|
|
300
301
|
django_ledger/templates/django_ledger/journal_entry/includes/card_journal_entry.html,sha256=PU-tOMBuQcwxP73uXyNePaCF8aY0KutWuuAdYUWJofw,2547
|
|
301
302
|
django_ledger/templates/django_ledger/journal_entry/tags/je_table.html,sha256=IQyHXHA3goBjdGM0Hzih46Z82JVhMGPpCRgMVCNGmaA,5747
|
|
302
|
-
django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html,sha256=
|
|
303
|
+
django_ledger/templates/django_ledger/journal_entry/tags/je_txs_table.html,sha256=VN217o-bGEjQ2DHDMhzWOcFMe4EGAu0p3qhc3Dv9X-Y,3446
|
|
303
304
|
django_ledger/templates/django_ledger/layouts/base.html,sha256=_M49Ivw6TKU4dFjESTBd7vcc1kqXLWbDgcBnHUy_5Z4,1910
|
|
304
305
|
django_ledger/templates/django_ledger/layouts/content_layout_1.html,sha256=U-32AnGwhIOGHtSTlSst580OwrUBIoDIt93_xZRtOTw,936
|
|
305
306
|
django_ledger/templates/django_ledger/layouts/content_layout_2.html,sha256=gqXgaGj3ByTI7EziEw0Wo-XBPZEB82selzrXDuCNz_Y,355
|
|
@@ -327,7 +328,7 @@ django_ledger/templates/django_ledger/service/service_delete.html,sha256=9h8fR5c
|
|
|
327
328
|
django_ledger/templates/django_ledger/service/service_list.html,sha256=NO6f4zmOnAmjrHd-lsYDksKJtVuoeXYC6s2g1MUibOs,854
|
|
328
329
|
django_ledger/templates/django_ledger/service/service_update.html,sha256=IceH87Na-xxg1p-V5VdR93aHO0_VaBDXkx1U5ev8qcs,1440
|
|
329
330
|
django_ledger/templates/django_ledger/service/tags/services_table.html,sha256=pP4K0KvFfmZ9BESrMcNnTv-faFovCHYBhhn_PcXAurM,2434
|
|
330
|
-
django_ledger/templates/django_ledger/transactions/tags/txs_table.html,sha256=
|
|
331
|
+
django_ledger/templates/django_ledger/transactions/tags/txs_table.html,sha256=VN217o-bGEjQ2DHDMhzWOcFMe4EGAu0p3qhc3Dv9X-Y,3446
|
|
331
332
|
django_ledger/templates/django_ledger/unit/unit_create.html,sha256=7dmsu0TUxsexJyxKCz3cICddN0DGGjQOTM89ddQm9r8,1194
|
|
332
333
|
django_ledger/templates/django_ledger/unit/unit_detail.html,sha256=wttq1WzsNxa5ZIrblpPmw5zl2xuyOjSCyxtqGHJimUA,1709
|
|
333
334
|
django_ledger/templates/django_ledger/unit/unit_list.html,sha256=n_XWrs2zvSafGzJnFzgwMTaMFfMsY-MRld8JtxIJ1Ug,1973
|
|
@@ -384,14 +385,14 @@ django_ledger/urls/transactions.py,sha256=e_x_z5qbkR6i7o8OWWdXshDiY_WVmu9WVhR9A9
|
|
|
384
385
|
django_ledger/urls/unit.py,sha256=QEVKrgcw2dqMaaXsUHfqYecTa5-iaPlS9smrYJ1QsgM,1506
|
|
385
386
|
django_ledger/urls/vendor.py,sha256=ODHpAwe5lomluj8ZCqbMtugTeeRsv0Yo9SqkZEmfYaw,393
|
|
386
387
|
django_ledger/views/__init__.py,sha256=fY9eBoPkx50p-kSalskd4QW1tHm3e64WpwOFuJzn4Xo,1178
|
|
387
|
-
django_ledger/views/account.py,sha256=
|
|
388
|
+
django_ledger/views/account.py,sha256=fC0PX889DxyKheTF3SIA_aDxermQu8hPhrw5JBwpwS0,9536
|
|
388
389
|
django_ledger/views/auth.py,sha256=I8Mv_aAfW-8Z5VYPOX7P3IUO4Fp5jJPkSuu1ZSVpWtI,777
|
|
389
390
|
django_ledger/views/bank_account.py,sha256=MbiVurJTNK-UsDPn17-ai4G8sE3qIMrdmXaWPX-J8n8,5025
|
|
390
391
|
django_ledger/views/bill.py,sha256=5tNb3pyh8GQM4hjV0FXqCXrEQF2LwpEWLkOkpknEdjA,22239
|
|
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.8.dist-info/AUTHORS.md,sha256=ShPwf-qniJkbjRzX5_lqhmgoLMEYMSHSwKPXHZtWmyk,824
|
|
413
|
+
django_ledger-0.7.8.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
414
|
+
django_ledger-0.7.8.dist-info/METADATA,sha256=usMkzL01GHVX7RKT9LpSncsp5VqLAlByuM4woCG-Wr4,9089
|
|
415
|
+
django_ledger-0.7.8.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
|
416
|
+
django_ledger-0.7.8.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
|
|
417
|
+
django_ledger-0.7.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|