crmbackend/crm/views/seller_views.py

138 lines
5.2 KiB
Python
Raw Normal View History

2026-08-15 13:52:16 +00:00
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from crm.permissions import IsCRMAdmin
from seller_models.models import SupplierProfile, Product
from crm.models import AuditLog
from crm.serializers import SupplierProfileSerializer, ProductSerializer
from crm.services.whatsapp_service import WhatsAppService
from django.utils import timezone
whatsapp_service = WhatsAppService()
def log_action(admin, action, target_id, details):
AuditLog.objects.create(
admin=admin,
action=action,
target_type='seller',
target_id=target_id,
details=details
)
@api_view(['GET'])
@permission_classes([IsCRMAdmin])
def list_sellers(request):
sellers = SupplierProfile.objects.all()
status_filter = request.query_params.get('status')
if status_filter:
sellers = sellers.filter(status=status_filter)
serializer = SupplierProfileSerializer(sellers, many=True)
return Response(serializer.data)
@api_view(['GET'])
@permission_classes([IsCRMAdmin])
def get_seller_detail(request, pk):
try:
seller = SupplierProfile.objects.get(pk=pk)
except SupplierProfile.DoesNotExist:
return Response({"detail": "Seller not found"}, status=404)
serializer = SupplierProfileSerializer(seller)
return Response(serializer.data)
@api_view(['GET'])
@permission_classes([IsCRMAdmin])
def get_seller_documents(request, pk):
# Mocking returning presigned document URLs
docs = [
{"type": "Aadhar Card", "filename": "aadhar_back_front.pdf", "url": "https://digihox-kyc-bucket.s3.ap-south-2.amazonaws.com/aadhar.pdf?token=presigned123"},
{"type": "PAN Card", "filename": "pan_card_copy.jpg", "url": "https://digihox-kyc-bucket.s3.ap-south-2.amazonaws.com/pan.jpg?token=presigned123"},
{"type": "GSTIN Certificate", "filename": "gst_cert_2026.pdf", "url": "https://digihox-kyc-bucket.s3.ap-south-2.amazonaws.com/gst.pdf?token=presigned123"}
]
return Response(docs)
@api_view(['POST'])
@permission_classes([IsCRMAdmin])
def approve_seller(request, pk):
try:
seller = SupplierProfile.objects.get(pk=pk)
except SupplierProfile.DoesNotExist:
return Response({"detail": "Seller not found"}, status=404)
old_status = seller.status
seller.status = 'approved'
seller.save()
log_action(request.user, 'approve_seller', seller.id, {"old_status": old_status, "new_status": "approved"})
whatsapp_service.send_template_alert(seller.phone, "seller_approved", {"name": seller.name})
return Response({"message": f"Seller {seller.name} approved successfully"})
@api_view(['POST'])
@permission_classes([IsCRMAdmin])
def reject_seller(request, pk):
reason = request.data.get('reason', 'Documents validation failed')
try:
seller = SupplierProfile.objects.get(pk=pk)
except SupplierProfile.DoesNotExist:
return Response({"detail": "Seller not found"}, status=404)
old_status = seller.status
seller.status = 'rejected'
seller.save()
log_action(request.user, 'reject_seller', seller.id, {"old_status": old_status, "new_status": "rejected", "reason": reason})
whatsapp_service.send_template_alert(seller.phone, "seller_rejected", {"name": seller.name, "reason": reason})
return Response({"message": f"Seller {seller.name} rejected successfully"})
@api_view(['POST'])
@permission_classes([IsCRMAdmin])
def suspend_seller(request, pk):
reason = request.data.get('reason', 'Policy violation')
try:
seller = SupplierProfile.objects.get(pk=pk)
except SupplierProfile.DoesNotExist:
return Response({"detail": "Seller not found"}, status=404)
old_status = seller.status
seller.status = 'suspended'
seller.save()
log_action(request.user, 'suspend_seller', seller.id, {"old_status": old_status, "new_status": "suspended", "reason": reason})
whatsapp_service.send_template_alert(seller.phone, "seller_suspended", {"name": seller.name, "reason": reason})
return Response({"message": f"Seller {seller.name} suspended successfully"})
@api_view(['POST'])
@permission_classes([IsCRMAdmin])
def reinstate_seller(request, pk):
try:
seller = SupplierProfile.objects.get(pk=pk)
except SupplierProfile.DoesNotExist:
return Response({"detail": "Seller not found"}, status=404)
old_status = seller.status
seller.status = 'approved'
seller.save()
log_action(request.user, 'reinstate_seller', seller.id, {"old_status": old_status, "new_status": "approved"})
whatsapp_service.send_template_alert(seller.phone, "seller_reinstated", {"name": seller.name})
return Response({"message": f"Seller {seller.name} reinstated successfully"})
@api_view(['POST'])
@permission_classes([IsCRMAdmin])
def reset_seller_password(request, pk):
try:
seller = SupplierProfile.objects.get(pk=pk)
except SupplierProfile.DoesNotExist:
return Response({"detail": "Seller not found"}, status=404)
# Trigger password reset flow
whatsapp_service.send_otp(seller.phone, otp_type="password_reset")
log_action(request.user, 'reset_password', seller.id, {"email": seller.email})
return Response({"message": "Password reset alert successfully dispatched"})