Files
GNX-WEB/gnx-react/backend/policies/models.py
Iliyan Angelov dd8eb1c7aa update
2025-10-09 00:44:15 +03:00

101 lines
2.6 KiB
Python

from django.db import models
from django.utils.text import slugify
class Policy(models.Model):
"""
Model to store various policy documents (Privacy, Terms, Support, etc.)
"""
POLICY_TYPES = [
('privacy', 'Privacy Policy'),
('terms', 'Terms of Use'),
('support', 'Support Policy'),
]
type = models.CharField(
max_length=50,
choices=POLICY_TYPES,
unique=True,
help_text="Type of policy document"
)
title = models.CharField(
max_length=200,
help_text="Title of the policy"
)
slug = models.SlugField(
max_length=100,
unique=True,
blank=True
)
description = models.TextField(
blank=True,
help_text="Brief description of the policy"
)
last_updated = models.DateField(
auto_now=True,
help_text="Last update date"
)
version = models.CharField(
max_length=20,
default="1.0",
help_text="Policy version number"
)
is_active = models.BooleanField(
default=True,
help_text="Whether this policy is currently active"
)
effective_date = models.DateField(
help_text="Date when this policy becomes effective"
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = "Policy"
verbose_name_plural = "Policies"
ordering = ['type']
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.type)
super().save(*args, **kwargs)
def __str__(self):
return f"{self.get_type_display()} (v{self.version})"
class PolicySection(models.Model):
"""
Individual sections within a policy document
"""
policy = models.ForeignKey(
Policy,
on_delete=models.CASCADE,
related_name='sections'
)
heading = models.CharField(
max_length=300,
help_text="Section heading"
)
content = models.TextField(
help_text="Section content"
)
order = models.IntegerField(
default=0,
help_text="Display order of sections"
)
is_active = models.BooleanField(
default=True,
help_text="Whether this section is currently active"
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = "Policy Section"
verbose_name_plural = "Policy Sections"
ordering = ['policy', 'order']
def __str__(self):
return f"{self.policy.type} - {self.heading}"