diff --git a/cataloguing/value_builder/cn_browser.pl b/cataloguing/value_builder/cn_browser.pl new file mode 100755 index 0000000000..c1ccbd2b86 --- /dev/null +++ b/cataloguing/value_builder/cn_browser.pl @@ -0,0 +1,162 @@ +use Modern::Perl; +no warnings 'redefine'; + +use CGI; +use C4::Auth; +use C4::ClassSource; + +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 => "cataloguing/value_builder/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 $globalGreen = 0; + 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 ( ( GetClassSort( undef, undef, $data->{itemcallnumber} ) lt $cn_sort_q ) && !$green && !$red ) { + if ( $#cn != -1 ) { + unshift @cn, { 'background' => 'green' }; + $globalGreen = 1; + } + $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 ( ( GetClassSort( undef, undef, $data->{itemcallnumber} ) gt $cn_sort_q ) && !$green && !$red && !$globalGreen ) { + push @cn, { 'background' => 'green' }; + $green = 1; + } + push @cn, $data; + } + $rows_gt = $sth->rows; + + if ( !$green && !$red && !$globalGreen ) { + 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; diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css index dddeaa54c8..4f3fa8a8e3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -2793,3 +2793,8 @@ div.lastchecked { .hq-author { font-weight: bold; } + +div#course_reserves_wrapper > table#course_reserves { + margin: auto; + width:90%; +} diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/cn_browser.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/cn_browser.tt new file mode 100644 index 0000000000..b7f341622f --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/cn_browser.tt @@ -0,0 +1,61 @@ +[% INCLUDE 'doc-head-open.inc' %] +Koha › Tools + +[% INCLUDE 'doc-head-close.inc' %] +[% INCLUDE 'datatables.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 %]
+ +