diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 77fbd39b..a898c27c 100644 Binary files a/osinaweb/db.sqlite3 and b/osinaweb/db.sqlite3 differ diff --git a/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc b/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc index fe084a9c..ad3e57a8 100644 Binary files a/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc differ diff --git a/osinaweb/osinacore/__pycache__/models.cpython-310.pyc b/osinaweb/osinacore/__pycache__/models.cpython-310.pyc index 9bc99fcf..d1dbe2d6 100644 Binary files a/osinaweb/osinacore/__pycache__/models.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/models.cpython-310.pyc differ diff --git a/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc index ee0e7cb6..42f7e383 100644 Binary files a/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc differ diff --git a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc index 2cc12aca..ab19a0ef 100644 Binary files a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc differ diff --git a/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc index 2a6423e2..3ea653a0 100644 Binary files a/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc differ diff --git a/osinaweb/osinacore/add/views.py b/osinaweb/osinacore/add/views.py index ffb73822..0b26831c 100644 --- a/osinaweb/osinacore/add/views.py +++ b/osinaweb/osinacore/add/views.py @@ -17,9 +17,7 @@ from django.core.files import File def add_status_modal(request, *args, **kwargs): if request.method == 'POST': text = request.POST.get('text') - current_datetime = datetime.now() - date = datetime.now().date() - time = current_datetime.strftime("%I:%M %p") + date_time = datetime.now() try: staff_profile = StaffProfile.objects.get(user=request.user) @@ -30,8 +28,7 @@ def add_status_modal(request, *args, **kwargs): status = Status( text=text, staff=staff_profile, - date=date, - time=time, + date_time=date_time, ) status.save() diff --git a/osinaweb/osinacore/custom_context.py b/osinaweb/osinacore/custom_context.py index 342d940e..18394de1 100644 --- a/osinaweb/osinacore/custom_context.py +++ b/osinaweb/osinacore/custom_context.py @@ -6,22 +6,6 @@ from django.db.models import Max, F from support.models import * -def calculate_time_ago(status): - # Convert status.date to a datetime.date object - status_date = datetime.strptime(status.date, '%Y-%m-%d').date() - timestamp = datetime.combine(status_date, datetime.strptime(status.time, '%I:%M %p').time()) - time_difference = datetime.now() - timestamp - - if time_difference.total_seconds() < 3600: - # If less than an hour, display in minutes - return f"{int(time_difference.total_seconds() / 60)}min ago" - else: - # Display in hours and remaining minutes - hours = int(time_difference.total_seconds() // 3600) - minutes = int((time_difference.total_seconds() % 3600) // 60) - return f"{hours}hr {minutes}min ago" - - def utilities(request): notes = None @@ -105,10 +89,8 @@ def utilities(request): today = datetime.now().date() - # Fetch the latest statuses from the last 24 hours - latest_statuses = Status.objects.filter(date=today).order_by('-id') - # Calculate time ago for each status and store it in a dictionary - latest_statuses_time_ago = [{'status': status, 'time_ago': calculate_time_ago(status)} for status in latest_statuses] + latest_statuses = Status.objects.filter(date_time__date=today).order_by('-id') + last_status = Status.objects.filter(staff=request.user.staffprofile).last() recent_logged_in_staffs = User.objects.filter( @@ -123,7 +105,7 @@ def utilities(request): return {'total_tasks': total_tasks, 'latest_statuses' : latest_statuses, - 'latest_statuses_time_ago': latest_statuses_time_ago, + 'last_status': last_status, 'notes' : notes, 'recent_note' : recent_note, 'user_offline' : user_offline, @@ -131,44 +113,4 @@ def utilities(request): 'recent_logged_in_customers' : recent_logged_in_customers, 'open_tickets': open_tickets, 'closed_tickets': closed_tickets -} - - -def last_status(request): - minutes_ago = 0 - hours_ago = 0 - hours_minutes_ago = "" - current_date = datetime.now().strftime('%Y-%m-%d') - if request.user.is_authenticated and StaffProfile.objects.filter(user=request.user): - last_status = Status.objects.filter(staff=request.user.staffprofile).last() - if last_status: - # Convert the 'time' field to a datetime object - status_time = datetime.strptime(last_status.time, '%I:%M %p') - - # Get the current time - current_time = datetime.now().time() - - # Calculate the time difference - time_difference = abs(datetime.combine(datetime.today(), current_time) - datetime.combine(datetime.today(), status_time.time())) - # Get the time difference in minutes - minutes_ago = time_difference.total_seconds() / 60 - minutes_ago = int(minutes_ago) - - else: - # Handle the case when the user is not logged in - last_status = None - - if minutes_ago > 60: - hours_ago = minutes_ago // 60 # Calculate the number of hours - remaining_minutes = minutes_ago % 60 # Calculate the remaining minutes - hours_minutes_ago = f"{hours_ago}hr {remaining_minutes}min ago" - else: - hours_minutes_ago = f"{minutes_ago}min ago" - - - - return {'last_status' : last_status, 'current_date' : current_date, 'minutes_ago' : minutes_ago, 'hours_minutes_ago': hours_minutes_ago} - - - - +} \ No newline at end of file diff --git a/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc index 9e2ab9c8..461eba2b 100644 Binary files a/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc differ diff --git a/osinaweb/osinacore/edit/views.py b/osinaweb/osinacore/edit/views.py index 698a62dc..04ec5202 100644 --- a/osinaweb/osinacore/edit/views.py +++ b/osinaweb/osinacore/edit/views.py @@ -433,23 +433,23 @@ def mark_point_working_on(request, point_id, task_id): task = get_object_or_404(Task, id=task_id) point = get_object_or_404(Point, id=point_id) point.status = 'Working On' - current_datetime = datetime.now() + current_datetime = timezone.now() point.save() activity = PointActivity( point = point, - start_time = datetime.now(), + start_time = timezone.now(), ) activity.save() if PointActivity.objects.filter(point=point).count() == 1: status_text = f'Started Working On: {point.text}' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() else: status_text = f'Resumed Working On: {point.text}' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() @@ -466,23 +466,23 @@ def mark_point_working_on_task_page(request, point_id, task_id): task = get_object_or_404(Task, id=task_id) point = get_object_or_404(Point, id=point_id) point.status = 'Working On' - current_datetime = datetime.now() + current_datetime = timezone.now() point.save() activity = PointActivity( point = point, - start_time = datetime.now(), + start_time = timezone.now(), ) activity.save() if PointActivity.objects.filter(point=point).count() == 1: status_text = f'Started Working On: {point.text}' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() else: status_text = f'Resumed Working On: {point.text}' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() @@ -496,17 +496,17 @@ def mark_point_paused(request, point_id, task_id): task = get_object_or_404(Task, id=task_id) point = get_object_or_404(Point, id=point_id) point.status = 'Paused' - current_datetime = datetime.now() + current_datetime = timezone.now() point.save() last_activity = PointActivity.objects.filter(point=point).last() if last_activity: - last_activity.end_time = timezone.make_aware(current_datetime, timezone.get_current_timezone()) + last_activity.end_time = current_datetime last_activity.save() status_text = f'{point.text} - Paused' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() @@ -522,17 +522,17 @@ def mark_point_paused_task_page(request, point_id, task_id): task = get_object_or_404(Task, id=task_id) point = get_object_or_404(Point, id=point_id) point.status = 'Paused' - current_datetime = datetime.now() + current_datetime = timezone.now() point.save() last_activity = PointActivity.objects.filter(point=point).last() if last_activity: - last_activity.end_time = timezone.make_aware(current_datetime, timezone.get_current_timezone()) + last_activity.end_time = current_datetime last_activity.save() status_text = f'{point.text} - Paused' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() @@ -545,14 +545,14 @@ def mark_point_completed(request, point_id, task_id): point = get_object_or_404(Point, id=point_id) point.status = 'Completed' - current_datetime = datetime.now() + current_datetime = timezone.now() point.save() # Update the end time of the last activity to the current time last_activity = PointActivity.objects.filter(point=point).last() if last_activity: - last_activity.end_time = timezone.make_aware(current_datetime, timezone.get_current_timezone()) + last_activity.end_time = current_datetime last_activity.save() @@ -570,7 +570,7 @@ def mark_point_completed(request, point_id, task_id): if formatted_time: status_text += f' in {formatted_time}' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() task_id_str = task.task_id @@ -586,14 +586,14 @@ def mark_point_completed_task_page(request, point_id, task_id): point = get_object_or_404(Point, id=point_id) point.status = 'Completed' - current_datetime = datetime.now() + current_datetime = timezone.now() point.save() # Update the end time of the last activity to the current time last_activity = PointActivity.objects.filter(point=point).last() if last_activity: - last_activity.end_time = timezone.make_aware(current_datetime, timezone.get_current_timezone()) + last_activity.end_time = current_datetime last_activity.save() @@ -611,7 +611,7 @@ def mark_point_completed_task_page(request, point_id, task_id): if formatted_time: status_text += f' in {formatted_time}' - status = Status(text=status_text, date=current_datetime.date(), time=current_datetime.strftime("%I:%M %p"), staff=request.user.staffprofile, task=point.task) + status = Status(text=status_text, date_time=timezone.now(), staff=request.user.staffprofile, task=point.task) status.save() return redirect('detailed-task', task_id=task.task_id) diff --git a/osinaweb/osinacore/migrations/0097_remove_status_date_remove_status_time.py b/osinaweb/osinacore/migrations/0097_remove_status_date_remove_status_time.py new file mode 100644 index 00000000..298e72f3 --- /dev/null +++ b/osinaweb/osinacore/migrations/0097_remove_status_date_remove_status_time.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.5 on 2024-07-09 08:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('osinacore', '0096_status_date_time'), + ] + + operations = [ + migrations.RemoveField( + model_name='status', + name='date', + ), + migrations.RemoveField( + model_name='status', + name='time', + ), + ] diff --git a/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-310.pyc new file mode 100644 index 00000000..623de1c5 Binary files /dev/null and b/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-310.pyc differ diff --git a/osinaweb/osinacore/models.py b/osinaweb/osinacore/models.py index a1338aba..b0c031f9 100644 --- a/osinaweb/osinacore/models.py +++ b/osinaweb/osinacore/models.py @@ -10,6 +10,7 @@ from django.db.models.signals import post_save from django.dispatch import receiver from asgiref.sync import async_to_sync from channels.layers import get_channel_layer +from datetime import timedelta # Create your models here. @@ -390,7 +391,7 @@ class PointActivity(models.Model): total_time = models.DurationField(null=True, blank=True) def save(self, *args, **kwargs): if self.start_time and not self.end_time: - self.total_time = datetime.now() - self.start_time + self.total_time = timezone.now() - self.start_time elif self.start_time and self.end_time: self.total_time = self.end_time - self.start_time super(PointActivity, self).save(*args, **kwargs) @@ -407,13 +408,28 @@ class PointActivity(models.Model): class Status(models.Model): text = models.TextField(blank=True) - date = models.CharField(max_length=40) - time = models.CharField(max_length=40) staff = models.ForeignKey(StaffProfile, on_delete=models.CASCADE, null=True,blank=True, related_name='staff') task = models.ForeignKey(Task, on_delete=models.SET_NULL ,null=True, blank=True, related_name='reference_task') date_time = models.DateTimeField(null=True, blank=True) def __str__(self): return self.text + @property + def time_ago(self): + if not self.date_time: + return "No date provided" + + now = timezone.now() + diff = now - self.date_time + + if diff < timedelta(hours=1): + minutes = int(diff.total_seconds() / 60) + return f"{minutes}min ago" + elif diff < timedelta(days=1): + hours = int(diff.total_seconds() / 3600) + minutes = int((diff.total_seconds() % 3600) / 60) + return f"{hours}hr {minutes}min ago" + else: + return self.date_time.strftime('%d %m %Y, %I:%M %p') @receiver(post_save, sender=Status) diff --git a/osinaweb/osinacore/templates/details_templates/partials/recent-activities.html b/osinaweb/osinacore/templates/details_templates/partials/recent-activities.html index d89254bd..8d8b8a45 100644 --- a/osinaweb/osinacore/templates/details_templates/partials/recent-activities.html +++ b/osinaweb/osinacore/templates/details_templates/partials/recent-activities.html @@ -124,16 +124,16 @@ -{% if latest_statuses_time_ago %} -{% for latest in latest_statuses_time_ago %} -
+{% if latest_statuses %} +{% for status in latest_statuses %} +
+ data-modal-url="{% url 'userrecentativities' status.staff.user.id %}">
- user profile
@@ -146,19 +146,19 @@
-

{{latest.status.staff.user.first_name}} - {{latest.status.staff.user.last_name}}

- {% if latest.time_ago == '0min ago' %} +

{{status.staff.user.first_name}} + {{status.staff.user.last_name}}

+ {% if status.time_ago == '0min ago' %}

Just Now

{%else %} -

{{ latest.time_ago}}

+

{{status.time_ago}}

{%endif%}
+ data-status-id="{{status.id}}">
@@ -166,12 +166,12 @@ {% endfor %} {% else %} -

No statuses at the moment.

diff --git a/osinaweb/osinacore/templates/main.html b/osinaweb/osinacore/templates/main.html index 7fdc53f5..05e6329a 100644 --- a/osinaweb/osinacore/templates/main.html +++ b/osinaweb/osinacore/templates/main.html @@ -1132,7 +1132,7 @@