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", )