here we go

This commit is contained in:
pacnpal
2024-10-31 22:32:01 +00:00
parent 71272e36a6
commit 3cbda93094
68 changed files with 3114 additions and 1485 deletions

View File

@@ -7,10 +7,10 @@ from django.apps import apps
class EditSubmission(models.Model):
STATUS_CHOICES = [
('PENDING', 'Pending'),
('NEW', 'New'),
('APPROVED', 'Approved'),
('REJECTED', 'Rejected'),
('AUTO_APPROVED', 'Auto Approved'),
('ESCALATED', 'Escalated'),
]
SUBMISSION_TYPE_CHOICES = [
@@ -53,26 +53,26 @@ class EditSubmission(models.Model):
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default='PENDING'
default='NEW'
)
submitted_at = models.DateTimeField(auto_now_add=True)
created_at = models.DateTimeField(auto_now_add=True)
# Review details
reviewed_by = models.ForeignKey(
handled_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='reviewed_submissions'
related_name='handled_submissions'
)
reviewed_at = models.DateTimeField(null=True, blank=True)
review_notes = models.TextField(
handled_at = models.DateTimeField(null=True, blank=True)
notes = models.TextField(
blank=True,
help_text='Notes from the moderator about this submission'
)
class Meta:
ordering = ['-submitted_at']
ordering = ['-created_at']
indexes = [
models.Index(fields=['content_type', 'object_id']),
models.Index(fields=['status']),
@@ -96,12 +96,11 @@ class EditSubmission(models.Model):
return resolved_data
def approve(self, moderator, notes=''):
def approve(self, user):
"""Approve the submission and apply the changes"""
self.status = 'APPROVED'
self.reviewed_by = moderator
self.reviewed_at = timezone.now()
self.review_notes = notes
self.handled_by = user
self.handled_at = timezone.now()
model_class = self.content_type.model_class()
resolved_data = self._resolve_foreign_keys(self.changes)
@@ -122,42 +121,23 @@ class EditSubmission(models.Model):
self.save()
return obj
def reject(self, moderator, notes):
def reject(self, user):
"""Reject the submission"""
self.status = 'REJECTED'
self.reviewed_by = moderator
self.reviewed_at = timezone.now()
self.review_notes = notes
self.handled_by = user
self.handled_at = timezone.now()
self.save()
def auto_approve(self):
"""Auto-approve the submission (for moderators/admins)"""
self.status = 'AUTO_APPROVED'
self.reviewed_by = self.user
self.reviewed_at = timezone.now()
model_class = self.content_type.model_class()
resolved_data = self._resolve_foreign_keys(self.changes)
if self.submission_type == 'CREATE':
# Create new object
obj = model_class(**resolved_data)
obj.save()
# Update object_id after creation
self.object_id = obj.id
else:
# Apply changes to existing object
obj = self.content_object
for field, value in resolved_data.items():
setattr(obj, field, value)
obj.save()
def escalate(self, user):
"""Escalate the submission to admin"""
self.status = 'ESCALATED'
self.handled_by = user
self.handled_at = timezone.now()
self.save()
return obj
class PhotoSubmission(models.Model):
STATUS_CHOICES = [
('PENDING', 'Pending'),
('NEW', 'New'),
('APPROVED', 'Approved'),
('REJECTED', 'Rejected'),
('AUTO_APPROVED', 'Auto Approved'),
@@ -184,26 +164,26 @@ class PhotoSubmission(models.Model):
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default='PENDING'
default='NEW'
)
submitted_at = models.DateTimeField(auto_now_add=True)
created_at = models.DateTimeField(auto_now_add=True)
# Review details
reviewed_by = models.ForeignKey(
handled_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='reviewed_photos'
related_name='handled_photos'
)
reviewed_at = models.DateTimeField(null=True, blank=True)
review_notes = models.TextField(
handled_at = models.DateTimeField(null=True, blank=True)
notes = models.TextField(
blank=True,
help_text='Notes from the moderator about this photo submission'
)
class Meta:
ordering = ['-submitted_at']
ordering = ['-created_at']
indexes = [
models.Index(fields=['content_type', 'object_id']),
models.Index(fields=['status']),
@@ -217,9 +197,9 @@ class PhotoSubmission(models.Model):
from media.models import Photo
self.status = 'APPROVED'
self.reviewed_by = moderator
self.reviewed_at = timezone.now()
self.review_notes = notes
self.handled_by = moderator
self.handled_at = timezone.now()
self.notes = notes
# Create the approved photo
Photo.objects.create(
@@ -236,9 +216,9 @@ class PhotoSubmission(models.Model):
def reject(self, moderator, notes):
"""Reject the photo submission"""
self.status = 'REJECTED'
self.reviewed_by = moderator
self.reviewed_at = timezone.now()
self.review_notes = notes
self.handled_by = moderator
self.handled_at = timezone.now()
self.notes = notes
self.save()
def auto_approve(self):
@@ -246,8 +226,8 @@ class PhotoSubmission(models.Model):
from media.models import Photo
self.status = 'AUTO_APPROVED'
self.reviewed_by = self.user
self.reviewed_at = timezone.now()
self.handled_by = self.user
self.handled_at = timezone.now()
# Create the approved photo
Photo.objects.create(