adding license tab to about page
[koha_gimpoz] / tools / import_borrowers.pl
index 54ba751..db448ab 100755 (executable)
 #
 # any fields except cardnumber can be blank but the number of fields must match
 # dates should be in the format you have set up Koha to expect
+# branchcode and categorycode need to be valid
 
 use strict;
 use C4::Auth;
 use C4::Output;
-use C4::Date;
+use C4::Dates qw(format_date_in_iso);
 use C4::Context;
+use C4::Members;
 
 use Text::CSV;
 use CGI;
 
 my @columnkeys = (
-    'cardnumber',   'surname',          'firstname',    'title',
-    'othernames',   'initials',         'streetnumber', 'streettype',
-    'address',      'address2',         'city',         'email',
-    'phone',        'mobile',           'fax',          'emailpro',
-    'phonepro',     'B_streetnumber',   'B_streettype', 'B_address',
-    'B_city',       'B_zipcode',        'B_email',      'B_phone',
-    'dateofbirth',  'branchcode',       'categorycode', 'dateenrolled',
-    'dateexpiry',   'gonenoaddress',    'lost',         'debarred',
-    'contactname',  'contactfirstname', 'contacttitle', 'borrowernotes',
-    'relationship', 'ethnicity',        'ethnotes',     'sex',
-    'userid',       'opacnote',         'contactnote',  'password',
-    'sort1',        'sort2'
+    'cardnumber',    'surname',      'firstname',        'title',
+    'othernames',    'initials',     'streetnumber',     'streettype',
+    'address',       'address2',     'city',             'zipcode',
+    'email',         'phone',        'mobile',           'fax',
+    'emailpro',      'phonepro',     'B_streetnumber',   'B_streettype',
+    'B_address',     'B_city',       'B_zipcode',        'B_email',
+    'B_phone',       'dateofbirth',  'branchcode',       'categorycode',
+    'dateenrolled',  'dateexpiry',   'gonenoaddress',    'lost',
+    'debarred',      'contactname',  'contactfirstname', 'contacttitle',
+    'borrowernotes', 'relationship', 'ethnicity',        'ethnotes',
+    'sex',           'userid',       'opacnote',         'contactnote',
+    'password',      'sort1',        'sort2'
 );
 
 my $input = new CGI;
@@ -64,7 +66,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
         query           => $input,
         type            => "intranet",
         authnotrequired => 0,
-        flagsrequired   => { tools => 1 },
+        flagsrequired   => { tools => 'import_patrons' },
         debug           => 1,
     }
 );
@@ -81,29 +83,35 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) {
     my $overwritten = 0;
     my $invalid     = 0;
     while ( my $borrowerline = <$uploadborrowers> ) {
-
         my $status  = $csv->parse($borrowerline);
         my @columns = $csv->fields();
         my %borrower;
         if ( @columns == @columnkeys ) {
             @borrower{@columnkeys} = @columns;
-            if ( GetMember( $borrower{'cardnumber'}, 'cardnumber' ) ) {
-
+                       foreach (qw(dateofbirth dateenrolled dateexpiry)) {
+                               my $tempdate = $borrower{$_} or next;
+                               $borrower{$_} = format_date_in_iso($tempdate) || '';
+                       }
+            if ( my $member =
+                GetMember( $borrower{'cardnumber'}, 'cardnumber' ) )
+            {
                 # borrower exists
                 if ($overwrite_cardnumber) {
+                    $borrower{'borrowernumber'} = $member->{'borrowernumber'};
                     ModMember(%borrower);
                     $overwritten++;
-                }
-                else {
+                } else {
                     $alreadyindb++;
                 }
             }
             else {
-                AddMember(%borrower);
-                $imported++;
+                if (AddMember(%borrower)) {
+                    $imported++;
+                } else {
+                    $invalid++;                # was just "$invalid", I assume incrementing was the point --atz
+                }
             }
-        }
-        else {
+        } else {
             $invalid++;
         }
     }