dashboard: add option to set new tile position (#19346)

This commit is contained in:
Frédéric Péters 2017-10-10 15:58:32 +02:00
parent 8b041f9e07
commit c4af7f7105
3 changed files with 40 additions and 2 deletions

View File

@ -20,6 +20,7 @@ from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.db.models import Max, Min
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import View
@ -64,8 +65,14 @@ class DashboardAddTileView(View):
tile = Tile(dashboard=dashboard,
cell=cell,
user=request.user)
tile.order = 0
user=request.user,
order=0)
if settings.COMBO_DASHBOARD_NEW_TILE_POSITION == 'first':
order = Tile.objects.filter(dashboard=dashboard, user=request.user).aggregate(Min('order')).get('order__min')
tile.order = order - 1 if order is not None else 0
elif settings.COMBO_DASHBOARD_NEW_TILE_POSITION == 'last':
order = Tile.objects.filter(dashboard=dashboard, user=request.user).aggregate(Max('order')).get('order_max')
tile.order = order + 1 if order is not None else 0
tile.save()
cell_data = get_cell_data(cell)

View File

@ -288,6 +288,8 @@ COMBO_WELCOME_PAGE_PATH = None
# dashboard support
COMBO_DASHBOARD_ENABLED = False
COMBO_DASHBOARD_NEW_TILE_POSITION = 'last'
# default position on maps
COMBO_MAP_DEFAULT_POSITION = {'lat': '48.83369263315934',
'lng': '2.3233688436448574'

View File

@ -55,11 +55,40 @@ def test_add_to_dashboard(app, site):
assert Tile.objects.all()[0].cell.text == cell.text
assert Tile.objects.all()[0].dashboard_id == dashboard.id
assert Tile.objects.all()[0].user_id == user.id
assert Tile.objects.all()[0].order == 0
app = login(app)
resp = app.get('/two/', status=200)
assert 'hello world' in resp.body
def test_add_to_dashboard_order(app, site):
test_add_to_dashboard(app, site)
cell = TextCell.objects.get(order=101)
resp = app.get(reverse('combo-dashboard-add-tile',
kwargs={'cell_reference': cell.get_reference()}))
assert Tile.objects.count() == 2
assert Tile.objects.all()[0].cell.text == 'hello world (100)'
assert Tile.objects.all()[1].cell.text == 'hello world (101)'
cell = TextCell.objects.get(order=102)
resp = app.get(reverse('combo-dashboard-add-tile',
kwargs={'cell_reference': cell.get_reference()}))
assert Tile.objects.count() == 3
assert Tile.objects.all()[0].cell.text == 'hello world (100)'
assert Tile.objects.all()[1].cell.text == 'hello world (101)'
assert Tile.objects.all()[2].cell.text == 'hello world (102)'
with override_settings(COMBO_DASHBOARD_NEW_TILE_POSITION='first'):
cell = TextCell.objects.get(order=103)
resp = app.get(reverse('combo-dashboard-add-tile',
kwargs={'cell_reference': cell.get_reference()}))
assert Tile.objects.count() == 4
assert Tile.objects.all()[0].cell.text == 'hello world (103)'
assert Tile.objects.all()[1].cell.text == 'hello world (100)'
assert Tile.objects.all()[2].cell.text == 'hello world (101)'
assert Tile.objects.all()[3].cell.text == 'hello world (102)'
def test_ajax_add_to_dashboard(app, site):
cell = TextCell.objects.get(order=100)
resp = app.get(reverse('combo-dashboard-add-tile',