From 0727a232368751b33a0fa62685115c1e3f911cbe Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Fri, 31 Dec 2021 18:23:38 +0000 Subject: [PATCH] Some reversion fiddling --- templates/index.html | 2 +- training/management/commands/import_old_db.py | 41 ++++++++++--------- training/models.py | 26 ++++++------ training/templates/base_training.html | 2 +- training/templates/trainee_detail.html | 8 ++-- training/templates/trainee_list.html | 4 +- training/urls.py | 1 - 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/templates/index.html b/templates/index.html index 5cda81c1..ba47e550 100644 --- a/templates/index.html +++ b/templates/index.html @@ -43,7 +43,7 @@

Training Database

- My Training Record + My Training Record Trainee List Level List Item List diff --git a/training/management/commands/import_old_db.py b/training/management/commands/import_old_db.py index 2bfb9c6e..b0491c5a 100644 --- a/training/management/commands/import_old_db.py +++ b/training/management/commands/import_old_db.py @@ -128,9 +128,8 @@ class Command(BaseCommand): for depth, depth_index in depths: if child.find('{}_Date'.format(depth)) is not None: if child.find('{}_Assessor_ID'.format(depth)) is None: - print("Training Record #{} had no supervisor. Hmm.".format(child.find('ID').text)) - tally[2] += 1 - # TODO Assign God/Satan/Unknown here. + print("Training Record #{} had no supervisor. Assigning System User.".format(child.find('ID').text)) + supervisor = Profile.objects.get(first_name="God") continue supervisor = Profile.objects.get(pk=self.id_map[child.find('{}_Assessor_ID'.format(depth)).text]) if child.find('Member_ID') is None: @@ -258,23 +257,25 @@ class Command(BaseCommand): root = self.parse_xml(self.xml_path('Training Level Requirements.xml')) for child in root: - try: - item = child.find('Item').text.split(".") - obj, created = models.TrainingLevelRequirement.objects.update_or_create( - level=models.TrainingLevel.objects.get( - pk=int( - child.find('Level').text)), item=models.TrainingItem.objects.get( - active=True, reference_number=item[1], category=models.TrainingCategory.objects.get( - reference_number=item[0])), depth=int( - child.find('Depth').text)) + items = child.find('Items').text.split(",") + for item in items: + try: + item = item.split('.') + obj, created = models.TrainingLevelRequirement.objects.update_or_create( + level=models.TrainingLevel.objects.get( + pk=int( + child.find('Level').text)), item=models.TrainingItem.objects.get( + active=True, reference_number=item[1], category=models.TrainingCategory.objects.get( + reference_number=item[0])), depth=int( + child.find('Depth').text)) - if created: - tally[1] += 1 - else: - tally[0] += 1 - except models.TrainingItem.DoesNotExist: - print("Item with number {} does not exist".format(item)) - except models.TrainingItem.MultipleObjectsReturned: - print(models.TrainingItem.objects.filter(reference_number=item[1], category=models.TrainingCategory.objects.get(reference_number=item[0]))) + if created: + tally[1] += 1 + else: + tally[0] += 1 + except models.TrainingItem.DoesNotExist: + print("Item with number {} does not exist".format(item)) + except models.TrainingItem.MultipleObjectsReturned: + print(models.TrainingItem.objects.filter(reference_number=item[1], category=models.TrainingCategory.objects.get(reference_number=item[0]))) print('TrainingLevelRequirements - Updated: {}, Created: {}'.format(tally[0], tally[1])) diff --git a/training/models.py b/training/models.py index 85e6ba4d..860c0fe2 100644 --- a/training/models.py +++ b/training/models.py @@ -6,11 +6,9 @@ from django.urls import reverse from django.utils.safestring import SafeData, mark_safe -# 'shim' overtop the profile model to neatly contain all training related fields etc - -@reversion.register # profile is already registered, but this triggers my custom versioning logic -class Trainee(Profile, RevisionMixin): +@reversion.register(follow=['qualifications_obtained']) # profile is already registered, but this triggers my custom versioning logic +class Trainee(Profile, RevisionMixin): # 'shim' overtop the profile model to neatly contain all training related fields etc class Meta: proxy = True @@ -20,7 +18,10 @@ class Trainee(Profile, RevisionMixin): return [level for level in TrainingLevel.objects.all() if level.percentage_complete(self) > 0] def level_qualifications(self, only_confirmed=False): - return self.levels.all().filter(confirmed_on__isnull=only_confirmed).select_related('level') + levels = self.levels.all() + if only_confirmed: + levels = levels.exclude(confirmed_on=None) + return levels.select_related('level') @property def is_supervisor(self): @@ -61,11 +62,11 @@ class TrainingItem(models.Model): active = models.BooleanField(default=True) @property - def number(self): + def display_id(self): return "{}.{}".format(self.category.reference_number, self.reference_number) def __str__(self): - name = "{} {}".format(self.number, self.name) + name = "{} {}".format(self.display_id, self.name) if not self.active: name += " (inactive)" return name @@ -79,6 +80,7 @@ class TrainingItem(models.Model): ordering = ['category__reference_number', 'reference_number'] +@reversion.register class TrainingItemQualification(models.Model): STARTED = 0 COMPLETE = 1 @@ -100,13 +102,9 @@ class TrainingItemQualification(models.Model): def __str__(self): return "{} in {} on {}".format(self.depth, self.item, self.date) - def save(self, *args, **kwargs): - super().save() - for level in TrainingLevel.objects.all(): # Mm yes efficiency FIXME - if level.user_has_requirements(self.trainee): - with reversion.create_revision(): - level_qualification = TrainingLevelQualification.objects.get_or_create(trainee=self.trainee, level=level) - reversion.add_to_revision(self.trainee) + @property + def activity_feed_string(self): + return str("qualification for {} in {} ({})".format(self.trainee, self.item, self.get_depth_display())) @classmethod def get_colour_from_depth(obj, depth): diff --git a/training/templates/base_training.html b/training/templates/base_training.html index 60e655c2..6f5e499e 100644 --- a/training/templates/base_training.html +++ b/training/templates/base_training.html @@ -14,7 +14,7 @@ My Record