X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=members%2Fmemberentry.pl;h=2d8caceedb43e2291b98769a3c41823501a39113;hb=b7a6071cf503f2402595fe6d2411459606591821;hp=f6ca2c1b6d405b03422437c87b6f86771347ad91;hpb=bd73c9f9ce8d161a1ed0f2e1205e5c0c8eecb0ae;p=koha.git diff --git a/members/memberentry.pl b/members/memberentry.pl index f6ca2c1b6d..2d8caceedb 100755 --- a/members/memberentry.pl +++ b/members/memberentry.pl @@ -25,6 +25,7 @@ use warnings; # external modules use CGI; # use Digest::MD5 qw(md5_base64); +use List::MoreUtils qw/uniq/; # internal modules use C4::Auth; @@ -100,6 +101,13 @@ my @field_check=split(/\|/,$check_BorrowerMandatoryField); 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 ); @@ -131,6 +139,17 @@ if ( $op eq 'insert' || $op eq 'modify' || $op eq 'save' || $op eq 'duplicate' ) $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'); # @@ -211,13 +230,14 @@ if ( ( $op eq 'insert' ) and !$nodouble ) { 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->{$_}; } } @@ -225,12 +245,10 @@ if ( $guarantorid and ( $category_type eq 'C' || $category_type eq 'P' )) { } ###############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 '')){ @@ -275,6 +293,8 @@ if ($op eq 'save' || $op eq 'insert'){ } 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')) { @@ -328,12 +348,19 @@ if ((!$nok) and $nodouble and ($op eq 'insert' or $op eq 'save')){ # 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 @@ -384,7 +411,7 @@ if ($nok or !$nodouble){ } 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; @@ -397,6 +424,9 @@ if ($op eq 'add'){ 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' ); @@ -502,7 +532,7 @@ my $borrotitlepopup = CGI::popup_menu(-name=>'title', -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 || ''; @@ -516,8 +546,7 @@ while (@relationships) { } my %flags = ( 'gonenoaddress' => ['gonenoaddress' ], - 'lost' => ['lost'], - 'debarred' => ['debarred']); + 'lost' => ['lost']); my @flagdata; @@ -558,7 +587,9 @@ if(scalar(@select_branch) > 0){ # -------------------------------------------------------------------------------------------------------- #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, @@ -636,7 +667,10 @@ if (C4::Context->preference('uppercasesurnames')) { $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{$_}); } @@ -677,7 +711,7 @@ $template->param(CGIbranch=>$CGIbranch) if ($CGIbranch); $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, @@ -734,6 +768,8 @@ sub patron_attributes_form { 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 = (); @@ -743,14 +779,17 @@ sub patron_attributes_form { 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()}) { @@ -765,8 +804,7 @@ sub patron_attributes_form { } $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++; @@ -776,9 +814,18 @@ sub patron_attributes_form { $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); }