from django.conf import settings from django.db import models from django.utils.translation import gettext_lazy as _ class ReportStatus(models.TextChoices): SUBMITTED = 'submitted', _('Submitted') UNDER_REVIEW = 'under_review', _('Under Review') APPROVED = 'approved', _('Approved by Headquarters') RETURNED = 'returned', _('Returned for Revision') class RepresentativeReport(models.Model): representative = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='diplomacy_reports', verbose_name=_('Field Representative') ) title = models.CharField(max_length=255, verbose_name=_('Report Title')) region_hub = models.CharField( max_length=150, verbose_name=_('Regional Hub / Mission Zone'), help_text=_('e.g. East Africa Regional Hub, South Asia Bureau, European Cultural Mission') ) period = models.CharField( max_length=100, verbose_name=_('Reporting Period'), help_text=_('e.g. Q1 2026, Muharram 1448 AH, March 2026') ) activities_summary = models.TextField(verbose_name=_('Summary of Activities & Negotiations')) centers_visited_count = models.PositiveIntegerField( default=0, verbose_name=_('Number of Mosques / Centers Visited') ) key_achievements = models.TextField( blank=True, null=True, verbose_name=_('Key Achievements & Milestones') ) challenges_and_needs = models.TextField( blank=True, null=True, verbose_name=_('Challenges, Risks & Logistical Needs') ) attachment = models.FileField( upload_to='diplomacy/reports/%Y/%m/', blank=True, null=True, verbose_name=_('Official Report Document (PDF / Word)') ) status = models.CharField( max_length=20, choices=ReportStatus.choices, default=ReportStatus.SUBMITTED, verbose_name=_('Review Status') ) feedback_notes = models.TextField( blank=True, null=True, verbose_name=_('Headquarters Feedback & Directives') ) reviewed_by = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name='reviewed_diplomacy_reports', verbose_name=_('Reviewed By Officer') ) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('Submitted At')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('Updated At')) class Meta: ordering = ('-created_at',) verbose_name = _('Representative Report') verbose_name_plural = _('Representative Reports') def __str__(self): return f"{self.title} - {self.representative} ({self.region_hub}, {self.period})"