79 lines
3.8 KiB
PHP
79 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace App\Exports;
|
|
|
|
use App\Models\Transaction;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Maatwebsite\Excel\Concerns\FromCollection;
|
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
|
|
|
class TransactionDealerExport implements FromCollection
|
|
{
|
|
|
|
protected $dealer;
|
|
protected $month;
|
|
|
|
function __construct($request) {
|
|
$this->month = (isset($request->dealer)) ? $request->query('month') : date('m');
|
|
$this->dealer = (isset($request->dealer)) ? $request->query('dealer') : 'all';
|
|
}
|
|
|
|
/**
|
|
* @return \Illuminate\Support\Collection
|
|
*/
|
|
public function collection()
|
|
{
|
|
$dealer_work_trx = DB::statement("SET @sql = NULL");
|
|
$sql = "SELECT IF(work_id IS NOT NULL, GROUP_CONCAT(DISTINCT CONCAT('SUM(IF(work_id = \"', work_id,'\", qty,\"\")) AS \"',CONCAT(w.name, '|',w.id),'\"')), 's.work_id') INTO @sql FROM transactions t JOIN works w ON w.id = t.work_id WHERE month(t.date) = '". $this->month ."' and year(t.date) = '". date('Y') ."' and t.deleted_at is null";
|
|
|
|
if(isset($this->dealer) && $this->dealer != 'all') {
|
|
$sql .= " and t.dealer_id = '". $this->dealer ."'";
|
|
}
|
|
|
|
$dealer_work_trx = DB::statement($sql);
|
|
|
|
if(isset($this->dealer) && $this->dealer != 'all') {
|
|
$dealer_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT d.name as DEALER, d.id as dealer_id, \", @sql, \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $this->month ."' and year(s.date) = '". date('Y') ."' and s.deleted_at is null and s.dealer_id = '". $this->dealer ."' GROUP BY s.dealer_id ORDER BY s.dealer_id ASC\"), CONCAT(\"SELECT d.name as DEALER \", \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $this->month ."' and year(s.date) = '". date('Y') ."' and s.deleted_at is null and s.dealer_id = '". $this->dealer ."' GROUP BY s.`dealer_id` ORDER BY s.`dealer_id` ASC\"))");
|
|
}else{
|
|
$dealer_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT d.name as DEALER, d.id as dealer_id, \", @sql, \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $this->month ."' and year(s.date) = '". date('Y') ."' and s.deleted_at is null GROUP BY s.dealer_id ORDER BY s.dealer_id ASC\"), CONCAT(\"SELECT d.name as DEALER, d.id as dealer_id \", \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $this->month ."' and year(s.date) = '". date('Y') ."' and s.deleted_at is null GROUP BY s.`dealer_id` ORDER BY s.`dealer_id` ASC\"))");
|
|
}
|
|
|
|
$dealer_work_trx = DB::statement("PREPARE stmt FROM @sql");
|
|
$dealer_work_trx = DB::select(DB::raw("EXECUTE stmt"));
|
|
DB::statement('DEALLOCATE PREPARE stmt');
|
|
|
|
$work_trx = [];
|
|
foreach($dealer_work_trx as $index => $dealer_work) {
|
|
$dealer_work_2 = (array) $dealer_work;
|
|
unset($dealer_work_2['dealer_id']);
|
|
$work_names = array_keys($dealer_work_2);
|
|
if($index == 0) {
|
|
$work_names_e = [];
|
|
foreach($work_names as $work) {
|
|
$arr_work = explode('|', $work);
|
|
$work_names_e[] = $arr_work[0];
|
|
}
|
|
$work_trx[] = $work_names_e;
|
|
$work_trx[] = array_values($dealer_work_2);
|
|
}else{
|
|
$work_trx[] = array_values($dealer_work_2);
|
|
}
|
|
}
|
|
|
|
return collect($work_trx);
|
|
}
|
|
|
|
|
|
// public function headings(): array
|
|
// {
|
|
// return $this->theads;
|
|
// }
|
|
|
|
// public function actions(Request $request)
|
|
// {
|
|
// return [
|
|
// (new DownloadExcel)->withHeadings('Tanggal', 'Mekanik', 'SA', 'No.Polisi', 'Warranty', 'Kategori', 'Qty')
|
|
// ];
|
|
// }
|
|
}
|