Skip to content

Instantly share code, notes, and snippets.

@MianSaleem
Created May 17, 2019 07:53
Show Gist options
  • Save MianSaleem/7f3959d5abf8b574e3ed725447a502e2 to your computer and use it in GitHub Desktop.
Save MianSaleem/7f3959d5abf8b574e3ed725447a502e2 to your computer and use it in GitHub Desktop.
Single line item on receipt, change themes/default/admin/views/pos/remote_printing.php
<?php
$char_per_line = ($printer ? $printer->char_per_line : 42);
if ($pos_settings->remote_printing != 1) {
if ($Settings->invoice_view > 0) {
$tax_summary = $this->gst->taxSummary($rows);
$re_tax_summary = $this->gst->taxSummary($return_rows);
$tax_summary = $tax_summary + $re_tax_summary;
}
$store_name = printText(($biller->company && $biller->company != '-' ? $biller->company : $biller->name), $char_per_line) . "\n";
$header = '';
$header .= printText(($biller->company && $biller->company != '-' ? $biller->company : $biller->name), $char_per_line);
if ($biller->address) {
$header .= printText($biller->address, $char_per_line) . "\n";
}
if ($biller->city) {
$header .= printText($biller->city . ' ' . ($biller->country ? $biller->country : ''), $char_per_line) . "\n";
}
$header .= printText(lang('tel') . ': ' . $biller->phone, $char_per_line);
if (!empty($biller->cf1) && $biller->cf1 != '-') {
$header .= "\n" + lang('bcf1') . ': ' . $biller->cf1;
}
if (!empty($biller->cf2) && $biller->cf2 != '-') {
$header .= "\n" + lang('bcf2') . ': ' . $biller->cf2;
}
if (!empty($biller->cf3) && $biller->cf3 != '-') {
$header .= "\n" + lang('bcf3') . ': ' . $biller->cf3;
}
if (!empty($biller->cf4) && $biller->cf4 != '-') {
$header .= "\n" + lang('bcf4') . ': ' . $biller->cf4;
}
if (!empty($biller->cf5) && $biller->cf5 != '-') {
$header .= "\n" + lang('bcf5') . ': ' . $biller->cf5;
}
if (!empty($biller->cf6) && $biller->cf6 != '-') {
$header .= "\n" + lang('bcf6') . ': ' . $biller->cf6;
}
$header .= "\n\n";
if ($pos_settings->cf_title1 && $pos_settings->cf_value1) {
$header .= printText(($pos_settings->cf_title1 . ': ' . $pos_settings->cf_value1), $char_per_line) . "\n";
}
if ($pos_settings->cf_title2 && $pos_settings->cf_value2) {
$header .= printText(($pos_settings->cf_title2 . ': ' . $pos_settings->cf_value2), $char_per_line) . "\n";
}
$header .= "\n";
$info = '';
$info .= lang('date') . ': ' . $this->sma->hrld($inv->date) . "\n";
$info .= lang('sale_no_ref') . ': ' . $inv->id . "\n";
$info .= lang('sales_person') . ': ' . $created_by->first_name . ' ' . $created_by->last_name . "\n\n";
$info .= lang('customer') . ': ' . ($customer->company && $customer->company != '-' ? $customer->company : $customer->name) . "\n";
if ($pos_settings->customer_details) {
if ($customer->vat_no != '-' && $customer->vat_no != '') {
$info .= lang('vat_no') . ': ' . $customer->vat_no . "\n";
}
if ($customer->gst_no != '-' && $customer->gst_no != '') {
$info .= lang('gst_no') . ': ' . $customer->gst_no . "\n";
}
$info .= lang('tel') . ': ' . $customer->phone . "\n";
$info .= lang('address') . ': ' . $customer->address . "\n";
$info .= $customer->city . ' ' . $customer->state . ' ' . $customer->country . "\n";
if (!empty($customer->cf1) && $customer->cf1 != '-') {
$info .= "\n" . lang('ccf1') . ': ' . $customer->cf1;
}
if (!empty($customer->cf2) && $customer->cf2 != '-') {
$info .= "\n" . lang('ccf2') . ': ' . $customer->cf2;
}
if (!empty($customer->cf3) && $customer->cf3 != '-') {
$info .= "\n" . lang('ccf3') . ': ' . $customer->cf3;
}
if (!empty($customer->cf4) && $customer->cf4 != '-') {
$info .= "\n" . lang('ccf4') . ': ' . $customer->cf4;
}
if (!empty($customer->cf5) && $customer->cf5 != '-') {
$info .= "\n" . lang('ccf5') . ': ' . $customer->cf5;
}
if (!empty($customer->cf6) && $customer->cf6 != '-') {
$info .= "\n" . lang('ccf6') . ': ' . $customer->cf6;
}
}
$info .= "\n";
$items = '';
foreach ($rows as $row) {
$r = 1;
$items .= printLine(product_name(addslashes('#' . $r . ' ' . $row->product_code), 18) . ': ' . printLine($this->sma->formatQuantity($row->unit_quantity) . ' x ' . $this->sma->formatMoney($row->unit_price) . ': ' . $this->sma->formatMoney($row->subtotal), 14), $char_per_line, ' ') . "\n";
$items .= product_name(addslashes(' ' . $row->product_name), $char_per_line) . "\n";
if (!empty($row->second_name)) {
$items .= product_name(addslashes(' ' . $row->second_name), $char_per_line) . "\n";
}
if (!empty($row->variant)) {
$items .= product_name(addslashes(' ' . $row->variant), $char_per_line) . "\n";
}
if ($row->item_tax != 0) {
$items .= ' ' . lang('tax') . ' (' . ($Settings->indian_gst ? $row->tax : $row->tax_code) . ') ' . $this->sma->formatMoney($row->item_tax) . ($row->hsn_code ? ' (' . lang('hsn_code') . ': ' . $row->hsn_code . ')' : '') . "\n";
}
$r++;
}
if ($return_rows) {
foreach ($return_rows as $row) {
$r = 1;
$items .= printLine(product_name(addslashes('#' . $r . ' ' . $row->product_code), 18) . ': ' . printLine($this->sma->formatQuantity($row->unit_quantity) . ' x ' . $this->sma->formatMoney($row->unit_price) . ': ' . $this->sma->formatMoney($row->subtotal), 14), $char_per_line, ' ') . "\n";
$items .= product_name(addslashes(' ' . $row->product_name), $char_per_line) . "\n";
if (!empty($row->second_name)) {
$items .= product_name(addslashes(' ' . $row->second_name), $char_per_line) . "\n";
}
if (!empty($row->variant)) {
$items .= product_name(addslashes(' ' . $row->variant), $char_per_line) . "\n";
}
if ($row->item_tax != 0) {
$items .= ' ' . lang('tax') . ' (' . ($Settings->indian_gst ? $row->tax : $row->tax_code) . ') ' . $this->sma->formatMoney($row->item_tax) . ($row->hsn_code ? ' (' . lang('hsn_code') . ': ' . $row->hsn_code . ')' : '') . "\n";
}
$r++;
}
}
$items .= "\n";
$totals = '';
$totals .= printLine(lang('total') . ': ' . $this->sma->formatMoney($return_sale ? (($inv->total + $inv->product_tax) + ($return_sale->total + $return_sale->product_tax)) : ($inv->total + $inv->product_tax)), $char_per_line) . "\n";
if ($Settings->indian_gst) {
if ($inv->cgst > 0) {
$cgst = $return_sale ? $inv->cgst + $return_sale->cgst : $inv->cgst;
$totals .= printLine(lang('cgst') . ': ' . ($Settings->format_gst ? $this->sma->formatMoney($cgst) : $cgst), $char_per_line) . "\n";
}
if ($inv->sgst > 0) {
$sgst = $return_sale ? $inv->sgst + $return_sale->sgst : $inv->sgst;
$totals .= printLine(lang('sgst') . ': ' . ($Settings->format_gst ? $this->sma->formatMoney($sgst) : $sgst), $char_per_line) . "\n";
}
if ($inv->igst > 0) {
$igst = $return_sale ? $inv->igst + $return_sale->igst : $inv->igst;
$totals .= printLine(lang('igst') . ': ' . ($Settings->format_gst ? $this->sma->formatMoney($igst) : $igst), $char_per_line) . "\n";
}
}
if ($inv->order_tax != 0) {
$totals .= printLine(lang('tax') . ': ' . $this->sma->formatMoney($return_sale ? ($inv->order_tax + $return_sale->order_tax) : $inv->order_tax), $char_per_line) . "\n";
}
if ($inv->total_discount != 0) {
$totals .= printLine(lang('discount') . ': (' . $this->sma->formatMoney($return_sale ? ($inv->product_discount + $return_sale->product_discount) : $inv->product_discount) . ') ' . $this->sma->formatMoney($return_sale ? ($inv->order_discount + $return_sale->order_discount) : $inv->order_discount), $char_per_line) . "\n";
}
if ($inv->shipping != 0) {
$totals .= printLine(lang('shipping') . ': ' . $this->sma->formatMoney($inv->shipping), $char_per_line) . "\n";
}
if ($pos_settings->rounding || $inv->rounding != 0) {
$totals .= printLine(lang('rounding') . ': ' . $this->sma->formatMoney($inv->rounding), $char_per_line) . "\n";
$totals .= printLine(lang('grand_total') . ': ' . $this->sma->formatMoney($return_sale ? ($this->sma->roundMoney($inv->grand_total + $inv->rounding) + $return_sale->grand_total) : $this->sma->roundMoney($inv->grand_total + $inv->rounding)), $char_per_line) . "\n";
} else {
$totals .= printLine(lang('grand_total') . ': ' . $this->sma->formatMoney($return_sale ? ($inv->grand_total + $return_sale->grand_total) : $inv->grand_total), $char_per_line) . "\n";
}
$totals .= printLine(lang('paid_amount') . ': ' . $this->sma->formatMoney($return_sale ? ($inv->paid + $return_sale->paid) : $inv->paid), $char_per_line) . "\n";
$totals .= printLine(lang('due_amount') . ': ' . $this->sma->formatMoney(($return_sale ? ($inv->grand_total + $return_sale->grand_total) : $inv->grand_total) - ($return_sale ? ($inv->paid + $return_sale->paid) : $inv->paid)), $char_per_line) . "\n";
$totals .= "\n";
$payments_text = '';
if ($payments) {
foreach ($payments as $payment) {
if ($payment->paid_by == 'cash' || $payment->paid_by == 'deposit' && $payment->pos_paid) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('change') . ': ' . ($payment->pos_balance > 0 ? $this->sma->formatMoney($payment->pos_balance) : '0.00'), $char_per_line) . "\n";
}
if (($payment->paid_by == 'CC' || $payment->paid_by == 'ppp' || $payment->paid_by == 'stripe') && $payment->cc_no) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('card_no') . ': xxxx xxxx xxxx ' . substr($payment->cc_no, -4), $char_per_line) . "\n";
}
if ($payment->paid_by == 'gift_card') {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('card_no') . ': xxxx xxxx xxxx ' . substr($payment->cc_no, -4), $char_per_line) . "\n";
}
if ($payment->paid_by == 'Cheque' && $payment->cheque_no) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('cheque_no') . ': ' . $payment->cheque_no, $char_per_line) . "\n";
if ($payment->paid_by == 'other' && $payment->amount) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->amount), $char_per_line) . "\n";
$payments_text .= printText(lang('payment_note') . ': ' . $payment->note, $char_per_line) . "\n";
}
}
}
}
if ($return_payments) {
$payments_text .= "\n" . printText(lang('return_payments'), $char_per_line) . "\n";
foreach ($return_payments as $payment) {
if ($payment->paid_by == 'cash' || $payment->paid_by == 'deposit' && $payment->pos_paid) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('change') . ': ' . ($payment->pos_balance > 0 ? $this->sma->formatMoney($payment->pos_balance) : '0.00'), $char_per_line) . "\n";
}
if (($payment->paid_by == 'CC' || $payment->paid_by == 'ppp' || $payment->paid_by == 'stripe') && $payment->cc_no) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('card_no') . ': xxxx xxxx xxxx ' . substr($payment->cc_no, -4), $char_per_line) . "\n";
}
if ($payment->paid_by == 'gift_card') {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('card_no') . ': xxxx xxxx xxxx ' . substr($payment->cc_no, -4), $char_per_line) . "\n";
}
if ($payment->paid_by == 'Cheque' && $payment->cheque_no) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->pos_paid), $char_per_line) . "\n";
$payments_text .= printLine(lang('cheque_no') . ': ' . $payment->cheque_no, $char_per_line) . "\n";
if ($payment->paid_by == 'other' && $payment->amount) {
$payments_text .= printLine(lang('paid_by') . ': ' . lang($payment->paid_by), $char_per_line) . "\n";
$payments_text .= printLine(lang('amount') . ': ' . $this->sma->formatMoney($payment->amount), $char_per_line) . "\n";
$payments_text .= printText(lang('payment_note') . ': ' . $payment->note, $char_per_line) . "\n";
}
}
}
}
$payments_text .= "\n";
$footer = '';
if ($Settings->invoice_view > 0) {
if (!empty($tax_summary)) {
$footer .= lang('tax_summary') . "\n\n";
$footer .= taxLine(lang('name'), lang('code'), lang('qty'), lang('tax_excl'), lang('tax_amt'), $char_per_line) . "\n";
$footer .= str_replace("\n", '', drawLine($char_per_line)) . "\n";
foreach ($tax_summary as $summary) {
$footer .= taxLine($summary['name'], $summary['code'], $this->sma->formatQuantity($summary['items']), $this->sma->formatMoney($summary['amt']), $this->sma->formatMoney($summary['tax']), $char_per_line) . "\n";
}
$footer .= str_replace("\n", '', drawLine($char_per_line)) . "\n";
$footer .= "\n" . printLine(lang('total_tax_amount') . ':' . $this->sma->formatMoney($inv->product_tax), $char_per_line) . "\n";
$footer .= str_replace("\n", '', drawLine($char_per_line)) . "\n\n";
}
}
if ($inv->note) {
$footer .= printText(strip_tags(preg_replace('/\s+/', ' ', $this->sma->decode_html($inv->note))), $char_per_line) . "\n\n";
}
if ($biller->invoice_footer) {
$footer .= printText(str_replace(["\n", "\r"], ['\\n', '\\r'], $biller->invoice_footer), $char_per_line) . "\n\n";
}
$receipt = [
'store_name' => $store_name,
'header' => $header,
'info' => $info,
'items' => $items,
'totals' => $totals,
'payments' => $payments_text,
'footer' => $footer,
]
?>
<script type="text/javascript">
function receiptData() {
return <?=json_encode($receipt); ?>;
}
var socket = null;
</script>
<?php
if (!$pos_settings->remote_printing) {
?>
<script type="text/javascript">
function openCashDrawer() {
var ocddata = {
'printer': <?= json_encode($printer); ?>
};
$.get('<?= admin_url('pos/open_drawer'); ?>', {data: JSON.stringify(ocddata)});
return false;
}
function printReceipt() {
var receipt_data = receiptData();
var socket_data = {
'printer': <?= json_encode($printer); ?>,
'logo': '<?= !empty($biller->logo) ? $biller->logo : ''; ?>',
'text': receipt_data,
'cash_drawer': <?= isset($modal) ? 0 : 1; ?>, 'drawer_code': '<?= $pos_settings->cash_drawer_codes; ?>'
};
$.get('<?= admin_url('pos/p'); ?>', {data: JSON.stringify(socket_data)});
return false;
}
</script>
<?php
} elseif ($pos_settings->remote_printing == 2) {
?>
<script src="<?= $assets ?>plugins/socket.io.min.js" type="text/javascript"></script>
<script type="text/javascript">
socket = io.connect('http://localhost:6440', {'reconnection': false});
function printReceipt() {
if (socket.connected) {
var receipt_data = receiptData();
var socket_data = {
'printer': <?= json_encode($printer); ?>,
'logo': '<?= !empty($biller->logo) ? base_url('assets/uploads/logos/' . $biller->logo) : ''; ?>',
'text': receipt_data,
'cash_drawer': <?= isset($modal) ? 0 : 1; ?>, 'drawer_code': '<?= $pos_settings->cash_drawer_codes; ?>'
};
socket.emit('print-now', socket_data);
return false;
} else {
bootbox.alert('<?= lang('pos_print_error'); ?>');
return false;
}
}
function openCashDrawer() {
if (socket.connected) {
var ocddata = {
'printer': <?= json_encode($printer); ?>,
'cash_drawer': 1, 'drawer_code': '<?= $pos_settings->cash_drawer_codes; ?>'
};
socket.emit('open-cashdrawer', ocddata);
return false;
} else {
bootbox.alert('<?= lang('pos_print_error'); ?>');
return false;
}
}
</script>
<?php
} elseif ($pos_settings->remote_printing == 3) {
?>
<script type="text/javascript">
try {
socket = new WebSocket('ws://127.0.0.1:6441');
socket.onopen = function () {
console.log('Connected');
return;
};
socket.onclose = function () {
console.log('Not Connected');
return;
};
} catch (e) {
console.log(e);
}
function openCashDrawer() {
if (socket.readyState == 1) {
var ocddata = {
'printer': <?= $pos_settings->local_printers ? "''" : json_encode($printer); ?>,
};
socket.send(JSON.stringify({
type: 'open-cashdrawer',
data: ocddata
}));
return false;
} else {
bootbox.alert('<?= lang('pos_print_error'); ?>');
return false;
}
}
function printReceipt() {
if (socket.readyState == 1) {
var receipt_data = receiptData();
var socket_data = {
'printer': <?= $pos_settings->local_printers ? "''" : json_encode($printer); ?>,
'logo': '<?= !empty($biller->logo) ? base_url('assets/uploads/logos/' . $biller->logo) : ''; ?>',
'text': receipt_data,
'cash_drawer': <?= isset($modal) ? 0 : 1; ?>, 'drawer_code': '<?= $pos_settings->cash_drawer_codes; ?>'
};
socket.send(JSON.stringify({type: 'print-receipt', data: socket_data}));
return false;
} else {
bootbox.alert('<?= lang('pos_print_error'); ?>');
return false;
}
}
</script>
<?php
} ?>
<?php
if ($pos_settings->auto_print && (!isset($modal) || empty($modal))) {
?>
<script type="text/javascript">
$(document).ready(function() {
setTimeout(printReceipt, 1000);
});
</script>
<?php
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment