From 10cf7d8acd05cbf4c317658323f4bc1dce6704c3 Mon Sep 17 00:00:00 2001 From: thenav56 Date: Tue, 6 Aug 2024 19:24:46 +0545 Subject: [PATCH] Add TODO move and DOING clone command --- apps/track/management/__init__.py | 0 apps/track/management/commands/__init__.py | 0 .../commands/process_not_done_time_entries.py | 47 +++++++++++++++++++ apps/user/admin.py | 1 + 4 files changed, 48 insertions(+) create mode 100644 apps/track/management/__init__.py create mode 100644 apps/track/management/commands/__init__.py create mode 100644 apps/track/management/commands/process_not_done_time_entries.py diff --git a/apps/track/management/__init__.py b/apps/track/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/track/management/commands/__init__.py b/apps/track/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apps/track/management/commands/process_not_done_time_entries.py b/apps/track/management/commands/process_not_done_time_entries.py new file mode 100644 index 0000000..ed7edaf --- /dev/null +++ b/apps/track/management/commands/process_not_done_time_entries.py @@ -0,0 +1,47 @@ +import datetime +from django.core.management import BaseCommand +from django.utils import timezone + +from apps.track.models import TimeEntry + + +# TODO: Add test cases +class Command(BaseCommand): + help = "Move past TODO and clone past DOING to today" + + def move_todo_entries(self, today: datetime.date): + qs = TimeEntry.objects.filter(status=TimeEntry.Status.TODO, date__lt=today) + resp = qs.update(date=today) + self.stdout.write( + self.style.SUCCESS(f'{resp} TODO moved') + ) + + def clone_doing_entries(self, today: datetime.date): + # Only look for yesterday + qs = TimeEntry.objects.filter( + status=TimeEntry.Status.DOING, + date=today - datetime.timedelta(days=1), + ) + cloned_count = 0 + for time_entry in qs: + existing_qs = TimeEntry.objects.filter( + status=TimeEntry.Status.TODO, + date=today, + # Fields to check similarity + type=time_entry.type, + description=time_entry.description, + ) + if existing_qs.exists(): + continue + time_entry.pk = None # Create a new copy + time_entry.status = TimeEntry.Status.TODO # Use todo Status + time_entry.date = today + time_entry.save() + self.stdout.write( + self.style.SUCCESS(f'{cloned_count} DOING cloned') + ) + + def handle(self, **_): + today = timezone.now().date() + self.move_todo_entries(today) + self.clone_doing_entries(today) diff --git a/apps/user/admin.py b/apps/user/admin.py index d08019c..e6cd2ff 100644 --- a/apps/user/admin.py +++ b/apps/user/admin.py @@ -29,6 +29,7 @@ class UserAdmin(DjangoUserAdmin): "first_name", "last_name", "department", + "display_picture", ) }, ),