Skip to content

Commit

Permalink
api development
Browse files Browse the repository at this point in the history
API re-structure
  • Loading branch information
KingCSharp committed Nov 10, 2020
1 parent 0909cd4 commit 294f691
Show file tree
Hide file tree
Showing 98 changed files with 1,644 additions and 1,786 deletions.
47 changes: 0 additions & 47 deletions Pipfile

This file was deleted.

741 changes: 0 additions & 741 deletions Pipfile.lock

This file was deleted.

2 changes: 1 addition & 1 deletion accounts/api_urls.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.urls import path
from accounts import api_views

app_name = 'api_accounts'
app_name = "api_accounts"

urlpatterns = [
path("", api_views.AccountsListView.as_view()),
Expand Down
157 changes: 86 additions & 71 deletions accounts/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@
from accounts.models import Account, Tags
from accounts.tasks import send_email_to_assigned_user
from accounts import swagger_params
from accounts.serializer import AccountSerializer, TagsSerailizer, AccountCreateSerializer
from accounts.serializer import (
AccountSerializer,
TagsSerailizer,
AccountCreateSerializer,
)
from common.models import User, Attachments
from common.utils import (
COUNTRIES,
Expand Down Expand Up @@ -53,24 +57,24 @@ class AccountsListView(APIView):
model = Account

def get_queryset(self):
params = self.request.query_params if len(
self.request.data) == 0 else self.request.data
params = (
self.request.query_params
if len(self.request.data) == 0
else self.request.data
)
queryset = self.model.objects.all()
if self.request.user.role != "ADMIN" and not self.request.user.is_superuser:
queryset = queryset.filter(
Q(created_by=self.request.user) | Q(
assigned_to=self.request.user)
Q(created_by=self.request.user) | Q(assigned_to=self.request.user)
).distinct()

if self.request.GET.get("tag", None):
queryset = queryset.filter(
tags__in=self.request.GET.getlist("tag"))
if params.get('is_filter'):
queryset = queryset.filter(tags__in=self.request.GET.getlist("tag"))
if params.get("is_filter"):
request_post = params
if request_post:
if request_post.get("name"):
queryset = queryset.filter(
name__icontains=request_post.get("name"))
queryset = queryset.filter(name__icontains=request_post.get("name"))
if request_post.get("city"):
queryset = queryset.filter(
billing_city__contains=request_post.get("city")
Expand All @@ -80,28 +84,32 @@ def get_queryset(self):
industry__icontains=request_post.get("industry")
)
if request_post.get("tag"):
queryset = queryset.filter(
tags__in=request_post.getlist("tag"))
queryset = queryset.filter(tags__in=request_post.getlist("tag"))

return queryset.filter(company=self.request.company).distinct()

def get_context_data(self, **kwargs):
context = {}
open_accounts = AccountSerializer(
self.get_queryset().filter(status="open"), many=True).data
self.get_queryset().filter(status="open"), many=True
).data
close_accounts = AccountSerializer(
self.get_queryset().filter(status="close"), many=True).data
self.get_queryset().filter(status="close"), many=True
).data
context["accounts_list"] = AccountSerializer(
self.get_queryset(), many=True).data
context["users"] = UserSerializer(User.objects.filter(
is_active=True).order_by("email"), many=True).data
self.get_queryset(), many=True
).data
context["users"] = UserSerializer(
User.objects.filter(is_active=True).order_by("email"), many=True
).data
context["open_accounts"] = open_accounts
context["close_accounts"] = close_accounts
context["industries"] = INDCHOICES
context["per_page"] = self.request.POST.get("per_page")
tag_ids = list(set(Account.objects.values_list("tags", flat=True)))
context["tags"] = TagsSerailizer(
Tags.objects.filter(id__in=tag_ids), many=True).data
Tags.objects.filter(id__in=tag_ids), many=True
).data
if self.request.POST.get("tag", None):
context["request_tags"] = self.request.POST.getlist("tag")
elif self.request.GET.get("tag", None):
Expand Down Expand Up @@ -130,23 +138,27 @@ def get_context_data(self, **kwargs):

return context

@swagger_auto_schema(tags=["accounts"], manual_parameters=swagger_params.account_list_get_params)
@swagger_auto_schema(
tags=["accounts"], manual_parameters=swagger_params.account_list_get_params
)
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return Response(context)

@swagger_auto_schema(tags=["accounts"], manual_parameters=swagger_params.account_create_post_params)
@swagger_auto_schema(
tags=["accounts"], manual_parameters=swagger_params.account_create_post_params
)
def post(self, request, *args, **kwargs):
params = request.query_params if len(
request.data) == 0 else request.data
params = request.query_params if len(request.data) == 0 else request.data
context = {}
serializer = AccountCreateSerializer(
data=params, request_obj=request, account=True
)
# Save Account
if serializer.is_valid():
account_object = serializer.save(
created_by=request.user, company=request.company)
created_by=request.user, company=request.company
)

if self.request.POST.get("tags", ""):
tags = params.get("tags")
Expand All @@ -159,19 +171,15 @@ def post(self, request, *args, **kwargs):
tag = Tags.objects.create(name=t)
account_object.tags.add(tag)
if params.getlist("contacts", []):
account_object.contacts.add(
*params.getlist("contacts"))
account_object.contacts.add(*params.getlist("contacts"))
if params.getlist("assigned_to", []):
account_object.assigned_to.add(
*params.getlist("assigned_to"))
account_object.assigned_to.add(*params.getlist("assigned_to"))
if self.request.FILES.get("account_attachment"):
attachment = Attachments()
attachment.created_by = request.user
attachment.file_name = request.FILES.get(
"account_attachment").name
attachment.file_name = request.FILES.get("account_attachment").name
attachment.account = account_object
attachment.attachment = request.FILES.get(
"account_attachment")
attachment.attachment = request.FILES.get("account_attachment")
attachment.save()
if params.getlist("teams", []):
user_ids = Teams.objects.filter(
Expand All @@ -197,8 +205,7 @@ def post(self, request, *args, **kwargs):
domain=current_site.domain,
protocol=self.request.scheme,
)
return Response({'error': False,
'message': 'Account Created Successfully'})
return Response({"error": False, "message": "Account Created Successfully"})
context["errors"] = serializer.errors
return Response(context, status=status.HTTP_400_BAD_REQUEST)

Expand All @@ -211,19 +218,19 @@ def get_object(self, pk):
return Account.objects.filter(id=pk).first()

def dispatch(self, request, *args, **kwargs):
self.account = self.get_object(pk=kwargs.get('pk'))
self.account = self.get_object(pk=kwargs.get("pk"))
if self.account.company != request.company:
raise PermissionDenied
return super(AccountDetailView, self).dispatch(request, *args, **kwargs)

@swagger_auto_schema(tags=["accounts"], manual_parameters=swagger_params.account_update_post_params)
@swagger_auto_schema(
tags=["accounts"], manual_parameters=swagger_params.account_update_post_params
)
def put(self, request, pk, format=None):
params = request.query_params if len(
request.data) == 0 else request.data
params = request.query_params if len(request.data) == 0 else request.data
context = {}
serializer = AccountCreateSerializer(
data=params, instance=self.account,
request_obj=request, account=True
data=params, instance=self.account, request_obj=request, account=True
)
if serializer.is_valid():
account_object = serializer.save()
Expand All @@ -243,22 +250,18 @@ def put(self, request, pk, format=None):
account_object.tags.add(tag)
if params.getlist("contacts", []):
account_object.contacts.clear()
account_object.contacts.add(
*params.getlist("contacts"))
account_object.contacts.add(*params.getlist("contacts"))
if params.getlist("assigned_to", []):
account_object.assigned_to.clear()
account_object.assigned_to.add(
*params.getlist("assigned_to"))
account_object.assigned_to.add(*params.getlist("assigned_to"))
else:
account_object.assigned_to.clear()
if self.request.FILES.get("account_attachment"):
attachment = Attachments()
attachment.created_by = self.request.user
attachment.file_name = self.request.FILES.get(
"account_attachment").name
attachment.file_name = self.request.FILES.get("account_attachment").name
attachment.account = account_object
attachment.attachment = self.request.FILES.get(
"account_attachment")
attachment.attachment = self.request.FILES.get("account_attachment")
attachment.save()

if params.getlist("teams", []):
Expand All @@ -281,20 +284,20 @@ def put(self, request, pk, format=None):
account_object.assigned_to.all().values_list("id", flat=True)
)
current_site = get_current_site(self.request)
recipients = list(set(assigned_to_list) -
set(previous_assigned_to_users))
recipients = list(set(assigned_to_list) - set(previous_assigned_to_users))
send_email_to_assigned_user.delay(
recipients,
account_object.id,
domain=current_site.domain,
protocol=self.request.scheme,
)
return Response({'error': False,
'message': 'Account Updated Successfully'})
context['errors'] = serializer.errors
return Response({"error": False, "message": "Account Updated Successfully"})
context["errors"] = serializer.errors
return Response(context, status=status.HTTP_400_BAD_REQUEST)

@swagger_auto_schema(tags=["accounts"], manual_parameters=swagger_params.company_params)
@swagger_auto_schema(
tags=["accounts"], manual_parameters=swagger_params.company_params
)
def delete(self, request, pk, format=None):
self.object = self.get_object(pk)
if self.object.company != request.company:
Expand All @@ -303,9 +306,11 @@ def delete(self, request, pk, format=None):
if self.request.user != self.object.created_by:
raise PermissionDenied
self.object.delete()
return Response({'status': 'success'}, status=status.HTTP_204_NO_CONTENT)
return Response({"status": "success"}, status=status.HTTP_204_NO_CONTENT)

@swagger_auto_schema(tags=["accounts"], manual_parameters=swagger_params.account_list_get_params)
@swagger_auto_schema(
tags=["accounts"], manual_parameters=swagger_params.account_list_get_params
)
def get(self, request, pk, format=None):
context = {}
context["account_obj"] = AccountSerializer(self.account).data
Expand All @@ -329,13 +334,13 @@ def get(self, request, pk, format=None):
if self.request.user.is_superuser or self.request.user.role == "ADMIN":
users_mention = list(
User.objects.filter(
is_active=True, company=self.request.company,
is_active=True,
company=self.request.company,
).values("username")
)
elif self.request.user != self.account.created_by:
if self.account.created_by:
users_mention = [
{"username": self.account.created_by.username}]
users_mention = [{"username": self.account.created_by.username}]
else:
users_mention = []
else:
Expand All @@ -344,20 +349,27 @@ def get(self, request, pk, format=None):
context.update(
{
"comments": CommentSerializer(
self.account.accounts_comments.all(), many=True).data,
self.account.accounts_comments.all(), many=True
).data,
"attachments": AttachmentsSerializer(
self.account.account_attachment.all(), many=True).data,
self.account.account_attachment.all(), many=True
).data,
"opportunity_list": OpportunitySerializer(
Opportunity.objects.filter(
account=self.account), many=True).data,
Opportunity.objects.filter(account=self.account), many=True
).data,
"contacts": ContactSerializer(
self.account.contacts.all(), many=True).data,
"users": UserSerializer(User.objects.filter(
is_active=True, company=self.request.company,
).order_by("email"), many=True).data,
self.account.contacts.all(), many=True
).data,
"users": UserSerializer(
User.objects.filter(
is_active=True,
company=self.request.company,
).order_by("email"),
many=True,
).data,
"cases": CaseSerializer(
Case.objects.filter(
account=self.account), many=True).data,
Case.objects.filter(account=self.account), many=True
).data,
"stages": STAGES,
"sources": SOURCES,
"countries": COUNTRIES,
Expand All @@ -367,11 +379,14 @@ def get(self, request, pk, format=None):
"case_status": STATUS_CHOICE,
"comment_permission": comment_permission,
"tasks": TaskSerializer(
self.account.accounts_tasks.all(), many=True).data,
self.account.accounts_tasks.all(), many=True
).data,
"invoices": InvoiceSerailizer(
self.account.accounts_invoices.all(), many=True).data,
self.account.accounts_invoices.all(), many=True
).data,
"emails": EmailSerailizer(
self.account.sent_email.all(), many=True).data,
self.account.sent_email.all(), many=True
).data,
"users_mention": users_mention,
}
)
Expand Down
Loading

0 comments on commit 294f691

Please sign in to comment.