add: core.utils.get_context_field is added which can be used with drf serializer contexts, documentation is added
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from rest_framework import serializers # type: ignore
|
||||
|
||||
from core.apps.companies.models import CompanyFolderModel
|
||||
from core.utils.misc import get_context_field
|
||||
|
||||
|
||||
class BaseCompanyFolderSerializer(serializers.ModelSerializer):
|
||||
@@ -38,7 +39,7 @@ class CreateCompanyFolderSerializer(BaseCompanyFolderSerializer):
|
||||
class Meta(BaseCompanyFolderSerializer.Meta): ...
|
||||
|
||||
|
||||
class CreateCompanyFolderFromCompanySerializer(CreateCompanyFolderSerializer):
|
||||
class CreateFolderForCompanySerializer(CreateCompanyFolderSerializer):
|
||||
class Meta(CreateCompanyFolderSerializer.Meta):
|
||||
read_only_fields = (
|
||||
*CreateCompanyFolderSerializer.Meta.read_only_fields,
|
||||
@@ -46,6 +47,6 @@ class CreateCompanyFolderFromCompanySerializer(CreateCompanyFolderSerializer):
|
||||
)
|
||||
|
||||
def create(self, validated_data: dict[str, object]) -> Meta.model:
|
||||
validated_data["company_id"] = self.context["company_id"]
|
||||
return super().create(validated_data) # type: ignore
|
||||
context_data = get_context_field("company", self.context)
|
||||
return super().create(validated_data | context_data) # type: ignore
|
||||
|
||||
@@ -34,7 +34,7 @@ from core.apps.companies.serializers import (
|
||||
CreateCompanyFolderSerializer,
|
||||
BaseCompanyAccountSerializer,
|
||||
|
||||
CreateCompanyFolderFromCompanySerializer
|
||||
CreateFolderForCompanySerializer
|
||||
)
|
||||
|
||||
from core.apps.contracts.serializers import (
|
||||
@@ -50,6 +50,9 @@ from core.apps.contracts.models import (
|
||||
UserModel = get_user_model()
|
||||
|
||||
|
||||
######################################################################
|
||||
# View Only For Company CRUD That Belongs To Admin.
|
||||
######################################################################
|
||||
@extend_schema(tags=["Company"])
|
||||
class CompanyView(BaseViewSetMixin, ModelViewSet):
|
||||
queryset = CompanyModel.objects.all()
|
||||
@@ -72,6 +75,9 @@ class CompanyView(BaseViewSetMixin, ModelViewSet):
|
||||
}
|
||||
|
||||
|
||||
######################################################################
|
||||
# company/<uuid:pk>/contract Views
|
||||
######################################################################
|
||||
class CompanyContractViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
queryset = CompanyModel.objects.all()
|
||||
permission_classes = [AllowAny]
|
||||
@@ -110,6 +116,9 @@ class CompanyContractViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
######################################################################
|
||||
# company/<uuid:pk>/accounts Views
|
||||
######################################################################
|
||||
class CompanyAccountViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
queryset = CompanyModel.objects.all()
|
||||
serializer_class = BaseCompanyAccountSerializer
|
||||
@@ -130,7 +139,6 @@ class CompanyAccountViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
def list_account(
|
||||
self,
|
||||
request: HttpRequest,
|
||||
pk: uuid.UUID,
|
||||
*args: object,
|
||||
**kwargs: object,
|
||||
) -> Response:
|
||||
@@ -140,18 +148,20 @@ class CompanyAccountViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
return Response(data=ser.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
######################################################################
|
||||
# company/<uuid:pk>/folders Views
|
||||
######################################################################
|
||||
class CompanyFolderViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
queryset = CompanyModel.objects.all()
|
||||
permission_classes = [AllowAny]
|
||||
# serializer_class = BaseCompanyFolderSerializer
|
||||
|
||||
action_permission_classes = {
|
||||
"list_folder": [IsCompanyAccount],
|
||||
"create_folder": [IsCompanyAccount],
|
||||
}
|
||||
action_serializer_class = { # type: ignore
|
||||
"list_folder": RetrieveCompanyFolderSerializer,
|
||||
"create_folder": CreateCompanyFolderFromCompanySerializer,
|
||||
"list_folder": RetrieveCompanyFolderSerializer,
|
||||
"create_folder": CreateFolderForCompanySerializer,
|
||||
}
|
||||
|
||||
@extend_schema(
|
||||
@@ -159,15 +169,12 @@ class CompanyFolderViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
description="List Company Folders"
|
||||
)
|
||||
@action(methods=["GET"], detail=True, url_path="folders")
|
||||
def list_folder(
|
||||
self,
|
||||
request: HttpRequest,
|
||||
*args: object,
|
||||
**kwargs: object,
|
||||
) -> Response:
|
||||
def list_folder(self, *args: object, **kwargs: object) -> Response:
|
||||
company = self.get_object()
|
||||
folders = CompanyFolderModel.objects.filter(company=company)
|
||||
ser = self.get_serializer(instance=folders, many=True, context={"company_id": company.pk}) # type: ignore
|
||||
ser = self.get_serializer(
|
||||
instance=folders, many=True, context={"company_id": company.pk}
|
||||
) # type: ignore
|
||||
return Response(data=ser.data, status=status.HTTP_200_OK)
|
||||
|
||||
@extend_schema(
|
||||
@@ -175,15 +182,9 @@ class CompanyFolderViewSet(BaseViewSetMixin, GenericViewSet):
|
||||
description="Create Folder for company",
|
||||
)
|
||||
@action(url_path="folders", detail=True, methods=["POST"])
|
||||
def create_folder(
|
||||
self,
|
||||
request: HttpRequest,
|
||||
pk: uuid.UUID,
|
||||
*args: object,
|
||||
**kwargs: object,
|
||||
) -> Response:
|
||||
def create_folder(self, request: HttpRequest, *args: object, **kwargs: object) -> Response:
|
||||
company = self.get_object()
|
||||
data = request.data.copy() | dict(company=company.id) # type: ignore
|
||||
ser = CreateCompanyFolderSerializer(data=data) # type: ignore
|
||||
ser = self.get_serializer(data=data) # type: ignore
|
||||
ser.is_valid(raise_exception=True)
|
||||
return Response(data=ser.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
Reference in New Issue
Block a user