Browse Source

This patch allows the Branch Transfer Limits feature to limit transfers either by itemtype ( like the original commit ) or collection code ( new feature ).

[Note inserted by RM: this patch is by Kyle Hall]

Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
3.2.x
koha 15 years ago
committed by Galen Charlton
parent
commit
9c72711a2c
  1. 33
      C4/Circulation.pm
  2. 41
      admin/branch_transfer_limits.pl
  3. 13
      circ/branchtransfers.pl
  4. 1
      installer/data/mysql/en/mandatory/sysprefs.sql
  5. 2
      installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql
  6. 3
      installer/data/mysql/kohastructure.sql
  7. 14
      installer/data/mysql/updatedatabase.pl
  8. 10
      koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tmpl
  9. 2
      koha-tmpl/intranet-tmpl/prog/en/modules/circ/branchtransfers.tmpl

33
C4/Circulation.pm

@ -279,13 +279,13 @@ sub transferbook {
# if using Branch Transfer Limits
if ( C4::Context->preference("UseBranchTransferLimits") == 1 ) {
if ( C4::Context->preference("item-level_itypes") ) {
if ( C4::Context->preference("item-level_itypes") && C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ) {
if ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itype'} ) ) {
$messages->{'NotAllowed'} = $tbr . "::" . $biblio->{'itype'};
$dotransfer = 0;
}
} elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{'itemtype'} ) ) {
$messages->{'NotAllowed'} = $tbr . "::" . $biblio->{'itemtype'};
} elsif ( ! IsBranchTransferAllowed( $tbr, $fbr, $biblio->{ C4::Context->preference("BranchTransferLimitsType") } ) ) {
$messages->{'NotAllowed'} = $tbr . "::" . $biblio->{ C4::Context->preference("BranchTransferLimitsType") };
$dotransfer = 0;
}
}
@ -1547,7 +1547,7 @@ sub AddReturn {
ModItemTransfer($iteminformation->{'itemnumber'}, C4::Context->userenv->{'branch'}, $iteminformation->{'homebranch'});
$messages->{'WasTransfered'} = 1;
} elsif ( C4::Context->preference("UseBranchTransferLimits") == 1
&& ! IsTransferAllowed( $branch, $iteminformation->{'homebranch'}, $iteminformation->{'itemtype'} )
&& ! IsTransferAllowed( $branch, $iteminformation->{'homebranch'}, $iteminformation->{ C4::Context->preference("BranchTransferLimitsType") } )
) {
ModItemTransfer($iteminformation->{'itemnumber'}, C4::Context->userenv->{'branch'}, $iteminformation->{'homebranch'});
$messages->{'WasTransfered'} = 1;
@ -2630,19 +2630,22 @@ return $exist;
=head2 IsBranchTransferAllowed
$allowed = IsBranchTransferAllowed( $toBranch, $fromBranch, $itemtype );
$allowed = IsBranchTransferAllowed( $toBranch, $fromBranch, $code );
Code is either an itemtype or collection doe depending on the pref BranchTransferLimitsType
=cut
sub IsBranchTransferAllowed {
my ( $toBranch, $fromBranch, $itemtype ) = @_;
my ( $toBranch, $fromBranch, $code ) = @_;
if ( $toBranch eq $fromBranch ) { return 1; } ## Short circuit for speed.
my $limitType = C4::Context->preference("BranchTransferLimitsType");
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare('SELECT * FROM branch_transfer_limits WHERE toBranch = ? AND fromBranch = ? AND itemtype = ?');
$sth->execute( $toBranch, $fromBranch, $itemtype );
my $sth = $dbh->prepare("SELECT * FROM branch_transfer_limits WHERE toBranch = ? AND fromBranch = ? AND $limitType = ?");
$sth->execute( $toBranch, $fromBranch, $code );
my $limit = $sth->fetchrow_hashref();
## If a row is found, then that combination is not allowed, if no matching row is found, then the combination *is allowed*
@ -2655,17 +2658,21 @@ sub IsBranchTransferAllowed {
=head2 CreateBranchTransferLimit
CreateBranchTransferLimit( $toBranch, $fromBranch, $itemtype );
CreateBranchTransferLimit( $toBranch, $fromBranch, $code );
$code is either itemtype or collection code depending on what the pref BranchTransferLimitsType is set to.
=cut
sub CreateBranchTransferLimit {
my ( $toBranch, $fromBranch, $itemtype ) = @_;
my ( $toBranch, $fromBranch, $code ) = @_;
my $limitType = C4::Context->preference("BranchTransferLimitsType");
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( itemtype, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
$sth->execute( $itemtype, $toBranch, $fromBranch );
my $sth = $dbh->prepare("INSERT INTO branch_transfer_limits ( $limitType, toBranch, fromBranch ) VALUES ( ?, ?, ? )");
$sth->execute( $code, $toBranch, $fromBranch );
}
=head2 DeleteBranchTransferLimits

41
admin/branch_transfer_limits.pl

@ -40,13 +40,25 @@ my ($template, $loggedinuser, $cookie)
my $dbh = C4::Context->dbh;
my @itemtypes;
# Set the template language for the correct limit type
my $limit_phrase = 'Collection Code';
my $limitType = C4::Context->preference("BranchTransferLimitsType");
if ( $limitType eq 'itemtype' ) {
$limit_phrase = 'Item Type';
}
my @codes;
my @branchcodes;
my $sth = $dbh->prepare("SELECT itemtype FROM itemtypes");
my $sth;
if ( $limitType eq 'ccode' ) {
$sth = $dbh->prepare('SELECT authorised_value AS ccode FROM authorised_values WHERE category = "CCODE"');
} elsif ( $limitType eq 'itemtype' ) {
$sth = $dbh->prepare('SELECT itemtype FROM itemtypes');
}
$sth->execute();
while ( my $row = $sth->fetchrow_hashref ) {
push( @itemtypes, $row->{'itemtype'} );
push( @codes, $row->{ $limitType } );
}
$sth = $dbh->prepare("SELECT branchcode FROM branches");
@ -59,12 +71,12 @@ while ( my $row = $sth->fetchrow_hashref ) {
if ( $input->param('updateLimits') ) {
DeleteBranchTransferLimits();
foreach my $itemtype ( @itemtypes ) {
foreach my $code ( @codes ) {
foreach my $toBranch ( @branchcodes ) {
foreach my $fromBranch ( @branchcodes ) {
my $isSet = $input->param( $itemtype . "_" . $toBranch . "_" . $fromBranch );
my $isSet = $input->param( $code . "_" . $toBranch . "_" . $fromBranch );
if ( $isSet ) {
CreateBranchTransferLimit( $toBranch, $fromBranch, $itemtype );
CreateBranchTransferLimit( $toBranch, $fromBranch, $code );
}
}
}
@ -80,23 +92,23 @@ foreach my $branchcode ( @branchcodes ) {
}
## Build the default data
my @itemtypes_loop;
foreach my $itemtype ( @itemtypes ) {
my @codes_loop;
foreach my $code ( @codes ) {
my @to_branch_loop;
my %row_data;
$row_data{ itemtype } = $itemtype;
$row_data{ code } = $code;
$row_data{ to_branch_loop } = \@to_branch_loop;
foreach my $toBranch ( @branchcodes ) {
my @from_branch_loop;
my %row_data;
$row_data{ itemtype } = $itemtype;
$row_data{ code } = $code;
$row_data{ toBranch } = $toBranch;
$row_data{ from_branch_loop } = \@from_branch_loop;
foreach my $fromBranch ( @branchcodes ) {
my %row_data;
my $isChecked = ! IsBranchTransferAllowed( $toBranch, $fromBranch, $itemtype );
$row_data{ itemtype } = $itemtype;
my $isChecked = ! IsBranchTransferAllowed( $toBranch, $fromBranch, $code );
$row_data{ code } = $code;
$row_data{ toBranch } = $toBranch;
$row_data{ fromBranch } = $fromBranch;
$row_data{ isChecked } = $isChecked;
@ -107,13 +119,14 @@ foreach my $itemtype ( @itemtypes ) {
push( @to_branch_loop, \%row_data );
}
push( @itemtypes_loop, \%row_data );
push( @codes_loop, \%row_data );
}
$template->param(
itemtypes_loop => \@itemtypes_loop,
codes_loop => \@codes_loop,
branchcode_loop => \@branchcode_loop,
limit_phrase => $limit_phrase,
);
output_html_with_http_headers $input, $cookie, $template->output;

13
circ/branchtransfers.pl

@ -193,6 +193,14 @@ if ($found) {
#####################
# Used for branch transfer limits error messages.
my $codeTypeDescription = 'Collection Code';
my $codeType = C4::Context->preference("BranchTransferLimitsType");
if ( $codeType eq 'itemtype' ) {
$codeTypeDescription = 'Item Type';
}
my @errmsgloop;
foreach my $code ( keys %$messages ) {
my %err;
@ -206,9 +214,10 @@ foreach my $code ( keys %$messages ) {
warn $messages->{'NotAllowed'};
warn $branches->{ $messages->{'NotAllowed'} }->{'branchname'};
$err{errnotallowed} = 1;
my ( $tbr, $itemtype ) = split( /::/, $messages->{'NotAllowed'} );
my ( $tbr, $typecode ) = split( /::/, $messages->{'NotAllowed'} );
$err{tbr} = $branches->{ $tbr }->{'branchname'};
$err{itemtype} = $itemtype;
$err{code} = $typecode;
$err{codeType} = $codeTypeDescription;
}
if ( $code eq 'IsPermanent' ) {

1
installer/data/mysql/en/mandatory/sysprefs.sql

@ -214,3 +214,4 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('
INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACDisplayRequestPriority','0','','Show patrons the priority level on holds in the OPAC','YesNo');
INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'UseBranchTransferLimits', '0', '', 'If ON, Koha will will use the rules defined in branch_transfer_limits to decide if an item transfer should be allowed.', 'YesNo');
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', 'Allow staff to override hold policies when placing holds',NULL,'YesNo');
INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice');

2
installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql

@ -216,4 +216,4 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('
INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACDisplayRequestPriority','0','','Afficher l\'ordre des réservation pour les adhérents á l\'opac','YesNo');
INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'UseBranchTransferLimits', '0', '', 'If ON, Koha will will use the rules defined in branch_transfer_limits to decide if an item transfer should be allowed.', 'YesNo');
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', "Autorise le personnel á outrepasser la politique de réservation au moment d'une réservation",NULL,'YesNo');
INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ('BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice');

3
installer/data/mysql/kohastructure.sql

@ -2337,7 +2337,8 @@ CREATE TABLE branch_transfer_limits (
limitId int(8) NOT NULL auto_increment,
toBranch varchar(4) NOT NULL,
fromBranch varchar(4) NOT NULL,
itemtype varchar(4) NOT NULL,
itemtype varchar(4) NULL,
ccode varchar(10) NULL,
PRIMARY KEY (limitId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

14
installer/data/mysql/updatedatabase.pl

@ -2221,6 +2221,20 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion ($DBversion);
}
$DBversion = "3.01.00.013";
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
$dbh->do("ALTER TABLE `branch_transfer_limits` CHANGE `itemtype` `itemtype` VARCHAR( 4 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL");
$dbh->do("ALTER TABLE `branch_transfer_limits` ADD `ccode` VARCHAR( 10 ) NULL ;");
$dbh->do("INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` )
VALUES (
'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice'
);");
print "Upgrade to $DBversion done ( Updated table for Branch Transfer Limits)\n";
SetVersion ($DBversion);
}
=item DropAllForeignKeys($table)
Drop all foreign keys of the table $table

10
koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tmpl

@ -62,7 +62,7 @@
</ul></div>
<h1 class="parameters">Library Transfer Limits</h1>
<div class="help">Check the boxes for the items that should <em>not</em> be transferable.</div>
<div class="help">Check the boxes for the items that should <strong><em>not</em></strong> be transferable.</div>
<div class="table">
<form name="mainform" method="post" action="branch_transfer_limits.pl">
@ -77,8 +77,8 @@
</thead>
<tbody>
<!-- TMPL_LOOP NAME="itemtypes_loop" -->
<tr><th>Limits for Item Type: <!-- TMPL_VAR NAME="itemtype" --></th></tr>
<!-- TMPL_LOOP NAME="codes_loop" -->
<tr><th>Limits for <!--TMPL_VAR NAME="limit_phrase" -->: <!-- TMPL_VAR NAME="code" --></th></tr>
<!-- TMPL_LOOP NAME="to_branch_loop" -->
<tr>
@ -87,11 +87,11 @@
<td>
<!-- TMPL_IF NAME="isChecked" -->
<input
name="<!-- TMPL_VAR NAME="itemtype" -->_<!-- TMPL_VAR NAME="toBranch" -->_<!-- TMPL_VAR NAME="fromBranch" -->"
name="<!-- TMPL_VAR NAME="code" -->_<!-- TMPL_VAR NAME="toBranch" -->_<!-- TMPL_VAR NAME="fromBranch" -->"
type="checkbox" value="1" checked="checked" />
<!-- TMPL_ELSE-->
<input
name="<!-- TMPL_VAR NAME="itemtype" -->_<!-- TMPL_VAR NAME="toBranch" -->_<!-- TMPL_VAR NAME="fromBranch" -->"
name="<!-- TMPL_VAR NAME="code" -->_<!-- TMPL_VAR NAME="toBranch" -->_<!-- TMPL_VAR NAME="fromBranch" -->"
type="checkbox" value="1" />
<!-- TMPL_ELSE-->
<!-- /TMPL_IF -->

2
koha-tmpl/intranet-tmpl/prog/en/modules/circ/branchtransfers.tmpl

@ -143,7 +143,7 @@
<li>Please return item to home library: <!-- TMPL_VAR Name="msg" --></li>
<!-- /TMPL_IF -->
<!-- TMPL_IF Name="errnotallowed" -->
<li>You cannot transfer items of type <b><!-- TMPL_VAR Name="itemtype" --></b> to <b><!-- TMPL_VAR Name="tbr" --></b></li>
<li>You cannot transfer items of <!--TMPL_VAR Name="codeType" --> <b><!-- TMPL_VAR Name="code" --></b> to <b><!-- TMPL_VAR Name="tbr" --></b></li>
<!-- /TMPL_IF -->
<!-- TMPL_IF Name="errdesteqholding" -->
<li>Item is already at destination library.</li>

Loading…
Cancel
Save