#
# 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 debarred debarredcomment 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 $sessionID = $cookies{'CGISESSID'}->value;
my $dbh = C4::Context->dbh;
-
-
# Show borrower informations
if ( $op eq 'show' ) {
- my $filefh = $input->upload('uploadfile');
- my $filecontent = $input->param('filecontent');
+ my $filefh = $input->upload('uploadfile');
+ my $filecontent = $input->param('filecontent');
+ my $patron_list_id = $input->param('patron_list_id');
my @borrowers;
my @cardnumbers;
my @notfoundcardnumbers;
$content =~ s/[\r\n]*$//g;
push @cardnumbers, $content if $content;
}
+ } elsif ( $patron_list_id ) {
+ my ($list) = GetPatronLists( { patron_list_id => $patron_list_id } );
+
+ @cardnumbers =
+ $list->patron_list_patrons()->search_related('borrowernumber')
+ ->get_column('cardnumber')->all();
+
} else {
if ( my $list = $input->param('cardnumberlist') ) {
push @cardnumbers, split( /\s\n/, $list );
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",
}
,
{
- name => "debarred",
- type => "date",
- mandatory => ( grep /debarred/, @mandatoryFields ) ? 1 : 0,
- }
- ,
- {
- name => "debarredcomment",
+ name => "borrowernotes",
type => "text",
- mandatory => ( grep /debarredcomment/, @mandatoryFields ) ? 1 : 0,
+ mandatory => ( grep /borrowernotes/, @mandatoryFields ) ? 1 : 0,
}
,
{
- name => "borrowernotes",
+ name => "opacnote",
type => "text",
- mandatory => ( grep /borrowernotes/, @mandatoryFields ) ? 1 : 0,
+ mandatory => ( grep /opacnote/, @mandatoryFields ) ? 1 : 0,
}
);
# 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 debarred debarredcomment 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} };
+ }
}
#
$template->param( borrowers => \@borrowers );
$template->param( errors => \@errors );
+} else {
+
+ $template->param( patron_lists => [ GetPatronLists() ] );
}
$template->param(
my $borrower = GetMember( %info );
if ( $borrower ) {
$borrower->{branchname} = GetBranchName( $borrower->{branchcode} );
- for ( qw(dateenrolled dateexpiry debarred) ) {
+ for ( qw(dateenrolled dateexpiry) ) {
my $userdate = $borrower->{$_};
unless ($userdate && $userdate ne "0000-00-00" and $userdate ne "9999-12-31") {
$borrower->{$_} = '';