app = $app; $this->db = $db; $this->app_inv = (array) $session->get('APP_INV'); $this->reg_name = $session->get('WEB_APP')['REG_NAME']; $this->id_cab = Param::Int("CabID", $session->get('APP_INV')['CABANGID']); } private function prepare(bool $is_pos = false) { $apre = [ 'tipe' => Param::Get("Tipe", "R"), // R or D 'id_kasir' => Param::Int("KasirID", 0), 'tgl_from' => Param::Get("Tgl_From"), 'tgl_to' => Param::Get("Tgl_To"), ]; // generate report header $apre['periode'] = $apre['tgl_from'] . ($apre['tgl_from'] !== $apre['tgl_to'] ? ' s/d '.$apre['tgl_to'] : ''); $tsql = ''; $asql = [tgl_sql2str($apre['tgl_from']), tgl_sql2str($apre['tgl_to'])]; if ($this->id_cab > 0) { $tsql .= " AND CabID=?"; array_push($asql, $this->id_cab); } if ($apre['id_kasir'] > 0) { $tsql .= " AND UserID=?"; array_push($asql, $apre['id_kasir']); } if ($is_pos === true) { $apre['kasir'] = $this->db->fetchRow("SELECT * FROM app_operator WHERE UserID=?", [$apre['id_kasir']]); $apre['query'] = $this->db->runQuery("SELECT J.KartuID,IF(J.KartuID=0,'Cash / Uang Tunai',K.Nama_Kartu) Kartu,SUM(IF(J.Kode='J',J.Total_Jual,0)) Total_Jual,SUM(IF(J.Kode='P',J.Total_Jual,0)) Total_Pulsa,SUM(J.Total_Diskon) Total_Diskon,SUM(J.Total_Potong) Total_Potong,SUM(J.Total_Cash) Total_Cash,SUM(J.Total_Kartu) Total_Kartu FROM ((SELECT 'J' Kode,KartuID,SUM(Total_Jual) Total_Jual,SUM(Total_Jual-Total_Kartu-Total_Diskon-Total_Potong) Total_Cash,SUM(Total_Kartu) Total_Kartu,SUM(Total_Diskon) Total_Diskon,SUM(Total_Potong) Total_Potong FROM inv_jual WHERE (Tgl_Jual BETWEEN ? AND ?)".$tsql." GROUP BY KartuID ORDER BY KartuID) UNION ALL (SELECT 'P' Kode,KartuID,SUM(Harga_Jual) Total_Jual,SUM(Harga_Jual-Total_Kartu) Total_Cash,SUM(Total_Kartu) Total_Kartu,0 Total_Diskon,0 Total_Potong FROM ppob_tx WHERE (Tgl_TX BETWEEN ? AND ?) AND Status=4".$tsql." GROUP BY KartuID ORDER BY KartuID)) J LEFT JOIN para_rek_pos K ON (J.KartuID=K.KartuID) GROUP BY J.KartuID ORDER BY J.KartuID", array_merge($asql, $asql)); return $apre; } if ($apre['tipe'] === "R") { $apre['query'] = $this->db->runQuery("SELECT O.UserID,O.Nama Nama_Kasir,SUM(IF(J.Kode='J',J.Total_Jual,0)) Total_Jual,SUM(IF(J.Kode='P',J.Total_Jual,0)) Total_Pulsa,SUM(IF(J.KartuID=0,J.Total_Jual-J.Total_Kartu-J.Total_Potong,0)) Total_Cash,SUM(J.Total_Kartu) Total_Kartu,SUM(J.Total_Potong) Total_Potong FROM ((SELECT 'J' Kode,UserID,KartuID,SUM(Total_Jual-Total_Diskon) Total_Jual,SUM(Total_Kartu) Total_Kartu,SUM(Total_Potong) Total_Potong FROM inv_jual WHERE (Tgl_Jual BETWEEN ? AND ?)".$tsql." GROUP BY UserID,KartuID ORDER BY UserID,KartuID) UNION ALL (SELECT 'P' Kode,UserID,KartuID,SUM(Harga_Jual) Total_Jual,SUM(Total_Kartu) Total_Kartu,0 Total_Potong FROM ppob_tx WHERE (Tgl_TX BETWEEN ? AND ?) AND Status=4".$tsql." GROUP BY UserID,KartuID ORDER BY UserID,KartuID)) J LEFT JOIN app_operator O ON (J.UserID=O.UserID) GROUP BY J.UserID", array_merge($asql, $asql)); } else { $apre['query'] = $this->db->runQuery("SELECT J.*,O.Nama Nama_Kasir FROM (SELECT *,Total_Jual-Total_Diskon Total_Jual2,Total_Jual-Total_Kartu-Total_Diskon-Total_Potong Total_Cash FROM inv_jual WHERE (Tgl_Jual BETWEEN ? AND ?)".$tsql.") J LEFT JOIN app_operator O ON (J.UserID=O.UserID) ORDER BY J.No_Jual", $asql); } return $apre; } public function pos() { $apre = $this->prepare(true); $tot_jual = 0; $tot_pulsa = 0; $tot_diskon = 0; $tot_potong = 0; $tot_dana = 0; $adana = [["Cash / Uang Tunai",0]]; while ($row = $apre['query']->fetch(SimplePdo::FETCH_ASSOC)) { $adana[0][1] += $row['Total_Cash']; if ($row['KartuID'] > 0) $adana[$row['KartuID']] = [$row['Kartu'], $row['Total_Kartu']]; $tot_jual += $row['Total_Jual']; $tot_pulsa += $row['Total_Pulsa']; $tot_diskon += $row['Total_Diskon']; $tot_potong += $row['Total_Potong']; } $tot_dana = $tot_jual + $tot_pulsa - $tot_potong - $tot_diskon; $pre = new PrintPOS($this->app); $pre->set_fontsize(2);//thermal $pre->set_header_logo("logo-nota.png");//thermal if ($this->app_inv['PRINT_OPENCD'] === 1) $pre->set_opendrawer(); if ($this->app_inv['PRINT_AUTOCUT'] === 1) $pre->set_cutpaper(); $pre->add_empty(); $pre->addc("REKAP PENERIMAAN KASIR / POS"); $pre->addc("Periode : ".$apre['periode']); $pre->add_empty(); $pre->add("Username : ".$apre['kasir']['Username']); $pre->add("Kasir : ".$apre['kasir']['Nama']); $pre->add_empty(); $pre->add(["Jumlah Penjualan Rp.",24], [rupiah($tot_jual),16,"R"]); $pre->add(["Jumlah Pulsa & PPOB Rp.",24], [rupiah($tot_pulsa),16,"R"]); $pre->add(["Jumlah Diskon Rp.",24], [rupiah($tot_diskon),16,"R"]); if ($tot_potong > 0) $pre->add(["Jumlah Promo Rp.",24], [rupiah($tot_potong),16,"R"]); $pre->add_line("-"); if (count($adana) > 1) { foreach ($adana as $_val) $pre->add([$_val[0],21,"L"], ["Rp.",3], [rupiah($_val[1]),16,"R"]); $pre->add_line("-"); } $pre->add(["TOTAL PENERIMAAN Rp.",24], [rupiah($tot_dana),16,"R"]); $pre->add_line("="); $pre->add_stamp(1, false); $pre->add_empty($this->app_inv['PRINT_ROW']); $pre->show(); } public function print() { $apre = $this->prepare(); $pre = new PrintHTML($this->app); $pre->add_title([strtoupper($this->reg_name), ($apre['tipe']==="R"?"REKAP":"DETAIL")." PENERIMAAN KASIR / POS", "Periode : ".$apre['periode']]); if ($apre['tipe'] === "R") { $pre->add_field("No.",10,"C"); $pre->add_field("Nama Kasir",20,"L"); $pre->add_field("Penjualan",20,"R","rupiah"); $pre->add_field("Pulsa & PPOB",20,"R","rupiah"); $pre->add_field("Promo",20,"R","rupiah"); $pre->add_field("Tunai / Cash",20,"R","rupiah"); $pre->add_field("Non Tunai",20,"R","rupiah"); $pre->show_titles(); $pre->show_headers(); $tot_jual = 0; $tot_pulsa = 0; $tot_potong = 0; $tot_cash = 0; $tot_kartu = 0; $nomor = 0; while ($row = $apre['query']->fetch(SimplePdo::FETCH_ASSOC)) { $tot_jual += $row['Total_Jual']; $tot_pulsa += $row['Total_Pulsa']; $tot_potong += $row['Total_Potong']; $tot_cash += $row['Total_Cash']; $tot_kartu += $row['Total_Kartu']; $pre->add_row([ ++$nomor, $row['Nama_Kasir'], $row['Total_Jual'], $row['Total_Pulsa'], $row['Total_Potong'], $row['Total_Cash'], $row['Total_Kartu'] ]); } $pre->add_span([ ["GRAND TOTAL",2,"R,B"],[$tot_jual,1,"R,B","rupiah"],[$tot_pulsa,1,"R,B","rupiah"],[$tot_potong,1,"R,B","rupiah"],[$tot_cash,1,"R,B","rupiah"],[$tot_kartu,1,"R,B","rupiah"] ]); } else { $pre->add_field("No. Nota",30,"C"); $pre->add_field("Tanggal",30,"C", "tgl_sql2str"); $pre->add_field("Penjualan",30,"R","rupiah"); $pre->add_field("Promo",30,"R","rupiah"); $pre->add_field("Tunai / Cash",30,"R","rupiah"); $pre->add_field("Non Tunai",30,"R","rupiah"); $pre->add_field("Kasir",20,"L"); $pre->show_titles(); $pre->show_headers(); $tot_jual = 0; $tot_cash = 0; $tot_kartu = 0; $tot_potong = 0; while ($row = $apre['query']->fetch(SimplePdo::FETCH_ASSOC)) { $tot_jual += $row['Total_Jual']; $tot_cash += $row['Total_Cash']; $tot_kartu += $row['Total_Kartu']; $tot_potong += $row['Total_Potong']; $pre->add_row([ $row['No_Jual'], $row['Tgl_Jual'], $row['Total_Jual2'], $row['Total_Potong'], $row['Total_Cash'], $row['Total_Kartu'], $row['Nama_Kasir'] ]); } $pre->add_span([ ["GRAND TOTAL",2,"R,B"],[$tot_jual,1,"R,B","rupiah"],[$tot_potong,1,"R,B","rupiah"],[$tot_cash,1,"R,B","rupiah"],[$tot_kartu,1,"R,B","rupiah"] ]); } $pre->add_stamp(1, true); $pre->show(); } public function excel() { $apre = $this->prepare(); $xls = new Xlsx($this->app); $xls->set_meta([ 'title' => "Data Penerimaan POS / Kasir", 'desc' => "Export Data Penerimaan POS / Kasir" ]); $xls->add_title([ $this->reg_name, "DATA ".($apre['tipe']==="R"?"REKAP":"DETAIL")." PENERIMAAN POS / KASIR", "Periode : ".$apre['periode'] ]); if ($apre['tipe'] === "R") { $xls->add_field("No.", 5, "@integer"); $xls->add_field("Nama Kasir", 20, "@text"); $xls->add_field("Penjualan", 15, "#,##0.00"); $xls->add_field("Pulsa & PPOB", 15, "#,##0.00"); $xls->add_field("Promo", 15, "#,##0.00"); $xls->add_field("Tunai", 15, "#,##0.00"); $xls->add_field("Non Tunai", 15, "#,##0.00"); $xls->add_sheet("".str_replace("s/d","-",$apre['periode'])); $xls->show_titles(); $xls->show_headers(); $tot_jual = 0; $tot_pulsa = 0; $tot_potong = 0; $tot_cash = 0; $tot_kartu = 0; $nomor = 0; while ($row = $apre['query']->fetch(SimplePdo::FETCH_ASSOC)) { $tot_jual += $row['Total_Jual']; $tot_pulsa += $row['Total_Pulsa']; $tot_potong += $row['Total_Potong']; $tot_cash += $row['Total_Cash']; $tot_kartu += $row['Total_Kartu']; $xls->add_row([ ++$nomor, $row['Nama_Kasir'], $row['Total_Jual'], $row['Total_Pulsa'], $row['Total_Potong'], $row['Total_Cash'], $row['Total_Kartu'] ]); } $xls->add_row_bold([ "", "GRAND TOTAL", $tot_jual, $tot_pulsa, $tot_potong, $tot_cash, $tot_kartu ]); } else { $xls->add_field("No. Nota", 12, "@text"); $xls->add_field("Tanggal", 12, "@date"); $xls->add_field("Penjualan", 15, "#,##0.00"); $xls->add_field("Promo", 15, "#,##0.00"); $xls->add_field("Tunai / Cash", 15, "#,##0.00"); $xls->add_field("Non Tunai", 15, "#,##0.00"); $xls->add_field("Kasir", 20, "@text"); $xls->add_sheet("".str_replace("s/d","-",$apre['periode'])); $xls->show_titles(); $xls->show_headers(); $tot_jual = 0; $tot_cash = 0; $tot_kartu = 0; $tot_potong = 0; while ($row = $apre['query']->fetch(SimplePdo::FETCH_ASSOC)) { $tot_jual += $row['Total_Jual']; $tot_cash += $row['Total_Cash']; $tot_kartu += $row['Total_Kartu']; $tot_potong += $row['Total_Potong']; $xls->add_row([ $row['No_Jual'], $row['Tgl_Jual'], $row['Total_Jual2'], $row['Total_Potong'], $row['Total_Cash'], $row['Total_Kartu'], $row['Nama_Kasir'] ]); } $xls->add_row_bold([ "", "GRAND TOTAL", $tot_jual, $tot_potong, $tot_cash, $tot_kartu, "" ]); } $xls->add_stamp(1, true); $xls->download("Data Penerimaan POS ".str_replace("s/d","-",$apre['periode']).".xlsx"); unset($xls); } public function index() { if ($this->app->user()->is_level(1)) { $this->id_cab = 0; $id_kasir = 0; $tsql1 = ''; $tsql2 = ' AND Level>="'.$this->app->user()->level().'"'; if ($this->app->user()->id() > 1) $tsql2 .= ' AND UserID>1'; } else { $id_kasir = $this->app->user()->id(); $tsql1 = ' AND CabID="'.$this->id_cab.'"'; $tsql2 = ' AND UserID="'.$this->app->user()->id().'"'; } $form = new Form($this->app); $ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]); $tcab = $form->option_db("_", "CabID", $this->id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1".$tsql1." ORDER BY CabID", [0,"SEMUA CABANG"]); $tkasir = $form->option_db("_", "KasirID", $id_kasir, true, false, "app_operator", ["UserID","Nama"], "Aktif=1".$tsql2." ORDER BY Username", [0,"SEMUA KASIR"]); $tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false); $tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false); $ajson['html'] = '
'.$ttipe.'
'.$tcab.'
'.$tkasir.'
'.$tfrom.'
'.$tto.'
'; $this->app->json($ajson); } }