diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 956a043..0b0b86d 100644 Binary files a/core/__pycache__/models.cpython-311.pyc and b/core/__pycache__/models.cpython-311.pyc differ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 37788ab..6cc1e74 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/migrations/0014_remove_worklog_overtime_priced_and_more.py b/core/migrations/0014_remove_worklog_overtime_priced_and_more.py new file mode 100644 index 0000000..aa15a6b --- /dev/null +++ b/core/migrations/0014_remove_worklog_overtime_priced_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.2.7 on 2026-02-10 10:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0013_worklog_overtime_worklog_overtime_priced'), + ] + + operations = [ + migrations.RemoveField( + model_name='worklog', + name='overtime_priced', + ), + migrations.AddField( + model_name='worklog', + name='overtime_paid_to', + field=models.ManyToManyField(blank=True, related_name='overtime_paid_logs', to='core.worker'), + ), + ] diff --git a/core/migrations/__pycache__/0014_remove_worklog_overtime_priced_and_more.cpython-311.pyc b/core/migrations/__pycache__/0014_remove_worklog_overtime_priced_and_more.cpython-311.pyc new file mode 100644 index 0000000..c8a35bd Binary files /dev/null and b/core/migrations/__pycache__/0014_remove_worklog_overtime_priced_and_more.cpython-311.pyc differ diff --git a/core/models.py b/core/models.py index aafdec0..96b9e07 100644 --- a/core/models.py +++ b/core/models.py @@ -90,7 +90,7 @@ class WorkLog(models.Model): notes = models.TextField(blank=True) overtime = models.DecimalField(max_digits=3, decimal_places=2, default=0, choices=OT_CHOICES) - overtime_priced = models.BooleanField(default=False) + overtime_paid_to = models.ManyToManyField(Worker, blank=True, related_name='overtime_paid_logs') class Meta: verbose_name = "Work Log / Attendance" diff --git a/core/views.py b/core/views.py index ba04e9f..b7b3dd9 100644 --- a/core/views.py +++ b/core/views.py @@ -662,8 +662,8 @@ def payroll_dashboard(request): log_count = unpaid_logs.count() log_amount = log_count * worker.day_rate - # Overtime Logic (Step 5) - ot_logs = worker.work_logs.filter(overtime__gt=0, overtime_priced=False).exclude(paid_in__worker=worker).select_related('project') + # Overtime Logic (Updated: Check M2M field) + ot_logs = worker.work_logs.filter(overtime__gt=0).exclude(overtime_paid_to=worker).exclude(paid_in__worker=worker).select_related('project') ot_data_worker = [] ot_hours_unpriced = Decimal('0.0') @@ -986,8 +986,8 @@ def price_overtime(request): ) created += 1 - worklog.overtime_priced = True - worklog.save() + # Updated: Use M2M field + worklog.overtime_paid_to.add(worker) except (WorkLog.DoesNotExist, Worker.DoesNotExist, Exception): continue