django-ledger 0.5.6.4__py3-none-any.whl → 0.5.6.5__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/admin/entity.py +14 -0
- django_ledger/forms/account.py +13 -4
- django_ledger/models/coa.py +18 -16
- django_ledger/templates/django_ledger/account/account_list.html +2 -2
- django_ledger/templates/django_ledger/account/account_update.html +18 -16
- django_ledger/urls/chart_of_accounts.py +3 -3
- django_ledger/views/account.py +35 -9
- django_ledger/views/coa.py +8 -9
- django_ledger/views/mixins.py +10 -8
- {django_ledger-0.5.6.4.dist-info → django_ledger-0.5.6.5.dist-info}/METADATA +1 -1
- {django_ledger-0.5.6.4.dist-info → django_ledger-0.5.6.5.dist-info}/RECORD +16 -16
- {django_ledger-0.5.6.4.dist-info → django_ledger-0.5.6.5.dist-info}/AUTHORS.md +0 -0
- {django_ledger-0.5.6.4.dist-info → django_ledger-0.5.6.5.dist-info}/LICENSE +0 -0
- {django_ledger-0.5.6.4.dist-info → django_ledger-0.5.6.5.dist-info}/WHEEL +0 -0
- {django_ledger-0.5.6.4.dist-info → django_ledger-0.5.6.5.dist-info}/top_level.txt +0 -0
django_ledger/__init__.py
CHANGED
django_ledger/admin/entity.py
CHANGED
|
@@ -53,11 +53,13 @@ class EntityModelAdmin(ModelAdmin):
|
|
|
53
53
|
list_display = [
|
|
54
54
|
'slug',
|
|
55
55
|
'name',
|
|
56
|
+
'admin',
|
|
56
57
|
'accrual_method',
|
|
57
58
|
'last_closing_date',
|
|
58
59
|
'hidden',
|
|
59
60
|
'get_coa_count',
|
|
60
61
|
'add_ledger_link',
|
|
62
|
+
'dashboard_link',
|
|
61
63
|
'balance_sheet_link',
|
|
62
64
|
'income_statement_link',
|
|
63
65
|
'cash_flow_statement_link'
|
|
@@ -166,6 +168,18 @@ class EntityModelAdmin(ModelAdmin):
|
|
|
166
168
|
|
|
167
169
|
cash_flow_statement_link.short_description = 'Cash Flow'
|
|
168
170
|
|
|
171
|
+
def dashboard_link(self, obj: EntityModel):
|
|
172
|
+
add_ledger_url = reverse(
|
|
173
|
+
viewname='django_ledger:entity-dashboard',
|
|
174
|
+
kwargs={
|
|
175
|
+
'entity_slug': obj.slug
|
|
176
|
+
})
|
|
177
|
+
return format_html('<a class="viewlink" href="{url}">View</a>',
|
|
178
|
+
url=add_ledger_url,
|
|
179
|
+
slug=obj.slug)
|
|
180
|
+
|
|
181
|
+
dashboard_link.short_description = 'Dashboard'
|
|
182
|
+
|
|
169
183
|
def add_code_of_accounts(self, request, queryset):
|
|
170
184
|
lt = get_localtime().isoformat()
|
|
171
185
|
for entity_model in queryset:
|
django_ledger/forms/account.py
CHANGED
|
@@ -31,8 +31,9 @@ class AccountModelCreateForm(ModelForm):
|
|
|
31
31
|
balance_type: Need to be selected from drop down as "Debit" or Credit"
|
|
32
32
|
"""
|
|
33
33
|
|
|
34
|
-
def __init__(self,
|
|
35
|
-
self.
|
|
34
|
+
def __init__(self, entity_model, coa_model, user_model, *args, **kwargs):
|
|
35
|
+
self.ENTITY = entity_model
|
|
36
|
+
self.COA_MODEL = coa_model
|
|
36
37
|
self.USER_MODEL = user_model
|
|
37
38
|
super().__init__(*args, **kwargs)
|
|
38
39
|
self.fields['role'].choices = ACCOUNT_CHOICES_NO_ROOT
|
|
@@ -44,6 +45,13 @@ class AccountModelCreateForm(ModelForm):
|
|
|
44
45
|
return None
|
|
45
46
|
return role_default
|
|
46
47
|
|
|
48
|
+
def clean_code(self):
|
|
49
|
+
code = self.cleaned_data['code']
|
|
50
|
+
is_code_valid = not self.COA_MODEL.accountmodel_set.filter(code=code).exists()
|
|
51
|
+
if not is_code_valid:
|
|
52
|
+
raise ValidationError(message=_('Code {} already exists for CoA {}').format(code, self.COA_MODEL.slug))
|
|
53
|
+
return code
|
|
54
|
+
|
|
47
55
|
class Meta:
|
|
48
56
|
model = AccountModel
|
|
49
57
|
fields = [
|
|
@@ -92,8 +100,9 @@ class AccountModelUpdateForm(MoveNodeForm):
|
|
|
92
100
|
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
|
|
93
101
|
}))
|
|
94
102
|
|
|
95
|
-
def __init__(self,
|
|
96
|
-
self.
|
|
103
|
+
def __init__(self, entity_model, coa_model, user_model, *args, **kwargs):
|
|
104
|
+
self.ENTITY = entity_model
|
|
105
|
+
self.COA_MODEL = coa_model
|
|
97
106
|
self.USER_MODEL = user_model
|
|
98
107
|
super().__init__(*args, **kwargs)
|
|
99
108
|
# self.fields['_ref_node_id'].choices = self.mk_dropdown_tree_choices()
|
django_ledger/models/coa.py
CHANGED
|
@@ -51,7 +51,9 @@ class ChartOfAccountsModelValidationError(ValidationError):
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
class ChartOfAccountModelQuerySet(models.QuerySet):
|
|
54
|
-
|
|
54
|
+
|
|
55
|
+
def active(self):
|
|
56
|
+
return self.filter(active=True)
|
|
55
57
|
|
|
56
58
|
|
|
57
59
|
class ChartOfAccountModelManager(models.Manager):
|
|
@@ -116,22 +118,10 @@ class ChartOfAccountModelManager(models.Manager):
|
|
|
116
118
|
ChartOfAccountQuerySet
|
|
117
119
|
Returns a ChartOfAccountQuerySet with applied filters.
|
|
118
120
|
"""
|
|
119
|
-
qs = self.
|
|
121
|
+
qs = self.for_user(user_model)
|
|
120
122
|
if isinstance(entity_slug, lazy_loader.get_entity_model()):
|
|
121
|
-
return qs.filter(
|
|
122
|
-
|
|
123
|
-
(
|
|
124
|
-
Q(entity__admin=user_model) |
|
|
125
|
-
Q(entity__managers__in=[user_model])
|
|
126
|
-
)
|
|
127
|
-
)
|
|
128
|
-
return qs.filter(
|
|
129
|
-
Q(entity__slug__iexact=entity_slug) &
|
|
130
|
-
(
|
|
131
|
-
Q(entity__admin=user_model) |
|
|
132
|
-
Q(entity__managers__in=[user_model])
|
|
133
|
-
)
|
|
134
|
-
).select_related('entity')
|
|
123
|
+
return qs.filter(entity=entity_slug).select_related('entity')
|
|
124
|
+
return qs.filter(entity__slug__iexact=entity_slug).select_related('entity')
|
|
135
125
|
|
|
136
126
|
|
|
137
127
|
class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
@@ -284,6 +274,10 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
284
274
|
))
|
|
285
275
|
|
|
286
276
|
def is_default(self) -> bool:
|
|
277
|
+
if not self.entity_id:
|
|
278
|
+
return False
|
|
279
|
+
if not self.entity.default_coa_id:
|
|
280
|
+
return False
|
|
287
281
|
return self.entity.default_coa_id == self.uuid
|
|
288
282
|
|
|
289
283
|
def is_active(self) -> bool:
|
|
@@ -517,6 +511,14 @@ class ChartOfAccountModelAbstract(SlugNameMixIn, CreateUpdateMixIn):
|
|
|
517
511
|
}
|
|
518
512
|
)
|
|
519
513
|
|
|
514
|
+
def get_coa_list_url(self):
|
|
515
|
+
return reverse(
|
|
516
|
+
viewname='django_ledger:coa-list',
|
|
517
|
+
kwargs={
|
|
518
|
+
'entity_slug': self.entity.slug
|
|
519
|
+
}
|
|
520
|
+
)
|
|
521
|
+
|
|
520
522
|
def get_absolute_url(self) -> str:
|
|
521
523
|
return reverse(
|
|
522
524
|
viewname='django_ledger:coa-detail',
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
{% accounts_table accounts %}
|
|
16
16
|
</div>
|
|
17
17
|
<div class="column is-12 has-text-centered">
|
|
18
|
-
<a href="{
|
|
18
|
+
<a href="{{ coa_model.get_create_coa_account_url }}"
|
|
19
19
|
class="button is-success">{% trans 'Create Account' %}</a>
|
|
20
|
-
<a href="{
|
|
20
|
+
<a href="{{ coa_model.get_coa_list_url }}"
|
|
21
21
|
class="button is-dark">{% trans 'Back to CoA List' %}</a>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
@@ -4,22 +4,24 @@
|
|
|
4
4
|
{% load django_ledger %}
|
|
5
5
|
|
|
6
6
|
{% block view_content %}
|
|
7
|
-
<div class="
|
|
8
|
-
<div class="
|
|
9
|
-
<div class="
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
<div class="box">
|
|
8
|
+
<div class="columns is-centered is-multiline">
|
|
9
|
+
<div class="column is-12 has-text-centered">
|
|
10
|
+
<h2 class="is-size-3 has-text-info">{{ coa_model.name }}</h2>
|
|
11
|
+
<p class="is-size-4 has-text-danger is-italic">({{ coa_model.slug }})</p>
|
|
12
|
+
<h1 class="is-size-2">{{ account }}</h1>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="column is-8-tablet is-6-desktop">
|
|
15
|
+
<div class="box">
|
|
16
|
+
<form method="post">
|
|
17
|
+
{% csrf_token %}
|
|
18
|
+
{{ form.as_p }}
|
|
19
|
+
<button type="submit" class="button is-primary is-fullwidth djetler_my_1">Submit</button>
|
|
20
|
+
<a class="button is-dark is-small is-fullwidth"
|
|
21
|
+
href="{% url 'django_ledger:account-list' entity_slug=view.kwargs.entity_slug %}">Back</a>
|
|
22
|
+
</form>
|
|
23
|
+
</div>
|
|
19
24
|
</div>
|
|
20
25
|
</div>
|
|
21
26
|
</div>
|
|
22
|
-
{% endblock %}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
{% endblock %}
|
|
@@ -4,13 +4,13 @@ from django_ledger import views
|
|
|
4
4
|
|
|
5
5
|
urlpatterns = [
|
|
6
6
|
path('<slug:entity_slug>/list/',
|
|
7
|
-
views.
|
|
7
|
+
views.ChartOfAccountModelListView.as_view(),
|
|
8
8
|
name='coa-list'),
|
|
9
9
|
path('<slug:entity_slug>/detail/<slug:coa_slug>/',
|
|
10
|
-
views.
|
|
10
|
+
views.ChartOfAccountModelListView.as_view(),
|
|
11
11
|
name='coa-detail'),
|
|
12
12
|
path('<slug:entity_slug>/update/<slug:coa_slug>/',
|
|
13
|
-
views.
|
|
13
|
+
views.ChartOfAccountModelUpdateView.as_view(),
|
|
14
14
|
name='coa-update'),
|
|
15
15
|
|
|
16
16
|
# ACTIONS....
|
django_ledger/views/account.py
CHANGED
|
@@ -17,7 +17,7 @@ from django.views.generic.detail import SingleObjectMixin
|
|
|
17
17
|
|
|
18
18
|
from django_ledger.forms.account import AccountModelUpdateForm, AccountModelCreateForm
|
|
19
19
|
from django_ledger.io.io_core import get_localdate
|
|
20
|
-
from django_ledger.models import
|
|
20
|
+
from django_ledger.models import ChartOfAccountModel
|
|
21
21
|
from django_ledger.models.accounts import AccountModel
|
|
22
22
|
from django_ledger.views.mixins import (
|
|
23
23
|
YearlyReportMixIn, MonthlyReportMixIn, QuarterlyReportMixIn, DjangoLedgerSecurityMixIn,
|
|
@@ -27,6 +27,18 @@ from django_ledger.views.mixins import (
|
|
|
27
27
|
|
|
28
28
|
class BaseAccountModelViewQuerySetMixIn:
|
|
29
29
|
queryset = None
|
|
30
|
+
coa_model = None
|
|
31
|
+
|
|
32
|
+
def get_coa_model(self) -> ChartOfAccountModel:
|
|
33
|
+
if self.coa_model is None:
|
|
34
|
+
coa_slug = self.kwargs.get('coa_slug')
|
|
35
|
+
if coa_slug:
|
|
36
|
+
coa_model_qs = self.AUTHORIZED_ENTITY_MODEL.chartofaccountmodel_set.all().active()
|
|
37
|
+
coa_model = get_object_or_404(coa_model_qs, slug__exact=coa_slug)
|
|
38
|
+
else:
|
|
39
|
+
coa_model = self.AUTHORIZED_ENTITY_MODEL.default_coa
|
|
40
|
+
self.coa_model = coa_model
|
|
41
|
+
return self.coa_model
|
|
30
42
|
|
|
31
43
|
def get_queryset(self):
|
|
32
44
|
if self.queryset is None:
|
|
@@ -39,8 +51,15 @@ class BaseAccountModelViewQuerySetMixIn:
|
|
|
39
51
|
).order_by(
|
|
40
52
|
'coa_model', 'role', 'code').not_coa_root()
|
|
41
53
|
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
coa_slug = self.kwargs.get('coa_slug')
|
|
55
|
+
account_pk = self.kwargs.get('account_pk')
|
|
56
|
+
|
|
57
|
+
if coa_slug:
|
|
58
|
+
qs = qs.filter(coa_model__slug__exact=coa_slug)
|
|
59
|
+
elif account_pk:
|
|
60
|
+
qs = qs.filter(uuid__exact=account_pk)
|
|
61
|
+
else:
|
|
62
|
+
qs = qs.filter(coa_model__slug__exact=self.AUTHORIZED_ENTITY_MODEL.default_coa.slug)
|
|
44
63
|
|
|
45
64
|
self.queryset = qs
|
|
46
65
|
return super().get_queryset()
|
|
@@ -93,7 +112,8 @@ class AccountModelUpdateView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuer
|
|
|
93
112
|
# Set here because user_model is needed to instantiate an instance of MoveNodeForm (AccountModelUpdateForm)
|
|
94
113
|
account_model.USER_MODEL = self.request.user
|
|
95
114
|
return AccountModelUpdateForm(
|
|
96
|
-
|
|
115
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL,
|
|
116
|
+
coa_model=self.get_coa_model(),
|
|
97
117
|
user_model=self.request.user,
|
|
98
118
|
**self.get_form_kwargs()
|
|
99
119
|
)
|
|
@@ -119,7 +139,8 @@ class AccountModelCreateView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuer
|
|
|
119
139
|
def get_form(self, form_class=None):
|
|
120
140
|
return AccountModelCreateForm(
|
|
121
141
|
user_model=self.request.user,
|
|
122
|
-
|
|
142
|
+
entity_model=self.AUTHORIZED_ENTITY_MODEL,
|
|
143
|
+
coa_model=self.get_coa_model(),
|
|
123
144
|
**self.get_form_kwargs()
|
|
124
145
|
)
|
|
125
146
|
|
|
@@ -129,20 +150,25 @@ class AccountModelCreateView(DjangoLedgerSecurityMixIn, BaseAccountModelViewQuer
|
|
|
129
150
|
return context
|
|
130
151
|
|
|
131
152
|
def form_valid(self, form):
|
|
132
|
-
|
|
133
|
-
entity_model_qs = EntityModel.objects.for_user(user_model=self.request.user).select_related('default_coa')
|
|
134
|
-
entity_model: EntityModel = get_object_or_404(entity_model_qs, slug__exact=self.kwargs['entity_slug'])
|
|
153
|
+
entity_model = self.AUTHORIZED_ENTITY_MODEL
|
|
135
154
|
account_model: AccountModel = form.save(commit=False)
|
|
136
155
|
|
|
137
156
|
if not entity_model.has_default_coa():
|
|
138
157
|
entity_model.create_chart_of_accounts(assign_as_default=True, commit=True)
|
|
139
158
|
|
|
140
|
-
coa_model =
|
|
159
|
+
coa_model = self.get_coa_model()
|
|
141
160
|
coa_model.allocate_account(account_model=account_model)
|
|
142
161
|
return HttpResponseRedirect(self.get_success_url())
|
|
143
162
|
|
|
144
163
|
def get_success_url(self):
|
|
145
164
|
entity_slug = self.kwargs.get('entity_slug')
|
|
165
|
+
coa_slug = self.kwargs.get('coa_slug')
|
|
166
|
+
if coa_slug:
|
|
167
|
+
return reverse('django_ledger:account-list-coa',
|
|
168
|
+
kwargs={
|
|
169
|
+
'entity_slug': entity_slug,
|
|
170
|
+
'coa_slug': coa_slug
|
|
171
|
+
})
|
|
146
172
|
return reverse('django_ledger:account-list',
|
|
147
173
|
kwargs={
|
|
148
174
|
'entity_slug': entity_slug,
|
django_ledger/views/coa.py
CHANGED
|
@@ -18,21 +18,21 @@ from django_ledger.models.coa import ChartOfAccountModel
|
|
|
18
18
|
from django_ledger.views.mixins import DjangoLedgerSecurityMixIn
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class
|
|
21
|
+
class ChartOfAccountModelModelBaseViewMixIn(DjangoLedgerSecurityMixIn):
|
|
22
22
|
queryset = None
|
|
23
23
|
|
|
24
24
|
def get_queryset(self):
|
|
25
25
|
if self.queryset is None:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
).select_related('entity').order_by('-updated')
|
|
26
|
+
entity_model = self.get_authorized_entity_instance()
|
|
27
|
+
self.queryset = entity_model.chartofaccountmodel_set.all().select_related(
|
|
28
|
+
'entity').order_by('-updated')
|
|
30
29
|
return super().get_queryset()
|
|
31
30
|
|
|
32
31
|
|
|
33
|
-
class
|
|
32
|
+
class ChartOfAccountModelListView(ChartOfAccountModelModelBaseViewMixIn, ListView):
|
|
34
33
|
template_name = 'django_ledger/chart_of_accounts/coa_list.html'
|
|
35
34
|
extra_context = {
|
|
35
|
+
'page_title': _('Chart of Account List'),
|
|
36
36
|
'header_title': _('Chart of Account List'),
|
|
37
37
|
}
|
|
38
38
|
context_object_name = 'coa_list'
|
|
@@ -65,7 +65,7 @@ class ChartOfAccountsListView(DjangoLedgerSecurityMixIn, ChartOfAccountsModelMod
|
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
class
|
|
68
|
+
class ChartOfAccountModelUpdateView(ChartOfAccountModelModelBaseViewMixIn, UpdateView):
|
|
69
69
|
context_object_name = 'coa'
|
|
70
70
|
slug_url_kwarg = 'coa_slug'
|
|
71
71
|
template_name = 'django_ledger/chart_of_accounts/coa_update.html'
|
|
@@ -86,9 +86,8 @@ class ChartOfAccountsUpdateView(DjangoLedgerSecurityMixIn, ChartOfAccountsModelM
|
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
# todo: centralize this functionality into a separate class for ALL Action views...
|
|
89
|
-
class CharOfAccountModelActionView(
|
|
89
|
+
class CharOfAccountModelActionView(ChartOfAccountModelModelBaseViewMixIn,
|
|
90
90
|
RedirectView,
|
|
91
|
-
ChartOfAccountsModelModelViewQuerySetMixIn,
|
|
92
91
|
SingleObjectMixin):
|
|
93
92
|
http_method_names = ['get']
|
|
94
93
|
slug_url_kwarg = 'coa_slug'
|
django_ledger/views/mixins.py
CHANGED
|
@@ -299,14 +299,6 @@ class DjangoLedgerSecurityMixIn(PermissionRequiredMixin):
|
|
|
299
299
|
def get_login_url(self):
|
|
300
300
|
return reverse('django_ledger:login')
|
|
301
301
|
|
|
302
|
-
def get_authorized_entity_queryset(self):
|
|
303
|
-
return EntityModel.objects.for_user(
|
|
304
|
-
user_model=self.request.user).only(
|
|
305
|
-
'uuid', 'slug', 'name', 'default_coa', 'admin')
|
|
306
|
-
|
|
307
|
-
def get_authorized_entity_instance(self) -> Optional[EntityModel]:
|
|
308
|
-
return self.AUTHORIZED_ENTITY_MODEL
|
|
309
|
-
|
|
310
302
|
def has_permission(self):
|
|
311
303
|
if self.request.user.is_superuser:
|
|
312
304
|
if 'entity_slug' in self.kwargs:
|
|
@@ -329,6 +321,16 @@ class DjangoLedgerSecurityMixIn(PermissionRequiredMixin):
|
|
|
329
321
|
return True
|
|
330
322
|
return False
|
|
331
323
|
|
|
324
|
+
def get_authorized_entity_queryset(self):
|
|
325
|
+
return EntityModel.objects.for_user(
|
|
326
|
+
user_model=self.request.user).only(
|
|
327
|
+
'uuid', 'slug', 'name', 'default_coa', 'admin')
|
|
328
|
+
|
|
329
|
+
def get_authorized_entity_instance(self) -> Optional[EntityModel]:
|
|
330
|
+
if self.AUTHORIZED_ENTITY_MODEL is None:
|
|
331
|
+
raise Http404()
|
|
332
|
+
return self.AUTHORIZED_ENTITY_MODEL
|
|
333
|
+
|
|
332
334
|
|
|
333
335
|
class EntityUnitMixIn:
|
|
334
336
|
UNIT_SLUG_KWARG = 'unit_slug'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-ledger
|
|
3
|
-
Version: 0.5.6.
|
|
3
|
+
Version: 0.5.6.5
|
|
4
4
|
Summary: Bookkeeping & Financial analysis backend for Django. Balance Sheet, Income Statements, Chart of Accounts, Entities
|
|
5
5
|
Author-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
6
6
|
Maintainer-email: Miguel Sanda <msanda@arrobalytics.com>
|
|
@@ -48,14 +48,14 @@ 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=baak5-S_PQQ_AyoLijK86tI74pLFMsMbReoTxhab9ug,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
|
|
55
55
|
django_ledger/utils.py,sha256=l8xq-uSvUdJNpyDjC_0UrsSfjeEpwf7B-tavbnt40a8,4305
|
|
56
56
|
django_ledger/admin/__init__.py,sha256=MipzxmBhXswpx63uf3Ai2amyBMAP5fZL7mKXKxjNRIY,458
|
|
57
57
|
django_ledger/admin/coa.py,sha256=BcBsvNs4Z1hOyZy4YqCtIfk1aw8DejrI1bAEH93Tkjc,3542
|
|
58
|
-
django_ledger/admin/entity.py,sha256=
|
|
58
|
+
django_ledger/admin/entity.py,sha256=DhH-6o3kjUdkhVPHzwOSF3crtvf5MCzcc1vPCk9O2Bk,6287
|
|
59
59
|
django_ledger/admin/ledger.py,sha256=ecwmnuW4119StZDR_1QaK9jdZXw2dEvza-dnx1bHWDM,7876
|
|
60
60
|
django_ledger/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
django_ledger/contrib/django_ledger_graphene/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -93,7 +93,7 @@ django_ledger/contrib/django_ledger_graphene/unit/schema.py,sha256=orR4tn1ORTfzL
|
|
|
93
93
|
django_ledger/contrib/django_ledger_graphene/vendor/mutations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
94
|
django_ledger/contrib/django_ledger_graphene/vendor/schema.py,sha256=Y20FR0gut0yNsROL_f1LSHdzn7wM4_voKQv--evVGG4,1453
|
|
95
95
|
django_ledger/forms/__init__.py,sha256=N7iaeMO5xTU-q7RXTVYUy-fu8nMZbiIJ9QEtDCjsTdI,205
|
|
96
|
-
django_ledger/forms/account.py,sha256
|
|
96
|
+
django_ledger/forms/account.py,sha256=-U6OneNfH2bIlMzqXPZk8KmLn-csMhZ4PKzzq-4LdUs,5430
|
|
97
97
|
django_ledger/forms/app_filters.py,sha256=fHmftiuR1Ei28LhGuu7LoxS4Q5pVjj1wiT0fF4GUcUI,2293
|
|
98
98
|
django_ledger/forms/auth.py,sha256=HaJDEIRFoAHEAv-s_ZfTe0rZbhzIQ7GkKnaBX1qiAW4,736
|
|
99
99
|
django_ledger/forms/bank_account.py,sha256=dmmx1BzGq9IeD0jpYOmE83Gat6D3IUeTc0z0jJ7roR4,4513
|
|
@@ -147,7 +147,7 @@ django_ledger/models/accounts.py,sha256=Ie5LTiT4zbmJndq1AJC6kZplgaklkXFusgl4LnIk
|
|
|
147
147
|
django_ledger/models/bank_account.py,sha256=0-eTBxxRyvUKOVVNcGqWV1kiOKcXA2KPQIdiVHDUDCY,7678
|
|
148
148
|
django_ledger/models/bill.py,sha256=vaXdTEfow9SPzactNs6mZdm4tJc8uamKufT9tQGFpJg,63541
|
|
149
149
|
django_ledger/models/closing_entry.py,sha256=52BLvK4Jr8aXrB4kgFqrqHozkw13gwu0hm9RXWnLYE8,17732
|
|
150
|
-
django_ledger/models/coa.py,sha256=
|
|
150
|
+
django_ledger/models/coa.py,sha256=yxkZK6R8-j58i_KE8X1bB0CwnaF-Vhn0Z4qLK5ZycrY,20305
|
|
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
|
|
@@ -199,8 +199,8 @@ django_ledger/static/django_ledger/logo/favicon.png,sha256=7QIRzizQUig3PHi9zyV1t
|
|
|
199
199
|
django_ledger/templates/django_ledger/account/account_create.html,sha256=3-5LgVrvOm6YhryVGgtYltyHMA98dSNt7_vOvsxSRvU,1166
|
|
200
200
|
django_ledger/templates/django_ledger/account/account_create_child.html,sha256=i1tBc-N44D2mKnm61nrI11pXxo2STF1ezV9fVckB_qY,1089
|
|
201
201
|
django_ledger/templates/django_ledger/account/account_detail.html,sha256=m-UTWD9YqoM9JWKug4alY4DIql13jYFrJG2BmdYSZ7s,934
|
|
202
|
-
django_ledger/templates/django_ledger/account/account_list.html,sha256=
|
|
203
|
-
django_ledger/templates/django_ledger/account/account_update.html,sha256=
|
|
202
|
+
django_ledger/templates/django_ledger/account/account_list.html,sha256=0kDNrzcMgMewiBQGqjkPCUHErmOiVz6uy1FnwzclMjc,1019
|
|
203
|
+
django_ledger/templates/django_ledger/account/account_update.html,sha256=QR4kT3cv2d00Hlh0j6UUbhtAxJ6J_mQVzGDYCVDnaWE,1151
|
|
204
204
|
django_ledger/templates/django_ledger/account/tags/account_txs_table.html,sha256=ywGyB-LdCLAfT5vbFyTjPD7tNGwdQEZwrHq0Dtp6zoA,3373
|
|
205
205
|
django_ledger/templates/django_ledger/account/tags/accounts_table.html,sha256=33rqgVfnfi43l6u3JGOyydF0xH6QXNM2-QQqNK9Cnkg,7476
|
|
206
206
|
django_ledger/templates/django_ledger/auth/login.html,sha256=UYV2rxjEn9cXBbG6Ww93k6yMPJtOo5vpX6sod61ewKs,1849
|
|
@@ -372,7 +372,7 @@ django_ledger/urls/account.py,sha256=9G6m2mkki8sNtC_mlNIHcn2SCSoG7ienbQ5qg2kHWg0
|
|
|
372
372
|
django_ledger/urls/auth.py,sha256=8dY2h6PQkMayUL81guu9JCxm--Tj0rglvvxg9Qh03aY,230
|
|
373
373
|
django_ledger/urls/bank_account.py,sha256=-dJsrnwej8H96Gc8xltLf3NwUxKk_xG0Mq4mxhe8Cqs,887
|
|
374
374
|
django_ledger/urls/bill.py,sha256=wvdRqSgnHp1CLdX6Sudu1IiIx4M1Pe8OupanA-9a-nI,2890
|
|
375
|
-
django_ledger/urls/chart_of_accounts.py,sha256=
|
|
375
|
+
django_ledger/urls/chart_of_accounts.py,sha256=c9b32U-GY8Ddhy2W7zW8IMnNtQzZHF1bs1SGJ4Ylr3U,1097
|
|
376
376
|
django_ledger/urls/closing_entry.py,sha256=3W0fCuAWGB3h8cWg0cxOb9EClVrydeIdHEX0q9rge60,1765
|
|
377
377
|
django_ledger/urls/customer.py,sha256=I3tWSb5Gmdr-boBSlCst_5cvCHz6JhpGxuwglqJeaG0,426
|
|
378
378
|
django_ledger/urls/data_import.py,sha256=bOi6U8gN2adxQUjOeNCJGuDRB--hwWeUIQOYTMbFarw,780
|
|
@@ -392,12 +392,12 @@ django_ledger/urls/transactions.py,sha256=e_x_z5qbkR6i7o8OWWdXshDiY_WVmu9WVhR9A9
|
|
|
392
392
|
django_ledger/urls/unit.py,sha256=EaBd1EcSeQYbOH1rTQZdyDEEtLVi7-QfC_wpRPwTpuE,1499
|
|
393
393
|
django_ledger/urls/vendor.py,sha256=ODHpAwe5lomluj8ZCqbMtugTeeRsv0Yo9SqkZEmfYaw,393
|
|
394
394
|
django_ledger/views/__init__.py,sha256=l5Pm2_oAW6Q_jJbXf-BiHA3ilCbiGb6gkXCm73K5DGY,1158
|
|
395
|
-
django_ledger/views/account.py,sha256=
|
|
395
|
+
django_ledger/views/account.py,sha256=cT-YVWQCDj9IAaG8LVrk_jiH5gfGRrdzeZb63tR3atg,10525
|
|
396
396
|
django_ledger/views/auth.py,sha256=-zTjMlLpyxHGPlY9EXFQyeVHMmyeJ2H9RptcW7PDeDg,771
|
|
397
397
|
django_ledger/views/bank_account.py,sha256=bMgqrDydz6WuXina4L27uV-cmQicW0_JoPaXxlO7uN4,5176
|
|
398
398
|
django_ledger/views/bill.py,sha256=-WWAPF6PKqfaApAJBFwNMmIveDajXD-5a12d-LbcqFA,23087
|
|
399
399
|
django_ledger/views/closing_entry.py,sha256=y78azZesVgdUoQmaSEYiP7MBaPRE45qAAHPDlcThlUs,8103
|
|
400
|
-
django_ledger/views/coa.py,sha256=
|
|
400
|
+
django_ledger/views/coa.py,sha256=WnWQVz-4Ik9v28KHzD_WiKcgix7l6bBj1A60p4k-eos,4934
|
|
401
401
|
django_ledger/views/customer.py,sha256=RoBsXBxZC9b79DSNNHaoSZtQ2AoXf7DJAGmZEO3xdxs,3672
|
|
402
402
|
django_ledger/views/data_import.py,sha256=_H8gjGRIE2Jm97ivvEQn0uEWrM3VvKkYQeXQ1GbKn3g,11950
|
|
403
403
|
django_ledger/views/djl_api.py,sha256=6ADX9fBK8DroTeg8UIeCf2x4wt6-AF5xLlDQnqXBfsM,4411
|
|
@@ -411,14 +411,14 @@ django_ledger/views/invoice.py,sha256=iUzTG-EbdYqNX-eYwHBnQRUD_1wTOGutw0BfDMKcI6
|
|
|
411
411
|
django_ledger/views/item.py,sha256=FY53vk_giTRgvJ47FRqChQ8vyDYPDp4DGTvVhGAb36E,21347
|
|
412
412
|
django_ledger/views/journal_entry.py,sha256=21kuiRBlhlkgv8xZKM4mj9djv0Fu0BhB80QOEOHCa-w,12135
|
|
413
413
|
django_ledger/views/ledger.py,sha256=k3cK9zgGNnPwMPx0uqj_pRMFbM71lbYi7bi-l6B2M5s,12681
|
|
414
|
-
django_ledger/views/mixins.py,sha256=
|
|
414
|
+
django_ledger/views/mixins.py,sha256=Zgx85WJ87IQ0yTRdVgVQp70puWaRloUObLgqeCoQLTM,21283
|
|
415
415
|
django_ledger/views/purchase_order.py,sha256=1J3u4QnCkM7z1Y6DePijVdM67x4CQgfmQJcs3Y4kclU,21082
|
|
416
416
|
django_ledger/views/transactions.py,sha256=5taQRGLSMkM_N8paQJ07HMspI_Nl7PawF8OohCiRmao,206
|
|
417
417
|
django_ledger/views/unit.py,sha256=_RgPJO9mR6v5ohBXlnL3T8nTWgS1lwlCvERQcHk0wHE,10232
|
|
418
418
|
django_ledger/views/vendor.py,sha256=gUdBPTFLeSwlNfdHSA1KFdE_y3QpwpkFhEB0r3-UYdI,3461
|
|
419
|
-
django_ledger-0.5.6.
|
|
420
|
-
django_ledger-0.5.6.
|
|
421
|
-
django_ledger-0.5.6.
|
|
422
|
-
django_ledger-0.5.6.
|
|
423
|
-
django_ledger-0.5.6.
|
|
424
|
-
django_ledger-0.5.6.
|
|
419
|
+
django_ledger-0.5.6.5.dist-info/AUTHORS.md,sha256=SRM2cynD89ZfEsL09zrbUVeO17r9zE2ZM7y6ReMqVRo,713
|
|
420
|
+
django_ledger-0.5.6.5.dist-info/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
421
|
+
django_ledger-0.5.6.5.dist-info/METADATA,sha256=1MQ9knc-wMCbM6T3EhgetV2sYIyQCzEeqfNOXntPqpM,12619
|
|
422
|
+
django_ledger-0.5.6.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
423
|
+
django_ledger-0.5.6.5.dist-info/top_level.txt,sha256=fmHWehb2HfoDncQ3eQtYzeYc-gJMywf6q_ZpKBjwzoQ,38
|
|
424
|
+
django_ledger-0.5.6.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|