Skip to content

Commit c0285ea

Browse files
committed
workspace(assets): assets in workspace
- user can view assets assigned to a workspace [Finishes 166575309]
1 parent ea4c5cb commit c0285ea

File tree

5 files changed

+57
-2
lines changed

5 files changed

+57
-2
lines changed

api/serializers/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
OfficeWorkspaceSerializer,
1111
TeamDetailedSerializer,
1212
TeamSerializer,
13+
OfficeWorkspaceDetailSerializer,
1314
)
1415
from .assets import ( # noqa: F401 # isort:skip
1516
AllocationsSerializer,

api/serializers/andela_centres.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,35 @@ def get_long_name(self, obj):
109109
return long_name
110110

111111

112+
class OfficeWorkspaceDetailSerializer(serializers.ModelSerializer):
113+
assets_assigned = serializers.SerializerMethodField()
114+
115+
class Meta:
116+
model = models.OfficeWorkspace
117+
fields = ("id", "name", "floor", "block", "workspaces", "assets_assigned")
118+
119+
def get_assets_assigned(self, obj):
120+
"""This method returns assets assigned to a particuluar workspace
121+
Args:
122+
obj (object): current object instance being fetched
123+
Returns:
124+
json : serialized assets belonging to the specified workspace
125+
"""
126+
127+
from api.serializers.assets import WorkspaceAssetSerializer
128+
129+
workspace_assigned = models.AssetAssignee.objects.filter(
130+
asset_location_id=obj.id
131+
).first()
132+
assets = models.Asset.objects.filter(assigned_to=workspace_assigned)
133+
page = self.context["view"].paginate_queryset(assets)
134+
serialized_assets = WorkspaceAssetSerializer(page, many=True)
135+
paginated_assets = self.context["view"].get_paginated_response(
136+
serialized_assets.data
137+
)
138+
return paginated_assets.data
139+
140+
112141
class DepartmentSerializer(serializers.ModelSerializer):
113142
number_of_assets = serializers.SerializerMethodField()
114143

@@ -204,7 +233,7 @@ class Meta:
204233
class TeamSerializer(serializers.ModelSerializer):
205234
class Meta:
206235
model = models.DepartmentalTeam
207-
fields = ('name', 'description', 'department')
236+
fields = ("name", "description", "department")
208237

209238

210239
class TeamDetailedSerializer(serializers.ModelSerializer):
@@ -214,7 +243,7 @@ class TeamDetailedSerializer(serializers.ModelSerializer):
214243

215244
class Meta:
216245
model = models.DepartmentalTeam
217-
fields = ('name', 'description', 'department', 'members', 'assets_assigned')
246+
fields = ("name", "description", "department", "members", "assets_assigned")
218247

219248
def get_assets_assigned(self, obj):
220249
"""

api/serializers/assets.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,3 +577,11 @@ class Meta:
577577
"incident_report_state",
578578
"asset_state_from_report",
579579
)
580+
581+
582+
class WorkspaceAssetSerializer(serializers.ModelSerializer):
583+
asset_type = serializers.ReadOnlyField()
584+
585+
class Meta:
586+
model = models.Asset
587+
fields = ("uuid", "asset_category", "serial_number", "asset_code", "asset_type")

api/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
UserFeedbackViewSet,
4343
UserGroupViewSet,
4444
UserViewSet,
45+
OfficeWorkspaceDetailViewSet,
4546
)
4647
from api.views.andela_centres import TeamViewSet
4748

@@ -86,6 +87,7 @@ def __init__(self, trailing_slash="/?"):
8687
router.register("asset-types", AssetTypeViewSet, "asset-types")
8788
router.register("incidence-reports", AssetIncidentReportViewSet, "incidence-reports")
8889
router.register("manage-assets", ManageAssetViewSet, "manage-assets")
90+
router.register("workspace-detail", OfficeWorkspaceDetailViewSet, "workspace-detail")
8991
router.register(
9092
"slack-incidence-reports",
9193
AssetSlackIncidentReportViewSet,

api/views/andela_centres.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
OfficeFloorSectionDetailSerializer,
2222
OfficeFloorSectionSerializer,
2323
OfficeFloorSerializer,
24+
OfficeWorkspaceDetailSerializer,
2425
OfficeWorkspaceSerializer,
2526
)
2627
from api.serializers.andela_centres import TeamDetailedSerializer, TeamSerializer
@@ -128,6 +129,11 @@ class OfficeWorkspaceViewSet(ModelViewSet):
128129
permission_classes = [IsAuthenticated, IsAdminUser]
129130
authentication_classes = [FirebaseTokenAuthentication]
130131

132+
def get_serializer_class(self):
133+
if self.action == "retrieve":
134+
return OfficeWorkspaceDetailSerializer
135+
return OfficeWorkspaceSerializer
136+
131137
def destroy(self, request, *args, **kwargs):
132138
instance = self.get_object()
133139
self.perform_destroy(instance)
@@ -162,3 +168,12 @@ def get_serializer_class(self):
162168
if self.action == "retrieve":
163169
return TeamDetailedSerializer
164170
return TeamSerializer
171+
172+
class OfficeWorkspaceDetailViewSet(ModelViewSet):
173+
serializer_class = OfficeWorkspaceDetailSerializer
174+
queryset = models.OfficeWorkspace.objects.all()
175+
permission_classes = [IsAuthenticated, IsAdminUser]
176+
authentication_classes = [FirebaseTokenAuthentication]
177+
178+
def get_serializer_class(self):
179+
return OfficeWorkspaceDetailSerializer

0 commit comments

Comments
 (0)