Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
AE UTBM
Sith
Commits
3023d6d7
Commit
3023d6d7
authored
Jun 20, 2016
by
Skia
🤘
Browse files
Add CanCreateMixin, and add amount in journals
parent
18db95cf
Pipeline
#40
passed with stage
in 1 minute and 7 seconds
Changes
7
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
accounting/migrations/0003_auto_20160617_1520.py
0 → 100644
View file @
3023d6d7
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
accounting.models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'accounting'
,
'0002_auto_20160530_1001'
),
]
operations
=
[
migrations
.
RemoveField
(
model_name
=
'bankaccount'
,
name
=
'rib'
,
),
migrations
.
AddField
(
model_name
=
'bankaccount'
,
name
=
'iban'
,
field
=
models
.
CharField
(
blank
=
True
,
verbose_name
=
'iban'
,
max_length
=
255
),
),
migrations
.
AddField
(
model_name
=
'generaljournal'
,
name
=
'amount'
,
field
=
accounting
.
models
.
CurrencyField
(
default
=
0
,
max_digits
=
12
,
decimal_places
=
2
,
verbose_name
=
'amount'
),
preserve_default
=
False
,
),
]
accounting/migrations/0004_auto_20160620_1307.py
0 → 100644
View file @
3023d6d7
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
import
accounting.models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'accounting'
,
'0003_auto_20160617_1520'
),
]
operations
=
[
migrations
.
AlterField
(
model_name
=
'generaljournal'
,
name
=
'amount'
,
field
=
accounting
.
models
.
CurrencyField
(
max_digits
=
12
,
verbose_name
=
'amount'
,
default
=
0
,
decimal_places
=
2
),
),
]
accounting/models.py
View file @
3023d6d7
...
...
@@ -27,7 +27,7 @@ class CurrencyField(models.DecimalField):
class
BankAccount
(
models
.
Model
):
name
=
models
.
CharField
(
_
(
'name'
),
max_length
=
30
)
r
ib
=
models
.
CharField
(
_
(
'
r
ib'
),
max_length
=
255
,
blank
=
True
)
ib
an
=
models
.
CharField
(
_
(
'ib
an
'
),
max_length
=
255
,
blank
=
True
)
number
=
models
.
CharField
(
_
(
'account number'
),
max_length
=
255
,
blank
=
True
)
club
=
models
.
ForeignKey
(
Club
,
related_name
=
"bank_accounts"
)
...
...
@@ -85,6 +85,23 @@ class GeneralJournal(models.Model):
name
=
models
.
CharField
(
_
(
'name'
),
max_length
=
30
)
closed
=
models
.
BooleanField
(
_
(
'is closed'
),
default
=
False
)
club_account
=
models
.
ForeignKey
(
ClubAccount
,
related_name
=
"journals"
,
null
=
False
)
amount
=
CurrencyField
(
_
(
'amount'
),
default
=
0
)
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
GeneralJournal
,
self
).
__init__
(
*
args
,
**
kwargs
)
def
save
(
self
,
*
args
,
**
kwargs
):
if
self
.
id
==
None
:
amount
=
0
super
(
GeneralJournal
,
self
).
save
(
*
args
,
**
kwargs
)
def
can_be_created_by
(
user
):
"""
Method to see if an object can be created by the given user
"""
if
user
.
is_in_group
(
settings
.
SITH_GROUPS
[
'accounting-admin'
][
'name'
]):
# TODO: add the treasurer of the club
return
True
return
False
def
is_owned_by
(
self
,
user
):
"""
...
...
accounting/views.py
View file @
3023d6d7
...
...
@@ -2,8 +2,10 @@ from django.views.generic import ListView, DetailView, RedirectView
from
django.views.generic.edit
import
UpdateView
,
CreateView
,
DeleteView
from
django.shortcuts
import
render
from
django.core.urlresolvers
import
reverse_lazy
from
django.forms.models
import
modelform_factory
from
django.forms
import
HiddenInput
from
core.views
import
CanViewMixin
,
CanEditMixin
,
CanEditPropMixin
from
core.views
import
CanViewMixin
,
CanEditMixin
,
CanEditPropMixin
,
CanCreateMixin
from
accounting.models
import
BankAccount
,
ClubAccount
,
GeneralJournal
,
Operation
,
AccountingType
# Accounting types
...
...
@@ -113,13 +115,13 @@ class ClubAccountDeleteView(CanEditPropMixin, DeleteView): # TODO change Delete
# Journal views
class
JournalCreateView
(
Can
Edit
Mixin
,
CreateView
):
class
JournalCreateView
(
Can
Create
Mixin
,
CreateView
):
# FIXME: anonymous user has been able to create a journal
"""
Create a general journal
"""
model
=
GeneralJournal
fields
=
[
'name'
,
'start_date'
,
'club_account'
]
template_name
=
'accounting/account_edit.jinja'
fields
=
[
'name'
,
'start_date'
,
'club_account'
]
class
JournalDetailView
(
CanViewMixin
,
DetailView
):
"""
...
...
@@ -145,7 +147,7 @@ class OperationCreateView(CanEditMixin, CreateView):
Create an operation
"""
model
=
Operation
fields
=
[
'journal'
,
'date'
,
'cheque_number'
,
'type'
]
fields
=
[
'amount'
,
'journal'
,
'date'
,
'cheque_number'
,
'type'
]
template_name
=
'accounting/account_edit.jinja'
class
OperationEditView
(
CanViewMixin
,
UpdateView
):
...
...
club/templates/club/club_tools.jinja
View file @
3023d6d7
...
...
@@ -4,7 +4,9 @@
<h3>
Club tools
</h3>
<p><a
href=
"
{{
url
(
'club:club_view'
,
club_id
=
object.id
)
}}
"
>
Back to club
</a></p>
<ul>
<li><a
href=
"
{{
url
(
'accounting:club_details'
,
c_account_id
=
object.club_account.id
)
}}
"
>
{{
object
}}
</a></li>
{%
if
object.club_account
%}
<li>
Accouting:
<a
href=
"
{{
url
(
'accounting:club_details'
,
c_account_id
=
object.club_account.id
)
}}
"
>
{{
object
}}
</a></li>
{%
endif
%}
</ul>
{%
endblock
%}
...
...
core/models.py
View file @
3023d6d7
...
...
@@ -130,7 +130,7 @@ class User(AbstractBaseUser, PermissionsMixin):
return
True
if
group_name
==
settings
.
SITH_MAIN_MEMBERS_GROUP
:
# We check the subscription if asked
if
'subscription'
in
settings
.
INSTALLED_APPS
:
from
subscription
import
Subscriber
from
subscription
.models
import
Subscriber
s
=
Subscriber
.
objects
.
filter
(
pk
=
self
.
pk
).
first
()
if
s
is
not
None
and
s
.
is_subscribed
():
return
True
...
...
@@ -256,6 +256,14 @@ class AnonymousUser(AuthAnonymousUser):
def
__init__
(
self
,
request
):
super
(
AnonymousUser
,
self
).
__init__
()
def
is_in_group
(
self
,
group_name
):
"""
The anonymous user is only the public group
"""
if
group_name
==
settings
.
SITH_GROUPS
[
'public'
][
'name'
]:
return
True
return
False
def
is_owner
(
self
,
obj
):
return
False
...
...
core/views/__init__.py
View file @
3023d6d7
...
...
@@ -12,6 +12,11 @@ def forbidden(request):
def
not_found
(
request
):
return
HttpResponseNotFound
(
render
(
request
,
"core/404.jinja"
))
def
can_create
(
mod
,
user
):
if
mod
.
can_be_created_by
(
user
):
return
True
return
False
def
can_edit_prop
(
obj
,
user
):
if
obj
is
None
or
user
.
is_owner
(
obj
):
return
True
...
...
@@ -27,6 +32,19 @@ def can_view(obj, user):
return
True
return
can_edit
(
obj
,
user
)
class
CanCreateMixin
(
View
):
"""
This view is made to protect any child view that would create an object, and thus, that can not be protected by any
of the following mixin
"""
def
dispatch
(
self
,
request
,
*
arg
,
**
kwargs
):
res
=
super
(
CanCreateMixin
,
self
).
dispatch
(
request
,
*
arg
,
**
kwargs
)
if
hasattr
(
self
,
'model'
):
mod
=
self
.
model
if
can_create
(
mod
,
self
.
request
.
user
):
return
res
raise
PermissionDenied
class
CanEditPropMixin
(
View
):
"""
This view is made to protect any child view that would be showing some properties of an object that are restricted
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment