# external modules
use CGI;
# use Digest::MD5 qw(md5_base64);
+use List::MoreUtils qw/uniq/;
# internal modules
use C4::Auth;
foreach (@field_check) {
$template->param( "mandatory$_" => 1);
}
+# function to designate unwanted fields
+my $check_BorrowerUnwantedField=C4::Context->preference("BorrowerUnwantedField");
+@field_check=split(/\|/,$check_BorrowerUnwantedField);
+foreach (@field_check) {
+ next unless m/\w/o;
+ $template->param( "no$_" => 1);
+}
$template->param( "add" => 1 ) if ( $op eq 'add' );
$template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' );
$template->param( "checked" => 1 ) if ( defined($nodouble) && $nodouble eq 1 );
$newdata{$key} =~ s/\"/"/g unless $key eq 'borrowernotes' or $key eq 'opacnote';
}
}
+
+ ## Manipulate debarred
+ if ( $newdata{debarred} ) {
+ $newdata{debarred} = $newdata{datedebarred} ? $newdata{datedebarred} : "9999-12-31";
+ } elsif ( exists( $newdata{debarred} ) && !( $newdata{debarred} ) ) {
+ undef( $newdata{debarred} );
+ undef( $newdata{debarredcomment} );
+ } elsif ( exists( $newdata{debarredcomment} ) && $newdata{debarredcomment} eq "" ) {
+ undef( $newdata{debarredcomment} );
+ }
+
my $dateobject = C4::Dates->new();
my $syspref = $dateobject->regexp(); # same syspref format for all 3 dates
my $iso = $dateobject->regexp('iso'); #
if ( $guarantorid and ( $category_type eq 'C' || $category_type eq 'P' )) {
if (my $guarantordata=GetMember(borrowernumber => $guarantorid)) {
$guarantorinfo=$guarantordata->{'surname'}." , ".$guarantordata->{'firstname'};
- if ( !defined($data{'contactname'}) or $data{'contactname'} eq '' or
- $data{'contactname'} ne $guarantordata->{'surname'} ) {
- $newdata{'contactfirstname'}= $guarantordata->{'firstname'};
- $newdata{'contactname'} = $guarantordata->{'surname'};
- $newdata{'contacttitle'} = $guarantordata->{'title'};
+ $newdata{'contactfirstname'}= $guarantordata->{'firstname'};
+ $newdata{'contactname'} = $guarantordata->{'surname'};
+ $newdata{'contacttitle'} = $guarantordata->{'title'};
+ if ( $op eq 'add' ) {
foreach (qw(streetnumber address streettype address2
- zipcode country city phone phonepro mobile fax email emailpro branchcode)) {
+ zipcode country city state phone phonepro mobile fax email emailpro branchcode
+ B_streetnumber B_streettype B_address B_address2
+ B_city B_state B_zipcode B_country B_email B_phone)) {
$newdata{$_} = $guarantordata->{$_};
}
}
}
###############test to take the right zipcode, country and city name ##############
-if (!defined($guarantorid) or $guarantorid eq '' or $guarantorid eq '0') {
- # set only if parameter was passed from the form
- $newdata{'city'} = $input->param('city') if defined($input->param('city'));
- $newdata{'zipcode'} = $input->param('zipcode') if defined($input->param('zipcode'));
- $newdata{'country'} = $input->param('country') if defined($input->param('country'));
-}
+# set only if parameter was passed from the form
+$newdata{'city'} = $input->param('city') if defined($input->param('city'));
+$newdata{'zipcode'} = $input->param('zipcode') if defined($input->param('zipcode'));
+$newdata{'country'} = $input->param('country') if defined($input->param('country'));
#builds default userid
if ( (defined $newdata{'userid'}) && ($newdata{'userid'} eq '')){
}
my $password = $input->param('password');
+ my $password2 = $input->param('password2');
+ push @errors, "ERROR_password_mismatch" if ( $password ne $password2 );
push @errors, "ERROR_short_password" if( $password && $minpw && $password ne '****' && (length($password) < $minpw) );
if (C4::Context->preference('ExtendedPatronAttributes')) {
# if we manage to find a valid email address, send notice
if ($emailaddr) {
$newdata{emailaddr} = $emailaddr;
- my $letter = getletter ('members', "ACCTDETAILS:$newdata{'branchcode'}") ;
- # if $branch notice fails, then email a default notice instead.
- $letter = getletter ('members', "ACCTDETAILS") if !$letter;
- SendAlerts ( 'members' , \%newdata , $letter ) if $letter
+ my $err;
+ eval {
+ $err = SendAlerts ( 'members', \%newdata, "ACCTDETAILS" );
+ };
+ if ( $@ ) {
+ $template->param(error_alert => $@);
+ } elsif ( defined $err->{error} and $err->{error} eq "no_email" ) {
+ $template->{VARS}->{'error_alert'} = "no_email";
+ } else {
+ $template->{VARS}->{'info_alert'} = 1;
+ }
}
- }
+ }
if ($data{'organisations'}){
# need to add the members organisations
}
if (C4::Context->preference("IndependantBranches")) {
my $userenv = C4::Context->userenv;
- if ($userenv->{flags} % 2 != 1 && $data{branchcode}){
+ if ($userenv->{flags} % 2 != 1 && $data{'branchcode'}){
unless ($userenv->{branch} eq $data{'branchcode'}){
print $input->redirect("/cgi-bin/koha/members/members-home.pl");
exit;
if ($op eq "modify") {
$template->param( updtype => 'M',modify => 1 );
$template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1, step_6 => 1) unless $step;
+ if ( $step == 4 ) {
+ $template->param( categorycode => $borrower_data->{'categorycode'} );
+ }
}
if ( $op eq "duplicate" ) {
$template->param( updtype => 'I' );
-default=>$default_borrowertitle
);
-my @relationships = split /,|\|/, C4::Context->preference('BorrowerRelationship');
+my @relationships = split /,|\|/, C4::Context->preference('borrowerRelationship');
my @relshipdata;
while (@relationships) {
my $relship = shift @relationships || '';
}
my %flags = ( 'gonenoaddress' => ['gonenoaddress' ],
- 'lost' => ['lost'],
- 'debarred' => ['debarred']);
+ 'lost' => ['lost']);
my @flagdata;
# --------------------------------------------------------------------------------------------------------
#in modify mod :default value from $CGIbranch comes from borrowers table
#in add mod: default value come from branches table (ip correspendence)
-$default=$data{'branchcode'} if ($op eq 'modify' || ($op eq 'add' && $category_type eq 'C' && $data{'branchcode'}));
+if (defined ($data{'branchcode'}) and ( $op eq 'modify' || ( $op eq 'add' && $category_type eq 'C' ) )) {
+ $default = $data{'branchcode'};
+}
$CGIbranch = CGI::scrolling_list(-id => 'branchcode',
-name => 'branchcode',
-values => \@select_branch,
$data{'surname'} =uc($data{'surname'} );
$data{'contactname'}=uc($data{'contactname'});
}
-foreach (qw(dateenrolled dateexpiry dateofbirth)) {
+
+$data{debarred} = C4::Overdues::CheckBorrowerDebarred($borrowernumber);
+$data{datedebarred} = $data{debarred} if ( $data{debarred} && $data{debarred} ne "9999-12-31" );
+foreach (qw(dateenrolled dateexpiry dateofbirth datedebarred)) {
$data{$_} = format_date($data{$_}); # back to syspref for display
$template->param( $_ => $data{$_});
}
$template->param(
nodouble => $nodouble,
borrowernumber => $borrowernumber, #register number
- guarantorid => (($borrower_data->{'guarantorid'})) ? $borrower_data->{'guarantorid'} : $guarantorid,
+ guarantorid => ($borrower_data->{'guarantorid'} || $guarantorid),
ethcatpopup => $ethcatpopup,
relshiploop => \@relshipdata,
city_loop => $city_arrayref,
return;
}
my $attributes = C4::Members::Attributes::GetBorrowerAttributes($borrowernumber);
+ my @classes = uniq( map {$_->{class}} @$attributes );
+ @classes = sort @classes;
# map patron's attributes into a more convenient structure
my %attr_hash = ();
my @attribute_loop = ();
my $i = 0;
+ my %items_by_class;
foreach my $type_code (map { $_->{code} } @types) {
my $attr_type = C4::Members::AttributeTypes->fetch($type_code);
my $entry = {
+ class => $attr_type->class(),
code => $attr_type->code(),
description => $attr_type->description(),
repeatable => $attr_type->repeatable(),
password_allowed => $attr_type->password_allowed(),
category => $attr_type->authorised_value_category(),
+ category_code => $attr_type->category_code(),
password => '',
};
if (exists $attr_hash{$attr_type->code()}) {
}
$i++;
$newentry->{form_id} = "patron_attr_$i";
- #use Data::Dumper; die Dumper($entry) if $entry->{use_dropdown};
- push @attribute_loop, $newentry;
+ push @{$items_by_class{$attr_type->class()}}, $newentry;
}
} else {
$i++;
$newentry->{auth_val_loop} = GetAuthorisedValues($attr_type->authorised_value_category());
}
$newentry->{form_id} = "patron_attr_$i";
- push @attribute_loop, $newentry;
+ push @{$items_by_class{$attr_type->class()}}, $newentry;
}
}
+ while ( my ($class, @items) = each %items_by_class ) {
+ my $lib = GetAuthorisedValueByCode( 'PA_CLASS', $class ) || $class;
+ push @attribute_loop, {
+ class => $class,
+ items => @items,
+ lib => $lib,
+ }
+ }
+
$template->param(patron_attributes => \@attribute_loop);
}