• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iplweb / bpp / 80e3a408-6e45-4572-8561-66829e6d8659

29 Aug 2025 07:31AM UTC coverage: 47.493%. Remained the same
80e3a408-6e45-4572-8561-66829e6d8659

push

circleci

mpasternak
Fix GitHub, maybe

19323 of 40686 relevant lines covered (47.49%)

1.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

55.36
src/pbn_api/admin/pbn_export_queue.py
1
from django import forms
4✔
2
from django.http import HttpResponseRedirect
4✔
3
from django.urls import reverse
4✔
4

5
from pbn_api.models.queue import PBN_Export_Queue
4✔
6
from pbn_api.tasks import task_sprobuj_wyslac_do_pbn
4✔
7

8
from django.contrib import admin, messages
4✔
9

10
from django.utils.safestring import mark_safe
4✔
11

12

13
class RenderHTMLWidget(forms.Textarea):
4✔
14
    def render(self, name, value, renderer, attrs=None):
4✔
15
        return mark_safe((value or "").replace("\n", "<br>"))
×
16

17

18
@admin.register(PBN_Export_Queue)
4✔
19
class PBN_Export_QueueAdmin(admin.ModelAdmin):
4✔
20
    list_per_page = 10
4✔
21
    list_display = [
4✔
22
        "rekord_do_wysylki",
23
        "object_id",
24
        "zamowil",
25
        "wysylke_podjeto",
26
        "wysylke_zakonczono",
27
        "ilosc_prob",
28
        "zakonczono_pomyslnie",
29
        "retry_after_user_authorised",
30
    ]
31

32
    search_fields = ["zamowil__username", "zamowil__email"]
4✔
33

34
    list_filter = ["zamowil", "zakonczono_pomyslnie", "retry_after_user_authorised"]
4✔
35

36
    date_hierarchy = "zamowiono"
4✔
37

38
    readonly_fields = [
4✔
39
        "object_id",
40
        "content_type",
41
        "zamowiono",
42
        "zamowil",
43
        "wysylke_podjeto",
44
        "wysylke_zakonczono",
45
        "ilosc_prob",
46
        "zakonczono_pomyslnie",
47
        "retry_after_user_authorised",
48
    ]
49

50
    def has_delete_permission(self, request, *args, **kw):
4✔
51
        if request.user.is_superuser:
3✔
52
            return True
3✔
53
        if "obj" in kw:
×
54
            if kw["obj"].zamowil == request.user:
×
55
                return True
×
56
        return False
×
57

58
    from django.db import models
4✔
59

60
    formfield_overrides = {models.TextField: {"widget": RenderHTMLWidget}}
4✔
61

62
    def _resend_single_item(self, obj, user, message_suffix=""):
4✔
63
        """Common logic for resending a single PBN export queue item"""
64
        obj.refresh_from_db()
×
65
        obj.wysylke_zakonczono = None
×
66
        obj.zakonczono_pomyslnie = None
×
67
        obj.retry_after_user_authorised = None
×
68
        obj.dopisz_komunikat(
×
69
            f"Ponownie wysłano przez użytkownika: {user}{message_suffix}"
70
        )
71
        obj.save()
×
72
        task_sprobuj_wyslac_do_pbn.delay(obj.pk)
×
73

74
    def resend_to_pbn_action(self, request, queryset):
4✔
75
        count = 0
×
76
        for obj in queryset:
×
77
            self._resend_single_item(obj, request.user, " (akcja masowa)")
×
78
            count += 1
×
79

80
        self.message_user(request, f"Ponowiono wysyłkę do PBN dla {count} elementów")
×
81

82
    resend_to_pbn_action.short_description = "Wyślij ponownie"
4✔
83

84
    actions = [resend_to_pbn_action]
4✔
85

86
    def save_form(self, request, form, change):
4✔
87
        return form.save(commit=False)
×
88

89
    def response_change(self, request, obj):
4✔
90
        if "_resend_to_pbn" in request.POST:
×
91
            self._resend_single_item(obj, request.user)
×
92
            self.message_user(request, f"Ponowiono wysyłkę do PBN: {obj}")
×
93
            return HttpResponseRedirect(
×
94
                reverse(
95
                    "admin:{}_{}_change".format(
96
                        obj._meta.app_label, obj._meta.model_name
97
                    ),
98
                    args=[obj.pk],
99
                )
100
            )
101
        return super().response_change(request, obj)
×
102

103
    def has_add_permission(self, request):
4✔
104
        return False
3✔
105

106
    def save_model(self, request, obj, form, change):
4✔
107
        # Uczyń FAKTYCZNIE readonly :-)
108
        messages.error(
×
109
            request,
110
            "Obiekt NIE został zapisany -- nie można edytować tej części serwisu.",
111
        )
112
        return
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc