Skip to content
Snippets Groups Projects
Commit c512d660 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch 'bug/sorting_screening_numbers' into 'master'

Bug/sorting screening numbers

Closes #271

See merge request NCER-PD/scheduling-system!186
parents fbe0ba62 7e903dd7
No related branches found
No related tags found
1 merge request!186Bug/sorting screening numbers
Pipeline #7527 passed
...@@ -184,19 +184,26 @@ class StudySubject(models.Model): ...@@ -184,19 +184,26 @@ class StudySubject(models.Model):
parts = self.screening_number.split(';') parts = self.screening_number.split(';')
matches, reminder = [], [] matches, reminder = [], []
for part in parts:
chunks = part.strip().split('-') try:
if len(chunks) == 2: for part in parts:
letter, number = chunks chunks = part.strip().split('-')
tupl = (letter, int(number)) if len(chunks) == 2:
else: letter, number = chunks
logger.warn('There are {} chunks in some parts of this screening_number: |{}|.'.format( try:
len(chunks), self.screening_number)) tupl = (letter, int(number))
tupl = (part.strip(), None) except ValueError: #better than isdigit because isdigit fails with negative numbers and others
if pattern is not None and pattern in part: tupl = (letter, number)
matches.append(tupl) else:
else: logger.warn('There are {} chunks in some parts of this screening_number: |{}|.'.format(
reminder.append(tupl) len(chunks), self.screening_number))
tupl = (part.strip(), None)
if pattern is not None and pattern in part:
matches.append(tupl)
else:
reminder.append(tupl)
except: #if the format is not the expected format
matches = parts
return matches + sorted(reminder, reverse=reverse) return matches + sorted(reminder, reverse=reverse)
......
...@@ -204,13 +204,16 @@ def create_study_subject(subject_id=1, subject=None, nd_number='ND0001'): ...@@ -204,13 +204,16 @@ def create_study_subject(subject_id=1, subject=None, nd_number='ND0001'):
return study_subject return study_subject
def create_study_subject_with_multiple_screening_numbers(subject_id=1, subject=None): def create_study_subject_with_multiple_screening_numbers(subject_id=1, subject=None, screening_number=None):
if subject is None: if subject is None:
subject = create_subject() subject = create_subject()
if screening_number is None:
screening_number = 'E-00{}; L-00{}'.format(subject_id, subject_id)
return StudySubject.objects.create( return StudySubject.objects.create(
default_location=get_test_location(), default_location=get_test_location(),
type=SUBJECT_TYPE_CHOICES_CONTROL, type=SUBJECT_TYPE_CHOICES_CONTROL,
screening_number='E-00{}; L-00{}'.format(subject_id, subject_id), screening_number=screening_number,
study=get_test_study(), study=get_test_study(),
subject=subject subject=subject
) )
......
...@@ -119,3 +119,24 @@ class SubjectModelTests(TestCase): ...@@ -119,3 +119,24 @@ class SubjectModelTests(TestCase):
'E-00{subject_id}; L-00{subject_id}', subject_id=1)) 'E-00{subject_id}; L-00{subject_id}', subject_id=1))
self.assertEqual(subject.sort_matched_screening_first('potato'), create_result( self.assertEqual(subject.sort_matched_screening_first('potato'), create_result(
'E-00{subject_id}; L-00{subject_id}', subject_id=1)) 'E-00{subject_id}; L-00{subject_id}', subject_id=1))
def test_sort_matched_screening_first_bad_number(self):
subject_id = 2
screening_number = 'L-0/0{}; E-00{}; F-0/1{}'.format(subject_id, subject_id, subject_id)
subject = create_study_subject_with_multiple_screening_numbers(
subject_id=subject_id, screening_number=screening_number)
self.assertEqual(subject.sort_matched_screening_first('E-'), [('E', subject_id), ('F', '0/12'), ('L', '0/02')])
self.assertEqual(subject.sort_matched_screening_first('L-'), [('L', '0/02'), ('E', subject_id), ('F', '0/12')])
def test_sort_matched_screening_first_bad_format(self):
screening_number = 'potato; tomato'
subject_id = 3
subject = create_study_subject_with_multiple_screening_numbers(
subject_id=subject_id, screening_number=screening_number)
self.assertEqual(subject.sort_matched_screening_first('L-'), [('potato', None), ('tomato', None)])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment