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

iplweb / bpp / 9ca9114a-93fa-4251-97c0-209b41c87924

20 Aug 2025 09:25PM UTC coverage: 46.283% (+1.3%) from 44.985%
9ca9114a-93fa-4251-97c0-209b41c87924

push

circleci

mpasternak
Merge branch 'release/v202508.1194'

1 of 1 new or added line in 1 file covered. (100.0%)

850 existing lines in 53 files now uncovered.

17649 of 38133 relevant lines covered (46.28%)

1.18 hits per line

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

35.14
src/bpp/admin/helpers/pbn_api/gui.py
1
from django.urls import reverse
3✔
2

3
from pbn_api.exceptions import (
3✔
4
    AlreadyEnqueuedError,
5
    BrakZdefiniowanegoObiektuUczelniaWSystemieError,
6
    CharakterFormalnyNieobslugiwanyError,
7
)
8
from pbn_api.models import PBN_Export_Queue
3✔
9
from pbn_api.tasks import task_sprobuj_wyslac_do_pbn
3✔
10

11
from django.contrib import messages
3✔
12

13
from bpp.admin.helpers import link_do_obiektu
3✔
14
from bpp.admin.helpers.pbn_api.common import (
3✔
15
    sprawdz_czy_ustawiono_wysylke_tego_charakteru_formalnego,
16
    sprawdz_wysylke_do_pbn_w_parametrach_uczelni,
17
    sprobuj_wyslac_do_pbn,
18
)
19
from bpp.const import PBN_MAX_ROK, PBN_MIN_ROK
3✔
20
from bpp.models.sloty.core import ISlot
3✔
21
from bpp.models.sloty.exceptions import CannotAdapt
3✔
22

23

24
def sprobuj_policzyc_sloty(request, obj):
3✔
25
    if obj.rok >= PBN_MIN_ROK and obj.rok <= PBN_MAX_ROK:
1✔
26
        try:
1✔
27
            ISlot(obj)
1✔
28
            messages.success(
×
29
                request,
30
                'Punkty dla dyscyplin dla "%s" będą mogły być obliczone.'
31
                % link_do_obiektu(obj),
32
            )
33
        except CannotAdapt as e:
1✔
34
            messages.error(
1✔
35
                request,
36
                'Nie można obliczyć punktów dla dyscyplin dla "%s": %s'
37
                % (link_do_obiektu(obj), e),
38
            )
39
    else:
UNCOV
40
        messages.warning(
×
41
            request,
42
            'Punkty dla dyscyplin dla "%s" nie będą liczone - rok poza zakresem (%i)'
43
            % (link_do_obiektu(obj), obj.rok),
44
        )
45

46

47
def sprawdz_wysylke_do_pbn_w_parametrach_uczelni_gui(request, obj):
3✔
48
    from bpp.models.uczelnia import Uczelnia
×
49

50
    uczelnia = Uczelnia.objects.get_for_request(request)
×
51
    try:
×
52
        res = sprawdz_wysylke_do_pbn_w_parametrach_uczelni(uczelnia)
×
53
    except BrakZdefiniowanegoObiektuUczelniaWSystemieError:
×
54
        messages.info(
×
55
            request,
56
            'Rekord "%s" nie zostanie wyeksportowany do PBN, ponieważ w systemie brakuje obiektu "Uczelnia", a'
57
            " co za tym idzie, jakchkolwiek ustawień" % link_do_obiektu(obj),
58
        )
59
        return
×
60

61
    return res
×
62

63

64
def sprawdz_czy_ustawiono_wysylke_tego_charakteru_formalnego_gui(request, obj):
3✔
65
    try:
×
66
        sprawdz_czy_ustawiono_wysylke_tego_charakteru_formalnego(obj.charakter_formalny)
×
67
    except CharakterFormalnyNieobslugiwanyError:
×
68
        messages.info(
×
69
            request,
70
            'Rekord "%s" nie będzie eksportowany do PBN zgodnie z ustawieniem dla charakteru formalnego.'
71
            % link_do_obiektu(obj),
72
        )
73
        return False
×
74
    return True
×
75

76

77
def sprobuj_utworzyc_zlecenie_eksportu_do_PBN_gui(request, obj):
3✔
78
    if not sprawdz_czy_ustawiono_wysylke_tego_charakteru_formalnego_gui(request, obj):
×
79
        return
×
80

81
    try:
×
82
        res = sprawdz_wysylke_do_pbn_w_parametrach_uczelni_gui(request, obj)
×
83
    except BrakZdefiniowanegoObiektuUczelniaWSystemieError:
×
84
        messages.error("Brak zdefiniowanego w systemie obiektu Uczelnia.")
×
85

86
    if res is False:
×
87
        messages.error("Wysyłka do PBN nie skonfigurowana w obiektu Uczelnia.")
×
88

89
    try:
×
90
        ret = PBN_Export_Queue.objects.sprobuj_utowrzyc_wpis(request.user, obj)
×
91
    except AlreadyEnqueuedError:
×
92
        messages.warning(
×
93
            request, f"Rekord {obj} jest już w kolejce do eksportu do PBN."
94
        )
95
        return
×
96

97
    link_do_kolejki = reverse("admin:pbn_api_pbn_export_queue_change", args=(ret.pk,))
×
98

99
    messages.info(
×
100
        request,
101
        f"Utworzono zlecenie wysyłki rekordu {obj} w tle do PBN. <a href={link_do_kolejki}>"
102
        f"Kliknij tutaj, aby śledzić stan.</a>",
103
    )
104

105
    task_sprobuj_wyslac_do_pbn.delay_on_commit(ret.pk)
×
106

107

108
class MessagesNotificator:
3✔
109
    def __init__(self, request):
3✔
110
        self.request = request
×
111

112
    def info(self, msg):
3✔
113
        messages.info(self.request, msg)
×
114

115
    def warning(self, msg):
3✔
116
        messages.warning(self.request, msg)
×
117

118
    def error(self, msg):
3✔
119
        messages.error(self.request, msg)
×
120

121
    def success(self, msg):
3✔
122
        messages.success(self.request, msg)
×
123

124

125
def sprobuj_wyslac_do_pbn_gui(request, obj, force_upload=False, pbn_client=None):
3✔
126
    if not sprawdz_czy_ustawiono_wysylke_tego_charakteru_formalnego_gui(request, obj):
×
127
        return
×
128

129
    uczelnia = sprawdz_wysylke_do_pbn_w_parametrach_uczelni_gui(request, obj)
×
130
    if uczelnia is None:
×
131
        return
×
132

133
    if uczelnia is False:
×
134
        messages.error(request, "Wysyłka do PBN nie skonfigurowana w obiektu Uczelnia.")
×
135
        return
×
136

137
    if pbn_client is None:
×
138
        pbn_client = uczelnia.pbn_client(request.user.pbn_token)
×
139

140
    sprobuj_wyslac_do_pbn(
×
141
        obj=obj,
142
        uczelnia=uczelnia,
143
        force_upload=force_upload,
144
        pbn_client=pbn_client,
145
        notificator=MessagesNotificator(request),
146
    )
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