Initial commit from ZIP

This commit is contained in:
kusz committed 2024-11-27 13:18:16 +01:00
commit 378d4692a9
454 files changed
+40367

No files matched your search

View File
Whitespace-only changes.
View File
Whitespace-only changes.
+7
View File
@@ -0,0 +1,7 @@
from enum import Enum
class MessageType(Enum):
USER = "User"
SUCCESS = "Success"
FAILURE = "Failure"
@@ -0,0 +1,107 @@
# Generated by Django 2.2.7 on 2019-11-29 08:57
from django.db import migrations, models
import django.db.models.deletion
import outbo.apps.activity_log.enums
import outbo.apps.core.fields
import rules.contrib.models
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name="LogItem",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"created_at",
outbo.apps.core.fields.CreationDateTimeField(
auto_now_add=True, verbose_name="Created at"
),
),
(
"updated_at",
outbo.apps.core.fields.ModificationDateTimeField(
auto_now=True, verbose_name="Updated at"
),
),
(
"deleted_at",
outbo.apps.core.fields.RemovalDateTimeField(
blank=True, editable=False, null=True, verbose_name="Deleted at"
),
),
("message", models.TextField(verbose_name="message")),
(
"message_type",
models.CharField(
choices=[
(outbo.apps.activity_log.enums.MessageType("User"), "User"),
(
outbo.apps.activity_log.enums.MessageType("Success"),
"Success",
),
(
outbo.apps.activity_log.enums.MessageType("Failure"),
"Failure",
),
],
default=outbo.apps.activity_log.enums.MessageType("User"),
max_length=25,
verbose_name="message type",
),
),
],
options={"abstract": False,},
bases=(rules.contrib.models.RulesModelMixin, models.Model),
),
migrations.CreateModel(
name="ProductLogItem",
fields=[
(
"logitem_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="activity_log.LogItem",
),
),
],
options={"ordering": ["-created_at"],},
bases=("activity_log.logitem",),
),
migrations.CreateModel(
name="ProjectLogItem",
fields=[
(
"logitem_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="activity_log.LogItem",
),
),
],
options={"ordering": ["-created_at"],},
bases=("activity_log.logitem",),
),
]
@@ -0,0 +1,39 @@
# Generated by Django 2.2.7 on 2019-11-29 08:57
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("activity_log", "0001_initial"),
]
operations = [
migrations.AddField(
model_name="logitem",
name="created_by",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to=settings.AUTH_USER_MODEL,
verbose_name="created by",
),
),
migrations.AddField(
model_name="logitem",
name="polymorphic_ctype",
field=models.ForeignKey(
editable=False,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="polymorphic_activity_log.logitem_set+",
to="contenttypes.ContentType",
),
),
]
@@ -0,0 +1,28 @@
# Generated by Django 2.2.7 on 2019-11-29 08:57
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
("projects", "0001_initial"),
("activity_log", "0002_auto_20191129_0957"),
]
operations = [
migrations.AddField(
model_name="projectlogitem",
name="project",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
related_name="log_items",
related_query_name="log_item",
to="projects.Project",
verbose_name="project",
),
),
]
@@ -0,0 +1,38 @@
# Generated by Django 2.2.7 on 2019-11-29 08:57
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
("activity_log", "0003_projectlogitem_project"),
("products", "0001_initial"),
]
operations = [
migrations.AddField(
model_name="productlogitem",
name="product",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
related_name="log_items",
related_query_name="log_item",
to="products.Product",
verbose_name="product",
),
),
migrations.AddField(
model_name="productlogitem",
name="stage",
field=models.ForeignKey(
default=None,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="products.ProductStage",
),
),
]
@@ -0,0 +1,56 @@
# Generated by Django 2.2.10 on 2020-05-25 08:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("activity_log", "0004_auto_20191129_0957"),
]
operations = [
migrations.AlterField(
model_name="logitem",
name="created_by",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
verbose_name="created by",
),
),
migrations.AlterField(
model_name="productlogitem",
name="product",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="log_items",
related_query_name="log_item",
to="products.Product",
verbose_name="product",
),
),
migrations.AlterField(
model_name="productlogitem",
name="stage",
field=models.ForeignKey(
default=None,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="products.ProductStage",
),
),
migrations.AlterField(
model_name="projectlogitem",
name="project",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="log_items",
related_query_name="log_item",
to="projects.Project",
verbose_name="project",
),
),
]
Whitespace-only changes.
+65
View File
@@ -0,0 +1,65 @@
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",
)
+84
View File
@@ -0,0 +1,84 @@
from rest_framework import serializers
from outbo.apps.activity_log.enums import MessageType
from outbo.apps.activity_log.models import ProductLogItem, ProjectLogItem
class BaseProductLogItemSerializer(serializers.ModelSerializer):
class Meta:
model = ProductLogItem
def get_message_type(self, instance):
t, val = str(instance.message_type).split(".", 1)
return MessageType[val].value
class ProductLogItemSerializer:
class List(BaseProductLogItemSerializer):
message_type = serializers.SerializerMethodField()
class Meta(BaseProductLogItemSerializer.Meta):
fields = [
"message",
"message_type",
"stage",
"updated_at",
"created_at",
"created_by",
]
class Create(BaseProductLogItemSerializer):
class Meta(BaseProductLogItemSerializer.Meta):
fields = ["message"]
class AfterCreate(BaseProductLogItemSerializer):
message_type = serializers.SerializerMethodField()
class Meta(BaseProductLogItemSerializer.Meta):
fields = [
"message",
"message_type",
"stage",
"updated_at",
"created_at",
"created_by",
]
class BaseProjectLogItemSerializer(serializers.ModelSerializer):
class Meta:
model = ProjectLogItem
def get_message_type(self, instance):
t, val = str(instance.message_type).split(".", 1)
return MessageType[val].value
class ProjectLogItemSerializer:
class List(BaseProjectLogItemSerializer):
message_type = serializers.SerializerMethodField()
class Meta(BaseProjectLogItemSerializer.Meta):
fields = [
"message",
"message_type",
"updated_at",
"created_at",
"created_by",
]
class Create(BaseProjectLogItemSerializer):
class Meta(BaseProjectLogItemSerializer.Meta):
fields = ["message"]
class AfterCreate(BaseProjectLogItemSerializer):
message_type = serializers.SerializerMethodField()
class Meta(BaseProjectLogItemSerializer.Meta):
fields = [
"message",
"message_type",
"updated_at",
"created_at",
"created_by",
]
+2
View File
@@ -0,0 +1,2 @@
app_name = "activity_log"
urlpatterns = []
+48
View File
@@ -0,0 +1,48 @@
from outbo.apps.activity_log.models import ProductLogItem, ProjectLogItem
from outbo.apps.activity_log.serializers import (
ProductLogItemSerializer,
ProjectLogItemSerializer,
)
from outbo.apps.core.viewsets import (
AutoPermissionViewSetMixin,
ListModelMixin,
MultipleSerializerViewSet,
NestedViewSetMixin,
CreateModelMixin,
)
from outbo.apps.products.models import Product
from outbo.apps.projects.models import Project
class ProductLogItemNestedViewSet(
AutoPermissionViewSetMixin,
ListModelMixin,
CreateModelMixin,
NestedViewSetMixin,
MultipleSerializerViewSet,
):
queryset = ProductLogItem.objects.all()
serializer_class_set = ProductLogItemSerializer
def perform_create(self, *, serializer):
current_user = self.request.user
parents = self.get_parents_query_dict()
product = Product.objects.get(pk=parents["product_id"])
return serializer.save(product=product, created_by=current_user)
class ProjectLogItemNestedViewSet(
AutoPermissionViewSetMixin,
ListModelMixin,
CreateModelMixin,
NestedViewSetMixin,
MultipleSerializerViewSet,
):
queryset = ProjectLogItem.objects.all()
serializer_class_set = ProjectLogItemSerializer
def perform_create(self, *, serializer):
current_user = self.request.user
parents = self.get_parents_query_dict()
project = Project.objects.get(pk=parents["project_id"])
return serializer.save(project=project, created_by=current_user)