Skip to content

Commit

Permalink
Bug 30619: Add email receipt to POS
Browse files Browse the repository at this point in the history
This patch adds the ability to use email receipts with the point of sale
module.

To test:
1) Configure your Koha to enable the point of sale system.
2) Add an email template to the 'Point of sale > RECEIPT' notice.
3) Add some charges on point of sale and pay for them.
3a) You should now see a new 'Email receipt' button next to the 'Print
receipt' option.
3b) Clicking the button will display a modal to enter the anonymous
users email address
3c) Enter an email address and confirm to send the email

Sponsored-by: Martin Renvoize <martin.renvoize@gmail.com>

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
  • Loading branch information
Isobel Graham authored and tomascohen committed Sep 7, 2022
1 parent e99e3a9 commit b97ff5d
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 11 deletions.
41 changes: 37 additions & 4 deletions koha-tmpl/intranet-tmpl/prog/en/modules/pos/pay.tt
Expand Up @@ -51,7 +51,7 @@

[% IF payment_id && !Koha.Preference('FinePaymentAutoPopup') %]
<div class="dialog alert audio-alert-action">
Payment received: <a target="_blank" href="/cgi-bin/koha/pos/printreceipt.pl?action=print&accountlines_id=[% payment_id | uri %]&collected=[% collected | uri %]&change=[% change | uri %]" class="btn btn-default btn-xs"><i class="fa fa-print"></i> Print receipt</a>
Payment received: <a target="_blank" href="/cgi-bin/koha/pos/printreceipt.pl?action=print&accountlines_id=[% payment_id | uri %]&collected=[% collected | uri %]&change=[% change | uri %]" class="btn btn-default btn-xs"><i class="fa fa-print"></i> Print receipt</a> <a type="button" data-toggle="modal" data-target="#emailReceiptModal" class="btn btn-default btn-xs"><i class="fa fa-envelope"></i> Email receipt</a>
</div>
[% END %]

Expand Down Expand Up @@ -168,7 +168,40 @@
</div>
</div> <!-- /.row -->

<!-- Modal -->
<!-- Email receipt modal -->
<div class="modal" id="emailReceiptModal" tabindex="-1" role="dialog" aria-labelledby="emailReceiptLabel">
<form id="email_form" action="/cgi-bin/koha/pos/pay.pl" method="get" enctype="multipart/form-data" class="validated">
<input type="hidden" name="payment_id" id="payment_id" value="[% payment_id | uri %]">
<input type="hidden" name="collected" id="collected" value="[% collected | uri %]">
<input type="hidden" name="change" id="change" value="[% change | uri %]">"
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="closebtn" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="emailReceiptLabel">Email receipt</h4>
</div>
<div class="modal-body">
<fieldset class="rows">
<ol>
<li>
<label class="required" for="toaddr">Email address: </label>
<input type="email" id="toaddr" name="toaddr" required="required">
<span class="required">Required</span>
</li>
</ol>
</fieldset> <!-- /.rows -->
</div> <!-- /.modal-body -->
<div class="modal-footer">
<input type="hidden" name="action" value="send">
<button type="submit" class="btn btn-default">Confirm</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
</div> <!-- /.modal-footer -->
</div> <!-- /.modal-content -->
</div> <!-- /.modal-dialog -->
</form> <!-- /#email_form -->
</div> <!-- /#emailReceiptModal

<!-- Change modal -->
<div id="confirm_change_form" class="modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
Expand All @@ -189,8 +222,8 @@
</div>

[% IF payment_id && Koha.Preference('FinePaymentAutoPopup') %]
<!-- Automatic Print Receipt -->
<a id="printReceipt" style="display: none" href="#"></a>
<!-- Automatic Print Receipt -->
<a id="printReceipt" style="display: none" href="#"></a>
[% END %]

[% MACRO jsinclude BLOCK %]
Expand Down
58 changes: 51 additions & 7 deletions pos/pay.pl
Expand Up @@ -23,8 +23,9 @@
use JSON qw( from_json );

use C4::Auth qw( get_session get_template_and_user );
use C4::Output qw( output_html_with_http_headers );
use C4::Context;
use C4::Letters qw( GetPreparedLetter EnqueueLetter SendQueuedMessages );
use C4::Output qw( output_html_with_http_headers );

use Koha::Account::DebitTypes;
use Koha::AuthorisedValues;
Expand All @@ -39,16 +40,17 @@

my ( $template, $loggedinuser, $cookie, $user_flags ) = get_template_and_user(
{
template_name => 'pos/pay.tt',
query => $input,
type => 'intranet',
flagsrequired => { cash_management => 'takepayment' },
template_name => 'pos/pay.tt',
query => $input,
type => 'intranet',
flagsrequired => { cash_management => 'takepayment' },
}
);
my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in";

my $library_id = C4::Context->userenv->{'branch'};
my $registerid = $input->param('registerid');
my $library_id = C4::Context->userenv->{'branch'};
my $registerid = $input->param('registerid');
my $action = $input->param('action') || '';

my $invoice_types =
Koha::Account::DebitTypes->search_with_library_limits(
Expand Down Expand Up @@ -82,6 +84,48 @@
);
}

if ( $action eq 'send' ) {
my $payment_id = $input->param('payment_id');
my $change = $input->param('change');
my $collected = $input->param('collected');
my $toaddr = $input->param('toaddr');

# Create our letter from the template
my $letter = GetPreparedLetter(
module => 'pos',
letter_code => 'RECEIPT',
branchcode => C4::Context->userenv->{'branch'},
message_transport_type => 'email',
tables => {
credits => $payment_id,
},
substitute => {
collected => $collected,
change => $change
}
);

# Add letter to the queue
my $message_id = EnqueueLetter(
{
letter => $letter,
message_transport_type => 'email',
from_address => C4::Context->preference('KohaAdminEmailAddress'),
to_address => $toaddr,
}
);

# Send immediately
SendQueuedMessages( { message_id => $message_id } );

# Set variables for template to allow printing still
$template->param(
payment_id => $payment_id,
collected => $collected,
change => $change
);
}

output_html_with_http_headers( $input, $cookie, $template->output );

1;

0 comments on commit b97ff5d

Please sign in to comment.