Skip to content

Commit

Permalink
Ostrzegaj przed zdublowanym PBN UID
Browse files Browse the repository at this point in the history
  • Loading branch information
mpasternak committed Jul 5, 2022
1 parent e6321aa commit fc49e44
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 21 deletions.
3 changes: 2 additions & 1 deletion HISTORY.rst
Expand Up @@ -31,7 +31,8 @@ dev
kadrowych (#1229),
* polecenie przebudowania pola 'aktualna jednostka' dla powiązań autor+jednostka (b/n),
* możliwość wpisywania i eksportowania do PBN danych o kosztach publikacji (#1235),
* możliwość wyszukiwania publikacji w multiwyszukiwarce po aktualnej jednostce autora (#1236)
* możliwość wyszukiwania publikacji w multiwyszukiwarce po aktualnej jednostce autora (#1236),
* ostrzegaj przed zdublowanym PBN UID przy zapisie prac w module redagowania (#1152),

202205.1086
-----------
Expand Down
15 changes: 12 additions & 3 deletions src/bpp/admin/helpers.py
Expand Up @@ -24,6 +24,7 @@
from django.utils.html import format_html
from django.utils.safestring import mark_safe

from bpp import const
from bpp.const import PBN_MAX_ROK, PBN_MIN_ROK
from bpp.models import Status_Korekty
from bpp.models.sloty.core import ISlot
Expand Down Expand Up @@ -632,7 +633,13 @@ def response_post_save_change(self, request, obj):
def sprawdz_duplikaty_www_doi(request, obj):
from bpp.models.cache import Rekord

for field in ["www", "public_www", "doi"]:
IEXACT = "__iexact"
for field, operator, label in [
("www", IEXACT, const.WWW_FIELD_LABEL),
("public_www", IEXACT, const.PUBLIC_WWW_FIELD_LABEL),
("doi", IEXACT, const.DOI_FIELD_LABEL),
("pbn_uid_id", "", const.PBN_UID_FIELD_LABEL),
]:
if not hasattr(obj, field):
continue

Expand All @@ -642,12 +649,14 @@ def sprawdz_duplikaty_www_doi(request, obj):

rekord_pk = (ContentType.objects.get_for_model(obj).pk, obj.pk)

query = Q(**{field + "__iexact": v})
query = Q(**{field + operator: v})

if field == "www":
query |= Q(public_www__iexact=v)
elif field == "public_www":
query |= Q(www__iexact=v)

if Rekord.objects.filter(query).exclude(pk=rekord_pk).exists():
messages.warning(request, f'Istnieją rekordy z identycznym polem "{field}"')
messages.warning(
request, const.ZDUBLOWANE_POLE_KOMUNIKAT.format(label=label)
)
11 changes: 11 additions & 0 deletions src/bpp/const.py
Expand Up @@ -95,3 +95,14 @@ class TRYB_DOSTEPU(Enum):


KWARTYLE = [(None, "brak"), (1, "Q1"), (2, "Q2"), (3, "Q3"), (4, "Q4")]

WWW_FIELD_LABEL = "Adres WWW (płatny dostęp)"
PUBLIC_WWW_FIELD_LABEL = "Adres WWW (wolny dostęp)"
DOI_FIELD_LABEL = "DOI"
PBN_UID_FIELD_LABEL = "Odpowiednik w PBN"

ZDUBLOWANE_POLE_KOMUNIKAT = (
'Uwaga, uwaga. W bazie danych istnieją inne rekordy z identycznym polem "{label}". '
"Technicznie nie jest to błąd, ale mogą pojawić się problemy przy synchronizacji danych "
"z systemami zewnętrznymi, np z bazą danych PBN."
)
8 changes: 4 additions & 4 deletions src/bpp/models/abstract.py
Expand Up @@ -219,7 +219,7 @@ class ModelZWWW(models.Model):
"""Model zawierający adres strony WWW"""

www = models.URLField(
"Adres WWW (płatny dostęp)",
const.WWW_FIELD_LABEL,
max_length=1024,
blank=True,
null=True,
Expand All @@ -232,7 +232,7 @@ class ModelZWWW(models.Model):
)

public_www = models.URLField(
"Adres WWW (wolny dostęp)",
const.PUBLIC_WWW_FIELD_LABEL,
max_length=2048,
blank=True,
null=True,
Expand Down Expand Up @@ -272,7 +272,7 @@ def nie_zawiera_http_https(v):


class ModelZDOI(models.Model):
doi = DOIField("DOI", null=True, blank=True, db_index=True)
doi = DOIField(const.DOI_FIELD_LABEL, null=True, blank=True, db_index=True)

class Meta:
abstract = True
Expand Down Expand Up @@ -808,7 +808,7 @@ def link_do_pbn(self):
class ModelZPBN_UID(LinkDoPBNMixin, models.Model):
pbn_uid = models.ForeignKey(
"pbn_api.Publication",
verbose_name="Odpowiednik w PBN",
verbose_name=const.PBN_UID_FIELD_LABEL,
null=True,
blank=True,
on_delete=models.SET_NULL,
Expand Down
19 changes: 16 additions & 3 deletions src/bpp/tests/test_admin/test_wydawnictwo_ciagle.py
Expand Up @@ -111,26 +111,39 @@ def test_wydawnictwo_ciagle_admin_zapisz_i_wyslij_do_pbn_change_nie(
Uczelnia.pbn_client = orig_pbn_client


TEST_PBN_ID = 50000


@pytest.mark.parametrize(
"fld,value",
[
("pbn_uid", TEST_PBN_ID),
("doi", "10.10/123123"),
("www", "https://foobar.pl"),
("public_www", "https://foobar.pl"),
],
)
def test_Wydawnictwo_Ciagle_Admin_sprawdz_duplikaty_www_doi(
def test_Wydawnictwo_Ciagle_Admin_sprawdz_duplikaty_www_doi_pbn(
admin_app, zrodlo, fld, value
):
if fld == "pbn_uid":
value = mommy.make(Publication, pk=TEST_PBN_ID)

mommy.make(Wydawnictwo_Ciagle, **{fld: value})
w2 = mommy.make(Wydawnictwo_Ciagle, zrodlo=zrodlo)

if fld == "pbn_uid":
value = TEST_PBN_ID # mommy.make(Publication, pk=TEST_PBN_ID)

url = "admin:bpp_wydawnictwo_ciagle_change"
page = admin_app.get(reverse(url, args=(w2.pk,)))

page.forms["wydawnictwo_ciagle_form"][fld].value = value
if fld == "pbn_uid":
page.forms["wydawnictwo_ciagle_form"][fld].force_value(value)
else:
page.forms["wydawnictwo_ciagle_form"][fld].value = value
res = page.forms["wydawnictwo_ciagle_form"].submit().maybe_follow()

assert "Istnieją rekordy z identycznym polem" in normalize_html(
assert "inne rekordy z identycznym polem" in normalize_html(
res.content.decode("utf-8")
)
31 changes: 21 additions & 10 deletions src/bpp/tests/test_admin/test_wydawnictwo_zwarte.py
Expand Up @@ -2,30 +2,41 @@
from django.urls import reverse
from model_mommy import mommy

from bpp.models import Wydawnictwo_Ciagle
from pbn_api.models import Publication

from bpp.models import Wydawnictwo_Zwarte
from bpp.tests import normalize_html

TEST_PBN_ID = 50000


@pytest.mark.parametrize(
"fld,value",
[
("pbn_uid", TEST_PBN_ID),
("doi", "10.10/123123"),
("www", "https://foobar.pl"),
("public_www", "https://foobar.pl"),
],
)
def test_Wydawnictwo_Ciagle_Admin_sprawdz_duplikaty_www_doi(
admin_app, zrodlo, fld, value
):
mommy.make(Wydawnictwo_Ciagle, **{fld: value})
w2 = mommy.make(Wydawnictwo_Ciagle, zrodlo=zrodlo)
def test_Wydawnictwo_Zwarte_Admin_sprawdz_duplikaty_www_doi(admin_app, fld, value):
if fld == "pbn_uid":
value = mommy.make(Publication, pk=TEST_PBN_ID)

mommy.make(Wydawnictwo_Zwarte, **{fld: value})
w2 = mommy.make(Wydawnictwo_Zwarte)
if fld == "pbn_uid":
value = TEST_PBN_ID # mommy.make(Publication, pk=TEST_PBN_ID)

url = "admin:bpp_wydawnictwo_ciagle_change"
url = "admin:bpp_wydawnictwo_zwarte_change"
page = admin_app.get(reverse(url, args=(w2.pk,)))

page.forms["wydawnictwo_ciagle_form"][fld].value = value
res = page.forms["wydawnictwo_ciagle_form"].submit().maybe_follow()
if fld == "pbn_uid":
page.forms["wydawnictwo_zwarte_form"][fld].force_value(value)
else:
page.forms["wydawnictwo_zwarte_form"][fld].value = value
res = page.forms["wydawnictwo_zwarte_form"].submit().maybe_follow()

assert "Istnieją rekordy z identycznym polem" in normalize_html(
assert "inne rekordy z identycznym polem" in normalize_html(
res.content.decode("utf-8")
)

0 comments on commit fc49e44

Please sign in to comment.