Bug 20991: Do not lost patron's category when editing a patron
[koha.git] / members / memberentry.pl
index 2d002c3..f10002a 100755 (executable)
@@ -151,13 +151,13 @@ $template->param( "quickadd" => 1 ) if ( $quickadd );
 $template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' );
 $template->param( "checked" => 1 ) if ( defined($nodouble) && $nodouble eq 1 );
 if ( $op eq 'modify' or $op eq 'save' or $op eq 'duplicate' ) {
-    if ( $patron and $userenv and $userenv->{number} ) { # Allow DB user to create a superlibrarian patron
-        my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in";
-        output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
-    }
+    my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in";
+    output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
 
     $borrower_data = $patron->unblessed;
     $borrower_data->{category_type} = $patron->category->category_type;
+} else {
+    $patron = Koha::Patron->new;
 }
 my $categorycode  = $input->param('categorycode') || $borrower_data->{'categorycode'};
 my $category_type = $input->param('category_type') || '';
@@ -277,14 +277,19 @@ $newdata{'lang'}    = $input->param('lang')    if defined($input->param('lang'))
 # builds default userid
 # userid input text may be empty or missing because of syspref BorrowerUnwantedField
 if ( ( defined $newdata{'userid'} && $newdata{'userid'} eq '' ) || $check_BorrowerUnwantedField =~ /userid/ && !defined $data{'userid'} ) {
-    if ( ( defined $newdata{'firstname'} ) && ( defined $newdata{'surname'} ) ) {
+    if ( ( defined $newdata{'firstname'} || $category_type eq 'I' ) && ( defined $newdata{'surname'} ) ) {
         # Full page edit, firstname and surname input zones are present
-        $newdata{'userid'} = Generate_Userid( $borrowernumber, $newdata{'firstname'}, $newdata{'surname'} );
+        $patron->firstname($newdata{firstname});
+        $patron->surname($newdata{surname});
+        $newdata{'userid'} = $patron->generate_userid;
     }
-    elsif ( ( defined $data{'firstname'} ) && ( defined $data{'surname'} ) ) {
+    elsif ( ( defined $data{'firstname'} || $category_type eq 'I' ) && ( defined $data{'surname'} ) ) {
         # Partial page edit (access through "Details"/"Library details" tab), firstname and surname input zones are not used
         # Still, if the userid field is erased, we can create a new userid with available firstname and surname
-        $newdata{'userid'} = Generate_Userid( $borrowernumber, $data{'firstname'}, $data{'surname'} );
+        # FIXME clean thiscode newdata vs data is very confusing
+        $patron->firstname($data{firstname});
+        $patron->surname($data{surname});
+        $newdata{'userid'} = $patron->generate_userid;
     }
     else {
         $newdata{'userid'} = $data{'userid'};
@@ -609,7 +614,7 @@ foreach my $category_type (qw(C A S P I X)) {
           { 'categorycode' => $patron_category->categorycode,
             'categoryname' => $patron_category->description,
             'categorycodeselected' =>
-              ( ( defined( $borrower_data->{'categorycode'} ) && $patron_category->categorycode eq $borrower_data->{'categorycode'} ) || ( defined($categorycode) && $patron_category->categorycode eq $categorycode ) ),
+              ( defined($categorycode) && $patron_category->categorycode eq $categorycode ),
           };
     }
     my %typehash;