Files
outbo-2-stgclone/evg-outbo-api/outbo/apps/activity_log/models.py
T
2024-11-27 13:18:16 +01:00

66 lines
1.9 KiB
Python
Executable File

from django.db import models
from django.utils.translation import pgettext, gettext_lazy as _
from rules import always_allow
from outbo.apps.activity_log.enums import MessageType
from outbo.apps.core.models import (
TimestampableDeletableMixin,
RulesPolymorphicModel,
SoftDeletablePolymorphicManager,
)
class LogItem(TimestampableDeletableMixin, RulesPolymorphicModel):
objects = SoftDeletablePolymorphicManager()
all_objects = SoftDeletablePolymorphicManager(alive_only=False)
message = models.TextField(verbose_name=_("message"))
message_type = models.CharField(
verbose_name=_("message type"),
max_length=25,
blank=False,
null=False,
default=MessageType.USER,
choices=((type, type.value) for type in MessageType),
)
created_by = models.ForeignKey(
verbose_name=_("created by"), to="authentication.User", on_delete=models.CASCADE
)
def __str__(self):
if self.message_type == MessageType.USER:
return self.message
return pgettext("log_item_messages", self.message)
class ProductLogItem(LogItem):
class Meta:
rules_permissions = {"view": always_allow, "add": always_allow}
ordering = ["-created_at"]
product = models.ForeignKey(
verbose_name=_("product"),
to="products.Product",
on_delete=models.CASCADE,
related_name="log_items",
related_query_name="log_item",
)
stage = models.ForeignKey(
to="products.ProductStage", on_delete=models.CASCADE, null=True, default=None
)
class ProjectLogItem(LogItem):
class Meta:
rules_permissions = {"view": always_allow, "add": always_allow}
ordering = ["-created_at"]
project = models.ForeignKey(
verbose_name=_("project"),
to="projects.Project",
on_delete=models.CASCADE,
related_name="log_items",
related_query_name="log_item",
)