Skip to content

Instantly share code, notes, and snippets.

@kilbot
Created August 8, 2023 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kilbot/8f7ba65b0eb989309702ecfd37d05ccb to your computer and use it in GitHub Desktop.
Save kilbot/8f7ba65b0eb989309702ecfd37d05ccb to your computer and use it in GitHub Desktop.
Custom receipt template with License Manager for WooCommerce
<?php
/**
* Sales Receipt Template
*
* This template can be overridden by copying it to yourtheme/woocommerce-pos/receipt.php.
* HOWEVER, this is not recommended , don't be surprised if your POS breaks
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html, body, ul, li, fieldset, address {
font-family: sans-serif;
font-size: 14px;
margin: 0;
padding: 0;
}
h1, h2, h3, h4, h5, h6 {
margin: 0;
padding: 0;
font-weight: 600;
line-height: 1.3;
}
h1 {
font-size: 18px;
margin-bottom: 15px;
}
h2 {
font-size: 16px;
margin-bottom: 12px;
}
h3 {
font-size: 14px;
margin-bottom: 10px;
}
h4 {
font-size: 14px;
margin-bottom: 8px;
}
h5 {
font-size: 14px;
margin-bottom: 6px;
}
h6 {
font-size: 12px;
margin-bottom: 4px;
}
.sales-receipt {
width: 100%;
max-width: 100%;
}
.header, .footer {
text-align: center;
margin-bottom: 20px;
}
.header img {
max-width: 200px;
height: auto;
}
.order-details {
margin-bottom: 20px;
padding: 5px;
}
.order-details li {
margin-bottom: 10px;
}
/* Style for Order Details Table */
table {
border-collapse: collapse !important;
width: 100% !important;
margin-bottom: 20px;
}
table thead tr th,
table tbody tr td,
table tfoot tr td {
border: none;
padding: 5px;
text-align: left;
}
table thead tr th {
font-weight: bold;
border-bottom: 2px solid #ddd;
}
table tbody tr td {
border-bottom: 1px solid #ddd;
}
table tfoot tr th {
padding: 5px;
text-align: right;
}
th:last-child, td:last-child {
text-align: right;
}
table ul.wc-item-meta {
padding: 0;
list-style: none;
margin-top: 5px !important;
}
table ul.wc-item-meta li {
font-size: 12px;
}
table ul.wc-item-meta p {
display: inline-block;
margin: 0;
}
/* Style for Customer Details */
.woocommerce-customer-details {
margin-bottom: 20px;
}
.woocommerce-columns {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
padding: 5px;
}
.woocommerce-column {
flex: 0 0 calc(50% - 10px);
}
address {
font-size: 12px;
line-height: 1.4;
}
address p {
margin-bottom: 3px;
}
.woocommerce-customer-details--phone,
.woocommerce-customer-details--email {
font-size: 12px;
margin-bottom: 3px;
}
</style>
<?php
/**
* IMPORTANT!
* This hook adds the javascript to print the receipt.
*/
do_action( 'woocommerce_pos_receipt_head' );
?>
</head>
<body <?php body_class(); ?>>
<div class="sales-receipt">
<div class="header">
<?php
$header_image = get_theme_mod( 'custom_logo' );
if ( $header_image ) :
$image_attributes = wp_get_attachment_image_src( $header_image, 'full' );
$src = $image_attributes[0];
?>
<img src="<?php echo esc_url( $src ); ?>" alt="<?php bloginfo( 'name' ); ?>">
<?php else: ?>
<h1><?php bloginfo( 'name' ); ?></h1>
<?php endif; ?>
<h2><?php esc_html_e( 'Tax Receipt', 'woocommerce-pos' ); ?></h2>
</div>
<ul class="order-details">
<li class="order">
<?php esc_html_e( 'Order number:', 'woocommerce' ); ?>
<strong><?php echo esc_html( $order->get_order_number() ); ?></strong>
</li>
<li class="date">
<?php esc_html_e( 'Date:', 'woocommerce' ); ?>
<strong><?php echo esc_html( wc_format_datetime( $order->get_date_created(), 'F j, Y, g:i a' ) ); ?></strong>
</li>
<?php
// if order has meta value _pos_user, get the user id and display the user name
$pos_user = $order->get_meta( '_pos_user' );
if ( $pos_user ) {
$user = get_user_by( 'id', $pos_user );
$user_name = $user->display_name;
echo '<li class="cashier">' . esc_html__( 'Cashier:', 'woocommerce-pos' ) . ' <strong>' . esc_html( $user_name ) . '</strong></li>';
}
?>
<?php if ( $order->get_payment_method_title() ) : ?>
<li class="method">
<?php esc_html_e( 'Payment method:', 'woocommerce' ); ?>
<strong><?php echo wp_kses_post( $order->get_payment_method_title() ); ?></strong>
</li>
<?php endif; ?>
</ul>
<table>
<thead>
<tr>
<th><?php esc_html_e( 'Product', 'woocommerce' ); ?></th>
<th><?php esc_html_e( 'Quantity', 'woocommerce' ); ?></th>
<th><?php esc_html_e( 'Price', 'woocommerce' ); ?></th>
<th><?php esc_html_e( 'Total', 'woocommerce' ); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ( $order->get_items() as $item_id => $item ) {
$product = $item->get_product();
?>
<tr>
<td>
<?php
echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', $item->get_name(), $item, false ) );
do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order, false );
wc_display_item_meta( $item );
do_action( 'woocommerce_order_item_meta_end', $item_id, $item, $order, false );
$license_manager = new \LicenseManagerForWooCommerce\Integrations\WooCommerce\Order();
$license_manager->showOrderedLicenses($item_id, $item, $product);
?>
</td>
<td><?php echo esc_html( $item->get_quantity() ); ?></td>
<td><?php echo wp_kses_post( wc_price( $product->get_price() ) ); ?></td>
<td><?php echo wp_kses_post( wc_price( $item->get_total() ) ); ?></td>
</tr>
<?php } ?>
</tbody>
<tfoot>
<tr>
<th colspan="3"><?php esc_html_e( 'Subtotal', 'woocommerce' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $order->get_subtotal() ) ); ?></td>
</tr>
<?php if ( $order->get_shipping_total() > 0 ) : ?>
<tr>
<th colspan="3"><?php esc_html_e( 'Shipping', 'woocommerce' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $order->get_shipping_total() ) ); ?></td>
</tr>
<?php endif; ?>
<?php foreach ( $order->get_fees() as $fee ) : ?>
<tr>
<th colspan="3"><?php esc_html_e( 'Fee', 'woocommerce' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $fee->get_total() ) ); ?></td>
</tr>
<?php endforeach; ?>
<?php if ( $order->get_total_discount() > 0 ) : ?>
<tr>
<th colspan="3"><?php esc_html_e( 'Discount', 'woocommerce' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $order->get_total_discount() ) ); ?></td>
</tr>
<?php endif; ?>
<?php if ( wc_tax_enabled() ) : ?>
<?php if ( 'itemized' === get_option( 'woocommerce_tax_total_display' ) ) : ?>
<?php foreach ( $order->get_tax_totals() as $code => $tax ) : ?>
<tr>
<th colspan="3"><?php echo esc_html( $tax->label ); ?></th>
<td><?php echo wp_kses_post( wc_price( $tax->amount ) ); ?></td>
</tr>
<?php endforeach; ?>
<?php else : ?>
<tr>
<th colspan="3"><?php echo esc_html( WC()->countries->tax_or_vat() ); ?></th>
<td><?php echo wp_kses_post( wc_price( $order->get_total_tax() ) ); ?></td>
</tr>
<?php endif; ?>
<?php endif; ?>
<tr>
<th colspan="3"><?php esc_html_e( 'Total', 'woocommerce' ); ?></th>
<td><?php echo wp_kses_post( wc_price( $order->get_total() ) ); ?></td>
</tr>
</tfoot>
</table>
<div class="address-fields">
<section class="woocommerce-customer-details">
<section class="woocommerce-columns woocommerce-columns--2 woocommerce-columns--addresses col2-set addresses">
<div class="woocommerce-column woocommerce-column--1 woocommerce-column--billing-address col-1">
<h2 class="woocommerce-column__title"><?php esc_html_e( 'Billing address', 'woocommerce' ); ?></h2>
<address>
<?php echo wp_kses_post( $order->get_formatted_billing_address( esc_html__( 'N/A', 'woocommerce' ) ) ); ?>
<?php if ( $order->get_billing_phone() ) : ?>
<p class="woocommerce-customer-details--phone"><?php echo esc_html( $order->get_billing_phone() ); ?></p>
<?php endif; ?>
<?php if ( $order->get_billing_email() ) : ?>
<p class="woocommerce-customer-details--email"><?php echo esc_html( $order->get_billing_email() ); ?></p>
<?php endif; ?>
</address>
</div><!-- /.col-1 -->
<div class="woocommerce-column woocommerce-column--2 woocommerce-column--shipping-address col-2">
<h2 class="woocommerce-column__title"><?php esc_html_e( 'Shipping address', 'woocommerce' ); ?></h2>
<address>
<?php echo wp_kses_post( $order->get_formatted_shipping_address( esc_html__( 'N/A', 'woocommerce' ) ) ); ?>
<?php if ( $order->get_shipping_phone() ) : ?>
<p class="woocommerce-customer-details--phone"><?php echo esc_html( $order->get_shipping_phone() ); ?></p>
<?php endif; ?>
</address>
</div><!-- /.col-2 -->
</section><!-- /.col2-set -->
<?php do_action( 'woocommerce_order_details_after_customer_details', $order ); ?>
</section>
</div>
<?php if ( $order->get_customer_note() ) : ?>
<div class="customer-notes">
<h4 class="section-title"><?php esc_html_e( 'Customer Notes', 'woocommerce' ); ?></h4>
<p><?php echo wp_kses_post( nl2br( $order->get_customer_note() ) ); ?></p>
</div>
<?php endif; ?>
<div class="footer">
<p><?php esc_html_e( 'Thank you for your purchase!', 'woocommerce' ); ?></p>
<p><?php bloginfo( 'name' ); ?> - <?php
bloginfo( 'description' ); ?></p>
</div>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment