Bug 10403: (follow-up) fix test to use vendor created earlier during test
[koha.git] / members / memberentry.pl
index 2a39110..4b410a7 100755 (executable)
@@ -41,6 +41,8 @@ use C4::Log;
 use C4::Letters;
 use C4::Branch; # GetBranches
 use C4::Form::MessagingPreferences;
+use Koha::Borrower::Debarments;
+use Koha::DateUtils;
 
 use vars qw($debug);
 
@@ -62,6 +64,7 @@ my ($template, $loggedinuser, $cookie)
            flagsrequired => {borrowers => 1},
            debug => ($debug) ? 1 : 0,
        });
+
 my $guarantorid    = $input->param('guarantorid');
 my $borrowernumber = $input->param('borrowernumber');
 my $actionType     = $input->param('actionType') || '';
@@ -90,6 +93,29 @@ my $borrower_data;
 my $NoUpdateLogin;
 my $userenv = C4::Context->userenv;
 
+
+## Deal with debarments
+$template->param(
+    debarments => GetDebarments( { borrowernumber => $borrowernumber } ) );
+my @debarments_to_remove = $input->param('remove_debarment');
+foreach my $d ( @debarments_to_remove ) {
+    DelDebarment( $d );
+}
+if ( $input->param('add_debarment') ) {
+
+    my $expiration = $input->param('debarred_expiration');
+    $expiration = $expiration ? output_pref( dt_from_string($expiration), 'iso' ) : undef;
+
+    AddUniqueDebarment(
+        {
+            borrowernumber => $borrowernumber,
+            type           => 'MANUAL',
+            comment        => $input->param('debarred_comment'),
+            expiration     => $expiration,
+        }
+    );
+}
+
 $template->param("uppercasesurnames" => C4::Context->preference('uppercasesurnames'));
 
 my $minpw = C4::Context->preference('minPasswordLength');
@@ -142,16 +168,6 @@ if ( $op eq 'insert' || $op eq 'modify' || $op eq 'save' || $op eq 'duplicate' )
         }
     }
 
-    ## 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');  #
@@ -254,7 +270,18 @@ $newdata{'country'} = $input->param('country') if defined($input->param('country
 
 #builds default userid
 if ( (defined $newdata{'userid'}) && ($newdata{'userid'} eq '')){
-    $newdata{'userid'} = Generate_Userid($borrowernumber, $newdata{'firstname'}, $newdata{'surname'});
+    if ( ( defined $newdata{'firstname'} ) && ( defined $newdata{'surname'} ) ) {
+        # Full page edit, firstname and surname input zones are present
+        $newdata{'userid'} = Generate_Userid( $borrowernumber, $newdata{'firstname'}, $newdata{'surname'} );
+    }
+    elsif ( ( defined $data{'firstname'} ) && ( 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'} );
+    }
+    else {
+        $newdata{'userid'} = $data{'userid'};
+    }
 }
   
 $debug and warn join "\t", map {"$_: $newdata{$_}"} qw(dateofbirth dateenrolled dateexpiry);
@@ -281,7 +308,7 @@ if ($op eq 'save' || $op eq 'insert'){
         $newdata{'surname'} = uc($newdata{'surname'});
     }
 
-  if (C4::Context->preference("IndependantBranches")) {
+  if (C4::Context->preference("IndependentBranches")) {
     if ($userenv && $userenv->{flags} % 2 != 1){
       $debug and print STDERR "  $newdata{'branchcode'} : ".$userenv->{flags}.":".$userenv->{branch};
       unless (!$newdata{'branchcode'} || $userenv->{branch} eq $newdata{'branchcode'}){
@@ -304,7 +331,7 @@ if ($op eq 'save' || $op eq 'insert'){
     foreach my $attr (@$extended_patron_attributes) {
         unless (C4::Members::Attributes::CheckUniqueness($attr->{code}, $attr->{value}, $borrowernumber)) {
             push @errors, "ERROR_extended_unique_id_failed";
-            $template->param(ERROR_extended_unique_id_failed => "$attr->{code}/$attr->{value}");
+            $template->param(ERROR_extended_unique_id_failed_value => "$attr->{code}/$attr->{value}");
         }
     }
   }
@@ -411,7 +438,7 @@ if ($nok or !$nodouble){
         $template->param( step_1 => 1,step_2 => 1,step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1);
     }  
 } 
-if (C4::Context->preference("IndependantBranches")) {
+if (C4::Context->preference("IndependentBranches")) {
     my $userenv = C4::Context->userenv;
     if ($userenv->{flags} % 2 != 1 && $data{'branchcode'}){
         unless ($userenv->{branch} eq $data{'branchcode'}){
@@ -433,9 +460,10 @@ if ($op eq "modify")  {
 if ( $op eq "duplicate" ) {
     $template->param( updtype => 'I' );
     $template->param( step_1 => 1, step_2 => 1, step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1 ) unless $step;
+    $data{'cardnumber'} = "";
 }
 
-$data{'cardnumber'}=fixup_cardnumber($data{'cardnumber'}) if $op eq 'add';
+$data{'cardnumber'}=fixup_cardnumber($data{'cardnumber'}) if ( ( $op eq 'add' ) or ( $op eq 'duplicate' ) );
 if(!defined($data{'sex'})){
     $template->param( none => 1);
 } elsif($data{'sex'} eq 'F'){
@@ -523,8 +551,8 @@ my $roadpopup = CGI::popup_menu(-name=>'streettype',
         -default=>$default_roadtype
         );  
 
-my $default_borrowertitle;
-$default_borrowertitle=$data{'title'} ;
+my $default_borrowertitle = '';
+unless ( $op eq 'duplicate' ) { $default_borrowertitle=$data{'title'} }
 my($borrowertitle)=GetTitles();
 $template->param( title_cgipopup => 1) if ($borrowertitle);
 my $borrotitlepopup = CGI::popup_menu(-name=>'title',
@@ -567,43 +595,22 @@ foreach (keys(%flags)) {
        push @flagdata,\%row;
 }
 
-#get Branches
-my @branches;
-my @select_branch;
-my %select_branches;
-
-my $onlymine=(C4::Context->preference('IndependantBranches') && 
-              C4::Context->userenv && 
-              C4::Context->userenv->{flags} % 2 !=1  && 
-              C4::Context->userenv->{branch}?1:0);
-              
-my $branches=GetBranches($onlymine);
-my $default;
-my $CGIbranch;
-for my $branch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %$branches) {
-    push @select_branch,$branch;
-    $select_branches{$branch} = $branches->{$branch}->{'branchname'};
-    $default = C4::Context->userenv->{'branch'} if (C4::Context->userenv && C4::Context->userenv->{'branch'});
-}
-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)
-if (defined ($data{'branchcode'}) and ( $op eq 'modify' || ( $op eq 'add' && $category_type eq 'C' ) )) {
-    $default = $data{'branchcode'};
+# get Branch Loop
+# in modify mod: userbranch value for GetBranchesLoop() comes from borrowers table
+# in add    mod: userbranch value come from branches table (ip correspondence)
+
+my $userbranch = '';
+if (C4::Context->userenv && C4::Context->userenv->{'branch'}) {
+    $userbranch = C4::Context->userenv->{'branch'};
 }
-$CGIbranch = CGI::scrolling_list(-id    => 'branchcode',
-            -name   => 'branchcode',
-            -values => \@select_branch,
-            -labels => \%select_branches,
-            -size   => 1,
-            -override => 1,  
-            -multiple =>0,
-            -default => $default,
-        );
+
+if (defined ($data{'branchcode'}) and ( $op eq 'modify' || ( $op eq 'add' && $category_type eq 'C' ) )) {
+    $userbranch = $data{'branchcode'};
 }
 
-if(!$CGIbranch){
+my $branchloop = GetBranchesLoop( $userbranch );
+
+if( !$branchloop ){
     $no_add = 1;
     $template->param(no_branches => 1);
 }
@@ -666,13 +673,11 @@ if ( $op eq 'duplicate' ) {
     $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, $data{'dateenrolled'} );
 }
 if (C4::Context->preference('uppercasesurnames')) {
-       $data{'surname'}    =uc($data{'surname'}    );
-       $data{'contactname'}=uc($data{'contactname'});
+    $data{'surname'} &&= uc( $data{'surname'} );
+    $data{'contactname'} &&= uc( $data{'contactname'} );
 }
 
-$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)) {
+foreach (qw(dateenrolled dateexpiry dateofbirth)) {
        $data{$_} = format_date($data{$_});     # back to syspref for display
        $template->param( $_ => $data{$_});
 }
@@ -698,19 +703,17 @@ $debug and warn "memberentry step: $step";
 $template->param(%data);
 $template->param( "step_$step"  => 1) if $step;        # associate with step to know where u are
 $template->param(  step  => $step   ) if $step;        # associate with step to know where u are
-$template->param( debug  => $debug  ) if $debug;
 
 $template->param(
   BorrowerMandatoryField => C4::Context->preference("BorrowerMandatoryField"),#field to test with javascript
   category_type => $category_type,#to know the category type of the borrower
-  DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
   select_city => $select_city,
   "$category_type"  => 1,# associate with step to know where u are
   destination   => $destination,#to know wher u come from and wher u must go in redirect
   check_member    => $check_member,#to know if the borrower already exist(=>1) or not (=>0) 
   "op$op"   => 1);
 
-$template->param(CGIbranch=>$CGIbranch) if ($CGIbranch);
+$template->param( branchloop => $branchloop ) if ( $branchloop );
 $template->param(
   nodouble  => $nodouble,
   borrowernumber  => $borrowernumber, #register number
@@ -722,8 +725,6 @@ $template->param(
   borrotitlepopup => $borrotitlepopup,
   guarantorinfo   => $guarantorinfo,
   flagloop  => \@flagdata,
-  dateformat      => C4::Dates->new()->visual(),
-  C4::Context->preference('dateformat') => 1,
   check_categorytype =>$check_categorytype,#to recover the category type with checkcategorytype function
   category_type =>$category_type,
   modify          => $modify,