Bug 35942: OPAC user can enroll several times to the same club
Test Plan:
1) Create 3 clubs, 1 limited to library A, 1 limited to library B and one not limited
2) Use a patron with home library A.
3) Go to the opac-user page, "Clubs" tab show 0/2 (the one from library B is not listed)
4) Browse to /cgi-bin/koha/svc/club/enroll?id=1
5) Reload that page a couple times
6) Note the patron is now enrolled in the same club multiple times
7) Delete those enrollments
8) Apply this patch
9) Restart all the things!
10) Repeat steps 2-7, note the lack of duplicate enrollments!
11) Repeat steps 2-10 for the staff interface
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit c735c027fa
)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
parent
12edba3773
commit
a3db039d41
2 changed files with 69 additions and 47 deletions
|
@ -42,18 +42,28 @@ my $id = $cgi->param('id');
|
||||||
|
|
||||||
my $enrollment;
|
my $enrollment;
|
||||||
if ( $borrowernumber && $id ) {
|
if ( $borrowernumber && $id ) {
|
||||||
|
my $already_enrolled = Koha::Club::Enrollments->search(
|
||||||
|
{
|
||||||
|
club_id => $id,
|
||||||
|
borrowernumber => $borrowernumber,
|
||||||
|
date_canceled => undef,
|
||||||
|
}
|
||||||
|
)->count();
|
||||||
|
|
||||||
my $club = Koha::Clubs->find($id);
|
my $club = Koha::Clubs->find($id);
|
||||||
|
|
||||||
|
my $wrong_branch = $club->branchcode && C4::Context->userenv && C4::Context->userenv->{branch} ne $club->branchcode;
|
||||||
|
|
||||||
|
unless ( $already_enrolled || $wrong_branch ) {
|
||||||
|
|
||||||
if ( $club->club_template()->is_enrollable_from_opac() ) {
|
if ( $club->club_template()->is_enrollable_from_opac() ) {
|
||||||
$enrollment = Koha::Club::Enrollment->new()->set(
|
$enrollment = Koha::Club::Enrollment->new(
|
||||||
{
|
{
|
||||||
club_id => $club->id(),
|
club_id => $club->id(),
|
||||||
borrowernumber => $borrowernumber,
|
borrowernumber => $borrowernumber,
|
||||||
date_enrolled => \'NOW()',
|
date_enrolled => \'NOW()',
|
||||||
date_created => \'NOW()',
|
date_created => \'NOW()',
|
||||||
branchcode => C4::Context->userenv
|
branchcode => C4::Context->userenv ? C4::Context->userenv->{branch} : undef,
|
||||||
? C4::Context->userenv->{'branch'}
|
|
||||||
: undef,
|
|
||||||
}
|
}
|
||||||
)->store();
|
)->store();
|
||||||
|
|
||||||
|
@ -70,6 +80,7 @@ if ( $borrowernumber && $id ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binmode STDOUT, ':encoding(UTF-8)';
|
binmode STDOUT, ':encoding(UTF-8)';
|
||||||
print $cgi->header( -type => 'application/json', -charset => 'UTF-8' );
|
print $cgi->header( -type => 'application/json', -charset => 'UTF-8' );
|
||||||
|
|
|
@ -51,7 +51,8 @@ my @club_enrollment_fields;
|
||||||
|
|
||||||
if ($enrollent_id) {
|
if ($enrollent_id) {
|
||||||
my @enrollment_fields = $club->club_template()->club_template_enrollment_fields()->as_list;
|
my @enrollment_fields = $club->club_template()->club_template_enrollment_fields()->as_list;
|
||||||
@club_enrollment_fields = Koha::Club::Enrollment::Fields->search({'club_enrollment_id'=> $enrollent_id})->as_list;
|
@club_enrollment_fields =
|
||||||
|
Koha::Club::Enrollment::Fields->search( { 'club_enrollment_id' => $enrollent_id } )->as_list;
|
||||||
|
|
||||||
foreach my $club_enrollment_field (@club_enrollment_fields) {
|
foreach my $club_enrollment_field (@club_enrollment_fields) {
|
||||||
foreach my $e (@enrollment_fields) {
|
foreach my $e (@enrollment_fields) {
|
||||||
|
@ -62,15 +63,25 @@ if($enrollent_id){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} elsif ($club) {
|
||||||
|
my $already_enrolled = Koha::Club::Entrollments->search(
|
||||||
|
{
|
||||||
|
club_id => $club->id(),
|
||||||
|
borrowernumber => $borrowernumber,
|
||||||
|
date_canceled => undef,
|
||||||
}
|
}
|
||||||
elsif ($club) {
|
)->count();
|
||||||
|
|
||||||
|
my $wrong_branch = $club->branchcode && C4::Context->userenv && C4::Context->userenv->{branch} ne $club->branchcode;
|
||||||
|
|
||||||
|
unless ( $already_enrolled || $wrong_branch ) {
|
||||||
$enrollment = Koha::Club::Enrollment->new(
|
$enrollment = Koha::Club::Enrollment->new(
|
||||||
{
|
{
|
||||||
club_id => $club->id(),
|
club_id => $club->id(),
|
||||||
borrowernumber => $borrowernumber,
|
borrowernumber => $borrowernumber,
|
||||||
date_enrolled => \'NOW()',
|
date_enrolled => \'NOW()',
|
||||||
date_created => \'NOW()',
|
date_created => \'NOW()',
|
||||||
branchcode => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef,
|
branchcode => C4::Context->userenv ? C4::Context->userenv->{branch} : undef,
|
||||||
}
|
}
|
||||||
)->store();
|
)->store();
|
||||||
|
|
||||||
|
@ -88,13 +99,13 @@ elsif ($club) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binmode STDOUT, ':encoding(UTF-8)';
|
binmode STDOUT, ':encoding(UTF-8)';
|
||||||
print $cgi->header( -type => 'application/json', -charset => 'UTF-8' );
|
print $cgi->header( -type => 'application/json', -charset => 'UTF-8' );
|
||||||
|
|
||||||
if ($enrollent_id) {
|
if ($enrollent_id) {
|
||||||
print to_json( { success => @club_enrollment_fields ? 1 : 0 } );
|
print to_json( { success => @club_enrollment_fields ? 1 : 0 } );
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
print to_json( { success => $enrollment ? 1 : 0 } );
|
print to_json( { success => $enrollment ? 1 : 0 } );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue