push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/userflags.sql";
push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/userpermissions.sql";
push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/audio_alerts.sql";
+ push @fnames, C4::Context->config('intranetdir') . "/installer/data/mysql/mandatory/refund_lost_item_fee_rules.sql";
foreach my $file (@fnames) {
# warn $file;
undef $/;
use Exception::Class (
+ # General exceptions
'Koha::Exceptions::Exception' => {
description => 'Something went wrong!',
},
isa => 'Koha::Exceptions::Exception',
description => 'Same object already exists',
},
-
+ 'Koha::Exceptions::CannotDeleteDefault' => {
+ isa => 'Koha::Exceptions::Exception',
+ description => 'The default value cannot be deleted'
+ },
+ 'Koha::Exceptions::MissingParameter' => {
+ isa => 'Koha::Exceptions::Exception',
+ description => 'A required parameter is missing'
+ },
+ # Virtualshelves exceptions
'Koha::Exceptions::Virtualshelves::DuplicateObject' => {
isa => 'Koha::Exceptions::DuplicateObject',
description => "Duplicate shelf object",
--- /dev/null
+package Koha::RefundLostItemFeeRule;
+
+# Copyright Theke Solutions 2016
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use Modern::Perl;
+
+use Koha::Database;
+use Koha::Exceptions;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::RefundLostItemFeeRule - Koha RefundLostItemFeeRule object class
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'RefundLostItemFeeRule';
+}
+
+=head3 delete
+
+This is an overloaded delete method. It throws an exception if the wildcard
+branch is passed (it can only be modified, but not deleted).
+
+=cut
+
+sub delete {
+ my ($self) = @_;
+
+ if ( $self->branchcode eq '*' ) {
+ Koha::Exceptions::CannotDeleteDefault->throw;
+ }
+
+ return $self->SUPER::delete($self);
+}
+
+
+1;
--- /dev/null
+package Koha::RefundLostItemFeeRules;
+
+# Copyright Theke Solutions 2016
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use Modern::Perl;
+
+use Koha::Database;
+use Koha::Exceptions;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::RefundLostItemFeeRules - Koha RefundLostItemFeeRules object set class
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'RefundLostItemFeeRule';
+}
+
+=head3 object_class
+
+=cut
+
+sub object_class {
+ return 'Koha::RefundLostItemFeeRule';
+}
+
+=head3 should_refund
+
+Koha::RefundLostItemFeeRules->should_refund()
+
+Returns a boolean telling if the fee needs to be refund given the
+passed params, and the current rules/sysprefs configuration.
+
+=cut
+
+sub should_refund {
+
+ my $self = shift;
+ my $params = shift;
+
+ return $self->_effective_branch_rule( $self->_choose_branch( $params ) );
+}
+
+
+=head3 _effective_branch_rule
+
+Koha::RefundLostItemFeeRules->_effective_branch_rule
+
+Given a branch, returns a boolean representing the resulting rule.
+It tries the branch-specific first. Then falls back to the defined default.
+
+=cut
+
+sub _effective_branch_rule {
+
+ my $self = shift;
+ my $branch = shift;
+
+ my $specific_rule = $self->find({ branchcode => $branch });
+
+ return ( defined $specific_rule )
+ ? $specific_rule->refund
+ : $self->_default_rule;
+}
+
+=head3 _choose_branch
+
+my $branch = Koha::RefundLostItemFeeRules->_choose_branch({
+ current_branch => 'current_branch_code',
+ item_home_branch => 'item_home_branch',
+ item_holding_branch => 'item_holding_branch'
+});
+
+Helper function that determines the branch to be used to apply the rule.
+
+=cut
+
+sub _choose_branch {
+
+ my $self = shift;
+ my $param = shift;
+
+ my $behaviour = Koha::Config::SysPrefs
+ ->find( 'RefundLostOnReturnControl' )
+ ->value // 'CheckinLibrary';
+
+ my $param_mapping = {
+ CheckinLibrary => 'current_branch',
+ ItemHomeBranch => 'item_home_branch',
+ ItemHoldingBranch => 'item_holding_branch'
+ };
+
+ my $branch = $param->{ $param_mapping->{ $behaviour } };
+
+ if ( !defined $branch ) {
+ Koha::Exceptions::MissingParameter->throw(
+ "$behaviour requires the " .
+ $param_mapping->{ $behaviour } .
+ " param"
+ );
+ }
+
+ return $branch;
+}
+
+=head3 _default_rule (internal)
+
+This function returns the default rule defined for refunding lost
+item fees on return.
+
+=cut
+
+sub _default_rule {
+ my $self = shift;
+
+ return $self->find({ branchcode => '*' })->refund;
+}
+
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::RefundLostItemFeeRule;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::RefundLostItemFeeRule
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<refund_lost_item_fee_rules>
+
+=cut
+
+__PACKAGE__->table("refund_lost_item_fee_rules");
+
+=head1 ACCESSORS
+
+=head2 branchcode
+
+ data_type: 'varchar'
+ default_value: (empty string)
+ is_nullable: 0
+ size: 10
+
+=head2 refund
+
+ data_type: 'tinyint'
+ default_value: 0
+ is_nullable: 0
+
+=cut
+
+__PACKAGE__->add_columns(
+ "branchcode",
+ { data_type => "varchar", default_value => "", is_nullable => 0, size => 10 },
+ "refund",
+ { data_type => "tinyint", default_value => 0, is_nullable => 0 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</branchcode>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("branchcode");
+
+
+# Created by DBIx::Class::Schema::Loader v0.07042 @ 2016-05-31 02:45:35
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:K+2D3R+JxrovgvjdqA8xdw
+
+
+# You can replace this text with custom code or comments, and it will be preserved on regeneration
+1;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
+-- Table structure for table `refund_lost_item_fee_rules`
+--
+
+DROP TABLE IF EXISTS `refund_lost_item_fee_rules`;
+CREATE TABLE `refund_lost_item_fee_rules` ( -- refund lost item fee rules tbale
+ `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
+ `refund` tinyint(1) NOT NULL default 0, -- control wether to refund lost item fees on return
+ PRIMARY KEY (`branchcode`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
-- Table structure for table `items`
--
--- /dev/null
+-- Default refund lost item fee rule
+INSERT INTO refund_lost_item_fee_rules (branchcode,refund) VALUES ( '*', '1' );