Exemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        try:
            self.queryset = self.model.filter(id__in=args[0].getlist("ticket_checked"))
        except KeyError:
            self.queryset = self.model.none()

        self.base_fields["actions"].choices = self.get_actions()
        self.base_fields["actions"].choices.insert(0, ("", ""))

        filter_form_for_user(self, kwargs.pop("user", None))
        super(TicketActionsForm, self).__init__(*args, **kwargs)
Exemplo n.º 2
0
    def __init__(self, *args, **kwargs):
        self.base_fields["state"].choices = State.objects.values_list("pk", "label")
        self.base_fields["category"].choices = Category.objects.values_list("pk", "label")
        self.base_fields["project"].choices = Project.objects.values_list("pk", "label")
        self.base_fields["priority"].choices = Priority.objects.values_list("pk", "label")

        filter_form_for_user(self, kwargs.pop("user", None))
        super(SearchTicketViewForm, self).__init__(*args, **kwargs)

        # On retire les choix vide, provenant de SearchTicketForm
        del self.base_fields["assigned_to"].choices[0]
        del self.base_fields["opened_by"].choices[0]
Exemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        self.base_fields["not_state"].choices = State.objects.values_list("pk", "label")
        self.base_fields["not_category"].choices = Category.objects.values_list("pk", "label")
        self.base_fields["not_project"].choices = Project.objects.values_list("pk", "label")
        self.base_fields["not_priority"].choices = Priority.objects.values_list("pk", "label")
        self.base_fields["not_assigned_to"].choices = User.objects.values_list("pk", "username")
        filter_form_for_user(self, kwargs.pop("user", None), keywords=("not_client", "not_assigned_to"))

        super(SearchTicketViewFormInverted, self).__init__(*args, **kwargs)
        # On retire les choix vide, provenant de SearchTicketForm
        del self.base_fields["not_assigned_to"].choices[0]
        del self.base_fields["not_client"].choices[0]
Exemplo n.º 4
0
 def __init__(self, *args, **kwargs):
     filter_form_for_user(self, kwargs.pop("user", None))
     self.base_fields["opened_by"].choices = self.base_fields["assigned_to"].choices
     super(SearchTicketForm, self).__init__(*args, **kwargs)
Exemplo n.º 5
0
 def __init__(self, *args, **kwargs):
     filter_form_for_user(self, kwargs.pop("user", None))
     super(ChildForm, self).__init__(*args, **kwargs)
Exemplo n.º 6
0
 def __init__(self, *args, **kwargs):
     filter_form_for_user(self, kwargs.pop("user", None))
     super(SearchPackageForm, self).__init__(*args, **kwargs)
Exemplo n.º 7
0
def modify(request, ticket_id):
    def exit_action():
        saveaction = request.POST.get("savebutton", "save")
        if saveaction == "save":
            return redirect("ticket_modify", ticket_id=ticket_id)
        elif saveaction == "new":
            return redirect("ticket_partial_new")
        elif saveaction == "return":
            backlinks = request.backlinks
            precedent = backlinks[-1:]
            if not precedent:
                return redirect("ticket_modify", ticket_id=ticket_id)
            else:
                return precedent[0].redirect(request)
        else:
            raise PermissionDenied("Hacking attempt!")

    qs = Ticket.objects.all().filter_ticket_by_user(request.user, no_client=True)
    ticket = get_object_or_404(qs, pk=ticket_id)

    # Si c'est un fils rediriger vers le pêre au bon endroit
    # (C'est utile uniquement pour le chargement de la page)
    if ticket.parent:
        return http.HttpResponseRedirect("/ticket/modify/%d/#child%s" % (ticket.parent_id, ticket_id))

    if not ticket.text and ticket.title == INVALID_TITLE:
        ticket.title = None

    # Si le ticket n'est pas rattaché à aucun client, on l'affecte au client de l'utilisateur
    if not ticket.client:
        ticket.client = request.user.my_userprofile.client

    if request.user.has_perm("ticket.add_ticket_full"):
        template_name = "ticket/modify.html"
        TicketForm = NewTicketForm
        child = ticket.child.order_by('date_open')
        TicketChildForm = ChildForm
    else:
        template_name = "ticket/modify_small.html"
        TicketForm = NewTicketSmallForm
        child = ticket.child.filter(diffusion=True).order_by('date_open')
        TicketChildForm = ChildFormSmall

    ChildFormSet = modelformset_factory(Ticket,
                                        form=TicketChildForm,
                                        extra=0,
                                        can_delete=True)

    if request.method == "POST":
        if (request.POST.get("_validate-ticket", None) and
        request.user.has_perm("ticket.can_validate_ticket") and
        ticket.validated_by is None):
            ticket.validated_by = request.user
            ticket.save()
        # Instanciating the TicketForm changes ticket... So we need to store it
        # Before in order to do permission checking.
        ticket_old_assigned_to_pk = ticket.assigned_to and ticket.assigned_to.pk or None

        form = TicketForm(request.POST,
                          request.FILES,
                          instance=ticket,
                          user=request.user)

        # Il faut valider les fils en premier pour ne pas se faire jetter si on ferme tout
        child_formset = ChildFormSet(request.POST, queryset=child)
        deleted_forms = child_formset.deleted_forms if hasattr(child_formset, 'deleted_forms') else []

        # Save existing childs
        for f in child_formset.initial_forms:
            if not f in deleted_forms and f.is_valid():
                f.save()
                post_comment(f, request)

        for f in deleted_forms:
            f.instance.delete()

        # Add new childs
        if request.user.has_perm('ticket.can_add_child'):
            for f in child_formset.extra_forms:
                if f.is_valid():
                    new_child = copy_model_instance(ticket)

                    # Valeurs à écraser
                    for a in f.Meta.fields:
                        setattr(new_child, a, f.cleaned_data.get(a))

                    new_child.opened_by = request.user
                    new_child.date_open = datetime.datetime.now()
                    new_child.parent = ticket
                    new_child.save()
                    f.instance = new_child
                    post_comment(f, request)

        if form.is_valid():
            # Si l'utilisateur peut assigner ce ticket à l'utilisateur passé en POST
            if not request.user.is_superuser and \
                    form.cleaned_data["assigned_to"] and \
                    ticket_old_assigned_to_pk != form.cleaned_data["assigned_to"].pk and \
                    form.cleaned_data["assigned_to"] not in ClaritickUser.objects.get(pk=request.user.pk).get_child_users():
                raise PermissionDenied()

            form.save()
            post_comment(form, request)
            update_ticket_last_seen(request, ticket.pk)

            # Alarme automatique
            if (ticket.priority
            and ticket.priority.alarm
            and not ticket.ticketalarm_set.all()):
                ticket.ticketalarm_set.create(reason=ticket.priority.alarm,
                                              user_open=request.user)

            # Appel du client
            if form.cleaned_data['appel']:
                ticket.ticketappel_set.create(user=request.user)

            # Rappels de ticket
            rappel = None

            if form.cleaned_data['calendar_rappel']:
                ident = ticket.pk
                current_user = User.objects.get(pk=request.user.id)
                # Select or create existing rappel
                try:
                    rappel = Rappel.objects.filter(ticket=ident) \
                        .filter(user=current_user).get()
                except Rappel.DoesNotExist:
                    rappel = Rappel()

                rappel.ticket = ticket
                rappel.date_email = None
                rappel.date = form.cleaned_data['calendar_rappel']
                rappel.user = current_user
                rappel.save()

            if form.cleaned_data['delete_rappel'] and rappel:
                rappel.delete()

            file = form.cleaned_data["file"]
            if file:
                ticket_file = TicketFile(ticket=ticket,
                                         filename=file.name,
                                         content_type=file.content_type)
                if file.multiple_chunks():
                    dataList = []
                    for chunk in file.chunks():
                        dataList.append(chunk)
                    data = "".join(dataList)
                else:
                    data = file.read()
                ticket_file.data = data
                ticket_file.save()

            # BonDeCommande
            if form.cleaned_data["bondecommande"]:
                bdc = form.cleaned_data["bondecommande"]
                if bdc.ticket:
                    raise PermissionDenied()
                if ticket.client and bdc.client != ticket.client:
                    raise PermissionDenied("Etes vous sur de vouloir faire ça ? Ce n'est pas le meme client.")
                bdc.ticket = ticket
                bdc.save()
            return exit_action()
    else:
        try:
            rappel = Rappel.objects.get(ticket=ticket, user=request.user)
            rappel_date = rappel.date
        except Rappel.DoesNotExist:
            rappel_date = ""

        form = TicketForm(instance=ticket,
                          user=request.user,
                          initial={"calendar_rappel": rappel_date})
        child_formset = ChildFormSet(queryset=child)
        for f in child_formset.forms:
            filter_form_for_user(f, request.user)

    comments = django.contrib.comments.get_model().objects.filter(content_type__model="ticket").\
        filter(models.Q(object_pk__in=[str(c.pk) for c in child]) | models.Q(object_pk=str(ticket.pk)))
    ticket.comment = []
    for c in comments:
        if c.object_pk == str(ticket.pk):
            ticket.comment.append(c)
        else:
            for f in child_formset.forms:
                if not hasattr(f.instance, 'comment'):
                    f.instance.comment = []
                if c.object_pk == str(f.instance.pk):
                    f.instance.comment.append(c)

    update_ticket_last_seen(request, ticket.pk)

    # List of rappel other user about the same ticket
    list_rappel_other_user = Rappel.objects.all() \
        .select_related('user__username') \
        .filter(ticket=ticket.pk) \
        .exclude(user=request.user)

    # Bon de commande
    bondecommades = BonDeCommande.objects.all().filter_by_user(request.user).filter(ticket=ticket.pk)

    return render_to_response(template_name,
        {
            "form": form,
            "child_formset": child_formset,
            "bondecommandes": bondecommades,
            "list_rappel_other_user": list_rappel_other_user,
        },
        context_instance=RequestContext(request))