Esempio n. 1
0
 /**
  * Membuat query untuk fungsi print.
  */
 public static function print_surat($input)
 {
     // sanitize page dan limit jika diinput secara manual
     $limit = is_numeric((int) $input['limit']) && $input['limit'] > 0 ? (int) $input['limit'] : Konfigurasi::find(7)->config_value;
     $page = is_numeric((int) $input['page']) && $input['page'] > 0 ? (int) $input['page'] : 1;
     // query pertama hanya mendapatkan id-nya saja,
     // ---query BELUM diexecute---
     $qry = Suratkeluar::order_by('id', 'desc')->where('jenis_surat', 'LIKE', Suratkeluar::clean_id_jenis($input['jenis']))->where('pengirim', 'LIKE', Suratkeluar::clean_id_pengirim($input['pengirim']))->where('nomor_urut', 'LIKE', '%' . $input['nomor'] . '%')->where('kode_surat', 'LIKE', '%' . $input['kode'] . '%')->where('tahun', 'LIKE', '%' . $input['tahun'] . '%')->where('tgl_surat', 'LIKE', '%' . $input['tanggal'] . '%')->where('tujuan', 'LIKE', '%' . $input['tujuan'] . '%')->where('hal', 'LIKE', '%' . $input['hal'] . '%');
     // Cek apakah user mencoba mengakses page secara manual, lebih dari max page
     //
     // mengexecute query $qry di atas untuk mendapatkan total records yg didapat
     $total_records = $qry->count();
     // rounding up untuk max page, misal total = 15, limit = 7,
     // maka max page = 2.14 -> round up menjadi 3
     $max_page = ceil($total_records / $limit);
     // jika page diinput manual dan melebihi maxpage, maka diset ke max page
     $page = $page > $max_page ? $max_page : $page;
     // karena menggunakan pagination, maka rows yg diambil harus sesuai pagenya
     $skipped = ($page - 1) * $limit;
     // mengexecute query $qry di atas untuk mendapatkan recordsnya
     $rows = $qry->skip($skipped)->take($limit)->get();
     // menyusun id dari query pertama ke dalam array
     // karena akan disort ulang, records yg didapat hanya diambil id-nya saja
     $id_array = array();
     foreach ($rows as $r) {
         $id_array = array_merge($id_array, array($r->id));
     }
     // query kedua mengambil row surat dgn order_by jenis_surat lalu nomor_urut
     $sk = Suratkeluar::where_in('id', $id_array)->order_by('tahun')->order_by('jenis_surat')->order_by('nomor_urut')->get();
     return $sk;
 }