Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Mael Lacour committed Sep 17, 2019
2 parents 7529112 + 82df317 commit 9a71584
Show file tree
Hide file tree
Showing 31 changed files with 26,822 additions and 126 deletions.
14 changes: 13 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [Unreleased]
## [5.1.1] - 2019-09-17
### Changed
- User list default view now include externals members. New option to only display internals members.
- [Users] Edit form : Add username and avatar fields.
- [Users] Include externals members in users list view

### Fix
- Missing link to stockentry and inventory creation.
- Redirection after user self update.
- Possible missing navigation menu
- Chiefs access to associate group management
- Menu for shops manager
- [Sales] fix 403 error on self sales
- Small fixes in templates


## [5.1.0] - 2019-04-20
### Added
Expand Down
18 changes: 9 additions & 9 deletions borgia/borgia/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,21 +84,21 @@ def get_menu(self):
reverse('url_members_workboard')
)
)
if is_manager:
management_tree['subs'].append(
simple_lateral_link(
'Association',
'briefcase',
'lm_workboard',
reverse('url_managers_workboard')
)
# if is_manager:
management_tree['subs'].append(
simple_lateral_link(
'Association',
'briefcase',
'lm_workboard',
reverse('url_managers_workboard')
)
)
for nav_shop in shop_tree:
management_tree['subs'].append(nav_shop)

nav_tree.append(management_tree)

nav_tree = self.get_specific_menu(nav_tree)
nav_tree = self.get_specific_menu(nav_tree)

if self.lm_active is not None:
for link in nav_tree:
Expand Down
6 changes: 3 additions & 3 deletions borgia/borgia/tests/tests_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from borgia.settings import LOGIN_REDIRECT_URL, LOGIN_URL
from borgia.tests.utils import get_login_url_redirected
from borgia.utils import EXTERNALS_GROUP_NAME, INTERNALS_GROUP_NAME
from borgia.utils import EXTERNALS_GROUP_NAME, INTERNALS_GROUP_NAME, PRESIDENTS_GROUP_NAME
from users.models import User


Expand All @@ -15,7 +15,7 @@ class BaseBorgiaViewsTestCase(TestCase):
def setUp(self):
members_group = Group.objects.get(name=INTERNALS_GROUP_NAME)
externals_group = Group.objects.get(name=EXTERNALS_GROUP_NAME)
presidents_group = Group.objects.get(name='presidents')
presidents_group = Group.objects.get(name=PRESIDENTS_GROUP_NAME)
presidents_group.permissions.set(Permission.objects.all())
# Group externals NEED to be created (else raises errors) :

Expand Down Expand Up @@ -261,4 +261,4 @@ def test_as_members_get(self):
self.assertEqual(response_client2.status_code, 403)

def test_offline_user_redirection(self):
super().offline_user_redirection()
super().offline_user_redirection()
2 changes: 1 addition & 1 deletion borgia/borgia/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
# AUTHENTIFICATIONS
path('', ModulesLoginView.as_view(), name='url_login'),
path('auth/', include([
path('login/', ModulesLoginView.as_view()),
path('login/', ModulesLoginView.as_view(), name='url_login'),
path('logout/', LogoutView.as_view(), name='url_logout'),

path('password_change/', PasswordChangeView.as_view(),
Expand Down
21 changes: 13 additions & 8 deletions borgia/borgia/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

INTERNALS_GROUP_NAME = 'members'
EXTERNALS_GROUP_NAME = 'externals'
PRESIDENTS_GROUP_NAME = 'presidents'
VICE_PRESIDENTS_GROUP_NAME = 'vice_presidents'
TREASURERS_GROUP_NAME = 'treasurers'
ACCEPTED_MENU_TYPES = ['members', 'managers', 'shops']


Expand All @@ -34,7 +37,7 @@ def members_lateral_menu(nav_tree, user):
"""
nav_tree.append(
simple_lateral_link(
'Acceuil ' + INTERNALS_GROUP_NAME,
'Accueil ' + INTERNALS_GROUP_NAME,
'briefcase',
'lm_workboard',
reverse('url_members_workboard')))
Expand Down Expand Up @@ -160,7 +163,7 @@ def managers_lateral_menu(nav_tree, user):
# ExceptionnalMovements
if user.has_perm('finances.view_exceptionnalmovement'):
nav_tree.append(simple_lateral_link(
label='Exceptionnal Movements',
label='Mouvements exceptionnels',
fa_icon='exclamation-triangle',
id_link='lm_exceptionnalmovement_list',
url=reverse('url_exceptionnalmovement_list')
Expand Down Expand Up @@ -235,11 +238,11 @@ def group_name_display(group):
:returns: readable group name
:rtype: string
"""
if group.name == 'treasurers':
if group.name == TREASURERS_GROUP_NAME:
return 'Trésoriers'
elif group.name == 'presidents':
elif group.name == PRESIDENTS_GROUP_NAME:
return 'Présidents'
elif group.name == 'vice_presidents':
elif group.name == VICE_PRESIDENTS_GROUP_NAME:
return 'Vice-présidents'
elif 'chiefs-' in group.name:
return 'Chefs ' + group.name.split('-')[1]
Expand Down Expand Up @@ -379,17 +382,19 @@ def get_managers_group_from_user(user):
if user.groups.count() == 1:
return None
else:
presidents_query = user.groups.filter(name='presidents')
presidents_query = user.groups.filter(name=PRESIDENTS_GROUP_NAME)
if presidents_query.count() == 1:
return presidents_query.first()
else:
vice_presidents_query = user.groups.filter(name='vice_presidents')
vice_presidents_query = user.groups.filter(name=VICE_PRESIDENTS_GROUP_NAME)
if vice_presidents_query.count() == 1:
return vice_presidents_query.first()
else:
treasurer_query = user.groups.filter(name='treasurer')
treasurer_query = user.groups.filter(name=TREASURERS_GROUP_NAME)
if treasurer_query.count() == 1:
return treasurer_query.first()
else:
return None


def is_association_manager(user):
Expand Down
18 changes: 13 additions & 5 deletions borgia/borgia/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from finances.models import ExceptionnalMovement, Recharging, Transfert
from modules.models import SelfSaleModule
from sales.models import Sale
from shops.utils import get_shops_managed
from shops.models import Shop
from users.forms import UserQuickSearchForm
from users.models import User
Expand Down Expand Up @@ -76,9 +77,9 @@ def get_context_data(self, **kwargs):
context['shop_list'].append({
'shop': shop,
'operator_module': operator_module,
'operator_module_link' : operator_module_link,
'operator_module_link': operator_module_link,
'self_module': self_module,
'self_module_link' : self_module_link
'self_module_link': self_module_link
})
return context

Expand Down Expand Up @@ -176,12 +177,19 @@ class ManagersWorkboard(LoginRequiredMixin, PermissionRequiredMixin, BorgiaView)
lm_active = 'lm_workboard'

def has_permission(self):
return is_association_manager(self.request.user)
self.managers_group = get_managers_group_from_user(self.request.user)
self.shops_managed = get_shops_managed(self.request.user)
return self.managers_group or self.shops_managed

def get(self, request, **kwargs):
context = self.get_context_data(**kwargs)
context['group'] = get_managers_group_from_user(request.user)
context['sale_list'] = Sale.objects.all().order_by('-datetime')[:5]
if (self.managers_group):
context['group'] = self.managers_group
context['sale_list'] = Sale.objects.all().order_by('-datetime')[:5]
elif self.shops_managed:
context['group'] = self.shops_managed[0]
context['sale_list'] = self.shops_managed[0].sale_set.all().order_by(
'-datetime')[:5]
context['events'] = []
for event in Event.objects.all():
context['events'].append({
Expand Down
4 changes: 2 additions & 2 deletions borgia/configurations/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ def clean(self):
max >= min
"""
cleaned_data = super().clean()
lydia_min_price = cleaned_data.get("lydia_min_price")
min_price_lydia = cleaned_data.get("min_price_lydia")
max_price_lydia = cleaned_data.get("max_price_lydia", None)
if max_price_lydia is not None:
if max_price_lydia < lydia_min_price:
if max_price_lydia < min_price_lydia:
raise ValidationError(
"Le montant maximal doit être supérieur ou égal au montant minimal")

Expand Down
13 changes: 13 additions & 0 deletions borgia/finances/fixtures/tests_data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[
{
"model": "finances.transfert",
"pk": 1,
"fields": {
"datetime": "2019-08-01T12:00:00.000Z",
"justification": "Transfert1",
"sender": 2,
"recipient": 3,
"amount": "2.92"
}
}
]
15 changes: 14 additions & 1 deletion borgia/modules/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from functools import partial, wraps

from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import ObjectDoesNotExist
from django.forms.formsets import formset_factory
from django.http import Http404
Expand Down Expand Up @@ -39,7 +40,10 @@ class ShopModuleSaleView(ShopModuleMixin, BorgiaFormView):
form_class = ShopModuleSaleForm

def has_permission(self):
has_perms = super().has_permission()
if self.kwargs['module_class'] == 'self_sales':
has_perms = self.has_permission_selfsales()
else:
has_perms = super().has_permission()
if not has_perms:
return False
else:
Expand All @@ -48,6 +52,15 @@ def has_permission(self):
else:
return True

def has_permission_selfsales(self):
"""
Customized permission for self_sale in shops.
The user still need the use_selfsalemodule permission
"""
self.add_context_objects()
return PermissionRequiredMixin.has_permission(self)


def get_menu_type(self):
if self.module_class == "self_sales":
return 'members'
Expand Down
1 change: 1 addition & 0 deletions borgia/sales/fixtures/tests_data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"model": "sales.sale", "pk": 1, "fields": {"datetime": "2019-08-01T20:25:47.984Z", "sender": 3, "recipient": 1, "operator": 2, "content_type": 20, "module_id": 1, "shop": 1}}, {"model": "sales.sale", "pk": 2, "fields": {"datetime": "2019-08-01T20:25:56.286Z", "sender": 4, "recipient": 1, "operator": 2, "content_type": 20, "module_id": 1, "shop": 1}}, {"model": "sales.sale", "pk": 3, "fields": {"datetime": "2019-08-01T20:26:20.909Z", "sender": 3, "recipient": 1, "operator": 2, "content_type": 20, "module_id": 2, "shop": 2}}, {"model": "sales.sale", "pk": 4, "fields": {"datetime": "2019-08-01T20:30:41.313Z", "sender": 2, "recipient": 1, "operator": 2, "content_type": 21, "module_id": 1, "shop": 1}}, {"model": "sales.saleproduct", "pk": 1, "fields": {"sale": 1, "product": 1, "quantity": 2, "price": "2.00"}}, {"model": "sales.saleproduct", "pk": 2, "fields": {"sale": 2, "product": 1, "quantity": 1, "price": "1.00"}}, {"model": "sales.saleproduct", "pk": 3, "fields": {"sale": 3, "product": 5, "quantity": 8, "price": "0.01"}}, {"model": "sales.saleproduct", "pk": 4, "fields": {"sale": 4, "product": 1, "quantity": 3, "price": "3.00"}}]
4 changes: 2 additions & 2 deletions borgia/shops/templates/shops/shop_checkup.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
</div>
<div class="panel-body">
<ul>
<li>Produits en stock : {{ stock.nb }}</li>
<li>Montant cumulé : {{ stock.value }}€</li>
<li>Produits en stock : {% if stock %}{{ stock.nb }}{% else %}0{% endif %}</li>
<li>Montant cumulé : {% if stock %}{{ stock.value }}{% else %}0{% endif %}€</li>
</ul>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion borgia/shops/templates/shops/shop_workboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
labels: ['Ventes', 'Achats'],
datasets: [
{
data: ['{{ sale_list.total }}', '{{ purchase_list.total }}'],
data: ['{% if sale_list.total %}{{ sale_list.total }}{% else %}0{% endif %}', '{% if purchase_list.total %}{{ purchase_list.total }}{% else %}0{% endif %}'],
backgroundColor: ['{{ shop.color }}', opposite_shop_color_hex],
hoverBackgroundColor: ['{{ shop.color }}', opposite_shop_color_hex]
}
Expand Down
12 changes: 12 additions & 0 deletions borgia/shops/tests/tests_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,3 +383,15 @@ def test_not_allowed_user_get(self):

def test_offline_user_redirection(self):
super().offline_user_redirection()

class UpdateGroupViewTestCase(BaseShopsViewsTest):
url_view = 'url_group_update'

def get_url(self, group_pk):
return reverse(self.url_view, kwargs={'group_pk': group_pk})

def test_chief_get(self):
associates1 = Group.objects.get(name='associates-' + self.shop1.name)
response_client1 = self.client3.get(
self.get_url(associates1.pk))
self.assertEqual(response_client1.status_code, 200)
4 changes: 2 additions & 2 deletions borgia/shops/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ def get_shops_tree(user, is_association_manager):
shop_managed = Shop.objects.all()
else:
shop_managed = get_shops_managed(user)
if shop_managed:
if not shop_managed:
return []

for shop in shop_managed:
shop_tree.append(
simple_lateral_link(
shop.name + ' Management',
'Management ' + shop.name.capitalize(),
'briefcase',
'lm_workboard',
reverse('url_shop_workboard',
Expand Down
Loading

0 comments on commit 9a71584

Please sign in to comment.