400 lines
18 KiB
PHP
400 lines
18 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Kasir;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Zelda\EscposPhp\EscposImage;
|
|
use Zelda\EscposPhp\PrintConnectors\NetworkPrintConnector;
|
|
use Zelda\EscposPhp\PrintConnectors\WindowsPrintConnector;
|
|
use Zelda\EscposPhp\Printer;
|
|
|
|
// jumlah character yang bisa ditampung oleh printer 88mm adalah 48 karakter per baris tapi yang dipakai hanya 46 atau 42 saja
|
|
class kolomPrinter88mmController extends Controller
|
|
{
|
|
public function print88mm($pesanan, $printernya)
|
|
{
|
|
// begin set data
|
|
$items = [];
|
|
/* Information for the receipt */
|
|
foreach ($pesanan->detailPesanan as $key => $value) {
|
|
|
|
$theDiskon = $value->diskon_persen != '' || $value->diskon_persen != 0 || $value->diskon_persen != null ? $value->diskon_persen . '%' : '';
|
|
$items[] = $this->buatBaris1Kolom($value->nama_produk);
|
|
// $items[] = new itemReceipt($value->jumlah_produk . ' Rp. ' . format_uang($value->harga_produk) . ' ' . $theDiskon, 'Rp. ' . format_uang($value->total_harga_produk));
|
|
$items[] = $this->buatBaris4Kolom($value->jumlah_produk, 'Rp. ' . format_uang($value->harga_produk), $theDiskon, 'Rp. ' . format_uang($value->total_harga_produk));
|
|
}
|
|
|
|
// $images = EscposImage::load(env('PATH_LOGO_STK'), false);
|
|
$stk = "Sepiring Telur Keriting\n";
|
|
$address = "Jln. Jawa No. 28A, Jember\n";
|
|
$dashline = " \n";
|
|
$ordercode = $pesanan->kode_pesanan . "\n";
|
|
$line1 = $this->buatBaris2Kolom('Meja: ' . $pesanan->nomor_meja, ' Kasir:');
|
|
$line2 = $this->buatBaris2Kolom('Antrian: ' . $pesanan->nomor_antrian, $pesanan->user->name . 'ssssss');
|
|
$line3 = $this->buatBaris1Kolom('Pemesan: ' . $pesanan->nama_pemesan);
|
|
|
|
$total = $this->buatBaris3Kolom($pesanan->total_pesanan, 'Total: ', 'Rp. ' . format_uang($pesanan->total_bayar));
|
|
$theDiskonAll = $pesanan->diskon_persen != '' || $pesanan->diskon_persen != 0 || $pesanan->diskon_persen != null ? $pesanan->diskon_persen . '%' : '0%';
|
|
$diskon = $this->buatBaris3Kolom('', 'Diskon: ', $theDiskonAll);
|
|
$rpgrand_total = 'Rp. ' . format_uang($pesanan->grand_total);
|
|
$grand_Total = $this->buatBaris3Kolom('', 'Grand Total: ', $rpgrand_total);
|
|
$bayar = $this->buatBaris3Kolom('', 'Bayar: ', 'Rp. ' . format_uang($pesanan->nominal_bayar));
|
|
$kembali = $this->buatBaris3Kolom('', 'Kembali: ', 'Rp. ' . format_uang($pesanan->nominal_kembali));
|
|
$terimakasih = "Terima Kasih, Selamat Datang Kembali\n";
|
|
$stkfooter = "@sepiringtelurkeriting";
|
|
/* Date is kept the same for testing */
|
|
$date = tanggal_indonesia($pesanan->tanggal_pesanan) . date('H:i', strtotime($pesanan->tanggal_pesanan));
|
|
// end set data
|
|
|
|
// begin print action
|
|
/* Fill in your own connector here */
|
|
$connector = null;
|
|
if ($printernya->printer_connection == 'wired') {
|
|
$connector = new WindowsPrintConnector($printernya->nama_printer);
|
|
$connector->finalize();
|
|
} else {
|
|
$connector = new NetworkPrintConnector($printernya->ip_address, 9100);
|
|
}
|
|
|
|
/* Start the printer */
|
|
$printer = new Printer($connector);
|
|
|
|
/* Print top logo */
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
|
|
/* Name of shop */
|
|
// $printer->bitImage($images);
|
|
$printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH);
|
|
$printer->text($stk);
|
|
$printer->selectPrintMode();
|
|
$printer->text($address);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
|
|
/* Title of receipt */
|
|
$printer->setEmphasis(true);
|
|
$printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH);
|
|
$printer->text($ordercode);
|
|
$printer->selectPrintMode();
|
|
$printer->text($date . "\n");
|
|
$printer->setEmphasis(false);
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
$printer->text($line1);
|
|
$printer->text($line2);
|
|
$printer->text($line3);
|
|
|
|
/* Items */
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
$printer->setEmphasis(true);
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
$printer->setEmphasis(false);
|
|
foreach ($items as $item) {
|
|
$printer->text($item);
|
|
}
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
// $printer->text($totalItem);
|
|
$printer->text($total);
|
|
$printer->text($diskon);
|
|
$printer->text($grand_Total);
|
|
$printer->text($bayar);
|
|
$printer->text($kembali);
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
/* Footer */
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->text($terimakasih);
|
|
$printer->text($stkfooter);
|
|
$printer->feed();
|
|
|
|
/* Cut the receipt and open the cash drawer */
|
|
$printer->cut();
|
|
$printer->pulse();
|
|
|
|
$printer->close();
|
|
// end print action
|
|
return true;
|
|
}
|
|
|
|
public function print88mmDapur($pesanan, $printernya)
|
|
{
|
|
// begin set data
|
|
$items = [];
|
|
/* Information for the receipt */
|
|
foreach ($pesanan->detailPesanan as $key => $value) {
|
|
$status_pesanan = $value->status_pesanan == 0 ? '(TAKEAWAY)' : ($value->status_pesanan == 3 ? '(CANCEL)' : '');
|
|
if ($value->keterangan_produk != '') {
|
|
$items[] = $this->buatBaris1Kolom('(' . $value->jumlah_produk . ') ' . $value->nama_produk . ' ' . $status_pesanan);
|
|
$items[] = $this->buatBaris1Kolom('Ket: ' . $value->keterangan_produk . "\n");
|
|
} else {
|
|
$items[] = $this->buatBaris1Kolom('(' . $value->jumlah_produk . ') ' . $value->nama_produk . ' ' . $status_pesanan . "\n");
|
|
}
|
|
}
|
|
|
|
$stk = "Sepiring Telur Keriting\n";
|
|
$address = "Jln. Jawa No. 28A, Jember\n";
|
|
$dashline = " \n";
|
|
$ordercode = $pesanan->kode_pesanan . "\n";
|
|
$line1 = $this->buatBaris2Kolom('Meja: ' . $pesanan->nomor_meja, ' Kasir:');
|
|
$line2 = $this->buatBaris2Kolom('Antrian: ' . $pesanan->nomor_antrian, $pesanan->user->name . 'ssssss');
|
|
$line3 = $this->buatBaris1Kolom('Pemesan: ' . $pesanan->nama_pemesan);
|
|
$total_pesanan = $this->buatBaris1Kolom($pesanan->total_pesanan . ' Total item');
|
|
$keterangan_seluruh = $this->buatBaris1Kolom('Keterangan Pesan Keseluruhan:');
|
|
$keterangan_pesanannya = $this->buatBaris1Kolom($pesanan->keterangan_pesanan);
|
|
/* Date is kept the same for testing */
|
|
$date = tanggal_indonesia($pesanan->tanggal_pesanan) . date('H:i', strtotime($pesanan->tanggal_pesanan));
|
|
// end set data
|
|
|
|
// begin print action
|
|
/* Fill in your own connector here */
|
|
$connector = null;
|
|
if ($printernya->printer_connection == 'wired') {
|
|
$connector = new WindowsPrintConnector($printernya->nama_printer);
|
|
} else {
|
|
$connector = new NetworkPrintConnector($printernya->ip_address, 9100);
|
|
}
|
|
/* Start the printer */
|
|
$printer = new Printer($connector);
|
|
|
|
/* Print top logo */
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
|
|
/* Name of shop */
|
|
$printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH);
|
|
$printer->text($stk);
|
|
$printer->selectPrintMode();
|
|
$printer->text($address);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
|
|
/* Title of receipt */
|
|
$printer->setEmphasis(true);
|
|
$printer->text($ordercode);
|
|
$printer->text($date . "\n");
|
|
$printer->setEmphasis(false);
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
$printer->text($line1);
|
|
$printer->text($line2);
|
|
$printer->text($line3);
|
|
|
|
/* Items */
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
$printer->setEmphasis(true);
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
$printer->setEmphasis(false);
|
|
foreach ($items as $item) {
|
|
$printer->text($item);
|
|
}
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
$printer->text($total_pesanan);
|
|
$printer->text($keterangan_seluruh);
|
|
$printer->text($keterangan_pesanannya);
|
|
|
|
$printer->setJustification(Printer::JUSTIFY_CENTER);
|
|
$printer->setUnderline(Printer::UNDERLINE_DOUBLE);
|
|
$printer->text($dashline);
|
|
$printer->selectPrintMode();
|
|
$printer->setJustification(Printer::JUSTIFY_LEFT);
|
|
|
|
/* Footer */
|
|
$printer->feed();
|
|
|
|
/* Cut the receipt and open the cash drawer */
|
|
$printer->cut();
|
|
$printer->pulse();
|
|
|
|
$printer->close();
|
|
// end print action
|
|
return true;
|
|
}
|
|
|
|
function buatBaris1Kolom($kolom1)
|
|
{
|
|
// Mengatur lebar setiap kolom (dalam satuan karakter)
|
|
$lebar_kolom_1 = 46;
|
|
|
|
// Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
|
|
$kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
|
|
|
|
// Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
|
|
$kolom1Array = explode("\n", $kolom1);
|
|
|
|
// Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
|
|
$jmlBarisTerbanyak = count($kolom1Array);
|
|
|
|
// Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
|
|
$hasilBaris = array();
|
|
|
|
// Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
|
|
for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
|
|
|
|
// memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
|
|
$hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
|
|
|
|
// Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
|
|
$hasilBaris[] = $hasilKolom1;
|
|
}
|
|
|
|
// Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
|
|
return implode($hasilBaris) . "\n";
|
|
}
|
|
|
|
function buatBaris2Kolom($kolom1, $kolom2)
|
|
{
|
|
// Mengatur lebar setiap kolom (dalam satuan karakter)
|
|
$lebar_kolom_1 = 23;
|
|
$lebar_kolom_2 = 23;
|
|
|
|
// Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
|
|
$kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
|
|
$kolom2 = wordwrap($kolom2, $lebar_kolom_2, "\n", true);
|
|
|
|
// Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
|
|
$kolom1Array = explode("\n", $kolom1);
|
|
$kolom2Array = explode("\n", $kolom2);
|
|
|
|
// Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
|
|
$jmlBarisTerbanyak = max(count($kolom1Array), count($kolom2Array));
|
|
|
|
// Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
|
|
$hasilBaris = array();
|
|
|
|
// Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
|
|
for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
|
|
|
|
// memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
|
|
$hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
|
|
// memberikan rata kanan pada kolom 3 dan 4 karena akan kita gunakan untuk harga dan total harga
|
|
$hasilKolom2 = str_pad((isset($kolom2Array[$i]) ? $kolom2Array[$i] : ""), $lebar_kolom_2, " ", STR_PAD_LEFT);
|
|
|
|
// Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
|
|
$hasilBaris[] = $hasilKolom1 . " " . $hasilKolom2;
|
|
}
|
|
|
|
// Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
|
|
return implode($hasilBaris) . "\n";
|
|
}
|
|
|
|
function buatBaris3Kolom($kolom1, $kolom2, $kolom3)
|
|
{
|
|
// Mengatur lebar setiap kolom (dalam satuan karakter)
|
|
$lebar_kolom_1 = 4;
|
|
$lebar_kolom_2 = 18;
|
|
$lebar_kolom_3 = 24;
|
|
|
|
// Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
|
|
$kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
|
|
$kolom2 = wordwrap($kolom2, $lebar_kolom_2, "\n", true);
|
|
$kolom3 = wordwrap($kolom3, $lebar_kolom_3, "\n", true);
|
|
|
|
// Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
|
|
$kolom1Array = explode("\n", $kolom1);
|
|
$kolom2Array = explode("\n", $kolom2);
|
|
$kolom3Array = explode("\n", $kolom3);
|
|
|
|
// Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
|
|
$jmlBarisTerbanyak = max(count($kolom1Array), count($kolom2Array), count($kolom3Array));
|
|
|
|
// Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
|
|
$hasilBaris = array();
|
|
|
|
// Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
|
|
for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
|
|
|
|
// memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
|
|
$hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
|
|
// memberikan rata kanan pada kolom 3 dan 4 karena akan kita gunakan untuk harga dan total harga
|
|
$hasilKolom2 = str_pad((isset($kolom2Array[$i]) ? $kolom2Array[$i] : ""), $lebar_kolom_2, " ", STR_PAD_LEFT);
|
|
|
|
$hasilKolom3 = str_pad((isset($kolom3Array[$i]) ? $kolom3Array[$i] : ""), $lebar_kolom_3, " ", STR_PAD_LEFT);
|
|
|
|
// Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
|
|
$hasilBaris[] = $hasilKolom1 . " " . $hasilKolom2 . " " . $hasilKolom3;
|
|
}
|
|
|
|
// Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
|
|
return implode($hasilBaris) . "\n";
|
|
}
|
|
|
|
function buatBaris4Kolom($kolom1, $kolom2, $kolom3, $kolom4)
|
|
{
|
|
// Mengatur lebar setiap kolom (dalam satuan karakter)
|
|
$lebar_kolom_1 = 4;
|
|
$lebar_kolom_2 = 12;
|
|
$lebar_kolom_3 = 4;
|
|
$lebar_kolom_4 = 25;
|
|
|
|
// Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
|
|
$kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
|
|
$kolom2 = wordwrap($kolom2, $lebar_kolom_2, "\n", true);
|
|
$kolom3 = wordwrap($kolom3, $lebar_kolom_3, "\n", true);
|
|
$kolom4 = wordwrap($kolom4, $lebar_kolom_4, "\n", true);
|
|
|
|
// Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
|
|
$kolom1Array = explode("\n", $kolom1);
|
|
$kolom2Array = explode("\n", $kolom2);
|
|
$kolom3Array = explode("\n", $kolom3);
|
|
$kolom4Array = explode("\n", $kolom4);
|
|
|
|
// Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
|
|
$jmlBarisTerbanyak = max(count($kolom1Array), count($kolom2Array), count($kolom3Array), count($kolom4Array));
|
|
|
|
// Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
|
|
$hasilBaris = array();
|
|
|
|
// Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
|
|
for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
|
|
|
|
// memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
|
|
$hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
|
|
// memberikan rata kanan pada kolom 3 dan 4 karena akan kita gunakan untuk harga dan total harga
|
|
$hasilKolom2 = str_pad((isset($kolom2Array[$i]) ? $kolom2Array[$i] : ""), $lebar_kolom_2, " ", STR_PAD_LEFT);
|
|
|
|
$hasilKolom3 = str_pad((isset($kolom3Array[$i]) ? $kolom3Array[$i] : ""), $lebar_kolom_3, " ", STR_PAD_LEFT);
|
|
|
|
$hasilKolom4 = str_pad((isset($kolom4Array[$i]) ? $kolom4Array[$i] : ""), $lebar_kolom_4, " ", STR_PAD_LEFT);
|
|
|
|
// Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
|
|
$hasilBaris[] = $hasilKolom1 . " " . $hasilKolom2 . " " . $hasilKolom3 . " " . $hasilKolom4;
|
|
}
|
|
|
|
// Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
|
|
return implode($hasilBaris) . "\n";
|
|
}
|
|
}
|