Bug 20287: Move AddMember to Koha::Patron->store

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2018-02-22 12:28:02 -03:00 committed by Nick Clemens
parent 1144ee4b81
commit ae927390ff
2 changed files with 93 additions and 96 deletions

View File

@ -78,7 +78,6 @@ BEGIN {
#Insert data
push @EXPORT, qw(
&AddMember
&AddMember_Auto
&AddMember_Opac
);
@ -375,98 +374,6 @@ sub ModMember {
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);

View File

@ -22,6 +22,7 @@ use Modern::Perl;
use Carp;
use List::MoreUtils qw( uniq );
use Module::Load::Conditional qw( can_load );
use Text::Unaccent qw( unac_string );
use C4::Context;
@ -41,6 +42,10 @@ use Koha::Club::Enrollments;
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 = {
@ -110,7 +115,7 @@ sub trim_whitespaces {
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;
@ -123,7 +128,7 @@ sub trim_whitespaces {
}
sub store {
my( $self ) = @_;
my ($self) = @_;
$self->_result->result_source->schema->txn_do(
sub {
@ -138,10 +143,95 @@ sub store {
# 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