diff --git a/openslides/motions/models.py b/openslides/motions/models.py index 56dd5294f..bb5e53a3e 100644 --- a/openslides/motions/models.py +++ b/openslides/motions/models.py @@ -338,21 +338,6 @@ class Motion(RESTModelMixin, models.Model): # Do not set an identifier. return - # The motion is an amendment. - elif self.is_amendment(): - motions = self.parent.amendments.all() - - # The motions should be counted per category. - elif config['motions_identifier'] == 'per_category': - motions = Motion.objects.filter(category=self.category) - - # The motions should be counted over all. - else: - motions = Motion.objects.all() - - # Get biggest number. - number = motions.aggregate(Max('identifier_number'))['identifier_number__max'] or 0 - # If MOTION_IDENTIFIER_WITHOUT_BLANKS is set, don't use blanks when building identifier. without_blank = hasattr(settings, 'MOTION_IDENTIFIER_WITHOUT_BLANKS') and settings.MOTION_IDENTIFIER_WITHOUT_BLANKS @@ -372,19 +357,42 @@ class Motion(RESTModelMixin, models.Model): prefix = '%s ' % self.category.prefix self._identifier_prefix = prefix + # Use the already assigned identifier_number, if the motion has one. + # Else get the biggest number. + if self.identifier_number is not None: + number = self.identifier_number + initial_increment = False + else: + # Find all motions that should be included in the calculations. + if self.is_amendment(): + motions = self.parent.amendments.all() + # The motions should be counted per category. + elif config['motions_identifier'] == 'per_category': + motions = Motion.objects.filter(category=self.category) + # The motions should be counted over all. + else: + motions = Motion.objects.all() + + number = motions.aggregate(Max('identifier_number'))['identifier_number__max'] or 0 + initial_increment = True + # Calculate new identifier. - number, identifier = self.increment_identifier_number(number, prefix) + number, identifier = self.increment_identifier_number( + number, + prefix, + initial_increment=initial_increment) # Set identifier and identifier_number. self.identifier = identifier self.identifier_number = number - def increment_identifier_number(self, number, prefix): + def increment_identifier_number(self, number, prefix, initial_increment=True): """ Helper method. It increments the number until a free identifier number is found. Returns new number and identifier. """ - number += 1 + if initial_increment: + number += 1 identifier = '%s%s' % (prefix, self.extend_identifier_number(number)) while Motion.objects.filter(identifier=identifier).exists(): number += 1 @@ -590,11 +598,6 @@ class Motion(RESTModelMixin, models.Model): workflow from config. """ - # The identifier is set automatically. - if config['motions_identifier'] is not 'manually': - self.identifier = '' - self.identifier_number = None - if type(workflow) is int: workflow = Workflow.objects.get(pk=workflow) diff --git a/openslides/motions/static/js/motions/linenumbering.js b/openslides/motions/static/js/motions/linenumbering.js index 4ef1eb5b6..8ae7230d1 100644 --- a/openslides/motions/static/js/motions/linenumbering.js +++ b/openslides/motions/static/js/motions/linenumbering.js @@ -446,7 +446,9 @@ angular.module('OpenSlidesApp.motions.lineNumbering', []) */ this.insertLineNumbersNode = function (html, lineLength, highlight, firstLine) { // Removing newlines after BRs, as they lead to problems like #3410 - html = html.replace(/(]*>)[\n\r]+/gi, '$1'); + if (html) { + html = html.replace(/(]*>)[\n\r]+/gi, '$1'); + } var root = document.createElement('div'); root.innerHTML = html;