Advertisement
Novinaldi

Script Function printDirect

Mar 25th, 2021
1,328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.77 KB | None | 0 0
  1.  public function printDirect()
  2.     {
  3.         $faktur = $this->input->post('faktur');
  4.         $cekfaktur = $this->db->get_where('penjualan', ['jualfaktur' => $faktur]);
  5.         $row_penjualan = $cekfaktur->row_array();
  6.  
  7.         $query_toko = $this->db->get_where('nn_namatoko', ['idtoko' => 1]);
  8.         $row_toko = $query_toko->row_array();
  9.  
  10.         $ambil_datamember = $this->db->get_where('member', ['memberkode' => $row_penjualan['jualmemberkode']]);
  11.         if ($ambil_datamember->num_rows() > 0) {
  12.             $row_member = $ambil_datamember->row_array();
  13.             $kodemember = $row_member['memberkode'];
  14.             $namamember = $row_member['membernama'];
  15.             $tglsekarang = date('Y-m-d');
  16.             $ambil_datasettingdiskon = $this->db->get('member_setting_diskon')->row_array();
  17.             $diskonsetting = $ambil_datasettingdiskon['diskon'];
  18.  
  19.             // Hitung sisa tabungan diskon member
  20.             $query_tabungandiskon = $this->db->query("SELECT IFNULL(ROUND(SUM(jualtotalbersih * ($diskonsetting / 100)),0),0) AS totaldiskon FROM penjualan WHERE jualmemberkode='$kodemember' AND DATE_FORMAT(jualtgl,'%Y-%m-%d')<='$tglsekarang' AND (jualstatusbayar='T' OR jualstatusbayar='K')")->row_array();
  21.  
  22.             $query_diskondigunakan = $this->db->query("SELECT IFNULL(SUM(jualtotalbersih),0) AS totaldigunakan FROM penjualan WHERE jualmemberkode='$kodemember' AND DATE_FORMAT(jualtgl,'%Y-%m-%d')<='$tglsekarang' AND jualstatusbayar='M'")->row_array();
  23.  
  24.             $query_diskondiambil = $this->db->query("SELECT IFNULL(SUM(detambiljumlah),0) AS totaldiambil FROM pengambilan_diskon_detail JOIN pengambilan_diskon ON  detambilkode=ambilkode WHERE detambilmemberkode = '$kodemember' AND ambiltgl <= '$tglsekarang'")->row_array();
  25.  
  26.             $totaldiskon = $query_tabungandiskon['totaldiskon'];
  27.             $totaldigunakan = $query_diskondigunakan['totaldigunakan'];
  28.             $totaldiambil = $query_diskondiambil['totaldiambil'];
  29.             // end sisa tabungan diskon member
  30.  
  31.             $totaldiskonmember = $totaldiskon - ($totaldigunakan + $totaldiambil);
  32.         } else {
  33.             $kodemember = "";
  34.             $namamember = "";
  35.             $totaldiskonmember = 0;
  36.         }
  37.  
  38.         // me-load library escpos
  39.         $this->load->library('escpos');
  40.  
  41.         // membuat connector printer ke shared printer bernama "printer_a" (yang telah disetting sebelumnya)
  42.         $connector = new Escpos\PrintConnectors\WindowsPrintConnector("printer_novinaldi");
  43.  
  44.         // membuat objek $printer agar dapat di lakukan fungsinya
  45.         $printer = new Escpos\Printer($connector);
  46.  
  47.         function buatBaris1Kolom($kolom1)
  48.         {
  49.             // Mengatur lebar setiap kolom (dalam satuan karakter)
  50.             $lebar_kolom_1 = 35;
  51.  
  52.             // Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
  53.             $kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
  54.  
  55.             // Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
  56.             $kolom1Array = explode("\n", $kolom1);
  57.  
  58.             // Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
  59.             $jmlBarisTerbanyak = count($kolom1Array);
  60.  
  61.             // Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
  62.             $hasilBaris = array();
  63.  
  64.             // Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
  65.             for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
  66.  
  67.                 // memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
  68.                 $hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
  69.  
  70.                 // Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
  71.                 $hasilBaris[] = $hasilKolom1;
  72.             }
  73.  
  74.             // Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
  75.             return implode($hasilBaris, "\n") . "\n";
  76.         }
  77.  
  78.         function buatBaris3Kolom($kolom1, $kolom2, $kolom3)
  79.         {
  80.             // Mengatur lebar setiap kolom (dalam satuan karakter)
  81.             $lebar_kolom_1 = 11;
  82.             $lebar_kolom_2 = 11;
  83.             $lebar_kolom_3 = 11;
  84.  
  85.             // Melakukan wordwrap(), jadi jika karakter teks melebihi lebar kolom, ditambahkan \n
  86.             $kolom1 = wordwrap($kolom1, $lebar_kolom_1, "\n", true);
  87.             $kolom2 = wordwrap($kolom2, $lebar_kolom_2, "\n", true);
  88.             $kolom3 = wordwrap($kolom3, $lebar_kolom_3, "\n", true);
  89.  
  90.             // Merubah hasil wordwrap menjadi array, kolom yang memiliki 2 index array berarti memiliki 2 baris (kena wordwrap)
  91.             $kolom1Array = explode("\n", $kolom1);
  92.             $kolom2Array = explode("\n", $kolom2);
  93.             $kolom3Array = explode("\n", $kolom3);
  94.  
  95.             // Mengambil jumlah baris terbanyak dari kolom-kolom untuk dijadikan titik akhir perulangan
  96.             $jmlBarisTerbanyak = max(count($kolom1Array), count($kolom2Array), count($kolom3Array));
  97.  
  98.             // Mendeklarasikan variabel untuk menampung kolom yang sudah di edit
  99.             $hasilBaris = array();
  100.  
  101.             // Melakukan perulangan setiap baris (yang dibentuk wordwrap), untuk menggabungkan setiap kolom menjadi 1 baris
  102.             for ($i = 0; $i < $jmlBarisTerbanyak; $i++) {
  103.  
  104.                 // memberikan spasi di setiap cell berdasarkan lebar kolom yang ditentukan,
  105.                 $hasilKolom1 = str_pad((isset($kolom1Array[$i]) ? $kolom1Array[$i] : ""), $lebar_kolom_1, " ");
  106.                 // memberikan rata kanan pada kolom 3 dan 4 karena akan kita gunakan untuk harga dan total harga
  107.                 $hasilKolom2 = str_pad((isset($kolom2Array[$i]) ? $kolom2Array[$i] : ""), $lebar_kolom_2, " ", STR_PAD_LEFT);
  108.  
  109.                 $hasilKolom3 = str_pad((isset($kolom3Array[$i]) ? $kolom3Array[$i] : ""), $lebar_kolom_3, " ", STR_PAD_LEFT);
  110.  
  111.                 // Menggabungkan kolom tersebut menjadi 1 baris dan ditampung ke variabel hasil (ada 1 spasi disetiap kolom)
  112.                 $hasilBaris[] = $hasilKolom1 . " " . $hasilKolom2 . " " . $hasilKolom3;
  113.             }
  114.  
  115.             // Hasil yang berupa array, disatukan kembali menjadi string dan tambahkan \n disetiap barisnya.
  116.             return implode($hasilBaris, "\n") . "\n";
  117.         }
  118.  
  119.  
  120.         /* ---------------------------------------------------------
  121.          * Teks biasa | text()
  122.          */
  123.         $tglfaktur = $row_penjualan['jualtgl'];
  124.         $namauser = $this->session->userdata('namalengkapuser');
  125.         $jualdispersen = $row_penjualan['jualdispersen'];
  126.         $jualdiskon = $row_penjualan['jualdiskon'];
  127.         $jmluangbayar = number_format($row_penjualan['jualjmluangbayar'], 0, ",", ".");
  128.         $jmluangsisa = number_format($row_penjualan['jualjmluangsisa'], 0, ",", ".");
  129.  
  130.         $printer->initialize();
  131.         $printer->selectPrintMode(Escpos\Printer::MODE_FONT_A);
  132.         $printer->text("$row_toko[nmtoko]\n");
  133.         $printer->text("$row_toko[alamat]\n");
  134.         $printer->text("Telp: $row_toko[telp]\n");
  135.         $printer->text("Hp: $row_toko[hp]\n");
  136.         $printer->text("No : $faktur, " . date('d/m/Y', strtotime($tglfaktur)));
  137.         $printer->text("\n");
  138.         $printer->text("Opr : $namauser, " . date('H:i:s', strtotime($tglfaktur)));
  139.         $printer->text("\n");
  140.         $printer->text("\n");
  141.  
  142.         // Jika Ini Member
  143.         if (strlen($kodemember) > 0) :
  144.             $printer->text(buatBaris1Kolom("Member: $kodemember/$namamember"));
  145.             $printer->text(buatBaris1Kolom("Total Tabungan: " . number_format($totaldiskonmember, 0, ",", ".")));
  146.         endif;
  147.         // End
  148.  
  149.         $printer->text("-----------------------------------\n");
  150.         $query_detail = $this->db->query("SELECT penjualan_detail.*, satuan.`satnama`,produk.`namaproduk` FROM penjualan_detail JOIN satuan ON detjualsatid=satid JOIN produk ON produk.`kodebarcode`=detjualkodebarcode WHERE detjualfaktur='$faktur'");
  151.  
  152.         $totaljualkotor = 0;
  153.         $totaljualbersih = 0;
  154.         $totalitem = 0;
  155.         foreach ($query_detail->result_array() as $d) :
  156.             $jmlitem = $query_detail->num_rows();
  157.             $totalitem = $totalitem + $d['detjualjml'];
  158.             $totaljualkotor = $totaljualkotor + $d['detjualsubtotalkotor'];
  159.             $totaljualbersih = $totaljualbersih + $d['detjualsubtotal'];
  160.             $printer->text(buatBaris1Kolom("$d[namaproduk]"));
  161.             $printer->text(buatBaris3Kolom(number_format($d['detjualjml'], 0, ',', '.') . " $d[satnama]", number_format($d['detjualharga'], 0, ',', '.'), number_format($d['detjualsubtotal'], 0, ',', '.')));
  162.         endforeach;
  163.         $printer->text("-----------------------------------\n");
  164.         $printer->text(buatBaris1Kolom("Item: $jmlitem ($totalitem)"));
  165.         $printer->text(buatBaris3Kolom("", "Total:", number_format($totaljualbersih, 0, ",", ".")));
  166.         // Jika ada diskon
  167.         if ($jualdispersen != 0 || $jualdispersen != '0.00') :
  168.             $printer->text(buatBaris3Kolom("", "#Dis:", number_format($jualdiskon, 0, ",", ".")));
  169.         endif;
  170.         // end
  171.         $printer->text(buatBaris3Kolom("", "Bayar:", $jmluangbayar));
  172.         $printer->text(buatBaris3Kolom("", "Kembali:", $jmluangsisa));
  173.         $printer->text("-----------------------------------\n");
  174.         $printer->text(buatBaris1Kolom("Barang yang sudah dibeli tidak bisa ditukar/dikembalikan"));
  175.         $printer->text(buatBaris1Kolom("Terima kasih telah menjadi pelanggan kami :)"));
  176.         $printer->feed(2); // mencetak 2 baris kosong, agar kertas terangkat ke atas
  177.         $printer->cut();
  178.         echo "Faktur berhasil dicetak";
  179.         $printer->close();
  180.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement