Skip to content

Commit

Permalink
Merge branch 'feature/1342-lepsza-lista-pracownikow' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
mpasternak committed Dec 9, 2023
2 parents e7f0c81 + 4cf135e commit befc745
Show file tree
Hide file tree
Showing 10 changed files with 794 additions and 416 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ live-docs:
sphinx-autobuild --port 8080 -D language=pl docs/ docs/_build

tests:
pytest -n 6 --splinter-headless --maxfail 50
pytest -n 6 --splinter-headless -m "not selenium" --maxfail 50
pytest -n 6 --splinter-headless -m "selenium" --maxfail 50

integration-start-from-match:
python src/manage.py pbn_integrator --enable-all --start-from-stage=15
Expand Down
9 changes: 5 additions & 4 deletions bin/get-database-from-remote.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ scp -r $1:$FN $FN
echo "Usuwam dump bazy danych ze zdalnego serwera"
ssh $1 -- rm -r $FN

echo "Zapisuję jako $SAVE_AS"
mv $FN $SAVE_AS
du -h "$SAVE_AS"

echo "Odtwarzam baze danych na lokalnym serwerze"
BASEDIR=$(dirname "$0")
$BASEDIR/odtworz.sh $FN
mv $FN $SAVE_AS
$BASEDIR/odtworz.sh $SAVE_AS

echo "Zapisano dump jako $SAVE_AS"
du -h "$SAVE_AS"
# rm -r $FN
1,048 changes: 658 additions & 390 deletions poetry.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ flake8 = "^4.0.1"
# Poprzedni bumpver: https://github.com/mpasternak/bumpver/archive/refs/tags/v202219.04-alpha.tar.gz#egg=bumpver-202219.04-alpha"
typing = ">=3.6,<3.7"
isort = ">=5.7.0"
pre-commit = "^2.18.1"
pre-commit = "^3.5.0"
django-debug-toolbar = "^3.2.4"
twine = "^4.0.0"
PyPDF2 = "^1.27.7"
Expand Down
17 changes: 10 additions & 7 deletions src/bpp/management/commands/import_lista_ministerialna_2023.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,16 @@ def handle(self, url, fn, rok, *args, **options):
for nazwa, zly_kod in labels.axes[1][9:]:
data = data.rename({zly_kod: nazwa}, axis=1, errors="raise")

data = data.rename(
{
"stosunki międzynaropdowe": "stosunki międzynarodowe",
},
axis=1,
errors="raise",
)
try:
data = data.rename(
{
"stosunki międzynaropdowe": "stosunki międzynarodowe",
},
axis=1,
errors="raise",
)
except KeyError:
pass

data = data.to_dict("record")

Expand Down
35 changes: 26 additions & 9 deletions src/bpp/models/jednostka.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,19 +214,36 @@ def autorzy_na_strone_jednostki(self):
w przypadku, gdy nikt nie ma 'Podstawowe miejsce pracy' ustawione na TRUE"""
return self.obecni_autorzy().filter(pokazuj=True)

#
# "Nowe (2022)" procedury wyświetlające aktualnych autorów (ta jednostka ma przypisanie
# gdzie podstawowe_miejsce_pracy=True) oraz poprzednich współpracowników
#

def aktualni_autorzy(self):
return (
"""
"Nowe (2022)" procedury do generowania aktualnych autorów (współpracowników)
na stronę jednostki.
Zasady:
* autor jest aktualnym współpracownikiem, jezeli ma przypisanie do danej jednostki
i określony atrybut podstawowe_miejsce_pracy = True _ORAZ_ data zakonczenia pracy
jest pusta lub w przyszłośc,
* autor jest aktualnym współpracownikiem, jeżeli w polu aktualna_jednostka
(pole obliczane na podstawie triggera bazodanowego) znajduje się ta sama
jednostka co {self}
"""
podstawowe_miejsce_pracy = set(
Autor_Jednostka.objects.filter(
podstawowe_miejsce_pracy=True, jednostka=self
Q(
Q(zakonczyl_prace=None)
| Q(zakonczyl_prace__gt=timezone.now().date()),
podstawowe_miejsce_pracy=True,
jednostka=self,
)
)
.values_list("autor")
.values_list("autor", flat=True)
.distinct()
)
aktualni_autorzy = set(
Autor.objects.filter(aktualna_jednostka=self).values_list("pk", flat=True)
)

return podstawowe_miejsce_pracy.union(aktualni_autorzy)

def pracownicy(self):
"""Autorzy, którzy tą jednostkę mają wpisani jako AKTUALNA -- czyli
Expand All @@ -241,7 +258,7 @@ def wspolpracowali(self):
return Autor.objects.filter(
pk__in=Autorzy.objects.filter(jednostka=self)
.exclude(autor_id__in=self.aktualni_autorzy())
.values_list("autor")
.values_list("autor", flat=True)
)

def kierownik(self):
Expand Down
2 changes: 2 additions & 0 deletions src/bpp/newsfragments/1342.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

lepsza lista aktualnych pracowników na stronie jednostki
90 changes: 88 additions & 2 deletions src/bpp/tests/test_models/test_struktura/test_jednostka.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
from datetime import date
from datetime import date, timedelta

import pytest
from model_bakery import baker

from django.utils import timezone

from bpp.models import Autor_Jednostka
from bpp.models.struktura import Jednostka, Jednostka_Wydzial, Wydzial


Expand Down Expand Up @@ -74,7 +77,6 @@ def test_jednostka_test_przypisania_dla_czasokresu():

@pytest.mark.django_db
def test_jednostka_get_default_ordering(uczelnia):

assert Jednostka.objects.get_default_ordering() == ("nazwa",)

uczelnia.sortuj_jednostki_alfabetycznie = True
Expand All @@ -89,3 +91,87 @@ def test_jednostka_get_default_ordering(uczelnia):
"kolejnosc",
"nazwa",
)


def test_Jednostka_aktualni_autorzy(jednostka, autor_jan_nowak, druga_jednostka):
assert len(jednostka.aktualni_autorzy()) == 0

aj = Autor_Jednostka.objects.create(jednostka=jednostka, autor=autor_jan_nowak)

assert len(jednostka.aktualni_autorzy()) == 1

daj = Autor_Jednostka.objects.create(
jednostka=druga_jednostka, autor=autor_jan_nowak, podstawowe_miejsce_pracy=True
)

assert len(jednostka.aktualni_autorzy()) == 0
assert len(druga_jednostka.aktualni_autorzy()) == 1

daj.zakonczyl_prace = timezone.now() - timedelta(days=5)
daj.save()

# Po zakończeniu pracy w domyślnym miejscu pracy 5 dni temu, aktualną jednostką
# pozostanie jednostka pierwsza
assert len(jednostka.aktualni_autorzy()) == 1
assert len(druga_jednostka.aktualni_autorzy()) == 0

aj.zakonczyl_prace = timezone.now() - timedelta(days=5)
aj.save()

# Po zakonczeniu pracy w pierwszej jednostce, aktualna jednostka będzie pusta
assert len(jednostka.aktualni_autorzy()) == 0
assert len(druga_jednostka.aktualni_autorzy()) == 0


def test_Jednostka_pracownicy(jednostka, autor_jan_nowak):
Autor_Jednostka.objects.create(jednostka=jednostka, autor=autor_jan_nowak)
assert jednostka.pracownicy().count() == 1


def test_Jednostka_wspolpracowali(autor_jan_nowak, druga_jednostka, wydawnictwo_ciagle):
daj = Autor_Jednostka.objects.create(
jednostka=druga_jednostka, autor=autor_jan_nowak, podstawowe_miejsce_pracy=True
)
daj.zakonczyl_prace = timezone.now() - timedelta(days=5)
daj.save()

autor_jan_nowak.refresh_from_db()
assert autor_jan_nowak.aktualna_jednostka_id is None

wydawnictwo_ciagle.dodaj_autora(autor_jan_nowak, druga_jednostka)

assert druga_jednostka.wspolpracowali().count() == 1


def test_Jednostka_wspolpracowali_alt(
jednostka,
uczelnia,
wydzial,
autor_jan_nowak,
autor_jan_kowalski,
wydawnictwo_ciagle,
):
Autor_Jednostka.objects.all().delete()

assert autor_jan_nowak.pk not in jednostka.aktualni_autorzy()

# Kowalski to obecny pracownik
Autor_Jednostka.objects.create(
autor=autor_jan_kowalski, jednostka=jednostka, podstawowe_miejsce_pracy=True
)

assert autor_jan_nowak.pk not in jednostka.aktualni_autorzy()

# Nowak to osoba ktora wczesniej miala publikacje
wydawnictwo_ciagle.dodaj_autora(autor=autor_jan_nowak, jednostka=jednostka)

# usuń powiązanie Nowaka z jednostką, wydawnictwo_ciagle.dodaj_autora przez
# DodajAutoraMixin automatycznie tworzy powiązanie (przy ustawieniu
# BPP_DODAWAJ_JEDNOSTKE_PRZY_ZAPISIE_PRACY
Autor_Jednostka.objects.filter(autor=autor_jan_nowak).delete()

assert autor_jan_kowalski in jednostka.pracownicy()
assert autor_jan_nowak not in jednostka.pracownicy()

assert autor_jan_nowak in jednostka.wspolpracowali()
assert autor_jan_kowalski not in jednostka.wspolpracowali()
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ def test_browse_jednostka_paginate_by(uczelnia: Uczelnia):


def test_browse_jednostka_sortowanie(jednostka, jednostka_podrzedna, uczelnia, client):

jednostka.nazwa = "Z jednostka"
jednostka.save()

Expand Down Expand Up @@ -130,6 +129,7 @@ def test_jednostka_aktualni_pracownicy(

# Nowak to osoba ktora wczesniej miala publikacje
wydawnictwo_ciagle.dodaj_autora(autor=autor_jan_nowak, jednostka=jednostka)
Autor_Jednostka.objects.filter(autor=autor_jan_nowak).delete()

url = reverse("bpp:browse_jednostka", args=(jednostka.slug,))
res = client.get(url)
Expand Down
2 changes: 1 addition & 1 deletion src/django_bpp/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -783,7 +783,7 @@ def can_login_as(request, target_user):
"ostatnio_zmieniony",
]

MAX_NO_AUTHORS_ON_BROWSE_JEDNOSTKA_PAGE = 200
MAX_NO_AUTHORS_ON_BROWSE_JEDNOSTKA_PAGE = 500
"""
Maksymalna ilość autorów wyświetlanych w danej grupie na podstronie przeglądania danych jednostki. W przypadku
przekroczenia tej liczby, dana podgrupa autorów ("aktualni pracownicy","współpracowali kiedyś" itp) nie zostanie
Expand Down

0 comments on commit befc745

Please sign in to comment.