#
# 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 2 of the License, or (at your option) any later
-# version.
+# 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.
+# 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.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
# modborrowers.pl
#
# Batch Edit Patrons
# Modification for patron's fields:
-# surname firstname branchcode categorycode sort1 sort2 dateenrolled dateexpiry borrowernotes
+# surname firstname branchcode categorycode city state zipcode country sort1
+# sort2 dateenrolled dateexpiry borrowernotes
# And for patron attributes.
use Modern::Perl;
-use CGI;
+use CGI qw ( -utf8 );
use C4::Auth;
use C4::Branch;
use C4::Koha;
use C4::Members::AttributeTypes qw/GetAttributeTypes_hashref/;
use C4::Output;
use List::MoreUtils qw /any uniq/;
+use Koha::DateUtils qw( dt_from_string );
use Koha::List::Patron;
my $input = new CGI;
my $op = $input->param('op') || 'show_form';
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
- { template_name => "tools/modborrowers.tmpl",
+ { template_name => "tools/modborrowers.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
my $patron_categories = C4::Members::GetBorrowercategoryList;
for ( values %$patron_attribute_types ) {
my $attr_type = C4::Members::AttributeTypes->fetch( $_->{code} );
+ # TODO Repeatable attributes are not correctly managed and can cause data lost.
+ # This should be implemented.
+ next if $attr_type->{repeatable};
+ next if $attr_type->{unique_id}; # Don't display patron attributes that must be unqiue
my $options = $attr_type->authorised_value_category
? GetAuthorisedValues( $attr_type->authorised_value_category )
: undef;
{
name => "firstname",
type => "text",
- mandatory => ( grep /surname/, @mandatoryFields ) ? 1 : 0,
+ mandatory => ( grep /firstname/, @mandatoryFields ) ? 1 : 0,
}
,
{
mandatory => ( grep /categorycode/, @mandatoryFields ) ? 1 : 0,
}
,
+ {
+ name => "city",
+ type => "text",
+ mandatory => ( grep /city/, @mandatoryFields ) ? 1 : 0,
+ }
+ ,
+ {
+ name => "state",
+ type => "text",
+ mandatory => ( grep /state/, @mandatoryFields ) ? 1 : 0,
+ }
+ ,
+ {
+ name => "zipcode",
+ type => "text",
+ mandatory => ( grep /zipcode/, @mandatoryFields ) ? 1 : 0,
+ }
+ ,
+ {
+ name => "country",
+ type => "text",
+ mandatory => ( grep /country/, @mandatoryFields ) ? 1 : 0,
+ }
+ ,
{
name => "sort1",
type => @sort1_option ? "select" : "text",
type => "text",
mandatory => ( grep /borrowernotes/, @mandatoryFields ) ? 1 : 0,
}
+ ,
+ {
+ name => "opacnote",
+ type => "text",
+ mandatory => ( grep /opacnote/, @mandatoryFields ) ? 1 : 0,
+ }
);
$template->param('patron_attributes_codes', \@patron_attributes_codes);
# Process modifications
if ( $op eq 'do' ) {
- my @disabled = $input->param('disable_input');
+ my @disabled = $input->multi_param('disable_input');
my $infos;
- for my $field ( qw/surname firstname branchcode categorycode sort1 sort2 dateenrolled dateexpiry borrowernotes/ ) {
+ for my $field ( qw/surname firstname branchcode categorycode city state zipcode country sort1 sort2 dateenrolled dateexpiry borrowernotes opacnote/ ) {
my $value = $input->param($field);
$infos->{$field} = $value if $value;
$infos->{$field} = "" if grep { /^$field$/ } @disabled;
}
- my @attributes = $input->param('patron_attributes');
- my @attr_values = $input->param('patron_attributes_value');
+ for my $field ( qw( dateenrolled dateexpiry ) ) {
+ $infos->{$field} = dt_from_string($infos->{$field}) if $infos->{$field};
+ }
+
+ my @attributes = $input->multi_param('patron_attributes');
+ my @attr_values = $input->multi_param('patron_attributes_value');
my @errors;
- my @borrowernumbers = $input->param('borrowernumber');
+ my @borrowernumbers = $input->multi_param('borrowernumber');
# For each borrower selected
for my $borrowernumber ( @borrowernumbers ) {
# If at least one field are filled, we want to modify the borrower
if ( defined $infos ) {
$infos->{borrowernumber} = $borrowernumber;
my $success = ModMember(%$infos);
- push @errors, { error => "can_not_update", borrowernumber => $infos->{borrowernumber} } if not $success;
+ if (!$success) {
+ my $borrowerinfo = GetBorrowerInfos( borrowernumber => $borrowernumber );
+ $infos->{cardnumber} = $borrowerinfo->{cardnumber} || '';
+ push @errors, { error => "can_not_update", borrowernumber => $infos->{borrowernumber}, cardnumber => $infos->{cardnumber} };
+ }
}
#