bug 2870, fixes non-populating of guarantor fields
[koha_gimpoz] / members / memberentry.pl
index 91095ad..0466a8b 100755 (executable)
@@ -19,7 +19,7 @@
 
 # pragma
 use strict;
-# use warnings;  # FIXME: really.
+use warnings;
 
 # external modules
 use CGI;
@@ -70,6 +70,10 @@ my $cardnumber     = $input->param('cardnumber');
 my $check_member   = $input->param('check_member');
 my $name_city      = $input->param('name_city');
 my $nodouble       = $input->param('nodouble');
+$nodouble = 1 if $op eq 'modify'; # FIXME hack to represent fact that if we're
+                                  # modifying an existing patron, it ipso facto
+                                  # isn't a duplicate.  Marking FIXME because this
+                                  # script needs to be refactored.
 my $select_city    = $input->param('select_city');
 my $nok            = $input->param('nok');
 my $guarantorinfo  = $input->param('guarantorinfo');
@@ -95,7 +99,7 @@ foreach (@field_check) {
        $template->param( "mandatory$_" => 1);    
 }
 $template->param("add"=>1) if ($op eq 'add');
-$template->param("checked" => 1) if ($nodouble eq 1);
+$template->param("checked" => 1) if (defined($nodouble) && $nodouble eq 1);
 ($borrower_data = GetMember($borrowernumber,'borrowernumber')) if ($op eq 'modify' or $op eq 'save');
 my $categorycode  = $input->param('categorycode') || $borrower_data->{'categorycode'};
 my $category_type = $input->param('category_type');
@@ -115,8 +119,10 @@ my %newdata;       # comes from $input->param()
 if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') {
     my @names= ($borrower_data && $op ne 'save') ? keys %$borrower_data : $input->param();
     foreach my $key (@names) {
-        $newdata{$key} = $input->param($key) if (defined $input->param($key));
-        $newdata{$key} =~ s/\"/"/gg unless $key eq 'borrowernotes' or $key eq 'opacnote';
+        if (defined $input->param($key)) {
+            $newdata{$key} = $input->param($key);
+            $newdata{$key} =~ s/\"/"/g unless $key eq 'borrowernotes' or $key eq 'opacnote';
+        }
     }
     my $dateobject = C4::Dates->new();
     my $syspref = $dateobject->regexp();               # same syspref format for all 3 dates
@@ -161,21 +167,21 @@ if (($op eq 'insert') and !$nodouble){
 }
 
   #recover all data from guarantor address phone ,fax... 
-if (($category_type eq 'C' || $category_type eq 'P') and $guarantorid ne '' ){
+if (defined($guarantorid) and ($category_type eq 'C' || $category_type eq 'P') and $guarantorid ne '' ){
   my $guarantordata=GetMember($guarantorid);
   $guarantorinfo=$guarantordata->{'surname'}." , ".$guarantordata->{'firstname'};
-  if (($data{'contactname'} eq '' or $data{'contactname'} ne $guarantordata->{'surname'})) {
-    $data{'contactfirstname'}= $guarantordata->{'firstname'};
-    $data{'contactname'}     = $guarantordata->{'surname'};
-    $data{'contacttitle'}    = $guarantordata->{'title'};
+  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'};
          foreach (qw(streetnumber address streettype address2 zipcode city phone phonepro mobile fax email emailpro branchcode)) {
-               $data{$_} = $guarantordata->{$_};
+               $newdata{$_} = $guarantordata->{$_};
        }
   }
 }
 
 ###############test to take the right zipcode and city name ##############
-if ($guarantorid eq '') {
+if (!defined($guarantorid) or $guarantorid eq '') {
     # 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'));
@@ -329,8 +335,10 @@ if ($op eq "modify")  {
 }
 # my $cardnumber=$data{'cardnumber'};
 $data{'cardnumber'}=fixup_cardnumber($data{'cardnumber'}) if $op eq 'add';
-if ($data{'sex'} eq 'F'){
-    $template->param(female => 1);
+if(!defined($data{'sex'})){
+    $template->param( none => 1);
+} elsif($data{'sex'} eq 'F'){
+    $template->param( female => 1);
 } elsif ($data{'sex'} eq 'M'){
     $template->param(  male => 1);
 } else {
@@ -360,7 +368,9 @@ foreach (qw(C A S P I X)) {
        foreach my $cat (@$categories){
                push @categoryloop,{'categorycode' => $cat,
                          'categoryname' => $labels->{$cat},
-                         'categorycodeselected' => ($cat eq $borrower_data->{'categorycode'} || $cat eq $categorycode),
+                         'categorycodeselected' => ((defined($borrower_data->{'categorycode'}) && 
+                                                     $cat eq $borrower_data->{'categorycode'}) 
+                                                     || (defined($categorycode) && $cat eq $categorycode)),
                };
        }
        my %typehash;
@@ -372,9 +382,9 @@ foreach (qw(C A S P I X)) {
 $template->param('typeloop' => \@typeloop);
 
 # test in city
-$select_city=getidcity($data{'city'}) if ($guarantorid ne '0');
+$select_city=getidcity($data{'city'}) if defined $guarantorid and ($guarantorid ne '0');
 ($default_city=$select_city) if ($step eq 0);
-if ($select_city eq '' ){
+if (!defined($select_city) or $select_city eq '' ){
        $default_city = &getidcity($data{'city'});
 }
 my($cityid);
@@ -415,7 +425,7 @@ my @relshipdata;
 while (@relationships) {
   my $relship = shift @relationships || '';
   my %row = ('relationship' => $relship);
-  if ($data{'relationship'} eq $relship) {
+  if (defined($data{'relationship'}) and $data{'relationship'} eq $relship) {
     $row{'selected'}=' selected';
   } else {
     $row{'selected'}='';
@@ -521,7 +531,7 @@ if ($nok) {
   
   #Formatting data for display    
   
-if ($data{'dateenrolled'} eq ''){
+if (!defined($data{'dateenrolled'}) or $data{'dateenrolled'} eq ''){
   $data{'dateenrolled'}=C4::Dates->today('iso');
 }
 if (C4::Context->preference('uppercasesurnames')) {
@@ -544,6 +554,7 @@ $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
@@ -552,12 +563,12 @@ $template->param(
   "$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) 
-  flags   =>$data{'flags'},   
-  "op$op"   => 1,
+  "op$op"   => 1);
+
+$template->param(
   nodouble  => $nodouble,
-  borrowernumber  => $borrowernumber,#register number
-  "contacttitle_".$data{'contacttitle'} => "SELECTED" ,
-  guarantorid => $borrower_data ? $borrower_data->{'guarantorid'} : $guarantorid,
+  borrowernumber  => $borrowernumber, #register number
+  guarantorid => (defined($borrower_data->{'guarantorid'})) ? $borrower_data->{'guarantorid'} : $guarantorid,
   ethcatpopup => $ethcatpopup,
   relshiploop => \@relshipdata,
   citypopup => $citypopup,
@@ -575,6 +586,14 @@ $template->param(
   CGIorganisations => $CGIorganisations,
   NoUpdateLogin =>  $NoUpdateLogin
   );
+
+if(defined($data{'flags'})){
+  $template->param(flags=>$data{'flags'});
+}
+if(defined($data{'contacttitle'})){
+  $template->param("contacttitle_" . $data{'contacttitle'} => "SELECTED");
+}
+
   
 output_html_with_http_headers $input, $cookie, $template->output;