Closed pknuuti closed 3 months ago
Jälleen noutamattomien varausten listalla anonymisoitu asiakas. Miten saan tiedon, kuka asiakas on? Vanhojen varausten raporttikin näyttää vain anonymisoidun asiakastunnuksen.
Finna-apissa (koha-plugin-rest-di) $patron->old_checkouts->anonymize kajoaa old_reserves-tauluun asiakkaan poistaessa lainahistoriansa, jonka takia asiakasdata anonymisoituu tietokannassa myös vanhoista varauksista, joka näkyy raportilla AnonymousPatronina. Eli tuo anonymisointi pitäisi muuttaa koskemaan vain old_issues-taulua?
No se varmaan auttaisi asiaa. Eihän varaus ole sama asia kuin lainaus.
Koha taitaa rinnastaa toisiinsa lainahistorian ja varaushistorian. Tuon asian muuttaminen saattaisi muuttaa Kohan toimintalogiikkaa aika paljon.
Palautusten/lainojen osalta tuo ongelma on ratkaistu tallentamalla viimeisin lainaajatieto items_last_borrower-tauluun. Jokin vastaava ratkaisu myös varausten osalta?
Sama ongelma oli edessä taas tänään. Saisiko Annelin ehdotuksella ratkaistua tai voisiko raportti näyttää varaustunnuksen esim. siltä päivältä, kun varaus on saapunut (ei vanhentumishetkeltä) vai miten tuo anonymisointi toimii?
Jos varausten anonymisointi toimii samalla tavalla kuin lainojen, niin old_reserves-tauluun vaihdetaan asiakkaan borrowernumberin tilalle anonymous patron -asiakastilin borrowernumber (eli sen asiakkaan, joka on merkitty AnonymousPatron-järjestelmäasetukseen). Eli vanhojen varausten taulussa ei ole sen jälkeen enää tietoa, kenen varaus on ollut, eikä sitä oikein helposti saa poimittua muualtakaan.
Kohassa on metodit $patron->old_checkouts->anonymize(); ja $patron->old_holds->anonymize(); erikseen.
Finna-pluginissa käytetään tuota ensimmäistä. Voisiko kyseessä olla ihan bugi?
Niin tuo Finna-plugin vaan asettaa asiakkaalle privacy-asetuksen, ja anonymisoi samalla vain lainat ilmeisesti. Ongelma on siis Kohassa privacy-asetuksen muutamisen jälkeen, kun kaikki tapahtumat anonymisoidaan asiakkaan privacy-asetuksen mukaisesti.. Vaihtoehtona olisi tosiaan tehdä tuollainen items_last_holder-tyyppinen ratkaisu, kuten nyt lainojen kanssa.
Varaushistoria on ihan yhtälailla arkaluontoinen kuin lainahistoriakin, joten sen anonymisointi asiakkaan valinnan perusteella on kyllä sinänsä mielestäni perusteltua.
Vaskissa on tällainen erääntyneiden raportti, jolla saa nuo anonymisoitujen asiakkaiden varaustunnukset:
SELECT CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=',ba.borrowernumber,'\">',ba.attribute,'</a>') AS "Varaustunnus", CONCAT('<a href=\"/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=',biblio.biblionumber,'#item',items.itemnumber,'\">',items.barcode,'</a>') AS "Nide", CONCAT('<a href=\"/cgi-bin/koha/catalogue/detail.pl?biblionumber=',biblio.biblionumber,'\">',biblio.title,'</a>') AS "Nimeke", biblioitems.itemtype AS "Aineistolaji", olr.expirationdate AS "Viimeinen noutopäivä" FROM (SELECT IF(o.borrowernumber=28, REGEXP_SUBSTR(SUBSTRING(al.info,(LOCATE("'borrowernumber' =>", al.info)+20), 7), '^[0-9]+'), o.borrowernumber) as borrowernumber, o.reserve_id, o.biblionumber, o.itemnumber, o.cancellationdate, o.expirationdate, o.found, o.branchcode FROM old_reserves o LEFT JOIN (SELECT * FROM action_logs WHERE module='HOLDS' AND action='CANCEL') al ON al.object = o.reserve_id) olr LEFT JOIN (SELECT * FROM borrower_attributes WHERE code='HOLDID') ba using(borrowernumber) LEFT JOIN biblio using(biblionumber) LEFT JOIN items using(itemnumber) LEFT JOIN biblioitems using(biblioitemnumber) WHERE olr.cancellationdate > items.datelastseen AND olr.expirationdate <= <<Anna viim. noutopäivä|date>> AND olr.expirationdate < olr.cancellationdate AND olr.found = "W" AND IF(items.datelastborrowed IS NOT NULL, olr.cancellationdate > items.datelastborrowed, 1=1) AND IF(items.itemlost=1 AND items.itemlost_on IS NOT NULL AND olr.cancellationdate <= items.itemlost_on, 1=0,1=1) AND olr.branchcode = <<Noutokirjasto|branches>> AND olr.itemnumber NOT IN (SELECT itemnumber FROM issues WHERE issues.borrowernumber=olr.borrowernumber AND issues.itemnumber=olr.itemnumber) ORDER BY CASE WHEN ba.attribute REGEXP '^[a-ö]' THEN ba.attribute END, CASE WHEN ba.attribute REGEXP '^[0-9]{4}-[0-9]{4}-[0-9]{4}' THEN ba.attribute END, CASE WHEN ba.attribute REGEXP '^[0-9]' THEN cast(REPLACE(ba.attribute, ' ', '') as int) END
Käytännössä siis liitän varauksen reserve_id:n avulla old_reserves tauluun action_logista varauksen perumistapahtuman, josta korvaan old_reserves taulussa olevan borrowernumberin, mikäli se on 28 eli anonymisoitu asiakas. Tämä on itse asiassa hieman muutettu versio siitä, joka Vaskilla on nyt käytössä, koska olin tehnyt tuon borrowernumberin haun turhan monimutkaisesti aiemmin ja ajattelin nyt tehdä siitä hieman selvemmän ja ymmärrettävämmän. Testeissäni tämä kuitenkin toimii ihan samalla tavalla kuin aiemminkin.
Muutin raporttiin Vaarassa käytetyn anonymouspatronin borrowernumberin 10 ja raportti toimii nyt.
Poimin Mikon raportista anonymisoidun varaustunnuksen noudon action_logseilta ja sen, että teos poistuu listalta, kun nide palautetaan ja yhdistin ne aiempaan versioon noutamattomien varausten raportista:
select ba.attribute as 'Varaustunnus', b.title as 'Teos', i.barcode as 'Viivakoodi', bi.itemtype as 'Aineistotyyppi', olr.cancellationdate as 'Varauksen vanhentumispäivä'
FROM (SELECT IF(o.borrowernumber=10,
REGEXP_SUBSTR(SUBSTRING(al.info,(LOCATE("'borrowernumber' =>", al.info)+20), 8), '^[0-9]+'), o.borrowernumber) as borrowernumber, o.reserve_id, o.biblionumber, o.itemnumber, o.cancellationdate, o.expirationdate, o.found, o.branchcode FROM old_reserves o LEFT JOIN (SELECT * FROM action_logs WHERE module='HOLDS' AND action='CANCEL') al ON al.object = o.reserve_id) olr
LEFT JOIN borrower_attributes ba ON (olr.borrowernumber=ba.borrowernumber)
JOIN biblio b using (biblionumber)
JOIN biblioitems bi using (biblionumber)
JOIN items i using (itemnumber)
where olr.branchcode=<<Valitse kirjasto|branches>>
and olr.cancellationdate between <<Vanhentumispvm alkaen|date>> AND <<Vanhentumispvm päättyen|date>>
and olr.found='W'
AND olr.expirationdate = (olr.cancellationdate - INTERVAL 1 DAY)
AND ba.code='HOLDID'
AND olr.cancellationdate > i.datelastseen
order by 1,2
Koitin tuota testailla vähän Vaarassa vertailemalla aiemman raportin ja muutetun raportin tuloksia, mutta olisi hienoa, jos joku pystyisi testaamaan sitä ihan oikeasti oikeasti. Tuleeko kaikki tarvittavat raportille ja poistuvatko ne sieltä, kun nide palautetaan?
Erona Mikon raporttiin on, että tässä raportissa ei tule mukaan kuin ne varaukset, jotka osuvat valitulle aikavälille. Mikon raportissa mukaan tulee myös sellaisia, jotka ovat vanhentuneet joskus aiemmin (kuin valittu päivämäärä), mutta niitä ei ole vielä palautettu vanhentumisen jälkeen. Kummassakin raportissa on omat hyvät puolensa. :)
Testasin OUTIssa molempia raportteja tuotannossa oikealla varauksella. Raportti antoi asiakkaan oman varaustunnisteen, kun hoksasin muuttaa raporttiin borrowernumberiksi OUTIn anonymouspatronin borrowernumberin. Kun palautin niteen, niin varaus poistui raporteilta kuten pitikin.
Testasin OUTIssa molempia raportteja tuotannossa oikealla varauksella. Raportti antoi asiakkaan oman varaustunnisteen, kun hoksasin muuttaa raporttiin borrowernumberiksi OUTIn anonymouspatronin borrowernumberin. Kun palautin niteen, niin varaus poistui raporteilta kuten pitikin.
Hyvä huomio tuo anonymous patronin borrowernumber Piia! En siitä hoksannut sanoakaan mitään. :)
Testasin Annelin tekemää raporttia käytännössä Pekurissa. Oli 22 vanhentunutta varausta sille päivää. Ei löytynyt hyllystä ylimääräisiä, eli kaikki tarttuivat mukaan rapsalle. Yksi varauksista oli hukkateillä, mutta samalla tavalla vanhentunut kuin muutkin tapaukset. Todennäköisesti lähtenyt asiakkaan mukaan ilman lainausta, kun ei löytynyt muualtakaan kirjastosta (ainakaan niiltä todennäköisiltä paikoilta).
OUTIssa katsoimme, että Annelin raportti on meille sopivampi, joten testasimme Annelin tekemää raporttia. Testasin anonymisoidulla (lainahistoria ei tallennu) asiakastiedolla -> asiakkaan varaustunniste näkyi raportilla. Testasin myös siten, että poistin varauksen viimeisenä noutopäivänä -> varaus ei tullut raportille.
Kiitos testauksesta! :)
Vaihdoin Raporttikirjastoon uudemman version Vanhentuneet noutamattomat varaukset -raportille.
Suljen tiketin.
Mikä vikana?
Työntekijä kertoo: "Vanhentuneiden varausten raportissa näkyy yhden asiakkaan kohdalla "koska AnonymousPatron". Tuurilla löysin kirjan hyllystä ja kuitissa varaustunnus näkyy normaalisti. Hänelle on myös lähtenyt viesti noudettavasta varauksesta tavalliseen tapaan. Asiakkaan ID 1076237. Jos tuon hyllyvarausraportilla näkyvän tunnuksen hakee Kohassa, se antaa tilastoasiakkaan Asiakasdata Anonymisoitu (kuvakaappaus liitteenä)." Asiakas on poistanut lainahistoriansa. Hänen varaustunnuksensa näkyy hänen tiedoissaan oikein edelleenkin.
Mitä pitäisi tapahtua
Asiakkaan varaustunnuksen pitäisi näkyä raportissa, sitä ei ole anonymisoitu.
Kuinka toistaa ongelma/asia
No response
Selain
No response
Jotain muuta?
No response