Skip to content

Commit

Permalink
add amount tendered and change to checkout and receipt
Browse files Browse the repository at this point in the history
  • Loading branch information
kilbot committed Jan 14, 2024
1 parent 3bedc0e commit 0fe9535
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 12 deletions.
60 changes: 48 additions & 12 deletions includes/Gateways/Cash.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?php

/**
* Provides a Cash Payment Gateway.
*
Expand All @@ -16,6 +15,9 @@
use WC_Order_Item_Fee;
use WC_Payment_Gateway;

/**
*
*/
class Cash extends WC_Payment_Gateway {
/**
* Constructor for the gateway.
Expand Down Expand Up @@ -55,6 +57,11 @@ public static function payment_details( WC_Order $order ) {
* Display the payment fields on the checkout modal.
*/
public function payment_fields(): void {
global $wp;

$order_id = isset( $wp->query_vars['order-pay'] ) ? $wp->query_vars['order-pay'] : null;
$order = $order_id ? wc_get_order( $order_id ) : null;

if ( $this->description ) {
echo '<p>' . wp_kses_post( $this->description ) . '</p>';
}
Expand All @@ -70,16 +77,45 @@ public function payment_fields(): void {
}

echo '
<div class="form-row" id="pos-cash-tendered_field">
<label for="pos-cash-tendered" class="">' . __( 'Amount Tendered', 'woocommerce-pos' ) . '</label>
<div class="input-group">
' . $left_addon . '
<input type="text" class="form-control" name="pos-cash-tendered" id="pos-cash-tendered" maxlength="20" data-numpad="cash" data-label="' . __( 'Amount Tendered', 'woocommerce-pos' ) . '" data-placement="bottom" data-value="{{total}}">
' . $right_addon . '
</div>
' . wp_nonce_field( 'pos_cash_payment_nonce', 'pos_cash_payment_nonce_field' ) . '
</div>
<div class="form-row" id="pos-cash-tendered_field" style="display: flex; justify-content: space-between;">
<div style="flex: 1;">
<label for="pos-cash-tendered" style="padding-left:0">' . __( 'Amount Tendered', 'woocommerce-pos' ) . '</label>
<div class="input-group">
' . $left_addon . '
<input type="text" class="form-control" name="pos-cash-tendered" id="pos-cash-tendered" maxlength="20" data-numpad="cash" data-label="' . __( 'Amount Tendered', 'woocommerce-pos' ) . '" data-placement="bottom" data-value="{{total}}">
' . $right_addon . '
</div>
</div>
<div style="flex: 1;">
<label style="padding-left:0">' . __( 'Change', 'woocommerce-pos' ) . '</label>
<div id="pos-cash-change-display"></div>
</div>
' . wp_nonce_field( 'pos_cash_payment_nonce', 'pos_cash_payment_nonce_field' ) . '
</div>
';

if ( $order && $order->get_total() > 0 ) {
echo '
<script>
document.addEventListener("DOMContentLoaded", function() {
var tenderedInput = document.getElementById("pos-cash-tendered");
var changeDisplay = document.getElementById("pos-cash-change-display");
tenderedInput.addEventListener("input", function() {
var tenderedAmount = parseFloat(tenderedInput.value);
var orderTotal = ' . json_encode( wc_format_decimal( $order->get_total() ) ) . '; // Get order total from PHP
var change = tenderedAmount - orderTotal;
if (change > 0) {
changeDisplay.innerHTML = change.toFixed(' . json_encode( wc_get_price_decimals() ) . ');
} else {
changeDisplay.innerHTML = "";
}
});
});
</script>
';
}
}

/**
Expand All @@ -102,8 +138,8 @@ public function process_payment( $order_id ): array {
$tendered = wc_format_decimal( wp_unslash( $_POST['pos-cash-tendered'] ) );
}
$change = $tendered > $order->get_total() ? wc_format_decimal( floatval( $tendered ) - floatval( $order->get_total() ) ) : '0';
update_post_meta( $order_id, '_pos_cash_amount_tendered', $tendered );
update_post_meta( $order_id, '_pos_cash_change', $change );
$order->update_meta_data( '_pos_cash_amount_tendered', $tendered );
$order->update_meta_data( '_pos_cash_change', $change );

if ( $tendered >= $order->get_total() ) {
// payment complete
Expand Down
5 changes: 5 additions & 0 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ There is more information on our website at [https://wcpos.com](https://wcpos.co

== Changelog ==

= 1.4.5 - 2024/01/14 =
* Add: show change in checkout modal and receipt for the Cash gateway
* Add: use 'medium' sized product image instead of 'thumbnail'
* Fix: compatibility with alternative login urls, eg: WPS Hide Login

= 1.4.4 - 2024/01/12 =
* Desktop App: fix login for Desktop Application v1.4.0

Expand Down
18 changes: 18 additions & 0 deletions templates/receipt.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,24 @@
<th colspan="3"><?php esc_html_e( 'Total', 'woocommerce' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $order->get_total() ) ); ?></td>
</tr>
<?php if ( $order->get_payment_method() === 'pos_cash' ) : ?>
<?php
$amount_tendered = $order->get_meta( '_pos_cash_amount_tendered' );
$change_given = $order->get_meta( '_pos_cash_change' );
?>
<?php if ( ! empty( $amount_tendered ) ) : ?>
<tr>
<th colspan="3"><?php esc_html_e( 'Amount Tendered', 'woocommerce-pos' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $amount_tendered ) ); ?></td>
</tr>
<?php endif; ?>
<?php if ( ! empty( $change_given ) ) : ?>
<tr>
<th colspan="3"><?php esc_html_e( 'Change', 'woocommerce-pos' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $change_given ) ); ?></td>
</tr>
<?php endif; ?>
<?php endif; ?>
</tfoot>
</table>

Expand Down

0 comments on commit 0fe9535

Please sign in to comment.