|
21 | 21 | import django_filters
|
22 | 22 | from django_filters import rest_framework as filters
|
23 | 23 |
|
24 |
| -from nxtbn.core.admin_permissions import GranularPermission, CommonPermissions |
| 24 | +from nxtbn.core.admin_permissions import GranularPermission, CommonPermissions, has_required_perm |
25 | 25 | from nxtbn.core.enum_perms import PermissionsEnum
|
26 | 26 | from nxtbn.core.utils import to_currency_unit
|
27 | 27 | from nxtbn.order.proccesor.views import OrderProccessorAPIView
|
@@ -419,11 +419,41 @@ class OrderStatusUpdateAPIView(generics.UpdateAPIView):
|
419 | 419 | serializer_class = OrderStatusUpdateSerializer
|
420 | 420 | lookup_field = 'alias'
|
421 | 421 |
|
| 422 | + def check_permissions(self, request): |
| 423 | + status = request.data.get('status') |
| 424 | + user = request.user |
| 425 | + |
| 426 | + print(status, 'status') |
| 427 | + |
| 428 | + permission_map = { |
| 429 | + OrderStatus.CANCELLED: PermissionsEnum.CAN_CANCEL_ORDER, |
| 430 | + OrderStatus.SHIPPED: PermissionsEnum.CAN_SHIP_ORDER, |
| 431 | + OrderStatus.DELIVERED: PermissionsEnum.CAN_DELIVER_ORDER, |
| 432 | + OrderStatus.APPROVED: PermissionsEnum.CAN_APPROVE_ORDER, |
| 433 | + OrderStatus.PROCESSING: PermissionsEnum.CAN_PROCCSS_ORDER, |
| 434 | + } |
| 435 | + |
| 436 | + required_permission = permission_map.get(status) |
| 437 | + print(required_permission, 'required_permission') |
| 438 | + if required_permission and not has_required_perm(user, required_permission, Order): |
| 439 | + self.permission_denied( |
| 440 | + request, |
| 441 | + message=_("You do not have permission to perform this action."), |
| 442 | + code='permission_denied' |
| 443 | + ) |
| 444 | + |
422 | 445 | class OrderPaymentTermUpdateAPIView(generics.UpdateAPIView):
|
| 446 | + model = Order |
| 447 | + permission_classes = (GranularPermission, ) |
423 | 448 | queryset = Order.objects.all()
|
424 | 449 | serializer_class = OrderPaymentUpdateSerializer
|
425 | 450 | lookup_field = 'alias'
|
| 451 | + required_perm = PermissionsEnum.CAN_UPDATE_ORDER_PYMENT_TERM |
| 452 | + |
426 | 453 | class OrderPaymentMethodUpdateAPIView(generics.UpdateAPIView):
|
| 454 | + model = Order |
| 455 | + permission_classes = (GranularPermission, ) |
| 456 | + required_perm = PermissionsEnum.CAN_UPDATE_ORDER_PAYMENT_METHOD |
427 | 457 | queryset = Order.objects.all()
|
428 | 458 | serializer_class = OrderPaymentMethodSerializer
|
429 | 459 | lookup_field = 'alias'
|
@@ -461,43 +491,29 @@ class ReturnRequestFilterMixing:
|
461 | 491 |
|
462 | 492 |
|
463 | 493 | class ReturnRequestAPIView(ReturnRequestFilterMixing, generics.ListCreateAPIView):
|
| 494 | + permission_classes = (CommonPermissions, ) |
| 495 | + model = ReturnRequest |
464 | 496 | queryset = ReturnRequest.objects.all()
|
465 | 497 | serializer_class = ReturnRequestSerializer
|
466 |
| - |
467 |
| - HTTP_PERMISSIONS = { |
468 |
| - UserRole.STORE_MANAGER: {"POST", 'GET'}, |
469 |
| - UserRole.ADMIN: {"all"}, |
470 |
| - UserRole.ORDER_PROCESSOR: {"POST", 'GET'}, |
471 |
| - UserRole.STORE_VIEWER: {"GET"}, |
472 |
| - } |
473 |
| - |
474 | 498 |
|
475 | 499 | class ReturnRequestDetailAPIView(generics.RetrieveUpdateAPIView):
|
| 500 | + permission_classes = (CommonPermissions, ) |
| 501 | + model = ReturnRequest |
476 | 502 | queryset = ReturnRequest.objects.all()
|
477 | 503 | serializer_class = ReturnRequestDetailsSerializer
|
478 | 504 | lookup_field = 'id'
|
479 | 505 |
|
480 |
| - HTTP_PERMISSIONS = { |
481 |
| - UserRole.STORE_MANAGER: {"PUT", 'PATCH', 'GET'}, |
482 |
| - UserRole.ADMIN: {"all"}, |
483 |
| - UserRole.ORDER_PROCESSOR: {"PATCH", 'GET'}, |
484 |
| - UserRole.STORE_VIEWER: {"GET"}, |
485 |
| - } |
486 |
| - |
487 | 506 | def get_serializer_class(self):
|
488 | 507 | if self.request.method in ['PATCH', 'PUT']:
|
489 | 508 | return ReturnRequestStatusUpdateSerializer
|
490 | 509 | return self.serializer_class
|
491 | 510 |
|
492 | 511 | class ReturnLineItemStatusUpdateAPIView(generics.UpdateAPIView):
|
| 512 | + permission_classes = (CommonPermissions, ) |
| 513 | + model = ReturnRequest |
| 514 | + |
493 | 515 | serializer_class = ReturnLineItemStatusUpdateSerializer
|
494 | 516 |
|
495 |
| - HTTP_PERMISSIONS = { |
496 |
| - UserRole.STORE_MANAGER: {"PUT", 'PATCH', 'GET'}, |
497 |
| - UserRole.ADMIN: {"all"}, |
498 |
| - UserRole.ORDER_PROCESSOR: {"PATCH", 'GET'}, |
499 |
| - UserRole.STORE_VIEWER: {"GET"}, |
500 |
| - } |
501 | 517 |
|
502 | 518 | def update(self, request, *args, **kwargs):
|
503 | 519 | serializer = self.get_serializer(data=request.data)
|
@@ -526,14 +542,10 @@ def update(self, request, *args, **kwargs):
|
526 | 542 |
|
527 | 543 |
|
528 | 544 | class ReturnRequestBulkUpdateAPIView(generics.UpdateAPIView):
|
529 |
| - serializer_class = ReturnRequestBulkUpdateSerializer |
| 545 | + permission_classes = (CommonPermissions, ) |
| 546 | + model = ReturnRequest |
530 | 547 |
|
531 |
| - HTTP_PERMISSIONS = { |
532 |
| - UserRole.STORE_MANAGER: {'all'}, |
533 |
| - UserRole.ADMIN: {"all"}, |
534 |
| - UserRole.ORDER_PROCESSOR: {'all'}, |
535 |
| - UserRole.STORE_VIEWER: {"GET"}, |
536 |
| - } |
| 548 | + serializer_class = ReturnRequestBulkUpdateSerializer |
537 | 549 |
|
538 | 550 | def update(self, request, *args, **kwargs):
|
539 | 551 | serializer = self.get_serializer(data=request.data)
|
|
0 commit comments