2
2
from django .shortcuts import get_object_or_404
3
3
from rest_framework import viewsets
4
4
from rest_framework import generics , status
5
+ from nxtbn .core .admin_permissions import CommonPermissions , GranularPermission
6
+ from nxtbn .core .enum_perms import PermissionsEnum
5
7
from nxtbn .order .models import Order
6
8
from nxtbn .product .models import ProductVariant
7
9
from nxtbn .warehouse import StockMovementStatus
26
28
27
29
28
30
class WarehouseViewSet (viewsets .ModelViewSet ):
31
+ permission_classes = (CommonPermissions , )
32
+ model = Warehouse
29
33
queryset = Warehouse .objects .all ()
30
34
serializer_class = WarehouseSerializer
31
35
pagination_class = None
@@ -59,6 +63,8 @@ class StockFilterMixin:
59
63
60
64
61
65
class StockViewSet (StockFilterMixin , viewsets .ModelViewSet ):
66
+ permission_classes = (CommonPermissions , )
67
+ model = Stock
62
68
queryset = Stock .objects .select_related ('warehouse' , 'product_variant' ).all ()
63
69
pagination_class = NxtbnPagination
64
70
@@ -70,6 +76,8 @@ def get_serializer_class(self):
70
76
71
77
72
78
class WarehouseStockByVariantAPIView (APIView ):
79
+ permission_classes = (CommonPermissions , )
80
+ model = ProductVariant
73
81
def get (self , request , variant_id ):
74
82
try :
75
83
# Fetch the product variant
@@ -107,6 +115,8 @@ def get(self, request, variant_id):
107
115
108
116
109
117
class UpdateStockWarehouseWise (generics .UpdateAPIView ):
118
+ permission_classes = (CommonPermissions , )
119
+ model = Stock
110
120
serializer_class = StockUpdateSerializer
111
121
112
122
def update (self , request , * args , ** kwargs ):
@@ -172,13 +182,17 @@ def get_queryset(self):
172
182
return StockReservation .objects .all ()
173
183
174
184
class StockReservationListAPIView (StockReservationFilterMixin , generics .ListCreateAPIView ):
185
+ permission_classes = (CommonPermissions , )
186
+ model = StockReservation
175
187
serializer_class = StockReservationSerializer
176
188
queryset = StockReservation .objects .all ()
177
189
pagination_class = NxtbnPagination
178
190
179
191
180
192
181
193
class MergeStockReservationAPIView (generics .UpdateAPIView ):
194
+ permission_classes = (CommonPermissions , )
195
+ model = StockReservation
182
196
"""
183
197
API to transfer stock reservation from one warehouse to another.
184
198
"""
@@ -226,6 +240,8 @@ def update(self, request, *args, **kwargs):
226
240
227
241
228
242
class RetryReservationAPIView (APIView ):
243
+ permission_classes = (CommonPermissions , )
244
+ model = StockReservation
229
245
def post (self , request , alias ):
230
246
order = get_object_or_404 (Order , alias = alias )
231
247
reserve_stock (order )
@@ -234,16 +250,22 @@ def post(self, request, alias):
234
250
235
251
236
252
class StockTransferListCreateAPIView (generics .ListCreateAPIView ):
253
+ permission_classes = (CommonPermissions , )
254
+ model = StockTransfer
237
255
queryset = StockTransfer .objects .prefetch_related ('items' ).all ()
238
256
serializer_class = StockTransferSerializer
239
257
240
258
241
259
class StockTransferRetrieveUpdateAPIView (generics .RetrieveUpdateAPIView ):
260
+ permission_classes = (CommonPermissions , )
261
+ model = StockTransfer
242
262
queryset = StockTransfer .objects .all ()
243
263
serializer_class = StockTransferSerializer
244
264
lookup_field = 'id'
245
265
246
266
class StockTransferMarkAsInTransitAPIView (APIView ):
267
+ permission_classes = (CommonPermissions , )
268
+ model = StockTransfer
247
269
def put (self , request , pk ):
248
270
with transaction .atomic ():
249
271
transfer = get_object_or_404 (StockTransfer , id = pk )
@@ -276,6 +298,9 @@ def put(self, request, pk):
276
298
277
299
278
300
class StockTransferReceivingAPI (generics .UpdateAPIView ):
301
+ permission_classes = (GranularPermission , )
302
+ model = StockTransfer
303
+ required_perm = PermissionsEnum .CAN_RECEIVE_TRANSFERRED_STOCK
279
304
serializer_class = StockTransferReceivingSerializer
280
305
lookup_field = 'pk'
281
306
queryset = StockTransfer .objects .all ()
@@ -315,6 +340,9 @@ def update(self, request, *args, **kwargs):
315
340
316
341
317
342
class StockTransferMarkedAsCompletedAPIView (APIView ):
343
+ permission_classes = (GranularPermission , )
344
+ model = StockTransfer
345
+ required_perm = PermissionsEnum .CAN_MARK_STOCK_TRANSFER_AS_COMPLETED
318
346
def put (self , request , pk ):
319
347
transfer = get_object_or_404 (StockTransfer , id = pk )
320
348
0 commit comments