예제 #1
0
파일: views.py 프로젝트: raidu4u/Django-CRM
    def form_valid(self, form):
        assigned_to_ids = self.get_object().assigned_to.all().values_list(
            'id', flat=True)
        case_obj = form.save(commit=False)
        case_obj.contacts.clear()
        case_obj.save()
        all_members_list = []

        if self.request.POST.getlist('assigned_to', []):
            current_site = get_current_site(self.request)

            assigned_form_users = form.cleaned_data.get(
                'assigned_to').values_list('id', flat=True)
            all_members_list = list(
                set(list(assigned_form_users)) - set(list(assigned_to_ids)))

            if len(all_members_list):
                for assigned_to_user in all_members_list:
                    user = get_object_or_404(User, pk=assigned_to_user)
                    mail_subject = 'Assigned to case.'
                    message = render_to_string(
                        'assigned_to/cases_assigned.html', {
                            'user': user,
                            'domain': current_site.domain,
                            'protocol': self.request.scheme,
                            'case': case_obj
                        })
                    email = EmailMessage(mail_subject,
                                         message,
                                         to=[user.email])
                    email.content_subtype = "html"
                    email.send()

            case_obj.assigned_to.clear()
            case_obj.assigned_to.add(*self.request.POST.getlist('assigned_to'))
        else:
            case_obj.assigned_to.clear()

        if self.request.POST.getlist('contacts', []):
            case_obj.contacts.add(*self.request.POST.getlist('contacts'))

        if self.request.POST.get('from_account'):
            from_account = self.request.POST.get('from_account')
            return redirect("accounts:view_account", pk=from_account)
        if self.request.FILES.get('case_attachment'):
            attachment = Attachments()
            attachment.created_by = self.request.user
            attachment.file_name = self.request.FILES.get(
                'case_attachment').name
            attachment.case = case_obj
            attachment.attachment = self.request.FILES.get('case_attachment')
            attachment.save()

        if self.request.is_ajax():
            return JsonResponse({'error': False})
        return redirect("cases:list")
예제 #2
0
    def post(self, request, pk, **kwargs):
        params = (self.request.query_params
                  if len(self.request.data) == 0 else self.request.data)
        context = {}
        self.cases_obj = Case.objects.get(pk=pk)
        if self.cases_obj.company != request.company:
            return Response({
                "error":
                True,
                "errors":
                "User company doesnot match with header...."
            })

        comment_serializer = CommentSerializer(data=params)
        if self.request.user.role != "ADMIN" and not self.request.user.is_superuser:
            if not ((self.request.user == self.cases_obj.created_by) or
                    (self.request.user in self.cases_obj.assigned_to.all())):
                return Response(
                    {
                        "error":
                        True,
                        "errors":
                        "You don't have Permission to perform this action",
                    },
                    status=status.HTTP_401_UNAUTHORIZED,
                )
        if comment_serializer.is_valid():
            if params.get("comment"):
                comment_serializer.save(
                    case_id=self.cases_obj.id,
                    commented_by_id=self.request.user.id,
                )

        if self.request.FILES.get("case_attachment"):
            attachment = Attachments()
            attachment.created_by = self.request.user
            attachment.file_name = self.request.FILES.get(
                "case_attachment").name
            attachment.case = self.cases_obj
            attachment.attachment = self.request.FILES.get("case_attachment")
            attachment.save()

        attachments = Attachments.objects.filter(
            case=self.cases_obj).order_by("-id")
        comments = Comment.objects.filter(case=self.cases_obj).order_by("-id")

        context.update({
            "cases_obj":
            CaseSerializer(self.cases_obj).data,
            "attachments":
            AttachmentsSerializer(attachments, many=True).data,
            "comments":
            CommentSerializer(comments, many=True).data,
        })
        return Response(context)
예제 #3
0
    def put(self, request, pk, format=None):
        params = request.query_params if len(
            request.data) == 0 else request.data
        cases_object = self.get_object(pk=pk)
        if cases_object.org != request.org:
            return Response(
                {"error": True, "errors": "User company doesnot match with header...."},
                status=status.HTTP_403_FORBIDDEN,
            )
        if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin:
            if not (
                (self.request.profile == cases_object.created_by)
                or (self.request.profile in cases_object.assigned_to.all())
            ):
                return Response(
                    {
                        "error": True,
                        "errors": "You do not have Permission to perform this action",
                    },
                    status=status.HTTP_403_FORBIDDEN,
                )

        serializer = CaseCreateSerializer(
            cases_object,
            data=params,
            request_obj=request,
        )

        if serializer.is_valid():
            cases_object = serializer.save(
                closed_on=params.get("closed_on"), case_type=params.get("type_of_case")
            )
            previous_assigned_to_users = list(
                cases_object.assigned_to.all().values_list("id", flat=True)
            )
            cases_object.contacts.clear()
            if params.get("contacts"):
                contacts_list = json.loads(params.get("contacts"))
                contacts = Contact.objects.filter(
                    id__in=contacts_list, org=request.org)
                if contacts:
                    cases_object.contacts.add(*contacts)

            cases_object.teams.clear()
            if params.get("teams"):
                teams_list = json.loads(params.get("teams"))
                teams = Teams.objects.filter(
                    id__in=teams_list, org=request.org)
                if teams.exists():
                    cases_object.teams.add(*teams)

            cases_object.assigned_to.clear()
            if params.get("assigned_to"):
                assinged_to_list = json.loads(
                    params.get("assigned_to"))
                profiles = Profile.objects.filter(
                    id__in=assinged_to_list, org=request.org, is_active=True)
                if profiles:
                    cases_object.assigned_to.add(*profiles)

            if self.request.FILES.get("case_attachment"):
                attachment = Attachments()
                attachment.created_by = self.request.profile
                attachment.file_name = self.request.FILES.get(
                    "case_attachment").name
                attachment.case = cases_object
                attachment.attachment = self.request.FILES.get(
                    "case_attachment")
                attachment.save()

            assigned_to_list = list(
                cases_object.assigned_to.all().values_list("id", flat=True)
            )
            recipients = list(set(assigned_to_list) -
                              set(previous_assigned_to_users))
            send_email_to_assigned_user.delay(
                recipients,
                cases_object.id,
            )
            return Response(
                {"error": False, "message": "Case Updated Successfully"},
                status=status.HTTP_200_OK,
            )
        return Response(
            {"error": True, "errors": serializer.errors},
            status=status.HTTP_400_BAD_REQUEST,
        )
예제 #4
0
def update_case(request, pk):
    case_object = Case.objects.filter(pk=pk).first()
    accounts = Account.objects.filter(status="open")
    contacts = Contact.objects.all()
    if request.user.role != "ADMIN" and not request.user.is_superuser:
        accounts = Account.objects.filter(created_by=request.user)
        contacts = Contact.objects.filter(
            Q(assigned_to__in=[request.user]) | Q(created_by=request.user))
    users = []
    if request.user.role == 'ADMIN' or request.user.is_superuser:
        users = User.objects.filter(is_active=True).order_by('email')
    elif request.user.google.all():
        users = []
    else:
        users = User.objects.filter(role='ADMIN').order_by('email')
    kwargs_data = {
        "assigned_to": users,
        "account": accounts,
        "contacts": contacts
    }
    form = CaseForm(instance=case_object, **kwargs_data)

    if request.POST:
        form = CaseForm(request.POST,
                        request.FILES,
                        instance=case_object,
                        **kwargs_data)
        if form.is_valid():
            assigned_to_ids = case_object.assigned_to.all().values_list(
                'id', flat=True)
            case_obj = form.save(commit=False)
            case_obj.contacts.clear()
            case_obj.save()
            all_members_list = []

            if request.POST.getlist('assigned_to', []):
                current_site = get_current_site(request)

                assigned_form_users = form.cleaned_data.get(
                    'assigned_to').values_list('id', flat=True)
                all_members_list = list(
                    set(list(assigned_form_users)) -
                    set(list(assigned_to_ids)))
                recipients = all_members_list
                send_email_to_assigned_user.delay(recipients,
                                                  case_obj.id,
                                                  domain=current_site.domain,
                                                  protocol=request.scheme)
                # if all_members_list:
                #     for assigned_to_user in all_members_list:
                #         user = get_object_or_404(User, pk=assigned_to_user)
                #         mail_subject = 'Assigned to case.'
                #         message = render_to_string(
                #             'assigned_to/cases_assigned.html', {
                #                 'user': user,
                #                 'domain': current_site.domain,
                #                 'protocol': request.scheme,
                #                 'case': case_obj
                #             })
                #         email = EmailMessage(
                #             mail_subject, message, to=[user.email])
                #         email.content_subtype = "html"
                #         email.send()

                case_obj.assigned_to.clear()
                case_obj.assigned_to.add(*request.POST.getlist('assigned_to'))
            else:
                case_obj.assigned_to.clear()

            if request.POST.getlist('contacts', []):
                case_obj.contacts.add(*request.POST.getlist('contacts'))

            success_url = reverse("cases:list")
            if request.POST.get('from_account'):
                from_account = request.POST.get('from_account')
                success_url = reverse("accounts:view_account",
                                      kwargs={'pk': from_account})
            if request.FILES.get('case_attachment'):
                attachment = Attachments()
                attachment.created_by = request.user
                attachment.file_name = request.FILES.get(
                    'case_attachment').name
                attachment.case = case_obj
                attachment.attachment = request.FILES.get('case_attachment')
                attachment.save()

            return JsonResponse({'error': False, 'success_url': success_url})
        return JsonResponse({'error': True, 'errors': form.errors})
    context = {}
    context["case_obj"] = case_object
    user_assgn_list = [
        assgined_to.id
        for assgined_to in context["case_obj"].assigned_to.all()
    ]

    if request.user == case_object.created_by:
        user_assgn_list.append(request.user.id)
    if request.user.role != "ADMIN" and not request.user.is_superuser:
        if request.user.id not in user_assgn_list:
            raise PermissionDenied
    context["case_form"] = form
    context["accounts"] = accounts
    if request.GET.get('view_account'):
        context['account'] = get_object_or_404(
            Account, id=request.GET.get('view_account'))
    context["contacts"] = contacts
    context["users"] = kwargs_data['assigned_to']
    context["case_types"] = CASE_TYPE
    context["case_priority"] = PRIORITY_CHOICE
    context["case_status"] = STATUS_CHOICE
    context["assignedto_list"] = [
        int(i) for i in request.POST.getlist('assigned_to', []) if i
    ]
    context["contacts_list"] = [
        int(i) for i in request.POST.getlist('contacts', []) if i
    ]

    return render(request, "create_cases.html", context)