Merge pull request #2273 from normanjaeckel/NumberingCategories
Added possibility to sort motions in category numbering view.
This commit is contained in:
commit
71c3aa5d5e
@ -21,7 +21,7 @@ Core:
|
||||
|
||||
Motions:
|
||||
- Added origin field.
|
||||
- Added button to number all motions in a category.
|
||||
- Added button to sort and number all motions in a category.
|
||||
|
||||
Users:
|
||||
- Added field is_committee and new default group Committees.
|
||||
|
@ -307,6 +307,11 @@ class CategoryViewSet(ModelViewSet):
|
||||
Special view endpoint to number all motions in this category.
|
||||
|
||||
Only managers can use this view.
|
||||
|
||||
Send POST {'motions': [<list of motion ids>]} to sort the given
|
||||
motions in a special order. Ids of motions which do not belong to
|
||||
the category are just ignored. Send just POST {} to sort all
|
||||
motions in the category by id.
|
||||
"""
|
||||
category = self.get_object()
|
||||
number = 0
|
||||
@ -314,13 +319,20 @@ class CategoryViewSet(ModelViewSet):
|
||||
prefix = ''
|
||||
else:
|
||||
prefix = '%s ' % category.prefix
|
||||
motions = category.motion_set.all()
|
||||
motion_list = request.data.get('motions')
|
||||
if motion_list:
|
||||
motion_dict = {}
|
||||
for motion in motions.filter(id__in=motion_list):
|
||||
motion_dict[motion.pk] = motion
|
||||
motions = [motion_dict[pk] for pk in motion_list]
|
||||
|
||||
with transaction.atomic():
|
||||
for motion in category.motion_set.all():
|
||||
for motion in motions:
|
||||
motion.identifier = None
|
||||
motion.save()
|
||||
|
||||
for motion in category.motion_set.all():
|
||||
for motion in motions:
|
||||
if motion.is_amendment():
|
||||
parent_identifier = motion.parent.identifier or ''
|
||||
prefix = '%s %s ' % (parent_identifier, config['motions_amendments_prefix'])
|
||||
|
@ -487,3 +487,21 @@ class NumberMotionsInCategory(TestCase):
|
||||
self.assertEqual(response.data, {'detail': 'All motions in category test_cateogory_name_zah6Ahd4Ifofaeree6ai numbered successfully.'})
|
||||
self.assertEqual(Motion.objects.get(pk=self.motion.pk).identifier, 'test_prefix_ahz6tho2mooH8 1')
|
||||
self.assertEqual(Motion.objects.get(pk=self.motion_2.pk).identifier, 'test_prefix_ahz6tho2mooH8 2')
|
||||
|
||||
def test_numbering_with_given_order(self):
|
||||
self.motion_3 = Motion(
|
||||
title='test_title_eeb0kua5ciike4su2auJ',
|
||||
text='test_text_ahshuGhaew3eim8yoht7',
|
||||
category=self.category)
|
||||
self.motion_3.save()
|
||||
self.motion_3.identifier = ''
|
||||
self.motion_3.save()
|
||||
response = self.client.post(
|
||||
reverse('category-numbering', args=[self.category.pk]),
|
||||
{'motions': [3, 2]},
|
||||
format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'detail': 'All motions in category test_cateogory_name_zah6Ahd4Ifofaeree6ai numbered successfully.'})
|
||||
self.assertEqual(Motion.objects.get(pk=self.motion.pk).identifier, None)
|
||||
self.assertEqual(Motion.objects.get(pk=self.motion_2.pk).identifier, 'test_prefix_ahz6tho2mooH8 2')
|
||||
self.assertEqual(Motion.objects.get(pk=self.motion_3.pk).identifier, 'test_prefix_ahz6tho2mooH8 1')
|
||||
|
Loading…
Reference in New Issue
Block a user