66 lines
1.9 KiB
Python
Executable File
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",
|
|
)
|