@@ -, +, @@ edition page 1) Go to MARC bibliographic framework Home › Administration › MARC frameworks 2) Click in MARC structure (Default framework) 3) Search field 952 and click in subfields 4) Edit subfield o (Full call number) 5) Click Display more constraints 6) In Others Options, Plugin, Choose cn_browser.pl and save changes 7) Search a record and edit its items Validate : three points (…) beside Full call number input 8) Click in … Validate : if it can not find the given call number, a green line is shown. Otherwise, the given call number is highlighted in red. --- cataloguing/value_builder/cn_browser.pl | 166 ++++++++++++++++++++ .../intranet-tmpl/prog/en/css/staff-global.css | 5 + .../prog/en/modules/tools/cn_browser.tt | 61 +++++++ 3 files changed, 232 insertions(+) create mode 100755 cataloguing/value_builder/cn_browser.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/tools/cn_browser.tt --- a/cataloguing/value_builder/cn_browser.pl +++ a/cataloguing/value_builder/cn_browser.pl @@ -0,0 +1,166 @@ +#!/usr/bin/perl + +use strict; +use warnings; +no warnings 'redefine'; + +use CGI; +use C4::Auth; +use C4::Output; +use POSIX; +use C4::ClassSource; +use URI::Escape; +use Data::Dumper; + +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "328".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} + + +sub plugin { + my ($input) = @_; + my $cgi = new CGI; + my $params = $cgi->Vars; + my $results_per_page = 30; + my $current_page = $cgi->param('page') || 1; + + my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ + template_name => "tools/cn_browser.tt", + query => $cgi, + type => "intranet", + authnotrequired => 0, + flagsrequired => { tools => 'cn_browser', catalogue => 1 }, + }); + + my $cn_sort; + + my $dbh = C4::Context->dbh; + my $sth; + my @cn; + my $query; + my $real_limit = $results_per_page / 2; + my $rows_lt = 999; + my $rows_gt = 999; + my $search; + my $lt = ''; + my $gt = ''; + my $q; + + if ($q = $cgi->param('q')) { + $search = $q; + } + if ($cgi->param('lt')) { + $lt = $cgi->param('lt'); + $search = $lt; + } + if ($cgi->param('gt')) { + $gt = $cgi->param('gt'); + $search = $gt; + } + + #Don't show half the results of show lt or gt + $real_limit = $results_per_page if $search ne $q; + $cn_sort = GetClassSort(undef, undef, $search); + my $cn_sort_q = GetClassSort(undef, undef, $q); + + my $red = 0; + if ($search ne $gt) { + my $green = 0; + #Results before the cn_sort + $query = "SELECT b.title, itemcallnumber, biblionumber, barcode, cn_sort, branchname, author + FROM items AS i + JOIN biblio AS b USING (biblionumber) + LEFT OUTER JOIN branches ON (branches.branchcode = homebranch) + WHERE cn_sort < '$cn_sort' + AND itemcallnumber != '' + ORDER BY cn_sort DESC, itemnumber + LIMIT $real_limit;"; + $sth = $dbh->prepare($query); + $sth->execute(); + while ( my $data = $sth->fetchrow_hashref ) { + if ($data->{itemcallnumber} eq $q) { + $data->{background} = 'red'; + $red = 1; + } + elsif (($data->{cn_sort} lt $cn_sort_q) && !$green && !$red) { + if ($#cn != -1) { + unshift @cn, {'background' => 'green'}; + } + $green = 1; + } + unshift @cn, $data; + } + $rows_lt = $sth->rows; + $sth->finish; + } + + if ($search ne $lt) { + my $green = 0; + #Results after the cn_sort + $query = "SELECT b.title, itemcallnumber, biblionumber, i.cn_sort, branchname, author + FROM items AS i + JOIN biblio AS b USING (biblionumber) + LEFT OUTER JOIN branches ON (branches.branchcode = homebranch) + WHERE i.cn_sort >= '$cn_sort' + AND itemcallnumber != '' + ORDER BY cn_sort, itemnumber + LIMIT $real_limit"; + $sth = $dbh->prepare($query); + $sth->execute(); + while ( my $data = $sth->fetchrow_hashref ) { + if ($data->{itemcallnumber} eq $q) { + $data->{background} = 'red'; + $red = 1; + } + elsif (($data->{cn_sort} gt $cn_sort_q) && !$green && !$red) { + push @cn, {'background' => 'green'}; + $green = 1; + } + push @cn, $data; + } + $rows_gt = $sth->rows; + if ($rows_gt == 0 && !$green && !$red){ + push @cn, {'background' => 'green'}; + } + + $sth->finish; + } + + $template->param('q' => $q); + $template->param('cn_loop' => \@cn) if $#cn != -1; + $template->param('popup' => defined($cgi->param('popup'))); + + + output_html_with_http_headers $cgi, $cookie, $template->output; +} + +1; --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -2780,3 +2780,8 @@ span.onsite_checkout { .branchselector { display: table; } + +div#course_reserves_wrapper > table#course_reserves { + margin: auto; + width:90%; +} --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cn_browser.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cn_browser.tt @@ -0,0 +1,61 @@ +[% INCLUDE 'doc-head-open.inc' %] +Koha › Tools + +[% INCLUDE 'doc-head-close.inc' %] + + +[% UNLESS ( popup ) %] +[% INCLUDE 'header.inc' %] +[% INCLUDE 'cat-search.inc' %] +[% END %] + + + + +

Call numbers browser

+ +
+
+ + + +
+
+
+ + + + + + + + +[% FOREACH cn_loo IN cn_loop %] + + + + + +[% END %] + +
Call NumberTitleBranch
[% cn_loo.itemcallnumber %] + + [% cn_loo.title %] [% cn_loo.subtitle %] [% cn_loo.subtitle2 %] + [% IF ( cn_loo.author ) %] + by [% cn_loo.author %] + [% END %] + + [% cn_loo.branchname %]
+ +
--