KohaSuomi / Finna-kehitysehdotukset

Finnaan liittyvät kehitysehdotukset
0 stars 0 forks source link

Finnassa lainahistoriaan näkyviin myös poistetut niteet #23

Closed pknuuti closed 3 months ago

pknuuti commented 9 months ago

Finnassa asiakkaan lainahistoriassa on ongelmana poistettujen niteiden näkyminen tai oikeammin näkymättömyys. "Ei nimekettä. Tuntematon" ei kerro asiakkaalle mitään, mikä nimeke hänellä on ollut lainassa. Poistettujen taulusta pitäisi saada nimeketiedot näkymään myös lainahistoriassa.

Liittyy myös tikettiin https://github.com/KohaSuomi/Finna-kehitysehdotukset/issues/16

lmstrand commented 9 months ago

Ongelmaksi muodostuu old_issues-taulussa oleva tietokantaconstraint. Jos old_issues-taulusta poistetaan nide, nidenumero häviää samalla old_issues-taulusta:

CONSTRAINT old_issues_ibfk_2 FOREIGN KEY (itemnumber) REFERENCES items (itemnumber) ON DELETE SET NULL ON UPDATE SET NULL

Tiputin tuon constraintin Vaara-Nextillä ja olen tekemässä Finna-pluginiin muutosta, jossa pluginin vanhat lainat palauttavassa metodissa tarkastetaan, löytyykö niteelle tarvittavaa dataa sen tietojen näyttämiseksi. Jos tietoja ei ole, siirrytään metsästämään tietueen tietoja muilla tavoin. Käytetään vanhan lainan laina-id:tä (issue_id) apuna ja haetaan siihen liittyvän niteen nidenumero old_issues-taulusta (jonka löytää siis old_issues-taulusta, kun se ei enää poistu constraintin poistamisen jälkeen). Tietuenumeroa ja sillä löytyvää dataa etsitään biblio-taulusta ja jos sitä ei siellä ole, etsitään poistetuista tietueista deletedbiblios-taulusta. Jos tietueesta ei ole enää tietokannassa jälkiä, palauttaa Finna lainan tiedoiksi "Ei nimekettä / Tuntematon".

lmstrand commented 9 months ago

Vanhojen lainojen tiedot poistettujen niteiden kohdalla siis tulisivat näkyviin vasta sen jälkeen, kun tietokannan sidos old_issues-tauluun on purettu ja jos nide/tietue on poistettu vasta muutoksen jälkeen tietokannasta.

Selvitellään, saisiko noita vanhoja nidetietoja kaivettua statistics-taulusta takaisin paikoilleen old_issues-tauluun, jotta muutosta edeltävissäkin tapauksissa nidetiedot saataisiin näkyviin.

atarnus commented 9 months ago

Näyttää siltä, että statistics datetime-timestamp alkaa noudattaa issuedate-timestampia orjallisemmin vuodesta 2018 lähtien, mutta tuolloinkin näkyy vielä sekunnin eroja. Onnistunee kuitenkin varmaan tällä yhdistää hyvin. 2016-2017 lainoissa on vaihtelevia aikoja, n. 10 sekunnista useampaan minuuttiin. Pitää tutkia voisiko noita vähän luotettavammin vielä sitten tarkistaa oikeiksi.

lmstrand commented 9 months ago

Nextien tietokantoihin ajettu:

ALTER TABLE old_issues
DROP CONSTRAINT old_issues_ibfk_2;
lmstrand commented 9 months ago

Nyt tätä ominaisuutta voisi testata Nextien Finnoissa. Vain tästä hetkestä lähtien poistettujen niteiden tietuetiedot pystyy hakemaan vanhoihin lainoihin.

Testattavaa: -Miten eri aineistotyypit näkyvät Finnassa, kun vanhan lainan nide on poistettu -Miten aineisto näkyy, kun vanhan lainan niteeseen liittyvä tietue on poistettu (data löytyy vain deletedbiblio/biblioitems-taulusta)

Tällä hetkellä poistetun niteen tietoihin metsästetään seuraavat tiedot:

            $result->{'author'} = $deletedAuthor;
            $result->{'title'} = $deletedTitle;
            $result->{'uniform_title'} = $deletedSeriesTitle;
            $result->{'biblio_itype'} = $deletedItype;
            $result->{'note'} = 'Poistettu';
            $result->{'copyright_date'} = $deletedCopyrightDate;
            $result->{'biblio_id'} = $deletedBiblioId;
            $result->{'enumchron'} = $deletedEnumchron;

Mitä muuta tietoa tulisi välittää Finnaan ja miten tiedot näkyvät, jos näkyvät?

Ainakin subtitle olisi varmasti hyvä lisä kuten tässä kaksoispisteen jälkeen:

image

lmstrand commented 9 months ago

Toteutus on vielä aika raakile ja tuo "uniform_title" ei kyllä taida olla ollenkaan oikea paikka sarjatiedolle, jos se nyt edes välittyy. Sarjajulkaisuja ja kirjasarjoja voisi myös siis testata. Esim. mangat yms. voisi testailla, miten tiedot näkyvät kun nide on poistettu, jos nyt näkyvät ollenkaan.

AnneliO commented 9 months ago

Testailin outi-nextillä poistelemalla itselläni lainassa olleita niteitä ja teoksen nimeke näkyy edelleen poiston jälkeen Finna-nextillä lainahistoriassa.

Ja tosiaan, tuo subtitle voisi olla hyvä lisätä, koska nyt se tippuu pois.

Ennen poistoa kuva

Poiston jälkeen kuva

Sen sijaan, jos poistin sekä niteen että tietueen tästä teoksesta:

kuva

niin lainaushistoria tekit tenät kokonaan. kuva

Jos menin uudelleen lainahistoriaan, niin ensimmäinen sivu näkyi, mutta kun siirryin toiselle sivulle, jossa tuo nimeke on, niin tulee tuo yllä oleva ilmoitus.

AnneliO commented 9 months ago

Niin ja tuon Novello bookin biblionumber=1466468

piiaseme commented 9 months ago

OUTIssa testasin. ja jos nyt osasin testata oikein, niin niteen poisto ei muuttanut tietoa lainaushistoriassa "Ei nimekettä"-muotoon vaan listalla näkyi poistetun niteen tietue. kuva Poistin viimeisen niteen, joten poistin seuraavaksi tietueenkin. Minulla käyttäytyi samalla tavalla kuin Annelillakin eli Lainaushistoria meni rikki. kuva

Minun testitietueessa ei ollut alaotsaketta, mutta minulla oli DVD ja sen biblionumber=1341087

lmstrand commented 9 months ago

Sain korjattua tuon poistetun tietueen tietojen haun ja lisäsin subtitlen.

AnneliO commented 9 months ago

Lainahistorian haku ei enää kosahda ja poistetulla tietueella näkyy nimeke ja julkaisuvuosi. Tekijää ei jostain syystä näy.

kuva

Poistettujen niteiden tietueilla näkyy nyt myös alanimeke.

pknuuti commented 9 months ago

Vaaran nextillä testasin myös tätä ja nyt näkyy myös poistetun nimekkeen niteen tiedot alanimekkeineen lainahistoriassa. Hienoa.

lmstrand commented 9 months ago

Lainahistorian haku ei enää kosahda ja poistetulla tietueella näkyy nimeke ja julkaisuvuosi. Tekijää ei jostain syystä näy.

Tekijätieto tosiaan välittyy poistetuista tietuetiedoista lainatiedot hakiessa, mutta sitä ei käytetä, vaan yritetään esittää Finnasta löytyviä tietoja. Minullakin eilen iltapäivällä tekijätieto näkyi, enää ei, selkeästikään haravoinnin seurauksena. Haravoinnissa poistetun tietueen tietuetiedot ovat siis kadonneet Finnan päästä eikä tekijätietoa siksi voi enää näyttää (kansikuvan ja aineistotyypin kera linkkeineen tietueeseen, jota ei siis enää ole olemassa). Kysäisen Finna-kehittäjältä, voiko tuohon luoda jonkin ehdon, että jos aineistoa ei löydy Finnan datasta, yritetään asettaa tekijätiedoksi ja aineistotyypiksi Kohan päästä muutoksen myötä lainatiedot hakiessa välittyvä deletedbiblio/deletedbiblioitems-taulusta haettu tekijä/aineistotyyppitieto.

pirliis commented 9 months ago

Liittyy tikettiin https://github.com/KohaSuomi/Koha/issues/507.

lmstrand commented 9 months ago

Laitan tähän rimpsua noiden kadonneiden nidenumeroiden metsästämiseen ylös:

select * from old_issues inner join statistics on old_issues.issuedate = statistics.datetime
AND old_issues.borrowernumber = statistics.borrowernumber
and statistics.type = 'issue'
and old_issues.itemnumber is null
atarnus commented 9 months ago

Mitä tuossa katselin nyt, niin palautuspäivä pitää kutinsa paljon paremmin, en huomaa omassa 250 otoksessa yhtään poikkeamaa.

Eli puuttuvat itemnumberit voisi löytää jotenkin tähän tapaan (kuten ylläkin):

SELECT s.itemnumber
  FROM old_issues oi
       INNER JOIN statistics s ON oi.returndate = s.datetime AND oi.borrowernumber = s.borrowernumber
 WHERE s.type = 'return'
   AND oi.itemnumber IS NULL

Olisko nuo tarkoitus siis ajaa takaisin sinne old_issues taluun? Tässä jatkona tietysti sitten se, että löytyykö sieltä edelleenkään niitä bibliotietoja, jos ne on deletedbibliossa. Ja ajellaanko nämä joka vuoden statisticsille erikseen?

lmstrand commented 8 months ago

Tuotantojen tietokannoista poistettu constraint, joka poisti nidenumeron vanhojen lainojen taulusta niteen poiston yhteydessä.

ALTER TABLE old_issues DROP CONSTRAINT IF EXISTS old_issues_ibfk_2

Vien muutoksen atomicupdatena omaan branchiinsa nextille, ellei yhteisötikettiä sign offata ennen versionvaihtoa (muuten nollabranchiin). Ominaisuus otetaan käyttöön versionvaihdossa, jolloin suoritetaan samalla nidenumerojen palauttamisajo.

Constraintin pudottamisesta tiketti yhteisössä needs sign off-tilassa: https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=32729

lmstrand commented 3 months ago

Tässä SQL ajoa varten talteen:

UPDATE old_issues oi
INNER JOIN statistics s ON( oi.returndate = s.datetime AND oi.borrowernumber = s.borrowernumber)
SET oi.itemnumber = s.itemnumber WHERE s.type = "return" AND oi.itemnumber IS NULL

Ajo pitää suorittaa jokaisen arkistoidun statistics-taulun kanssa.

lmstrand commented 3 months ago

Seuranta ajoille kimpoittain, ajettu:

lmstrand commented 3 months ago

Huomiona ajoissa, että aikaleimojen perusteella ei näköjään saa kaikkia nidenumeroja haettua, mutta suurimman osan kyllä. Eli muutamia nidenumerottomia vanhoja lainoja jäi tietokantaan testiasiakkaan tapauksessa ainakin Vaarassa, eikä näin ollen näy Finnassa edelleenkään.

lmstrand commented 3 months ago

Kaikki ajot suoritettu. Suljen tiketin.

atarnus commented 3 months ago

Katselin vähän omaa henkkoht lainahistoriaa sinne 2016 asti, ja aika paljonhan sinne jäi vielä noita lainoja ilman itemnumberia. En tiedä mitä olen horissut tuolloin aiemmin, mutta nyt kun katsoin uudestaan, niin old_issues.timestamp on kyllä ainakin nyt noiden jäljelle jääneiden kohdalla ainakin paljon paikkansapitävämpi aikaleima.

Eli tällä löytyisi lisää vielä jos näitä jaksaa edelleen jahdata:

SELECT s.itemnumber
  FROM old_issues oi
       INNER JOIN statistics_2017 s ON oi.borrowernumber = s.borrowernumber AND oi.timestamp = s.datetime
 WHERE s.type = 'return'
   AND oi.itemnumber IS NULL

Ja sitten jos haluaa vielä jahdata niitä sekunnin tai parin viiveitä, niin onnistuu esim. näin:

SELECT s.itemnumber
  FROM old_issues oi
       INNER JOIN statistics_2017 s ON oi.borrowernumber = s.borrowernumber AND DATE(oi.timestamp) = DATE(s.datetime)
 WHERE s.type = 'return'
   AND oi.itemnumber IS NULL
   AND TIMEDiff(s.datetime, oi.timestamp) IN ('-00:00:01','00:00:00','00:00:01')

Mitä nyt testasin, niin kahden sekunnin virhemarginaaliin tarttui jo joku virheellinen mätsi, mutta jos ensin ajaa nollilla taas läpi, niin sitten todennäköisesti voisi lisätä virhemarginaalia, kun tuo oi.itemnumber IS NULL rajaa taas pois sieltä vaihtoehtoja. (Voi kyllä olla, ettei sinne ihan oikeasti jää juuri mitään jos ajaa vielä tuolla ekalla.)