Bugzilla – Attachment 150787 Details for
Bug 33690
Add ability to send welcome notice when creating patrons using the REST API
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 33690: Add ability to send welcome notice when creating patrons using the REST API
Bug-33690-Add-ability-to-send-welcome-notice-when-.patch (text/plain), 8.48 KB, created by
Kyle M Hall (khall)
on 2023-05-05 18:51:14 UTC
(
hide
)
Description:
Bug 33690: Add ability to send welcome notice when creating patrons using the REST API
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2023-05-05 18:51:14 UTC
Size:
8.48 KB
patch
obsolete
>From 1578f17a99b39c0edccf76a8dd4b41918c7a614f Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Fri, 5 May 2023 12:22:53 -0400 >Subject: [PATCH] Bug 33690: Add ability to send welcome notice when creating > patrons using the REST API > >It would be nice to have the ability to send a welcome notice when creating patrons via the API. > >Test Plan: >1) Apply this patch >2) Ensure you have a WELCOME notice >3) Create a new patron using the REST API ( api/v1/patrons ) >4) Note no welcome notice is sent to the patron ( you can check the > notices tab for the patron ) >5) Repeat step 3, but send the header X-Koha-SendWelcomeEmail with a > value of 1 as part of the POST >6) Note the welcome message for the patron is in their notices! >--- > Koha/REST/V1/Patrons.pm | 33 ++++++++++++++++ > api/v1/swagger/paths/patrons.yaml | 5 +++ > t/db_dependent/api/v1/patrons.t | 63 +++++++++++++++++-------------- > 3 files changed, 72 insertions(+), 29 deletions(-) > >diff --git a/Koha/REST/V1/Patrons.pm b/Koha/REST/V1/Patrons.pm >index 1852d7ccd2..69b5afa20f 100644 >--- a/Koha/REST/V1/Patrons.pm >+++ b/Koha/REST/V1/Patrons.pm >@@ -22,6 +22,7 @@ use Mojo::Base 'Mojolicious::Controller'; > use Koha::Database; > use Koha::Exceptions; > use Koha::Patrons; >+use C4::Letters qw( GetPreparedLetter EnqueueLetter SendQueuedMessages ); > > use List::MoreUtils qw(any); > use Scalar::Util qw( blessed ); >@@ -113,6 +114,38 @@ sub add { > my $extended_attributes = delete $body->{extended_attributes} // []; > > my $patron = Koha::Patron->new_from_api($body)->store; >+ >+ if ( $c->req->headers->header('x-koha-welcome') ) { >+ >+ # if we manage to find a valid email address, send notice >+ if ( $patron->notice_email_address ) { >+ my $letter = GetPreparedLetter( >+ module => 'members', >+ letter_code => 'WELCOME', >+ branchcode => $patron->branchcode, >+ , >+ lang => $patron->lang || 'default', >+ tables => { >+ 'branches' => $patron->branchcode, >+ 'borrowers' => $patron->borrowernumber, >+ }, >+ want_librarian => 1, >+ ); >+ >+ if ($letter) { >+ my $message_id = EnqueueLetter( >+ { >+ letter => $letter, >+ borrowernumber => $patron->id, >+ to_address => $patron->notice_email_address, >+ message_transport_type => 'email' >+ } >+ ); >+ SendQueuedMessages( { message_id => $message_id } ); >+ } >+ } >+ } >+ > $patron->extended_attributes( > [ > map { { code => $_->{type}, attribute => $_->{value} } } >diff --git a/api/v1/swagger/paths/patrons.yaml b/api/v1/swagger/paths/patrons.yaml >index 1100a9fba9..e72cf8b2d0 100644 >--- a/api/v1/swagger/paths/patrons.yaml >+++ b/api/v1/swagger/paths/patrons.yaml >@@ -406,6 +406,11 @@ > required: true > schema: > $ref: "../swagger.yaml#/definitions/patron" >+ - name: x-koha-welcome >+ in: header >+ required: false >+ description: If set to 'email' triggers the sending of a welcome email >+ type: string > consumes: > - application/json > produces: >diff --git a/t/db_dependent/api/v1/patrons.t b/t/db_dependent/api/v1/patrons.t >index 8c4d9c13e1..98bbebc7b4 100755 >--- a/t/db_dependent/api/v1/patrons.t >+++ b/t/db_dependent/api/v1/patrons.t >@@ -35,6 +35,7 @@ use Koha::Exceptions::Patron::Attribute; > use Koha::Old::Patrons; > use Koha::Patron::Attributes; > use Koha::Patron::Debarments qw( AddDebarment ); >+use Koha::Notice::Messages; > > use JSON qw(encode_json); > >@@ -302,7 +303,7 @@ subtest 'add() tests' => sub { > $schema->storage->txn_rollback; > > subtest 'librarian access tests' => sub { >- plan tests => 24; >+ plan tests => 25; > > $schema->storage->txn_begin; > >@@ -316,28 +317,6 @@ subtest 'add() tests' => sub { > > # Mock early, so existing mandatory attributes don't break all the tests > my $mocked_patron = Test::MockModule->new('Koha::Patron'); >- $mocked_patron->mock( >- 'extended_attributes', >- sub { >- >- if ($extended_attrs_exception) { >- if ( $extended_attrs_exception eq 'Koha::Exceptions::Patron::Attribute::NonRepeatable' >- or $extended_attrs_exception eq 'Koha::Exceptions::Patron::Attribute::UniqueIDConstraint' >- ) >- { >- $extended_attrs_exception->throw( >- attribute => Koha::Patron::Attribute->new( >- { code => $code, attribute => $attr } >- ) >- ); >- } >- else { >- $extended_attrs_exception->throw( type => $type ); >- } >- } >- return []; >- } >- ); > > my $patron = $builder->build_object({ class => 'Koha::Patrons' }); > my $newpatron = $patron->to_api; >@@ -403,18 +382,21 @@ subtest 'add() tests' => sub { > # Set a date-time field > $newpatron->{last_seen} = output_pref({ dt => dt_from_string->add( days => -1 ), dateformat => 'rfc3339' }); > >- $t->post_ok("//$userid:$password@/api/v1/patrons" => json => $newpatron) >+ $t->post_ok("//$userid:$password@/api/v1/patrons" => { 'x-koha-welcome' => 'email' } => json => $newpatron) > ->status_is(201, 'Patron created successfully') > ->header_like( > Location => qr|^\/api\/v1\/patrons/\d*|, > 'SWAGGER3.4.1' > ) > ->json_has('/patron_id', 'got a patron_id') >- ->json_is( '/cardnumber' => $newpatron->{ cardnumber }) >- ->json_is( '/surname' => $newpatron->{ surname }) >- ->json_is( '/firstname' => $newpatron->{ firstname }) >- ->json_is( '/date_of_birth' => $newpatron->{ date_of_birth }, 'Date field set (Bug 28585)' ) >- ->json_is( '/last_seen' => $newpatron->{ last_seen }, 'Date-time field set (Bug 28585)' ); >+ ->json_is( '/cardnumber' => $newpatron->{cardnumber}) >+ ->json_is( '/surname' => $newpatron->{surname}) >+ ->json_is( '/firstname' => $newpatron->{firstname}) >+ ->json_is( '/date_of_birth' => $newpatron->{date_of_birth}, 'Date field set (Bug 28585)' ) >+ ->json_is( '/last_seen' => $newpatron->{last_seen}, 'Date-time field set (Bug 28585)' ); >+ >+ my $p = Koha::Patrons->find( { cardnumber => $newpatron->{cardnumber} } ); >+ is( Koha::Notice::Messages->search({ borrowernumber => $p->borrowernumber })->count, 1 , "Patron got welcome notice" ); > > $newpatron->{userid} = undef; # force regeneration > warning_like { >@@ -428,6 +410,29 @@ subtest 'add() tests' => sub { > > plan tests => 19; > >+ $mocked_patron->mock( >+ 'extended_attributes', >+ sub { >+ >+ if ($extended_attrs_exception) { >+ if ( $extended_attrs_exception eq 'Koha::Exceptions::Patron::Attribute::NonRepeatable' >+ or $extended_attrs_exception eq 'Koha::Exceptions::Patron::Attribute::UniqueIDConstraint' >+ ) >+ { >+ $extended_attrs_exception->throw( >+ attribute => Koha::Patron::Attribute->new( >+ { code => $code, attribute => $attr } >+ ) >+ ); >+ } >+ else { >+ $extended_attrs_exception->throw( type => $type ); >+ } >+ } >+ return []; >+ } >+ ); >+ > my $patrons_count = Koha::Patrons->search->count; > > $extended_attrs_exception = 'Koha::Exceptions::Patron::MissingMandatoryExtendedAttribute'; >-- >2.30.2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 33690
:
150777
|
150787
|
150791
|
152642
|
155396
|
155397
|
155398
|
155406
|
155407
|
156544
|
156545
|
156546