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:
parent
1144ee4b81
commit
ae927390ff
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue