Skillnad mellan versioner av "Fakturering"
| Rad 203: | Rad 203: | ||
ORDER By g.cardnumber DESC | ORDER By g.cardnumber DESC | ||
| + | </pre> | ||
| + | |||
| + | Det halvfärdiga underlaget öppnar man som Makroaktiverad Excelbok och sparar på ett lämpligt ställe. Än så länge är det inte användbart eftersom alla låntagare ligger i samma flik. | ||
| + | Det problemet löser man genom att köra ett Excelmakro - kod följer nedan. För att det makrot ska funka behöver alla låntagare ha ett personnummer (eller något liknande) och alla förekomster a "Schablonpris saknas" måste ersättas med ett riktigt pris. | ||
| + | |||
| + | <pre> | ||
| + | Sub Fakturautskrift() | ||
| + | Dim wshS As Worksheet | ||
| + | Dim wshT As Worksheet | ||
| + | Dim s As Long | ||
| + | Dim m As Long | ||
| + | Dim t As Long | ||
| + | Dim c As Long | ||
| + | Dim d As Double | ||
| + | Dim Lastrow As Long | ||
| + | Dim x As Long | ||
| + | |||
| + | Application.ScreenUpdating = False | ||
| + | Set wshS = ActiveSheet | ||
| + | wshS.Range("A1").CurrentRegion.Sort Key1:=wshS.Range("A1"), Header:=xlYes | ||
| + | m = wshS.Range("A" & wshS.Rows.Count).End(xlUp).Row | ||
| + | For s = 2 To m | ||
| + | If s > 2 Then | ||
| + | t = t + 2 | ||
| + | wshT.Cells(t, 1).Value = "Summa" | ||
| + | wshT.Cells(t, 2).Value = d | ||
| + | End If | ||
| + | If wshS.Range("A" & s).Value <> wshS.Range("A" & s - 1).Value Then | ||
| + | Set wshT = Worksheets.Add(After:=Worksheets(Worksheets.Count)) | ||
| + | For c = 1 To 1 | ||
| + | wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value | ||
| + | wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value | ||
| + | wshT.Cells(c, 2).NumberFormat = "0000000000" | ||
| + | wshT.Cells(c, 2).HorizontalAlignment = xlLeft | ||
| + | 'Personnummer | ||
| + | Next c | ||
| + | t = 1 | ||
| + | d = 0 | ||
| + | |||
| + | For c = 2 To 6 | ||
| + | wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value | ||
| + | wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value | ||
| + | Next c | ||
| + | t = 6 | ||
| + | d = 0 | ||
| + | |||
| + | For c = 7 To 7 | ||
| + | wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value | ||
| + | wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value | ||
| + | wshT.Cells(c, 2).HorizontalAlignment = xlLeft | ||
| + | 'Postnummer | ||
| + | Next c | ||
| + | t = 7 | ||
| + | d = 0 | ||
| + | |||
| + | For c = 8 To 8 | ||
| + | wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value | ||
| + | wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value | ||
| + | Next c | ||
| + | t = 8 | ||
| + | d = 0 | ||
| + | End If | ||
| + | |||
| + | t = t + 1 | ||
| + | For c = 9 To 13 | ||
| + | t = t + 1 | ||
| + | wshT.Cells(t, 1).Value = wshS.Cells(1, c).Value | ||
| + | wshT.Cells(t, 2).Value = wshS.Cells(s, c).Value | ||
| + | wshT.Cells(c, 1).EntireColumn.AutoFit | ||
| + | wshT.Cells(c, 2).EntireColumn.AutoFit | ||
| + | Next c | ||
| + | |||
| + | d = d + wshS.Cells(s, 13).Value | ||
| + | |||
| + | Lastrow = wshT.Cells(Rows.Count, "B").End(xlUp).Row | ||
| + | For x = 12 To Lastrow Step 8 | ||
| + | With wshT.Range("B" & x) | ||
| + | .NumberFormat = "0000000000000" | ||
| + | .HorizontalAlignment = xlLeft | ||
| + | End With | ||
| + | With wshT.Range("B" & x + 1) | ||
| + | .NumberFormat = "m/d/yyyy" | ||
| + | .HorizontalAlignment = xlLeft | ||
| + | End With | ||
| + | Next | ||
| + | |||
| + | Next s | ||
| + | |||
| + | ' Last total | ||
| + | t = t + 2 | ||
| + | wshT.Cells(t, 1).Value = "Summa" | ||
| + | wshT.Cells(t, 2).Value = d | ||
| + | |||
| + | Application.ScreenUpdating = True | ||
| + | |||
| + | |||
| + | End Sub | ||
| + | </pre> | ||
| + | |||
| + | När man har kört makrot finns det en flik för varje låntagare. Vi sparar ner varje flik som en pdf och laddar sedan upp den i kommunens ekonomisystem Raindance så att låntagaren får sin faktura därifrån. Man skulle också kunna jobba vidare med sidhuvud/sidfot och använda det här som en riktig faktura | ||
| + | |||
| + | |||
| + | == 4 Bevakning/reservation av fakturerade böcker == | ||
| + | Det sista steget är att lägga en reservation på de fakturerade böckerna, så vi vet vilka fakturor vi ska dra tillbaks från ekonomisystemet. För det har vi skapat särskilda bevakningskort. | ||
| + | |||
| + | <pre> | ||
| + | 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', | ||
| + | qu.cardnumber AS 'Reserverad av streckkod', | ||
| + | qu.surname AS 'Reserverad av efternamn', | ||
| + | qu.firstname AS 'Reserverad av förnamn', | ||
| + | CONCAT('<a href=\"/cgi-bin/koha/reserve/request.pl?biblionumber=', items.biblionumber, '&findborrower=', | ||
| + | CASE | ||
| + | WHEN issues.branchcode = '8bxq' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8bxz' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8bya' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8byb' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8byc' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8byi' | ||
| + | THEN 'torebevakning' | ||
| + | WHEN issues.branchcode = '8byl' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = '8bym' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = '8byo' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = '8byq' | ||
| + | THEN 'maribevakning' | ||
| + | WHEN issues.branchcode = '8byr' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8bys' | ||
| + | THEN 'torebevakning' | ||
| + | WHEN issues.branchcode = '8nyb' | ||
| + | THEN 'tikfbevakning' | ||
| + | WHEN issues.branchcode = '8reg' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = 'gull' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = 'hjo' | ||
| + | THEN 'hjobevakning' | ||
| + | WHEN issues.branchcode = 'hova' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = 'kabo' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = 'kstr' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = 'mari' | ||
| + | THEN 'maribevakning' | ||
| + | WHEN issues.branchcode = 'sksb' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = 'tida' | ||
| + | THEN 'tidabevakning' | ||
| + | WHEN issues.branchcode = 'tikf' | ||
| + | THEN 'tikfbevakning' | ||
| + | WHEN issues.branchcode = 'tore' | ||
| + | THEN 'torebevakning' | ||
| + | WHEN issues.branchcode = 'skgy' | ||
| + | THEN 'skgybevakning' | ||
| + | WHEN issues.branchcode = 'skgz' | ||
| + | THEN 'skgybevakning' | ||
| + | WHEN issues.branchcode = 'kbro' | ||
| + | THEN 'kbrobevakning' | ||
| + | WHEN issues.branchcode = 'lkav' | ||
| + | THEN 'kbrobevakning' | ||
| + | ELSE '' | ||
| + | END,'\" target="_blank">', CASE | ||
| + | WHEN issues.branchcode = '8bxq' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8bxz' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8bya' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8byb' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8byc' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8byi' | ||
| + | THEN 'torebevakning' | ||
| + | WHEN issues.branchcode = '8byl' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = '8bym' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = '8byo' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = '8byq' | ||
| + | THEN 'maribevakning' | ||
| + | WHEN issues.branchcode = '8byr' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = '8bys' | ||
| + | THEN 'torebevakning' | ||
| + | WHEN issues.branchcode = '8nyb' | ||
| + | THEN 'tikfbevakning' | ||
| + | WHEN issues.branchcode = '8reg' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = 'gull' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = 'hjo' | ||
| + | THEN 'hjobevakning' | ||
| + | WHEN issues.branchcode = 'hova' | ||
| + | THEN 'gullbevakning' | ||
| + | WHEN issues.branchcode = 'kabo' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = 'kstr' | ||
| + | THEN 'kabobevakning' | ||
| + | WHEN issues.branchcode = 'mari' | ||
| + | THEN 'maribevakning' | ||
| + | WHEN issues.branchcode = 'sksb' | ||
| + | THEN 'sksbbevakning' | ||
| + | WHEN issues.branchcode = 'tida' | ||
| + | THEN 'tidabevakning' | ||
| + | WHEN issues.branchcode = 'tikf' | ||
| + | THEN 'tikfbevakning' | ||
| + | WHEN issues.branchcode = 'tore' | ||
| + | THEN 'torebevakning' | ||
| + | WHEN issues.branchcode = 'skgy' | ||
| + | THEN 'skgybevakning' | ||
| + | WHEN issues.branchcode = 'skgz' | ||
| + | THEN 'skgzbevakning' | ||
| + | WHEN issues.branchcode = 'kbro' | ||
| + | THEN 'kbrobevakning' | ||
| + | WHEN issues.branchcode = 'lkav' | ||
| + | THEN 'lkavbevakning' | ||
| + | ELSE '' | ||
| + | END, '</a>' ) AS 'Reservera för bevakning' | ||
| + | |||
| + | 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) | ||
| + | |||
| + | WHERE items.itemlost = 1 AND issues.branchcode = <<Utlånande bibliotek|branches>> | ||
| + | |||
| + | ORDER BY qu.cardnumber ASC, lant.borrowernumber DESC | ||
</pre> | </pre> | ||
Versionen från 30 oktober 2018 kl. 12.22
Beskrivning av Bibliotek Mellansjös faktureringsprocess
Bibliotek Mellansjös faktureringsprocess är lite halvmanuell, det är inte ett fullfjädrat faktureringssystem, utan slutresultatet är en pdf som går att ladda upp i kommunens ekonomisystem. Låntagaren ska få faktura från det bibliotek man lånade boken på, oavsett var den egentligen hör hemma.
vi har gjort följande inställningar i systempreferenserna:
DefaultLongOverdueChargeValue är tomt, eftersom vi inte vill att ersättningsbeloppet ksa synas i systemet
DefaultLongOverdueLostValue är tomt, eftersom vi vill ha kontroll över vilka böcker som blir fakturerade
MarkLostItemsAsReturned skulle vi helst vilja ha helt tomt, men tyvärr måste man välja något där, så vi har valt "from the holds to pull list". Vi vill nämligen att böckerna ska finnas kvar på låntagarens konto
Vi använder inte cronjobbet Long overdues
Pocessen består av fyra rapporter som körs i denna ordning:
1 Försenade böcker som inte har blivit fakturerade, för att leta i hyllan
Det första vi gör är att ta ut en lista på böcker som inte har blivit återlämnade, fast de är mer än 37 dagar sena, så vi kan leta efter dem i hyllan i fall vi missat att avregistrera dem i återlämningen.
SELECT branches.branchname AS Bibliotek, items.ccode AS Samling, items.location AS Placering, items.itemcallnumber AS Hyllsignum, biblio.author AS Författare, biblio.title AS Titel, items.barcode AS Streckkod, items.itype AS Exemplartyp FROM borrowers LEFT JOIN issues ON (borrowers.borrowernumber=issues.borrowernumber) LEFT JOIN items ON (issues.itemnumber=items.itemnumber) LEFT JOIN biblio ON (items.biblionumber=biblio.biblionumber) LEFT JOIN branches ON (items.homebranch=branches.branchcode) WHERE (TO_DAYS(curdate())-TO_DAYS(date_due)) > '37' AND items.itemlost !=1 AND items.itemlost !=2 AND items.itemlost !=3 AND items.itemlost !=4 AND issues.branchcode = <<Utlånande bibliotek|branches>> AND issues.date_due BETWEEN <<Förfallodatum från|date>>-INTERVAL 1 DAY AND <<Förfallodatum till |date>>+INTERVAL 1 DAY ORDER BY items.homebranch ASC,items.ccode ASC, items.location ASC, items.itemcallnumber ASC, biblio.author ASC,biblio.title ASC
2 Försenade böcker som inte har blivit fakturerade, med länk för att ändra status och spärra låntagaren
Nästa steg är att vi manuellt ändrar status till "På räkning" för de böcker som ska faktureras och att vi lägger in en spärr på låntagaren under Begränsningar
SELECT
branches.branchname AS 'ägande bibliotek',
items.ccode AS samling,
items.location AS placering,
items.itemcallnumber AS hyllsignum,
biblio.author AS författare,
biblio.title AS titel,
items.barcode As streckkod,
borrowers.cardnumber AS lånekortsnummer,
borrowers.surname AS efternamn,
borrowers.firstname AS förnamn,
issues.date_due AS förfallodatum,
items.itype AS exemplartyp,
CASE
WHEN items.itype = 'BARN LJUD'
THEN '100'
WHEN items.itype = 'BARN TIDSK'
THEN '100'
WHEN items.itype = 'BARNBOK'
THEN '100'
WHEN items.itype = 'BARNKORT'
THEN '100'
WHEN items.itype = 'BARNMP3'
THEN '100'
WHEN items.itype = 'BLURAY'
THEN '600'
WHEN items.itype = 'BOK'
THEN '250'
WHEN items.itype = 'BOKCD'
THEN '250'
WHEN items.itype = 'BOKCDBARN'
THEN '100'
WHEN items.itype = 'BOKDAISY'
THEN '250'
WHEN items.itype = 'BOKDAISYBARN'
THEN '100'
WHEN items.itype = 'BOKMP3'
THEN '250'
WHEN items.itype = 'BOKMP3BARN'
THEN '100'
WHEN items.itype = 'FILM'
THEN '600'
WHEN items.itype = 'KORTLON'
THEN '250'
WHEN items.itype = 'LJUDBOK'
THEN '250'
WHEN items.itype = 'MP3'
THEN '250'
WHEN items.itype = 'STORSTIL'
THEN '250'
WHEN items.itype = 'TIDSKRIFT'
THEN '50'
WHEN items.itype = 'TV-SPEL'
THEN '600'
WHEN items.itype = 'SPRAKKURS'
THEN '600'
ELSE 'Schablonpris saknas'
END
AS 'schablonpris',
items.replacementprice AS pris,
CONCAT('<a href=\"/cgi-bin/koha/catalogue/moredetail.pl?itemnumber=', items.itemnumber, '&biblionumber=',biblio.biblionumber,'\" target="_blank">', items.barcode, '</a>' ) AS 'redigera status',
CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=', borrowers.borrowernumber, '#reldebarments','\" target="_blank">', borrowers.cardnumber, '</a>' ) AS 'Spärra låntagaren'
FROM borrowers
LEFT JOIN issues ON (borrowers.borrowernumber=issues.borrowernumber)
LEFT JOIN items ON (issues.itemnumber=items.itemnumber)
LEFT JOIN biblio ON (items.biblionumber=biblio.biblionumber)
LEFT JOIN branches ON (items.homebranch=branches.branchcode)
WHERE (TO_DAYS(curdate())-TO_DAYS(date_due)) > '37' AND items.itemlost !=1 AND items.itemlost !=2 AND items.itemlost !=3 AND items.itemlost !=4 AND issues.branchcode = <<Utlånande bibliotek|branches>> AND issues.date_due BETWEEN <<Förfallodatum från|date>>-INTERVAL 1 DAY AND <<Förfallodatum till|date>>+INTERVAL 1 DAY
ORDER BY borrowers.cardnumber ASC, items.homebranch ASC,items.ccode ASC, items.location ASC, items.itemcallnumber ASC, biblio.author ASC,biblio.title ASC
3 Fakturaunderlag
Tredje steget är att skapa ett fakturaunderlag.
SELECT p.attribute AS personnummer,
CASE
WHEN g.categorycode = 'BARN'
THEN 'målsman för'
WHEN g.categorycode = 'ELEVTIDA'
THEN 'målsman för'
ELSE ''
END
AS 'Till',
g.surname AS Efternamn,
g.firstname AS Förnamn,
g.address AS Adress,
g.address2 AS adress,
g.zipcode AS Postnummer,
g.city AS Postort,
b.author AS Författare,
b.title AS Titel,
i.barcode AS Streckkod,
m.date_due AS Återlämningsdatum,
CASE
WHEN i.itype = 'BARN LJUD'
THEN '100'
WHEN i.itype = 'BARN TIDSK'
THEN '100'
WHEN i.itype = 'BARNBOK'
THEN '100'
WHEN i.itype = 'BARNKORT'
THEN '100'
WHEN i.itype = 'BARNMP3'
THEN '100'
WHEN i.itype = 'BLURAY'
THEN '600'
WHEN i.itype = 'BOK'
THEN '250'
WHEN i.itype = 'BOKCD'
THEN '250'
WHEN i.itype = 'BOKCDBARN'
THEN '100'
WHEN i.itype = 'BOKDAISY'
THEN '250'
WHEN i.itype = 'BOKDAISYBARN'
THEN '100'
WHEN i.itype = 'BOKMP3'
THEN '250'
WHEN i.itype = 'LAROMDL'
THEN '250'
WHEN i.itype = 'LAROMTERM'
THEN '250'
WHEN i.itype = 'BOKMP3BARN'
THEN '100'
WHEN i.itype = 'FILM'
THEN '600'
WHEN i.itype = 'KORTLON'
THEN '250'
WHEN i.itype = 'LJUDBOK'
THEN '250'
WHEN i.itype = 'MP3'
THEN '250'
WHEN i.itype = 'STORSTIL'
THEN '250'
WHEN i.itype = 'TIDSKRIFT'
THEN '50'
WHEN i.itype = 'TV-SPEL'
THEN '600'
ELSE 'Schablonpris saknas'
END
AS 'Pris',
i.replacementprice AS 'Faktiskt pris'
FROM items i
LEFT JOIN biblio b ON (i.biblionumber=b.biblionumber)
LEFT JOIN issues l ON (i.itemnumber=l.itemnumber)
LEFT JOIN issues m ON (i.itemnumber=m.itemnumber)
LEFT JOIN borrowers g ON (l.borrowernumber=g.borrowernumber)
LEFT JOIN borrower_attributes p ON (l.borrowernumber=p.borrowernumber)
LEFT JOIN branches u ON (l.branchcode=u.branchcode)
LEFT JOIN branches e ON (i.homebranch=e.branchcode)
LEFT JOIN authorised_values v ON (i.itemlost=v.authorised_value)
WHERE i.itemlost = 1 AND v.category='LOST' AND u.branchcode = <<Välj utlånande bibliotek|branches>> AND i.itemlost_on BETWEEN (<<Faktureringsdatum från (åååå-mm-dd)|date>>-INTERVAL 1 DAY) AND (<<Faktureringsdatum till (åååå-mm-dd)|date>>+INTERVAL 1 DAY)
ORDER By g.cardnumber DESC
Det halvfärdiga underlaget öppnar man som Makroaktiverad Excelbok och sparar på ett lämpligt ställe. Än så länge är det inte användbart eftersom alla låntagare ligger i samma flik. Det problemet löser man genom att köra ett Excelmakro - kod följer nedan. För att det makrot ska funka behöver alla låntagare ha ett personnummer (eller något liknande) och alla förekomster a "Schablonpris saknas" måste ersättas med ett riktigt pris.
Sub Fakturautskrift()
Dim wshS As Worksheet
Dim wshT As Worksheet
Dim s As Long
Dim m As Long
Dim t As Long
Dim c As Long
Dim d As Double
Dim Lastrow As Long
Dim x As Long
Application.ScreenUpdating = False
Set wshS = ActiveSheet
wshS.Range("A1").CurrentRegion.Sort Key1:=wshS.Range("A1"), Header:=xlYes
m = wshS.Range("A" & wshS.Rows.Count).End(xlUp).Row
For s = 2 To m
If s > 2 Then
t = t + 2
wshT.Cells(t, 1).Value = "Summa"
wshT.Cells(t, 2).Value = d
End If
If wshS.Range("A" & s).Value <> wshS.Range("A" & s - 1).Value Then
Set wshT = Worksheets.Add(After:=Worksheets(Worksheets.Count))
For c = 1 To 1
wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value
wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value
wshT.Cells(c, 2).NumberFormat = "0000000000"
wshT.Cells(c, 2).HorizontalAlignment = xlLeft
'Personnummer
Next c
t = 1
d = 0
For c = 2 To 6
wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value
wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value
Next c
t = 6
d = 0
For c = 7 To 7
wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value
wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value
wshT.Cells(c, 2).HorizontalAlignment = xlLeft
'Postnummer
Next c
t = 7
d = 0
For c = 8 To 8
wshT.Cells(c, 1).Value = wshS.Cells(1, c).Value
wshT.Cells(c, 2).Value = wshS.Cells(s, c).Value
Next c
t = 8
d = 0
End If
t = t + 1
For c = 9 To 13
t = t + 1
wshT.Cells(t, 1).Value = wshS.Cells(1, c).Value
wshT.Cells(t, 2).Value = wshS.Cells(s, c).Value
wshT.Cells(c, 1).EntireColumn.AutoFit
wshT.Cells(c, 2).EntireColumn.AutoFit
Next c
d = d + wshS.Cells(s, 13).Value
Lastrow = wshT.Cells(Rows.Count, "B").End(xlUp).Row
For x = 12 To Lastrow Step 8
With wshT.Range("B" & x)
.NumberFormat = "0000000000000"
.HorizontalAlignment = xlLeft
End With
With wshT.Range("B" & x + 1)
.NumberFormat = "m/d/yyyy"
.HorizontalAlignment = xlLeft
End With
Next
Next s
' Last total
t = t + 2
wshT.Cells(t, 1).Value = "Summa"
wshT.Cells(t, 2).Value = d
Application.ScreenUpdating = True
End Sub
När man har kört makrot finns det en flik för varje låntagare. Vi sparar ner varje flik som en pdf och laddar sedan upp den i kommunens ekonomisystem Raindance så att låntagaren får sin faktura därifrån. Man skulle också kunna jobba vidare med sidhuvud/sidfot och använda det här som en riktig faktura
4 Bevakning/reservation av fakturerade böcker
Det sista steget är att lägga en reservation på de fakturerade böckerna, så vi vet vilka fakturor vi ska dra tillbaks från ekonomisystemet. För det har vi skapat särskilda bevakningskort.
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',
qu.cardnumber AS 'Reserverad av streckkod',
qu.surname AS 'Reserverad av efternamn',
qu.firstname AS 'Reserverad av förnamn',
CONCAT('<a href=\"/cgi-bin/koha/reserve/request.pl?biblionumber=', items.biblionumber, '&findborrower=',
CASE
WHEN issues.branchcode = '8bxq'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8bxz'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8bya'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8byb'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8byc'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8byi'
THEN 'torebevakning'
WHEN issues.branchcode = '8byl'
THEN 'kabobevakning'
WHEN issues.branchcode = '8bym'
THEN 'kabobevakning'
WHEN issues.branchcode = '8byo'
THEN 'gullbevakning'
WHEN issues.branchcode = '8byq'
THEN 'maribevakning'
WHEN issues.branchcode = '8byr'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8bys'
THEN 'torebevakning'
WHEN issues.branchcode = '8nyb'
THEN 'tikfbevakning'
WHEN issues.branchcode = '8reg'
THEN 'gullbevakning'
WHEN issues.branchcode = 'gull'
THEN 'gullbevakning'
WHEN issues.branchcode = 'hjo'
THEN 'hjobevakning'
WHEN issues.branchcode = 'hova'
THEN 'gullbevakning'
WHEN issues.branchcode = 'kabo'
THEN 'kabobevakning'
WHEN issues.branchcode = 'kstr'
THEN 'kabobevakning'
WHEN issues.branchcode = 'mari'
THEN 'maribevakning'
WHEN issues.branchcode = 'sksb'
THEN 'sksbbevakning'
WHEN issues.branchcode = 'tida'
THEN 'tidabevakning'
WHEN issues.branchcode = 'tikf'
THEN 'tikfbevakning'
WHEN issues.branchcode = 'tore'
THEN 'torebevakning'
WHEN issues.branchcode = 'skgy'
THEN 'skgybevakning'
WHEN issues.branchcode = 'skgz'
THEN 'skgybevakning'
WHEN issues.branchcode = 'kbro'
THEN 'kbrobevakning'
WHEN issues.branchcode = 'lkav'
THEN 'kbrobevakning'
ELSE ''
END,'\" target="_blank">', CASE
WHEN issues.branchcode = '8bxq'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8bxz'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8bya'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8byb'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8byc'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8byi'
THEN 'torebevakning'
WHEN issues.branchcode = '8byl'
THEN 'kabobevakning'
WHEN issues.branchcode = '8bym'
THEN 'kabobevakning'
WHEN issues.branchcode = '8byo'
THEN 'gullbevakning'
WHEN issues.branchcode = '8byq'
THEN 'maribevakning'
WHEN issues.branchcode = '8byr'
THEN 'sksbbevakning'
WHEN issues.branchcode = '8bys'
THEN 'torebevakning'
WHEN issues.branchcode = '8nyb'
THEN 'tikfbevakning'
WHEN issues.branchcode = '8reg'
THEN 'gullbevakning'
WHEN issues.branchcode = 'gull'
THEN 'gullbevakning'
WHEN issues.branchcode = 'hjo'
THEN 'hjobevakning'
WHEN issues.branchcode = 'hova'
THEN 'gullbevakning'
WHEN issues.branchcode = 'kabo'
THEN 'kabobevakning'
WHEN issues.branchcode = 'kstr'
THEN 'kabobevakning'
WHEN issues.branchcode = 'mari'
THEN 'maribevakning'
WHEN issues.branchcode = 'sksb'
THEN 'sksbbevakning'
WHEN issues.branchcode = 'tida'
THEN 'tidabevakning'
WHEN issues.branchcode = 'tikf'
THEN 'tikfbevakning'
WHEN issues.branchcode = 'tore'
THEN 'torebevakning'
WHEN issues.branchcode = 'skgy'
THEN 'skgybevakning'
WHEN issues.branchcode = 'skgz'
THEN 'skgzbevakning'
WHEN issues.branchcode = 'kbro'
THEN 'kbrobevakning'
WHEN issues.branchcode = 'lkav'
THEN 'lkavbevakning'
ELSE ''
END, '</a>' ) AS 'Reservera för bevakning'
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)
WHERE items.itemlost = 1 AND issues.branchcode = <<Utlånande bibliotek|branches>>
ORDER BY qu.cardnumber ASC, lant.borrowernumber DESC