Notices and Slips Library

From Koha Wiki
Jump to navigation Jump to search

Template (Do not edit)

CODE : Name : Type

  • Developer: Your name here
  • Status: [ Complete | Partial | In progress | etc. ]
  • Uses template toolkit: [ True | False]
  • Koha module: [ Acquisition | Catalog | Circulation | Claim Acquisition | Holds | Interlibrary loans | Order Acquisition | Patrons | Point of sale | Preservation | Serials (new issue) | Suggestions ]
  • Code: foo
  • Name: foo
  • Type: [ Email | Phone (i-tiva) | Phone | Print | SMS ]
    • HTML message: [ True | False ]
    • Message subject foo
  • Purpose: foo
  • How to test: - Optional -
  • Notes: - Optional -
foo

- Optional - How it looks when rendered


Default notices and slips

Koha 23.11

Notices and Slips - Koha 23.11 defaults

Koha 23.05

Notices and Slips - Koha 23.05 defaults

Koha 22.11

Notices and Slips - Koha 22.11 defaults

Notices and slips using template toolkit

Documentation on using Template Toolkit in notices could be found on page Notices_with_Template_Toolkit


User submitted notices and slips

Tips and tricks for any notice or slip

Manipulating Dates in Notices using Template Toolkit

  • Developer: Kyle Hall
  • Purpose: To show how dates can be manipulated *within* notices using TT
  • Letter Code: All notices
  • Message Transport Type: All types
  • Status: Complete

For options, see https://metacpan.org/pod/distribution/Date-Manip/lib/Date/Manip/Examples.pod#PARSING-AN-AMOUNT-OF-TIME

This example takes the pickup date for a hold, subtracts one day from it, then converts it to the format MM/DD/YYYY

[%- USE date -%]
[%- manip = date.manip -%]
[%- date_prev = manip.DateCalc( hold.expirationdate, '1 day ago' ) -%]
[%- formatted_date_prev = manip.UnixDate(date_prev,"%m/%d/%Y") -%] 

Pick up hold on or before: [% formatted_date_prev %]

ACCOUNT_PAYMENT notice with Paypal payment and Authorized Values

  • Developer: Barton Chittenden
  • Letter Code: ACCOUNT_PAYMENT
  • Message Transport Type: email
  • Purpose: Illustrate how to use authorized values in template toolkit notices.
  • Status: Complete
  • How to test: Make a payment on the patron's 'Pay fines' tab.
[%- USE Price -%]
[%- USE AuthorisedValues -%]
A payment of $[% credit.amount * -1 | $Price %] via  has been applied to your account.

This payment affected the following fees:
[%- FOREACH o IN offsets %]
Description: [% o.debit.description %]
Amount paid: $[% o.amount * -1 | $Price %]
[% IF ( o.credit.note == 'PayPal' ) %] Paid with: [% o.credit.note %] [% ELSE%] Paid with: [% AuthorisedValues.GetByCode('PAYMENT_TYPE', o.credit.payment_type) %]  [% END %]
Amount remaining: $[% o.debit.amountoutstanding | $Price %]
[% END %]

How it looks



Footer for library system with different address lengths

  • Developer: Caroline Cyr La Rose, inLibro, with the help of Jonathan Druart
  • Letter Code: all
  • Message Transport Type: email
  • Purpose: HTML signature footer for a library system where some libraries use address line 2 and 3
  • Status: Complete
  • How to test: You can try using this footer in CHECKOUT and make a checkout in a library that has a long address (3 lines), and in a library that has a short address (only address line 1)
<p class="entete"><<branches.branchname>><br/>
<<branches.branchaddress1>><br/>
[% IF branch.branchaddress2 %] [% branch.branchaddress2 %]<br/> [% END %]
[% IF branch.branchaddress3 %] [% branch.branchaddress3 %]<br/> [% END %]
<<branches.branchcity>> (<<branches.branchstate>>) <<branches.branchzip>><br/>
<strong>Phone : <<branches.branchphone>><br/></strong></p>

How it looks with 3 address lines

How it looks with one address line (no gap!)



Acquisition

Catalog

Circulation

Account payment

  • Developer: Martin Renvoize
  • Letter Code: ACCOUNT_CREDIT
  • Message Transport Type: print
  • Purpose: A receipt to be printed when a patron credits their library account
  • Status: Complete
  • Notes: Bug 26734 updated the previous notice to use modern best practice whilst also introducing the 'tendered' and 'change' variables
  • How to test: Click Print next to a patron's payment on their account
[% USE Price %]
[% PROCESS 'accounts.inc' %]
<table>
[% IF ( LibraryName ) %]
<tr>
  <th colspan="4" class="centerednames">
      <h3>[% LibraryName | html %]</h3>
  </th>
</tr>
[% END %]
<tr>
  <th colspan="4" class="centerednames">
      <h2><u>Fee receipt</u></h2>
  </th>
</tr>
<tr>
  <th colspan="4" class="centerednames">
      <h2>[% Branches.GetName( credit.patron.branchcode ) | html %]</h2>
  </th>
</tr>
<tr>
  <th colspan="4">
      Received with thanks from  [% credit.patron.firstname | html %] [% credit.patron.surname | html %] <br />
      Card number: [% credit.patron.cardnumber | html %]<br />
  </th>
</tr>
<tr>
  <th>Date</th>
  <th>Description of charges</th>
  <th>Note</th>
  <th>Amount</th>
</tr>

<tr class="highlight">
  <td>[% credit.date | $KohaDates %]</td>
  <td>
    [% PROCESS account_type_description account=credit %]
    [%- IF credit.description %], [% credit.description | html %][% END %]
  </td>
  <td>[% credit.note | html %]</td>
  <td class="credit">[% credit.amount | $Price %]</td>
</tr>

[% IF ( tendered ) %]
<tr>
  <td colspan="3">Amount tendered: </td>
  <td>[% tendered | $Price %]</td>
</tr>
<tr>
  <td colspan="3">Change given: </td>
  <td>[% change | $Price %]</td>
</tr>
[% END %]

<tfoot>
<tr>
  <td colspan="3">Total outstanding dues as on date: </td>
  [% IF ( credit.patron.account.balance >= 0 ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% credit.patron.account.balance | $Price %]</td>
</tr>
</tfoot>
</table>


Account payment with timestamp

  • Developer: Aleisha Amohia
  • Letter Code: ACCOUNT_CREDIT
  • Message Transport Type: print
  • Purpose: A receipt to be printed when a patron credits their library account
  • Status: Complete
  • Notes: Bug 16486 adds the timestamp to this existing notice
  • How to test: Click Print next to a patron's payment on their account
<table>
[% IF ( LibraryName ) %]
<tr>
  <th colspan="5" class="centerednames">
      <h3>[% LibraryName | html %]</h3>
  </th>
</tr>
[% END %]
<tr>
  <th colspan="5" class="centerednames">
      <h2><u>Fee receipt</u></h2>
  </th>
</tr>
<tr>
  <th colspan="5" class="centerednames">
      <h2>[% Branches.GetName( patron.branchcode ) | html %]</h2>
  </th>
</tr>
<tr>
  <th colspan="5">
      Received with thanks from  [% patron.firstname | html %] [% patron.surname | html %] <br />
      Card number: [% patron.cardnumber | html %]<br />
  </th>
</tr>
<tr>
  <th>Created</th>
  <th>Updated</th>
  <th>Description of charges</th>
  <th>Note</th>
  <th>Amount</th>
</tr>
[% FOREACH account IN accounts %]
  <tr class="highlight">
    <td>[% account.date | $KohaDates %]</td>
    <td>[% account.timestamp | $KohaDates with_hours = 1 %]</td>
    <td>
      [% PROCESS account_type_description account=account %]
      [%- IF account.description %], [% account.description | html %][% END %]
    </td>
    <td>[% account.note | html %]</td>
    [% IF ( account.amountcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amount | $Price %]</td>
  </tr>
[% END %]
<tfoot>
<tr>
  <td colspan="4">Total outstanding dues as on date: </td>
  [% IF ( totalcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% total | $Price %]</td>
</tr>
</tfoot>
</table>


Account fee

  • Developer: Martin Renvoize
  • Letter Code: ACCOUNT_DEBIT
  • Message Transport Type: print
  • Purpose: A receipt to be printed when a patron credits their library account
  • Status: Complete
  • Notes: Bug 26734 updated the previous notice to use modern best practice
  • How to test: Click Print next to a patron's fee on their account
[% USE Price %]
[% PROCESS 'accounts.inc' %]
<table>
[% IF ( LibraryName ) %]
  <tr>
    <th colspan="5" class="centerednames">
      <h3>[% LibraryName | html %]</h3>
    </th>
  </tr>
[% END %]

<tr>
  <th colspan="5" class="centerednames">
    <h2><u>INVOICE</u></h2>
  </th>
</tr>
<tr>
  <th colspan="5" class="centerednames">
    <h2>[% Branches.GetName( debit.patron.branchcode ) | html %]</h2>
  </th>
</tr>
<tr>
  <th colspan="5" >
    Bill to: [% debit.patron.firstname | html %] [% debit.patron.surname | html %] <br />
    Card number: [% debit.patron.cardnumber | html %]<br />
  </th>
</tr>
<tr>
  <th>Date</th>
  <th>Description of charges</th>
  <th>Note</th>
  <th style="text-align:right;">Amount</th>
  <th style="text-align:right;">Amount outstanding</th>
</tr>

<tr class="highlight">
  <td>[% debit.date | $KohaDates%]</td>
  <td>
    [% PROCESS account_type_description account=debit %]
    [%- IF debit.description %], [% debit.description | html %][% END %]
  </td>
  <td>[% debit.note | html %]</td>
  <td class="debit">[% debit.amount | $Price %]</td>
  <td class="debit">[% debit.amountoutstanding | $Price %]</td>
</tr>

<tfoot>
  <tr>
    <td colspan="4">Total outstanding dues as on date: </td>
    [% IF ( debit.patron.account.balance <= 0 ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% debit.patron.account.balance | $Price %]</td>
  </tr>
</tfoot>
</table>"


Account fee with timestamp

  • Developer: Aleisha Amohia
  • Letter Code: ACCOUNT_DEBIT
  • Message Transport Type: print
  • Purpose: An invoice for the patron
  • Status: Complete
  • Notes: Bug 16486 adds the timestamp to this existing notice
  • How to test: Click Print next to a patron's invoice on their account
<table>
[% IF ( LibraryName ) %]
  <tr>
    <th colspan="6" class="centerednames">
      <h3>[% LibraryName | html %]</h3>
    </th>
  </tr>
[% END %]
<tr>
  <th colspan="6" class="centerednames">
    <h2><u>INVOICE</u></h2>
  </th>
</tr>
<tr>
  <th colspan="6" class="centerednames">
    <h2>[% Branches.GetName( patron.branchcode ) | html %]</h2>
  </th>
</tr>
<tr>
  <th colspan="6" >
    Bill to: [% patron.firstname | html %] [% patron.surname | html %] <br />
    Card number: [% patron.cardnumber | html %]<br />
  </th>
</tr>
<tr>
  <th>Created</th>
  <th>Updated</th>
  <th>Description of charges</th>
  <th>Note</th>
  <th style="text-align:right;">Amount</th>
  <th style="text-align:right;">Amount outstanding</th>
</tr>
[% FOREACH account IN accounts %]
  <tr class="highlight">
    <td>[% account.date | $KohaDates%]</td>
    <td>[% account.timestamp | $KohaDates with_hours = 1 %]</td>
    <td>
      [% PROCESS account_type_description account=account %]
      [%- IF account.description %], [% account.description | html %][% END %]
    </td>
    <td>[% account.note | html %]</td>
    [% IF ( account.amountcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amount | $Price %]</td>
    [% IF ( account.amountoutstandingcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% account.amountoutstanding | $Price %]</td>
  </tr>
[% END %]
<tfoot>
  <tr>
    <td colspan="5">Total outstanding dues as on date: </td>
    [% IF ( totalcredit ) %]<td class="credit">[% ELSE %]<td class="debit">[% END %][% total | $Price %]</td>
  </tr>
</tfoot>
</table>


Hold slip with barcode

  • Developer: Candice Hope, Payson City Library
  • Purpose: Include item barcode in Hold Slip
  • Letter Code: HOLDSLIP (AKA RESERVESLIP)
  • Message Transport Type: email
  • Status: Complete
  • Notes: See Using svc/barcode for notes on individual barcode types.
  • How to test: Put a title on hold, then check the item in. Click Accept and print slip.
<h5>Date: <<today>></h5>

<h3>Hold at <<branches.branchname>></h3>

<h3>ITEM ON HOLD</h3>
<h4><<biblio.title>></h4>
<h5><<biblio.author>></h5>
<img src="/cgi-bin/koha/svc/barcode?barcode=*<<items.barcode>>*&type=Code39"></img>
<ul>
<li><<items.barcode>></li>
<li><<items.itemcallnumber>></li>
<li><<items.copynumber>></li>
</ul>
<p>Notes:
<pre><<reserves.reservenotes>></pre>
</p>
<br />
<br />
<br />
<h3><<borrowers.surname>>, <<borrowers.firstname>></h3>

<ul>
  <li><<borrowers.cardnumber>></li>
  <li><<borrowers.phone>></li>
</ul>
<br />
<br />
<br />

How it looks



Hold slip with barcode

  • Developer: Kyle Hall
  • Purpose: Hold slip using template Toolkit.
  • Letter Code: Customising_Notices_and_Slips#HOLD_SLIP (AKA HOLDSLIP or RESERVESLIP)
  • Message Transport Type: email
  • Status: Complete
  • Notes: Uses [% USE Branches %]. See Koha/Template/Plugin/Branches.pm, as well as other modules in Koha/Template/Plugin/.
  • How to test: Put a title on hold, then check the item in. Click Accept and print slip.
[% USE Branches %]
<h5>Date: <<today>></h5>

<h5>Transfer to/Hold in <<branches.branchname>></h5>

<h5><<borrowers.surname>>, <<borrowers.firstname>></h5>

<ul>
  <li><<borrowers.cardnumber>></li>
  <li><strong><<borrowers.phone>></strong></li>
  <li> <<borrowers.address>><br />
      <<borrowers.address2>><br />
      <<borrowers.city >>  <<borrowers.zipcode>>
  </li>
  <li><<borrowers.email>></li>
</ul>
<br />
<h3>ITEM ON HOLD</h3>
<h5><<biblio.title>></h5>
<h5><<biblio.unititle>></h5>
<h5><<biblio.author>></h5>
<ul>
<li><<items.barcode>></li>
<img src="/cgi-bin/koha/svc/barcode?barcode=*<<items.barcode>>*"></img>
</ul>
<li><<items.itemcallnumber>></li>
<li><<reserves.waitingdate>></li>
</ul>
<h5>Transferred From: [% Branches.GetName('<<items.holdingbranch>>') %]</h5>
<h5>Home Library: [% Branches.GetName('<<items.homebranch>>') %] </h5>
<p>Notes:
<pre><<reserves.reservenotes>></pre>
</p>


Hold slip using only Template Toolkit

  • Developer: Josef Moravec
  • Letter Code: HOLD_SLIP
  • Message Transport Type: email
  • Purpose: Hold slip using template Toolkit
  • Status: Complete
  • Notes: Tested on 17.11 with TSP 143 printer
  • How to test: Put a title on hold, then check the item in. Click Accept and print slip.
<p><small>Printed on: [% today | $KohaDates with_hours => 1 %]</small></p>

<h2 style="border-bottom: 1px solid black; margin-bottom: 1em;">[% branch.branchname %]</h2>
<div style="font-size: 1.2em; font-weight: bold;">[% IF ( biblio.author ) %]<i>[% biblio.author %]</i>:<br />[% END %][% biblio.title %]</div>

<ul>
<li>Barcode: [% item.barcode %]</li>
<li>Waiting until: <strong>[% hold.expirationdate | $KohaDates%]</strong></li>
</ul>
[% IF ( hold.reservenotes ) %]
<p style="margin-bottom: 1em;">Note:<b>[% hold.reservenotes %]</b></p>
[% END %]

<p style="font-size: 1em; font-weight: bold; margin-bottom: 0;">[% borrower.cardnumber %]</p>
<p style="font-size: 1.2em; font-weight: bold; margin-top: 0;">[% borrower.surname %][% IF ( borrower.firstname ) %], [% borrower.firstname %][% END %]</p>


Hold Slip

  • Developer: Lisette Scheer
  • Letter code: HOLD_SLIP
  • Message transport type: email
  • Purpose: Hold slip that will print a hold transfer slip if it is going to another library or will print a hold slip with the expiration date for holds where the patron has an email or SMS number or a space to stamp/write the expiration date after calling the patron.
  • Status: Complete
  • How to test: Print a hold slip for a transfer, a patron with an email and/or SMS number, and a patron with no e-mail/SMS number
[%- USE Branches -%]
[%- USE KohaDates -%]
[% IF hold.branchcode != Branches.GetLoggedInBranchcode() %]
<center> <font size="10">[% hold.branchcode %] - Hold</font></center>
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
[% ELSIF hold.branchcode == Branches.GetLoggedInBranchcode() && borrower.smsalertnumber || borrower.email %]
<h2 style="text-align:right">Hold till: [% hold.expirationdate | $KohaDates dateformat => 'us' | truncate (6, ' ') %]</h2>
<h2 style="text-align:left">  [% borrower.surname %],  [% borrower.firstname  %] 
</h2><br />
    <br />
    <br />
<div id="iteminfo">
<h3> ITEM ON HOLD </h3>
<ul>
<li> [% biblio.title %]  [% IF biblio.author %] // [% biblio.author %] [% END %] // [% item.itemcallnumber %] </li>
<li>[% item.barcode %]</li>
<li>Available Since: [% hold.waitingdate | $KohaDates dateformat => 'us' %]</li>
<ul>
[% IF hold.reservenotes %]
<p> Notes:: <br />
[% hold.reservenotes %]
</ul>
[% END %]
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</div>
[% ELSIF hold.branchcode == Branches.GetLoggedInBranchcode() %]
<h2 style="text-align:right" "padding-left:25px">Hold till: _________</h2>
<h2 style="text-align:left">  [% borrower.surname  %]  [% borrower.firstname %] 
</h2><br />
    <br />
    <br />
<div id="iteminfo">
<h3> ITEM ON HOLD </h3>
<ul>
<li> [% biblio.title %]  [% IF biblio.author %] // [% biblio.author %] [% END %] // [% item.itemcallnumber %] </li>
<li>[% item.barcode %]</li>
<li>Available Since: [% hold.waitingdate | $KohaDates dateformat => 'us' %]</li>
<ul>
[% IF hold.reservenotes %]
<p> Notes:: <br />
[% hold.reservenotes %]
[% END %] </p>
</div>
<h2> Phone Call Checklist </h2>
<h3> [% borrower.firstname %] [% IF borrower.othernames %] ( [% borrower.othernames %] ) [% END %]      </h3>
[% borrower.phone %]
  <h3>Circle one:</h3>
    <p>Spoke directly with the patron.</p>
    <p>Left message with person who answered the phone.</p>
    <p>Left message on answering machine / voice mail.</p>
    <p>Please send a postcard to the patron if you cannot<br />
    contact them by other means within 24 hours of the<br />
    requested item's arrival.</p>
[% END %]


Hold Slip - Extended Options

  • Developer: Lisette Scheer
  • Letter code: HOLD_SLIP
  • Message transport type: email
  • Purpose: Hold slip that will print a hold transfer slip if it is going to another library or will print a hold slip with the expiration date for holds where the patron has an email or SMS number or a space to stamp/write the expiration date after calling the patron. This also has some custom sections for specific patrons such as technichal services holds, holds for library staff, and truncation of patron information for self-serve holds *Branchcode* etc should be replaced with the branchcode you want to use.
  • Status: Complete
  • How to test: Print a hold slip for a transfer, a patron with an email and/or SMS number, and a patron with no e-mail/SMS number
[%- USE Branches -%]
[%- USE KohaDates -%]
[% IF hold.branchcode != "*Branchcode*" %]
<center> <font size="10">[% hold.branchcode %] - Hold</font></center>
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
[% ELSIF hold.branchcode == "*Branchcode*" && borrower.borrowernumber == "*Borrowernumber*" %]    
<h2> MENDING </h2>
<h3>Cancel this hold, change status to "Mending" then initial below:</h3>
<h3>INITIALS: ______</h3>
<h3>Sent to mending on: [% hold.waitingdate | $KohaDates dateformat => 'us' %] </h3>
<br />
<br />
<p> Notes: <br />
[% hold.reservenotes %]
<br />
></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
[% ELSIF hold.branchcode == "*Branchcode*" && borrower.borrowernumber == "*Borrowernumber*" %]
<h2> Send to Access Services Manager</h2>
<h3>INITIALS:______</h3>
<h3>Sent on: [% hold.waitingdate | $KohaDates dateformat => 'us' %] </h3>
<p> Notes: <br />
[% hold.reservenotes %]
<li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
[% ELSIF hold.branchcode == "*Branchcode*" && borrower.categorycode == "*categorycode*" %]
<h3>STAFF HOLD</h3>
<h2 style="text-align:right">Hold till: [% hold.expirationdate | $KohaDates dateformat => 'us' | truncate (6, ' ') %]</h2>
<h2 style="text-align:left">  [% borrower.firstname %]
</h2><br />
    <br />
    <br />
<div id="iteminfo">
<h3> ITEM ON HOLD </h3>
<ul>
<li> [% biblio.title %]  [% IF biblio.author %] // [% biblio.author %] [% END %] // [% item.itemcallnumber %] </li>
<li>[% item.barcode %]</li>
<li>Available Since: [% hold.waitingdate | $KohaDates dateformat => 'us' %]</li>
<ul>
[% IF hold.reservenotes %]
<p> Notes:: <br />
[% hold.reservenotes %]
</ul>
[% END %]
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</div>
[% ELSIF hold.branchcode == "*Branchcode*" && borrower.categorycode != "*Categorycode*" && borrower.smsalertnumber || borrower.email %]
<h2 style="text-align:right">Hold till: [% hold.expirationdate | $KohaDates dateformat => 'us' | truncate (6, ' ') %]</h2>
<h2 style="text-align:left">  [% borrower.surname | truncate (3, ',') %]  [% borrower.firstname | truncate (3, ' ') %] [% borrower.cardnumber  | remove('2185390') %]
</h2><br />
    <br />
    <br />
<div id="iteminfo">
<h3> ITEM ON HOLD </h3>
<ul>
<li> [% biblio.title %]  [% IF biblio.author %] // [% biblio.author %] [% END %] // [% item.itemcallnumber %] </li>
<li>[% item.barcode %]</li>
<li>Available Since: [% hold.waitingdate | $KohaDates dateformat => 'us' %]</li>
<ul>
[% IF hold.reservenotes %]
<p> Notes:: <br />
[% hold.reservenotes %]
</ul>
[% END %]
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</div>
[% ELSIF hold.branchcode == "*branchcode*" %]
<h2 style="text-align:right" "padding-left:25px">Hold till: _________</h2>
<h2 style="text-align:left">  [% borrower.surname | truncate (3, ',') %]  [% borrower.firstname | truncate (3, ' ') %] [% borrower.cardnumber  | remove('2185390') %]
</h2><br />
    <br />
    <br />
<div id="iteminfo">
<h3> ITEM ON HOLD </h3>
<ul>
<li> [% biblio.title %]  [% IF biblio.author %] // [% biblio.author %] [% END %] // [% item.itemcallnumber %] </li>
<li>[% item.barcode %]</li>
<li>Available Since: [% hold.waitingdate | $KohaDates dateformat => 'us' %]</li>
<ul>
[% IF hold.reservenotes %]
<p> Notes:: <br />
[% hold.reservenotes %]
[% END %] </p>
</div>
<h2> Phone Call Checklist </h2>
<h3> [% borrower.firstname %] [% IF borrower.othernames %] ( [% borrower.othernames %] ) [% END %]      </h3>
[% borrower.phone %]
  <h3>Circle one:</h3>
    <p>Spoke directly with the patron.</p>
    <p>Left message with person who answered the phone.</p>
    <p>Left message on answering machine / voice mail.</p>
    <p>Please send a postcard to the patron if you cannot<br />
    contact them by other means within 24 hours of the<br />
    requested item's arrival.</p>
[% END %]


Hold Slip - Print patron "code"

  • Developer: Caroline Cyr La Rose, inLibro
  • Letter code: HOLD_SLIP
  • Message transport type: email
  • Purpose: A library wanted to print a client "code" composed of the 3 first letters of the last name in capital letters, followed by the cardnumber. I just put the first line here, which replaces the borrowers.surname, borrowers.firstname line on the original hold_slip
  • Status: Partial
  • How to test: Print a hold slip
<h2>[% borrower.surname.substr(0,3) FILTER upper %][% borrower.cardnumber %]</h2>


Hold slip - Print partial email only

  • Developer: Caroline Cyr La Rose, inLibro
  • Letter code: HOLD_SLIP
  • Message transport type: email
  • Purpose: Partially hiding the email address of a patron, when the slip is used in public in a self serve shelf for example
  • Status: Partial, remplace the <<borrowers.email>> or [% borrower.email %] with one of the lines below
  • How to test: Print a hold slip

This will print 5 asterisks followed by the ̊@ and domain, so foobar@something.com will become *****@something.com

[% borrower.email.replace('.*@','*****@') %]

This will print the first two letters of the email address, followed by 5 asterisks, followed by the @ and domain, so foobar@something.com will become fo*****@something.com

[% borrower.email.substr(0,2) %][% borrower.email.replace('.*@','*****@') %]


Hold Slip - Print patron messaging preference

  • Developer: Caroline Cyr La Rose, inLibro
  • Letter code: HOLD_SLIP
  • Message transport type: email
  • Purpose:
    • Bug 30076 added the possibility to print the patron's messaging preference on slips, this prints which message transport type the patron has chosen for the "Hold filled" message on the hold slip.
    • I just put the relevant lines here, you can add it anywhere in HOLD_SLIP.
    • This works with email and SMS and will print
      • "Patron's messaging preference: Email" if at least email is checked (just email or email AND SMS)
      • "Patron's messaging preference: SMS" if SMS is checked
      • "Patron's messaging preference: Patron is not notified" if neither email nor SMS is checked
  • Status: Partial
  • How to test: Print a hold slip
<p>Patron messaging preference: 

[% IF ((borrower.has_messaging_preference({ message_name => 'Hold_filled', message_transport_type => 'email' }))) == 1 %]  Email

[% ELSIF ((borrower.has_messaging_preference({ message_name => 'Hold_filled', message_transport_type => 'sms' }))) == 1 %] SMS

[% ELSE %]Patron is not notified [% END %]</p>


Checkouts slip using only Template Toolkit (ISSUESLIP)

  • Developer: Josef Moravec
  • Letter Code: ISSUESLIP
  • Message Transport Type: email
  • Purpose: Checkouts slip using Template Toolkit
  • Status: Complete
  • Notes: Tested on 17.11 with TSP 143 printer
  • How to test: Go to circulation and print checkouts slip.
[% USE ItemTypes %]
[% BLOCK detail %]
<p style="font-size: 1.1em; border-bottom: 1px dotted black;">
[% IF checkout.item.biblio.author %]<i>[% checkout.item.biblio.author | $Remove_MARC_punctuation) %]</i>:[% END %]
<strong>[% checkout.item.biblio.title | $Remove_MARC_punctuation %]</strong>
[%- IF checkout.item.enumchron %], [% checkout.item.enumchron %][% END %]
([% ItemTypes.GetDescription(checkout.item.effective_itemtype) %])
<br />
Checked out on: [% checkout.issuedate | $KohaDates %]<br />
Due date: <b>[% checkout.date_due | $KohaDates as_due_date=1 %]</b><br />
[% branch.branchname %]
[% IF checkout.item.biblio.holds.count %]<br /><i><strong>Reserved</strong>, this checkout cannot be renewed</i>[% END %]
</p>
[% END # Block %]

<small>Printed on: [% today | $KohaDates with_hours=1 %]</small>
<img src="https://path.to.logo" style="width: 6cm" />
[% branch.branchemail %]<br />
[% branch.branchphone %]<br />
<p style="font-size: 1.2em; border-bottom: 1px solid black;">
Patron: <strong>[% IF ( borrower.firstname ) %][% borrower.firstname %] [% END %][% borrower.surname %]</strong> ([% borrower.cardnumber %]) <br />
Checkouts count: <strong>[% checkouts.count %]</strong><br />
</p>
[% FOREACH checkout IN checkouts %]
[% PROCESS detail checkout = checkout %]
[% END %]

[% IF overdues.count %]
[% FOREACH overdue IN overdues %]
[% PROCESS detail checkout = overdue %]
[% END %]
[% END # if overdues %]


ISSUESLIP : Checkouts slip using Template Toolkit : Email

  • Developer: Michael Kuhn
  • Letter Code: ISSUESLIP
  • Message Transport Type: email
  • Purpose: Checkouts slip using Template Toolkit
  • Status: Complete
  • Notes: This is another example on how to print the checkouts part of the slip with translated itemtype descriptions. Example text is in German.
  • How to test: Go to circulation, check something out and wait for the email.
[% FOREACH checkout IN checkouts %]
[%~ SET item = checkout.item %]
[%~ SET biblio = checkout.item.biblio %]
<p>[% biblio.title %] [% item.barcode %]<br />
[% SWITCH item.itype %]
[% CASE '01' %] Kinder-/Jugendbuch<br />
[% CASE '02' %] Sachbuch<br />
[% CASE '03' %] Schöne Literatur<br />
[% CASE '05' %] Cassetten<br />
[% CASE '06' %] CD<br />
[% CASE '07' %] Zeitschriften<br />
[% CASE '08' %] Präsenzmedien<br />
[% END %]
Fällig am: [% checkout.date_due  %]<br /></p>
[% END %]


Remove hours on the due dates on the issue slip

  • Developer: Caroline Cyr La Rose, inLibro, modified from Michael Kuhn's ISSUESLIP above and with the help of Katrin Fischer and Lucas Gass
  • Letter code: ISSUESLIP
  • Message transport type: email
  • Purpose: Slight modification from the default ISSUESLIP to hide the 23:59:00 in the due dates
  • Status: Complete
  • How to test: Print the issue slip from a user file who has checkouts
[%- USE KohaDates -%]
<h3><<branches.branchname>></h3>
Checked out by <<borrowers.firstname>> <<borrowers.surname>> <br />
(<<borrowers.cardnumber>>) <br />

<<today>><br />

<h4>Borrowed today</h4>
[% FOREACH checkout IN checkouts %]
[%~ SET item = checkout.item %]
[%~ SET biblio = checkout.item.biblio %]
<p>[% biblio.title %]<br />
Call number: [% item.itemcallnumber %]<br />
Due date: [% checkout.date_due | $KohaDates %]</p>
[% END %]

[% IF overdues.count %]
<h4>Overdues</h4>
[% FOREACH overdue IN overdues %]
[%~ SET item = overdue.item %]
[%~ SET biblio = overdue.item.biblio %]
<p>[% biblio.title %]<br />
Call number: [% item.itemcallnumber %]<br />
Due date: [% overdue.date_due | $KohaDates %]</p>
[% END %]
[% END %]

<hr>

<h4 style="text-align: center; font-style:italic;">News</h4>
<news>
<div class="newsitem">
<h5 style="margin-bottom: 1px; margin-top: 1px"><b><<opac_news.title>></b></h5>
<p style="margin-bottom: 1px; margin-top: 1px"><<opac_news.content>></p>
<p class="newsfooter" style="font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px">Published on <<opac_news.timestamp>></p>
<hr />
</div>
</news>


Add total value of items on issue slip

  • Developer: Caroline Cyr La Rose
  • Letter code: ISSUESLIP (should work on ISSUEQSLIP too but haven't tested)
  • Message transport type: email
  • Purpose: Add the value of all items at the bottom of the issue slip to raise awareness of the value of the library in the community
  • Status: Complete
  • How to test: Print an issue slip

The base is the slip #Remove hours on the due dates on the issue slip above

The parts that were added are:

[%- USE Price -%]
[% totalValue = 0 %]
[% totalValue = item.price + totalValue %]

(twice, once in Checkouts and once in Overdues)

<p>You saved [% totalValue | $Price %] by using the library today!</p>
[%- USE KohaDates -%]
[%- USE Price -%]
[% totalValue = 0 %]
<h3><<branches.branchname>></h3>
Checked out by <<borrowers.firstname>> <<borrowers.surname>> <br />
(<<borrowers.cardnumber>>) <br />

<<today>><br />

<h4>Borrowed today</h4>
[% FOREACH checkout IN checkouts %]
[%~ SET item = checkout.item %]
[%~ SET biblio = checkout.item.biblio %]
[% totalValue = item.price + totalValue %]
<p>[% biblio.title %]<br />
Call number: [% item.itemcallnumber %]<br />
Due date: [% checkout.date_due | $KohaDates %]</p>
[% END %]

[% IF overdues.count %]
<h4>Overdues</h4>
[% FOREACH overdue IN overdues %]
[%~ SET item = overdue.item %]
[%~ SET biblio = overdue.item.biblio %]
[% totalValue = item.price + totalValue %]
<p>[% biblio.title %]<br />
Call number: [% item.itemcallnumber %]<br />
Due date: [% overdue.date_due | $KohaDates %]</p>
[% END %]
[% END %]

<p>You saved [% totalValue | $Price %] by using the library today!</p>

<hr>

<h4 style="text-align: center; font-style:italic;">News</h4>
<news>
<div class="newsitem">
<h5 style="margin-bottom: 1px; margin-top: 1px"><b><<opac_news.title>></b></h5>
<p style="margin-bottom: 1px; margin-top: 1px"><<opac_news.content>></p>
<p class="newsfooter" style="font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px">Published on <<opac_news.timestamp>></p>
<hr />
</div>
</news>


Add total value of items borrowed to date on issue slip

  • Developer: Martin Renvoize
  • Letter code: ISSUESLIP (should work on ISSUEQSLIP too but haven't tested)
  • Message transport type: email
  • Purpose: Aditionally add the value of historically loaned items at the bottom of the issue slip to raise awareness of the value of the library in the community
  • Status: Complete
  • How to test: Print an issue slip (For user

with loan history)

The base is the slip #Add total value of items borrowed on issue slip above

The parts that were added are:

[%- FOREACH old_checkout IN borrowers.old_checkouts -%][%- totalValue = old_checkout.item.price + totalValue -%][%- END -%]

<p>You have saved [% totalValue | $Price %] by using the library!</p>
[%- USE KohaDates -%]
[%- USE Price -%]
[% totalValue = 0 %]
<h3><<branches.branchname>></h3>
Checked out by <<borrowers.firstname>> <<borrowers.surname>> <br />
(<<borrowers.cardnumber>>) <br />

<<today>><br />

<h4>Borrowed today</h4>
[% FOREACH checkout IN checkouts %]
[%~ SET item = checkout.item %]
[%~ SET biblio = checkout.item.biblio %]
[% totalValue = item.price + totalValue %]
<p>[% biblio.title %]<br />
Call number: [% item.itemcallnumber %]<br />
Due date: [% checkout.date_due | $KohaDates %]</p>
[% END %]

[% IF overdues.count %]
<h4>Overdues</h4>
[% FOREACH overdue IN overdues %]
[%~ SET item = overdue.item %]
[%~ SET biblio = overdue.item.biblio %]
[% totalValue = item.price + totalValue %]
<p>[% biblio.title %]<br />
Call number: [% item.itemcallnumber %]<br />
Due date: [% overdue.date_due | $KohaDates %]</p>
[% END %]
[% END %]

<p>You saved [% totalValue | $Price %] by using the library today!</p>

[%- FOREACH old_checkout IN borrowers.old_checkouts -%]
[% totalValue = old_checkout.item.price + totalValue %]
[%- END -%]
<p>You have saved [% totalValue | $Price %] by using the library!</p>

<hr>

<h4 style="text-align: center; font-style:italic;">News</h4>
<news>
<div class="newsitem">
<h5 style="margin-bottom: 1px; margin-top: 1px"><b><<opac_news.title>></b></h5>
<p style="margin-bottom: 1px; margin-top: 1px"><<opac_news.content>></p>
<p class="newsfooter" style="font-size: 8pt; font-style:italic; margin-bottom: 1px; margin-top: 1px">Published on <<opac_news.timestamp>></p>
<hr />
</div>
</news>


Issue slip with special message for an itemtype

  • Developer: Caroline Cyr La Rose, inLibro
  • Letter Code: ISSUESLIP
  • Message Transport Type: email, but slip is printed
  • Purpose: If a patron checks out an item of a particular item type, print a special message on the issue slip.
  • Status: Partial
  • Notes:
    • In the example, the item type is "GAME" and the message is "Games must be returned to the same library they were checked out from."
    • I only put the "FOREACH checkout" loop of the ISSUESLIP with the added line. You should also add the line in the overdues section, and the quick slip if needed.
  • How to test: Check out a couple of items to a patron, at least one being the special item type, print the issue slip. The message should appear under the item(s) with the special item type.

The added line is [% IF item.itype == 'GAME' %]<strong>Games must be returned to the same library they were checked out from.</strong>[% ELSE %][% END %] The line in the checkout loop <h4>Borrowed today</h4> [% FOREACH checkout IN checkouts %] [%~ SET item = checkout.item %] [%~ SET biblio = checkout.item.biblio %] <p>[% biblio.title %]<br /> Call number: [% item.itemcallnumber %]<br /> Due date: [% checkout.date_due | $KohaDates %]</p> [% IF item.itype == 'GAME' %]<strong>Games must be returned to the same library they were checked out from.</strong>[% ELSE %][% END %] [% END %]



ISSUEQSLIP : Issue slip with current session checkouts only : Email (but slip is printed)

  • Developer: Christopher Brannon (Coeur d'Alene Public Library / Cooperative Information Network)
  • Status: Complete
  • Uses template toolkit: Uses Template Toolkit + Koha notices and slips syntax
  • Koha module: Circulation
  • Code: ISSUEQSLIP
  • Name: Issue Quick Slip
  • Type: Email (but slip is printed see bug 13498)
    • HTML message: True
    • Message subject Issue Quick Slip (irrelevant for slip printing)
  • Purpose: Print only the items that were checked out in the last 15 minutes

Message body:

[% USE date %]
[%- USE KohaDates -%]
[% manip = date.manip %]
<head>
<style>
@page { margin: 15px; }
</style>
</head>

<<today>><br/><br/>

<h4>Checked out during this session</h4>
[% FOREACH checkout IN borrower.checkouts %]
[% SET timebetween = manip.DateCalc(checkout.item.checkout.issuedate , date.format(date.now())) %]<br>
[% timebetween = timebetween.replace(':' , '') %]
[% IF timebetween < 3000 %]
<p>
<b>Title: [% checkout.item.biblio.title %]</b><br />
Barcode: [% checkout.item.barcode %]<br />
Date due: [% checkout.date_due | $KohaDates %]<br />
</p>
[% END %]
[% END %]

<p><i>
Renew items online at [YOUR CATALOG ADDRESS HERE] or call <<branches.branchname>> at <<branches.branchphone>>.
</i></p>
<p><i>
Want to receive notification of holds available and items due more quickly? Talk to library staff on your next visit about adding an email address and/or text messaging number to your account.
</i></p>

ISSUEQSLIP: Issue Quick Slip with current branch checkouts only : Email (but slip is printed)

  • Developer: George Williams (Northeast Kansas Library System)
  • Status: Complete
  • Uses template toolkit: True
  • Koha module: Circulation
  • Code: ISSUEQSLIP
  • Name: Issue Quick Slip
  • Type: Email (but slip is printed see bug 13498)
    • HTML message: True
    • Message subject Issue Quick Slip (irrelevant for slip printing)
  • Purpose: Print only the items that were checked out today at your currently logged in branch.
  • How to test:
  1. Make a backup of your current ISSUEQSLIP
  2. Replace the contents of your ISSUEQSLIP with this template
  3. Check an item out to a borrower
  4. Print quick slip for that borrower
  5. Change your logged in library
  6. Print a new quick slip for that same borrower
  7. Second slip should not include the item checked out before changing libraries

Message body:

[% USE date %]
[% USE Branches %]
[% USE KohaDates %]
[% USE ItemTypes %]

[% date.format(date.now, "%Y/%m/%d at %I:%M %p") %]<br/><br/>

<h4>Checked out today<br/>at this library:</h4>
[% FOREACH checkout IN checkouts %]
  [% IF checkout.branchcode == Branches.GetLoggedInBranchcode() %]
  <p>
    <ins>[% checkout.item.biblio.title FILTER upper %][% IF checkout.item.biblio.subtitle %] [% checkout.item.biblio.subtitle FILTER upper %][% END %]</ins><br />
    [% IF checkout.item.biblio.author %]Author: [% checkout.item.biblio.author %]<br />[% END %]
    Item type: [% ItemTypes.GetDescription(checkout.item.effective_itemtype) %]<br />
    Barcode: [% checkout.item.barcode %]<br />
    Date due: [% checkout.date_due | $KohaDates %]<br />
    -----
  </p>
  [% END %]
[% END %]

ODUE : Overdue notice with total due : Print or Email

  • Developer: Caroline Cyr La Rose, inLibro
  • Status: Complete
  • Uses template toolkit: Uses Template Toolkit + Koha notices and slips syntax
  • Koha module: Circulation
  • Code: ODUE
  • Name: -
  • Type: tested with Print, but possibly works with Email also
    • HTML message: True
    • Message subject -
  • Purpose: Last overdue notice where the patron is informed they will have to pay the replacement cost + administration fees
  • How to test: Create an overdue more than the overdue trigger by making a checkout with a due date in the past; run overdue_notices.pl
  • Notes:
    • Based on "Add total value of items on issue slip" from above
    • In this case, the administration fees for long overdue/lost items is 2$ by item, regardless of itemtype
    • The overdue notice is formatted with tables to align the patron address with an envelope with a window, sorry if the html is confusing
    • Example is in French

Since there is a lot of HTML in my example, here are the important parts

This is added at the top of the notice, it says we are using the Price and KohaDates formats and also resets the totalValue and adminFee to 0

[%- USE Price -%]
[%- USE KohaDates -%]
[% totalValue = 0 %]
[% adminFee = 0 %]

This is added in the FOR EACH overdue loop; each item in the notice adds its replacement price to the totalValue and 2 to adminFee

[% totalValue = item.replacementprice + totalValue %]
[% adminFee = adminFee + 2 %]

Total of all the replacement prices

[% totalValue | $Price %]

Total of all the administration fees

[% adminFee | $Price %]

Total of all the replacement prices + admin fees

[% totalValue + adminFee| $Price %]


Message body:

[%- USE Price -%]
[%- USE KohaDates -%]
[% totalValue = 0 %]
[% adminFee = 0 %]
<img style="max-width:250px;" src="link to image" alt="Logo">

  <table style="width:100%;">
    <tr>
        <td width="45%"></td>
        <td width="35%" align="right"><b>DERNIER AVIS DE RETARD</b></td>
        <td></td>
    </tr>
    <tr>
        <td width="45%"></td>
        <td width="35%" align="right">Date :</td>
        <td><<today>></td>
    </tr>
    <tr>
        <td width="45%"><<borrowers.firstname>> <<borrowers.surname>></td>
        <td width="35%" align="right"></td>
        <td></td>
    </tr>
    <tr>
        <td width="45%"><<borrowers.streetnumber>> <<borrowers.address>><<borrowers.address2>></td>
        <td width="35%" align="right">Numéro de carte :</td>
        <td><<borrowers.cardnumber>></td>
    </tr>
    <tr>
        <td width="45%"><<borrowers.city>> <<borrowers.state>></td>
        <td width="35%" align="right">Téléphone :</td>
        <td><<borrowers.phone>></td>
    </tr>
    <tr>
        <td width="45%"><<borrowers.zipcode>></td>
        <td width="35%" align="right"></td>
        <td></td>
    </tr>
    <tr>
        <td width="45%"></td>
        <td width="35%" align="right"></td>
        <td></td>
    </tr>
  </table>
<p>Bonjour <<borrowers.surname>> <<borrowers.firstname>>,</p>

<p>Malgré nos avis, les documents suivants n'ont pas été rapportés à la bibliothèque. </p>
[% FOREACH overdue IN overdues %]
[%~ SET item = overdue.item %]
[%~ SET biblio = overdue.item.biblio %]
<p>
Titre : <strong>[% biblio.title %]</strong><br/>
Auteur : [% biblio.author %]<br/>
Cote : [% item.itemcallnumber %]<br/>
Code-barres : [% item.barcode %]<br/>
Date d'échéance : [% overdue.date_due | $KohaDates %]<br/>
Coût de remplacement : [% item.replacementprice | $Price %] $<p>
[% totalValue = item.replacementprice + totalValue %]
[% adminFee = adminFee + 2 %]
[% END %]

<p>Nous sommes dans l'obligation de vous facturer le prix de remplacement du ou des documents, plus des frais de traitement de 2 $ par document.</p>

<p>Coût de remplacement des documents : [% totalValue | $Price %] $<br/>

Frais d'administration (2$ par document) : [% adminFee | $Price %] $<br/>

Total : [% totalValue + adminFee| $Price %] $<br/>

<p>Toute facture non acquittée fait perdre à l'abonné le privilège d'emprunter tout document. Si vous éprouvez des difficultés, veuillez communiquer avec nous pour prendre un arrangement.
</p>

<p><<branches.branchname>><br/>
<<branches.branchaddress1>><br/>
<<branches.branchcity>> <<branches.branchstate>> <<branches.branchzip>><br/>
Tél : <<branches.branchphone>><br/>
Courriel : <<branches.branchemail>></p>

Example of printed notice


Claim acquisition

Holds

Interlibrary loans

Order acquisition

Patrons

Point of sale

Preservation

Serials (new issue)

Suggestions