Katrineholms faktureringsrutin

Från Svenska kohanätverkets wiki
Hoppa till navigering Hoppa till sök

Vår faktureringsrutin är en egen variant på Bibliotek Mellansjös rutin, Fakturering. Det mesta har vi lånat därifrån när det gäller kodning till rapporterna.

Processen är uppbyggd på tre rapporter som körs efter varandra.


Kontrollista

Först kör vi rapporten Kontrollista. Där får vi fram alla exemplar som är mer än 14 dagar sena. Innan rapporten körs avgränsar man på låntagarkategori, detta för att vi enbart fakturerar vuxna låntagare.

Finns det böcke​r/låntagare som av någon orsak inte ska faktureras? Klicka på bokstreckkoden och ändra Förlorat-status till Försenad/Long overdue.

Koderna skapas under Administration > Auktoriserade värden > LOST.

Ändra resterande exemplar till status På räkning.

​Klicka på knappen Satsvis ändring längst upp i högra kolumnen. ​Det kommer upp en ny sida.

Ganska långt ned på sidan kommer möjligheten att Redigera exemplar.

Ändra Förlorad-status till På räkning. Spara längst ned på sidan. När exemplaren får status På räkning genereras en skuld på låntagaren motsvarande schablonpriset på boken. På så sätt blir låntagaren spärrad. När boken återlämnas försvinner skulden på själva boken, och det som återstår är övertidsavgiften.

På grund av att brister i kunnande i SQL finns det kvar information om ersättningspris kontra schablonpris när man kör rapporten. Detta är inget vi lägger någon vikt vid då vi alltid fakturerar schablonpriset även om ersättningspriset är lägre. Se Bibliotek Mellansjös sida Fakturering för mer information om hur de fälten kan användas.

SELECT  
CONCAT(branches.branchname,'<br>',
CASE WHEN items.ccode IS NULL 
THEN '--'
ELSE items.ccode
END,'<br>',
CASE WHEN items.location IS NULL 
THEN '--'
ELSE
authorised_values.lib
END,'<br>',
items.itemcallnumber) AS Placering, 
CONCAT(CASE WHEN biblio.author IS NULL 
THEN ''
ELSE biblio.author
END,'<br>',
biblio.title,'<br>',  
items.barcode) AS Bok,
CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=', issues.borrowernumber, '\">', CONCAT( borrowers.firstname, ' ', borrowers.surname, ' ', borrowers.cardnumber ), '</a>' ) AS "Låntagare",
borrowers.categorycode AS Låntagarkategori,
issues.date_due AS förfallodatum, 
items.itype AS exemplartyp,
CASE 
    WHEN items.location in ('66')
            THEN '50.00 kronor'
    WHEN items.itype IN ('BARNMEDIA')
            THEN '150.00 kronor'
    WHEN items.itype IN ('BOK','KLASSRUM','KLASSUPP','KOMBI')
            THEN '300.00 kronor'
    WHEN items.itype IN ('FJÄRRLÅN')
            THEN '800.00 kronor'
    WHEN items.itype IN ('SPRÅKKURS')
            THEN '800.00 kronor'
	WHEN items.itype IN ('FILM')
            THEN '600.00 kronor'
	WHEN items.itype IN ('MUSIK') 
            THEN '250.00 kronor'
    WHEN items.itype IN ('TIDSKRIFT')
            THEN '50.00 kronor'
    WHEN items.itype IN ('TAL','LJUDBOK','LJUDBOK CD','LJUDBOKMP3')
            THEN '400.00 kronor'
        ELSE ' 999.00 kronor'
    END AS 'Schablonpris',
items.price AS 'Inköpspris',
CASE 
WHEN
items.price
/
(CASE 
    WHEN items.location in ('66')
            THEN '50.00 kronor'
    WHEN items.itype IN ('BARNMEDIA')
            THEN '150.00 kronor'
    WHEN items.itype IN ('BOK','KLASSRUM','KLASSUPP','KOMBI')
            THEN '300.00 kronor'
    WHEN items.itype IN ('FJÄRRLÅN')
            THEN '800.00 kronor'
    WHEN items.itype IN ('SPRÅKKURS')
            THEN '800.00 kronor'
	WHEN items.itype IN ('FILM')
            THEN '600.00 kronor'
	WHEN items.itype IN ('MUSIK') 
            THEN '250.00 kronor'
    WHEN items.itype IN ('TIDSKRIFT')
            THEN '50.00 kronor'
    WHEN items.itype IN ('TAL','LJUDBOK','LJUDBOK CD','LJUDBOKMP3')
            THEN '400.00 kronor'
        ELSE ' 999.00 kronor'
    END)
    > '2'
    THEN 
    'Mer än dubbla schablonpriset'
    WHEN
    items.price
/
(CASE 
    WHEN items.location in ('66')
            THEN '50.00 kronor'
    WHEN items.itype IN ('BARNMEDIA')
            THEN '150.00 kronor'
    WHEN items.itype IN ('BOK','KLASSRUM','KLASSUPP','KOMBI')
            THEN '300.00 kronor'
    WHEN items.itype IN ('FJÄRRLÅN')
            THEN '800.00 kronor'
    WHEN items.itype IN ('SPRÅKKURS')
            THEN '800.00 kronor'
	WHEN items.itype IN ('FILM')
            THEN '600.00 kronor'
	WHEN items.itype IN ('MUSIK') 
            THEN '250.00 kronor'
    WHEN items.itype IN ('TIDSKRIFT')
            THEN '50.00 kronor'
    WHEN items.itype IN ('TAL','LJUDBOK','LJUDBOK CD','LJUDBOKMP3')
            THEN '400.00 kronor'
        ELSE ' 999.00 kronor'
    END)
    < '0.5'
    THEN 
    'Mindre än halva schablonpriset'
    ELSE ''
    END
    AS 'Större avvikelse?'
    ,
CONCAT('<a href=\"/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=', items.biblionumber, '&itemnumber=',items.itemnumber,'\" target="_blank">', 
CASE 
WHEN items.replacementprice IS NULL
THEN '--'
ELSE
items.replacementprice
END, '</a>' ) AS 'Annat pris än schablon?',
CONCAT('<a href=\"/cgi-bin/koha/catalogue/moredetail.pl?itemnumber=', items.itemnumber, '&biblionumber=',biblio.biblionumber,'\" target="_blank">', items.barcode, '</a>' ) AS 'Sätt Försenad/Long overdue på det som inte ska faktureras.', 
items.itemnumber

FROM borrowers 
LEFT JOIN issues ON (borrowers.borrowernumber=issues.borrowernumber) 
LEFT JOIN items ON (issues.itemnumber=items.itemnumber) 
LEFT JOIN authorised_values ON (items.location=authorised_values.authorised_value)
LEFT JOIN biblio ON (items.biblionumber=biblio.biblionumber) 
LEFT JOIN branches ON (items.homebranch=branches.branchcode)
WHERE (TO_DAYS(curdate())-TO_DAYS(date_due)) > '14' 
AND items.itemlost !=1 
AND items.itemlost !=2 
AND items.itemlost !=3 
AND items.itemlost !=4 
AND items.itemlost !=5 AND issues.branchcode = <<Utlånande bibliotek|branches>> AND borrowers.categorycode = <<Låntagarkategori|categorycode>>
ORDER BY borrowers.categorycode, borrowers.cardnumber ASC, items.homebranch ASC,items.ccode ASC, items.location ASC, items.itemcallnumber ASC, biblio.author ASC,biblio.title ASC


Faktureringsunderlag

Nästa steg är att köra rapporten där du får fram fakturaunderlaget. Klicka på Skriv ut faktura till höger om låntagarens namn. Om samma låntagare får faktura på mer än en bok så räcker det med att klicka på en av länkarna, all böcker samlas på en faktura.

Har samma låntagare mer än åtta böcker på räkning skrivs bara de åtta första titlarna ut. Fakturaunderlagen skrivs ut och lämnas till ekonomiassistenten. Titlarna reserveras till också till hen. Detta för att de fakturerade böckerna ska fångas in vid återlämning. När boken återlämnas tar vi bort reservationen och mailar ekonomi så hen kan makulera fakturan.

SELECT 
biblio.author AS Författare,
biblio.title AS Titel,
items.barcode AS Streckkod,
issues.branchcode AS 'utlånande bibliotek',
items.itemlost_on AS 'Fakturerad den',
lant.cardnumber AS 'Lånad av streckkod',
lant.surname AS 'Lånad av efternamn',
lant.firstname AS 'Lånad av förnamn',
CASE WHEN SUBSTRING(items.itemlost_on,1,10)=CURDATE()
THEN 
CONCAT('<a href=\"/cgi-bin/koha/reports/guided_reports.pl?reports=175&phase=Run+this+report&param_name=Borrowernumber&sql_params=',lant.borrowernumber,'\" target="_blank">Skriv ut faktura</a>' ) 
ELSE ''
END
as 'Skriv ut faktura',
CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=', lant.borrowernumber, '#reldebarments','\" target="_blank">', CASE
WHEN borrower_debarments.comment IS NULL
THEN '--'
ELSE (SELECT GROUP_CONCAT( DISTINCT BlocksInnerDets.BlocksDetails SEPARATOR '</br>')
            FROM
           (SELECT blocksInner.comment
                    AS BlocksDetails, blocksInner.borrowernumber 
            FROM borrower_debarments blocksInner           
			) BlocksInnerDets
         WHERE BlocksInnerDets.borrowernumber = lant.borrowernumber)
END, '</a>' ) AS 'Spärra låntagaren',
CONCAT('<a href=\"/cgi-bin/koha/reserve/request.pl?biblionumber=', items.biblionumber, '&findborrower=', 
CASE
    WHEN issues.branchcode = 'BIESKOLA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'BJORKVIK'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'DUVEHOLM'
		THEN 'Karolina Rochling'
	WHEN issues.branchcode = 'FORSSJO'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'NAVERTORP'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'JULITA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'KATRINEHOL'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'NYHEM'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SANDBACK'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SKOGSBORG'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SKOLDINGE'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'kskv'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'STRANGSJO'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SODRA'
		THEN 'Fakturerade Böcker'
    WHEN issues.branchcode = 'TALLAS'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'VALLA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'VASTRA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'OSTRA'
		THEN 'Fakturerade Böcker'
	
    ELSE ''
END,'\" target="_blank">', CASE
        WHEN issues.branchcode = 'BIESKOLA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'BJORKVIK'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'DUVEHOLM'
		THEN 'Karolina Rochling'
	WHEN issues.branchcode = 'FORSSJO'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'NAVERTORP'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'KATRINEHOL'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'NYHEM'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SANDBACK'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SKOGSBORG'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SKOLDINGE'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'kskv'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'STRANGSJO'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'SODRA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'TALLAS'
		THEN 'Fakturerade Böcker'
        WHEN issues.branchcode = 'VALLA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'VASTRA'
		THEN 'Fakturerade Böcker'
	WHEN issues.branchcode = 'OSTRA'
		THEN 'Fakturerade Böcker'
	ELSE ''
END, '</a>' ) AS 'Reservera för bevakning',
qu.surname AS 'Reserverad av'

FROM items

LEFT JOIN reserves ON (items.itemnumber = reserves.itemnumber)
LEFT JOIN issues ON (items.itemnumber = issues.itemnumber)
LEFT JOIN biblio ON (items.biblionumber = biblio.biblionumber)
LEFT JOIN borrowers lant ON (issues.borrowernumber = lant.borrowernumber)
LEFT JOIN borrowers qu ON (reserves.borrowernumber = qu.borrowernumber)
LEFT JOIN borrower_debarments ON (borrower_debarments.borrowernumber=lant.borrowernumber)

WHERE items.itemlost = 1 
AND issues.branchcode = <<Utlånande bibliotek|branches>> 

GROUP BY items.itemnumber

ORDER BY SUBSTRING(items.itemlost_on,1,10) DESC,qu.cardnumber ASC, lant.borrowernumber DESC


Faktura

När man klickar på Skriv ut faktura så körs den här rapporten i en ny flik.

SELECT 
concat(CASE
		WHEN adressat.categorycode = 'BARN'
			THEN 'målsman för <br>'
		ELSE ''
	END,
adressat.firstname, ' ', adressat.surname,'<br>', adressat.address,'<br>',
adressat.address2,'<br>',
adressat.zipcode,' ',
adressat.city) AS Adress,
p.attribute AS Personnummer

FROM borrowers adressat
LEFT JOIN issues ON issues.borrowernumber=adressat.borrowernumber
LEFT JOIN items ON items.itemnumber=issues.itemnumber
LEFT JOIN biblio ON (biblio.biblionumber=items.biblionumber)
LEFT JOIN borrower_attributes p ON (adressat.borrowernumber=p.borrowernumber)
WHERE items.itemlost = 1 
AND adressat.borrowernumber = <<Borrowernumber>> 
AND SUBSTRING(items.itemlost_on,1,10) = CURDATE()

UNION

SELECT 
CASE 
WHEN 
COUNT(items.itemnumber) = '1'
THEN 
'<b>En försenad bok</b>'
ELSE
CONCAT('<b>',COUNT(items.itemnumber),' försenade böcker</b>') END
AS 'Lån',
'<b>Summa att betala</b>' AS 'Summa att betala'
FROM borrowers fakturerat
LEFT JOIN issues ON issues.borrowernumber=fakturerat.borrowernumber
LEFT JOIN items ON items.itemnumber=issues.itemnumber
LEFT JOIN biblio ON (biblio.biblionumber=items.biblionumber)
WHERE items.itemlost = 1 
AND fakturerat.borrowernumber = <<Borrowernumber>> 
AND SUBSTRING(items.itemlost_on,1,10) = CURDATE()

UNION

SELECT 
CASE
WHEN 
COUNT(items.itemnumber) > '8'
THEN 
CONCAT(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT biblio.title,' <br>streckkod: ',items.barcode,' <br>återlämningsdatum: ',items.onloan,' <br>pris: ',CASE 
        WHEN items.replacementprice IS NOT NULL
	     THEN CONCAT(items.replacementprice,' kronor')
	WHEN items.location IN ('66')
            THEN '50.00 kronor'
    WHEN items.location IN ('37')
            THEN '800.00 kronor'
    WHEN items.itype IN ('BARNMEDIA')
            THEN '150.00 kronor'
	WHEN items.itype IN ('FILM')
            THEN '600.00 kronor'
    WHEN items.itype IN ('FAKTAFILM')
            THEN '350.00 kronor'
	WHEN items.itype IN ('MUSIK') 
            THEN '250.00 kronor'
    WHEN items.itype IN ('TIDSKRIFT')
            THEN '50.00 kronor'
    WHEN items.itype IN ('TAL','LJUDBOK','LJUDBOK CD','LJUDBOK MP3')
            THEN '400.00 kronor'
    WHEN items.ccode IN ('VUXEN','MAG')
            THEN '300.00 kronor'
    WHEN items.ccode IN ('BARUNUNG') 
            THEN '150.00 kronor'
        ELSE ' 999.00 kronor'

    END
    SEPARATOR '<p>'), '<p>', 8),'<p> och ytterligare ',COUNT(items.itemnumber) -8,' böcker, se ditt konto för fullständiga uppgifter')
ELSE
GROUP_CONCAT(DISTINCT biblio.title,' <br>streckkod: ',items.barcode,' <br>återlämningsdatum: ',items.onloan,' <br>pris: ',CASE 
        WHEN items.replacementprice IS NOT NULL
	    THEN CONCAT(items.replacementprice,' kronor')
	WHEN items.location IN ('66')
            THEN '50.00 kronor'
    WHEN items.location IN ('37')
            THEN '800.00 kronor'
    WHEN items.itype IN ('BARNMEDIA')
            THEN '150.00 kronor'
	WHEN items.itype IN ('FILM')
            THEN '600.00 kronor'
    WHEN items.itype IN ('FAKTAFILM')
            THEN '350.00 kronor'
	WHEN items.itype IN ('MUSIK') 
            THEN '250.00 kronor'
    WHEN items.itype IN ('TIDSKRIFT')
            THEN '50.00 kronor'
    WHEN items.itype IN ('TAL','LJUDBOK','LJUDBOK CD','LJUDBOK MP3')
            THEN '400.00 kronor'
    WHEN items.ccode IN ('VUXEN','MAG')
            THEN '300.00 kronor'
    WHEN items.ccode IN ('BARUNUNG') 
            THEN '150.00 kronor'
        ELSE ' 999.00 kronor'

    END
    SEPARATOR '<p>')
END
,
    
SUM(CASE 
        WHEN items.replacementprice IS NOT NULL
	    THEN items.replacementprice
	WHEN items.location IN ('66')
            THEN 50.00 
    WHEN items.location IN ('37')
            THEN 800.00 
    WHEN items.itype IN ('BARNMEDIA')
            THEN 150.00 
	WHEN items.itype IN ('FILM')
            THEN 600.00 
    WHEN items.itype IN ('FAKTAFILM')
            THEN 350.00 
	WHEN items.itype IN ('MUSIK') 
            THEN 250.00 
    WHEN items.itype IN ('TIDSKRIFT')
            THEN 50.00 
    WHEN items.itype IN ('TAL','LJUDBOK','LJUDBOK CD','LJUDBOK MP3')
            THEN 400.00 
    WHEN items.ccode IN ('VUXEN','MAG')
            THEN 300.00 
    WHEN items.ccode IN ('BARUNUNG') 
            THEN 150.00
        ELSE  999.00 

    END)

FROM borrowers fakturerat
LEFT JOIN issues ON issues.borrowernumber=fakturerat.borrowernumber
LEFT JOIN items ON items.itemnumber=issues.itemnumber
LEFT JOIN biblio ON (biblio.biblionumber=items.biblionumber)
WHERE items.itemlost = 1 
AND fakturerat.borrowernumber = <<Borrowernumber>> 
AND SUBSTRING(items.itemlost_on,1,10) = CURDATE()

UNION

SELECT '<b>Lämna tillbaka boken/böckerna så fort som möjligt så slipper du betala den här fakturan</b>' AS 'One',
'' AS 'Two'

Låntagare under 18

Vi fakturerar inte barn, och inte heller deras målsman, då det kan vara svårt att veta vem målsman är. Däremot använder vi kontrollistan för att hålla koll på låntagare under 18 som har försenade lån, för att manuellt kunna spärra deras konton.