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

iplweb / bpp / 3e1b55a1-af23-4020-b9e5-0d59a4e64a7f

11 May 2025 08:26PM UTC coverage: 46.882% (+4.6%) from 42.254%
3e1b55a1-af23-4020-b9e5-0d59a4e64a7f

push

circleci

mpasternak
Merge branch 'release/v202505.1179'

81 of 116 new or added lines in 15 files covered. (69.83%)

1746 existing lines in 100 files now uncovered.

17354 of 37016 relevant lines covered (46.88%)

1.21 hits per line

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

13.04
src/bpp/models/cache/utils.py
1
from collections import defaultdict
3✔
2
from decimal import Decimal
3✔
3

4
from django.db.models import Sum
3✔
5

6
from ewaluacja2021.models import (
3✔
7
    DyscyplinaNieRaportowana_2022_2025,
8
    IloscUdzialowDlaAutora_2022_2025,
9
    IloscUdzialowDlaAutoraZaRok,
10
    LiczbaNDlaUczelni_2022_2025,
11
)
12
from .liczba_n import Cache_Liczba_N_Last_Updated
3✔
13

14

15
# @transaction.atomic
16
def oblicz_liczby_n_dla_ewaluacji_2022_2025(uczelnia, rok_min=2022, rok_max=2025):
3✔
17

18
    from bpp.models.dyscyplina_naukowa import Autor_Dyscyplina
×
19

20
    autor_rok_dyscyplina_na_udzial = defaultdict(lambda: defaultdict(dict))
×
21
    uczelnia_dyscyplina_udzial = defaultdict(list)
×
22

23
    for ad in Autor_Dyscyplina.objects.filter(rok__gte=rok_min, rok__lte=rok_max):
×
24
        for dyscyplina, slot in ad.policz_udzialy():
×
25
            autor_rok_dyscyplina_na_udzial[ad.autor_id][dyscyplina.pk][ad.rok] = (
×
26
                slot,
27
                ad.rodzaj_autora,
28
            )
29

30
    for autor_id in autor_rok_dyscyplina_na_udzial:
×
31
        for dyscyplina_id in autor_rok_dyscyplina_na_udzial[autor_id]:
×
32
            latami = autor_rok_dyscyplina_na_udzial[autor_id][dyscyplina_id]
×
33

34
            # Wrzuć do bazy ilość udziałów za kazdy rok
35

NEW
36
            for rok, (slot, rodzaj_autora) in latami.items():
×
NEW
37
                IloscUdzialowDlaAutoraZaRok.objects.update_or_create(
×
38
                    autor_id=autor_id,
39
                    rok=rok,
40
                    dyscyplina_naukowa_id=dyscyplina_id,
41
                    defaults=dict(
42
                        ilosc_udzialow=slot,
43
                        ilosc_udzialow_monografie=slot / Decimal("2.0"),
44
                    ),
45
                )
46

UNCOV
47
            suma = sum(slot for slot, rodzaj_autora in latami.values())
×
NEW
48
            suma_monografie = suma / Decimal("2.0")
×
49

50
            # Jeżeli suma udziałów za 4 lata jest mniejsza jak 1 i jest włączona odpowiednia flaga
51
            # to zwiększ do 1 slota:
NEW
52
            if uczelnia.przydzielaj_1_slot_gdy_udzial_mniejszy:
×
NEW
53
                suma = max(1, suma)
×
NEW
54
                suma_monografie = max(1, suma_monografie)
×
55

NEW
56
            suma = min(4, suma)
×
NEW
57
            suma_monografie = min(4, suma)
×
58

59
            IloscUdzialowDlaAutora_2022_2025.objects.update_or_create(
×
60
                autor_id=autor_id,
61
                dyscyplina_naukowa_id=dyscyplina_id,
62
                defaults=dict(
63
                    ilosc_udzialow=suma, ilosc_udzialow_monografie=suma_monografie
64
                ),
65
            )
66

NEW
67
            suma_dla_uczelni = 0
×
NEW
68
            if rodzaj_autora == Autor_Dyscyplina.RODZAJE_AUTORA.N:
×
NEW
69
                suma_dla_uczelni = suma
×
70

71
            # Zawsze na 4 lata:
NEW
72
            ilosc = Decimal(4)  # len(latami.values())
×
UNCOV
73
            uczelnia_dyscyplina_udzial[dyscyplina_id].append(suma_dla_uczelni / ilosc)
×
74

75
    LiczbaNDlaUczelni_2022_2025.objects.filter(uczelnia=uczelnia).delete()
×
76

77
    for dyscyplina_id, wartosci in uczelnia_dyscyplina_udzial.items():
×
78
        suma_srednich = sum(wartosci)
×
79

80
        LiczbaNDlaUczelni_2022_2025.objects.create(
×
81
            uczelnia_id=uczelnia.pk,
82
            dyscyplina_naukowa_id=dyscyplina_id,
83
            liczba_n=suma_srednich,
84
        )
85

86
    # Policz dyscypliny za ostatni rok ewaluacji które mają < 12 slotów:
NEW
87
    nie_raportowane = (
×
88
        IloscUdzialowDlaAutoraZaRok.objects.filter(rok=2025)
89
        .values("dyscyplina_naukowa")
90
        .annotate(Sum("ilosc_udzialow"))
91
        .filter(ilosc_udzialow__sum__lt=12)
92
    )
93

NEW
94
    DyscyplinaNieRaportowana_2022_2025.objects.filter(uczelnia=uczelnia).delete()
×
95

96
    # Dolicz +1 slot dla każdej nie-raportowanej dyscypliny
97
    for nie_raportowana in nie_raportowane:
×
NEW
98
        DyscyplinaNieRaportowana_2022_2025.objects.get_or_create(
×
99
            uczelnia=uczelnia,
100
            dyscyplina_naukowa_id=nie_raportowana["dyscyplina_naukowa"],
101
        )
102

UNCOV
103
        for elem in IloscUdzialowDlaAutora_2022_2025.objects.filter(
×
104
            dyscyplina_naukowa_id=nie_raportowana["dyscyplina_naukowa"]
105
        ):
106
            elem.ilosc_udzialow = min(4, elem.ilosc_udzialow + 1)
×
107
            elem.ilosc_udzialow_monografie = elem.ilosc_udzialow / Decimal("2.0")
×
108
            elem.save(update_fields=["ilosc_udzialow", "ilosc_udzialow_monografie"])
×
109

110
    # Usuń liczby N za nie-raportowane dyscypliny z bazy
NEW
111
    for dyscyplina_nie_raportowana in DyscyplinaNieRaportowana_2022_2025.objects.filter(
×
112
        uczelnia=uczelnia
113
    ):
NEW
114
        IloscUdzialowDlaAutora_2022_2025.objects.filter(
×
115
            dyscyplina_naukowa=dyscyplina_nie_raportowana.dyscyplina_naukowa
116
        ).delete()
117

NEW
118
        IloscUdzialowDlaAutoraZaRok.objects.filter(
×
119
            dyscyplina_naukowa=dyscyplina_nie_raportowana.dyscyplina_naukowa
120
        ).delete()
121

122
    # Zaznacz, że policzone
123
    Cache_Liczba_N_Last_Updated.objects.update_or_create(
×
124
        pk=1, defaults=dict(wymaga_przeliczenia=False)
125
    )
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