#Insert data
push @EXPORT, qw(
- &AddMember
&AddMember_Auto
&AddMember_Opac
);
return $execute_success;
}
-=head2 AddMember
-
- $borrowernumber = &AddMember(%borrower);
-
-insert new borrower into table
-
-(%borrower keys are database columns. Database columns could be
-different in different versions. Please look into database for correct
-column names.)
-
-Returns the borrowernumber upon success
-
-Returns as undef upon any db error without further processing
-
-=cut
-
-#'
-sub AddMember {
- my (%data) = @_;
- my $dbh = C4::Context->dbh;
- my $schema = Koha::Database->new()->schema;
-
- my $category = Koha::Patron::Categories->find( $data{categorycode} );
- unless ($category) {
- Koha::Exceptions::Object::FKConstraint->throw(
- broken_fk => 'categorycode',
- value => $data{categorycode},
- );
- }
-
- my $p = Koha::Patron->new( { userid => $data{userid}, firstname => $data{firstname}, surname => $data{surname} } );
- # generate a proper login if none provided
- $data{'userid'} = $p->generate_userid
- if ( $data{'userid'} eq '' || ! $p->has_valid_userid );
-
- # add expiration date if it isn't already there
- $data{dateexpiry} ||= $category->get_expiry_date;
-
- # add enrollment date if it isn't already there
- unless ( $data{'dateenrolled'} ) {
- $data{'dateenrolled'} = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
- }
-
- $data{'privacy'} =
- $category->default_privacy() eq 'default' ? 1
- : $category->default_privacy() eq 'never' ? 2
- : $category->default_privacy() eq 'forever' ? 0
- : undef;
-
- $data{'privacy_guarantor_checkouts'} = 0 unless defined( $data{'privacy_guarantor_checkouts'} );
-
- # Make a copy of the plain text password for later use
- my $plain_text_password = $data{'password'};
-
- # create a disabled account if no password provided
- $data{'password'} = ($data{'password'})? hash_password($data{'password'}) : '!';
-
- # we don't want invalid dates in the db (mysql has a bad habit of inserting 0000-00-00
- $data{'dateofbirth'} = undef if ( not $data{'dateofbirth'} );
- $data{'debarred'} = undef if ( not $data{'debarred'} );
- $data{'sms_provider_id'} = undef if ( not $data{'sms_provider_id'} );
- $data{'guarantorid'} = undef if ( not $data{'guarantorid'} );
-
- # get only the columns of Borrower
- # FIXME Do we really need this check?
- my @columns = $schema->source('Borrower')->columns;
- my $new_member = { map { join(' ',@columns) =~ /$_/ ? ( $_ => $data{$_} ) : () } keys(%data) } ;
-
- delete $new_member->{borrowernumber};
-
- my $patron = Koha::Patron->new( $new_member )->store;
- $data{borrowernumber} = $patron->borrowernumber;
-
- # If NorwegianPatronDBEnable is enabled, we set syncstatus to something that a
- # cronjob will use for syncing with NL
- if ( exists $data{'borrowernumber'} && C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) {
- Koha::Database->new->schema->resultset('BorrowerSync')->create({
- 'borrowernumber' => $data{'borrowernumber'},
- 'synctype' => 'norwegianpatrondb',
- 'sync' => 1,
- 'syncstatus' => 'new',
- 'hashed_pin' => Koha::NorwegianPatronDB::NLEncryptPIN( $plain_text_password ),
- });
- }
-
- logaction("MEMBERS", "CREATE", $data{'borrowernumber'}, "") if C4::Context->preference("BorrowersLog");
-
- $patron->add_enrolment_fee_if_needed;
-
- return $data{borrowernumber};
-}
-
=head2 GetAllIssues
$issues = &GetAllIssues($borrowernumber, $sortkey, $limit);
use Carp;
use List::MoreUtils qw( uniq );
+use Module::Load::Conditional qw( can_load );
use Text::Unaccent qw( unac_string );
use C4::Context;
use Koha::Account;
use Koha::Subscription::Routinglists;
+if ( ! can_load( modules => { 'Koha::NorwegianPatronDB' => undef } ) ) {
+ warn "Unable to load Koha::NorwegianPatronDB";
+}
+
use base qw(Koha::Object);
our $RESULTSET_PATRON_ID_MAPPING = {
my( $self ) = @_;
my $schema = Koha::Database->new->schema;
- my @columns = $schema->source('Borrowers')->columns;
+ my @columns = $schema->source($self->_type)->columns;
for my $column( @columns ) {
my $value = $self->$column;
}
sub store {
- my( $self ) = @_;
+ my ($self) = @_;
$self->_result->result_source->schema->txn_do(
sub {
# We are in a transaction but the table is not locked
$self->fixup_cardnumber;
}
+ unless ( $self->in_storage ) { #AddMember
+
+ unless( $self->category->in_storage ) {
+ Koha::Exceptions::Object::FKConstraint->throw(
+ broken_fk => 'categorycode',
+ value => $self->categorycode,
+ );
+ }
+
+ $self->trim_whitespaces;
+
+ # Generate a valid userid/login if needed
+ $self->userid($self->generate_userid)
+ if not $self->userid or not $self->has_valid_userid;
+
+ # Add expiration date if it isn't already there
+ unless ( $self->dateexpiry ) {
+ $self->dateexpiry( $self->category->get_expiry_date );
+ }
+
+ # Add enrollment date if it isn't already there
+ unless ( $self->dateenrolled ) {
+ $self->dateenrolled(dt_from_string);
+ }
+
+ # Set the privacy depending on the patron's category
+ my $default_privacy = $self->category->default_privacy || q{};
+ $default_privacy =
+ $default_privacy eq 'default' ? 1
+ : $default_privacy eq 'never' ? 2
+ : $default_privacy eq 'forever' ? 0
+ : undef;
+ $self->privacy($default_privacy);
+
+ unless ( defined $self->privacy_guarantor_checkouts ) {
+ $self->privacy_guarantor_checkouts(0);
+ }
+
+ # Make a copy of the plain text password for later use
+ my $plain_text_password = $self->password;
+
+ # Create a disabled account if no password provided
+ $self->password( $self->password
+ ? Koha::AuthUtils::hash_password( $self->password )
+ : '!' );
+
+ # We don't want invalid dates in the db (mysql has a bad habit of inserting 0000-00-00)
+ $self->dateofbirth(undef) unless $self->dateofbirth;
+ $self->debarred(undef) unless $self->debarred;
+
+ # Set default values if not set
+ $self->sms_provider_id(undef) unless $self->sms_provider_id;
+ $self->guarantorid(undef) unless $self->guarantorid;
+
+ $self->borrowernumber(undef);
+
+ $self = $self->SUPER::store;
+
+ # If NorwegianPatronDBEnable is enabled, we set syncstatus to something that a
+ # cronjob will use for syncing with NL
+ if ( C4::Context->preference('NorwegianPatronDBEnable')
+ && C4::Context->preference('NorwegianPatronDBEnable') == 1 )
+ {
+ Koha::Database->new->schema->resultset('BorrowerSync')
+ ->create(
+ {
+ 'borrowernumber' => $self->borrowernumber,
+ 'synctype' => 'norwegianpatrondb',
+ 'sync' => 1,
+ 'syncstatus' => 'new',
+ 'hashed_pin' =>
+ Koha::NorwegianPatronDB::NLEncryptPIN(
+ $plain_text_password),
+ }
+ );
+ }
+
+ $self->add_enrolment_fee_if_needed;
+
+ logaction( "MEMBERS", "CREATE", $self->borrowernumber, "" )
+ if C4::Context->preference("BorrowersLog");
+ }
+ else { #ModMember
+ $self = $self->SUPER::store;
+ }
- $self->SUPER::store;
}
);
+ return $self;
}
=head3 delete