Created
May 17, 2019 07:53
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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