302 lines
11 KiB
PHP
302 lines
11 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers\Dashboard;
|
|
|
|
use App\Controllers\BaseController;
|
|
use App\Models\Laporan;
|
|
use App\Models\Transaksi;
|
|
use App\Models\Jadwal;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
|
class LaporanController extends BaseController
|
|
{
|
|
protected $laporanModel;
|
|
protected $transaksiModel;
|
|
protected $jadwalModel;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->laporanModel = new Laporan();
|
|
$this->transaksiModel = new Transaksi();
|
|
$this->jadwalModel = new Jadwal();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
return view('dashboard/rekap/transaksi/index', [
|
|
'title' => 'Rekap Transaksi',
|
|
'data' => $this->laporanModel
|
|
->select('
|
|
laporan.*,
|
|
users.name as name
|
|
')
|
|
->join('users', 'users.id = laporan.author')
|
|
->where('kategori', 'transaksi')
|
|
->findAll(),
|
|
]);
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
if ($this->request->getMethod() === 'POST') {
|
|
$data = [
|
|
'author' => session()->get('id') ?? '1',
|
|
'start_date' => $this->request->getPost('start_date'),
|
|
'end_date' => $this->request->getPost('end_date'),
|
|
'kategori' => 'transaksi',
|
|
];
|
|
|
|
$create = $this->laporanModel->insert($data);
|
|
|
|
if (!$create) {
|
|
return redirect()->to('dashboard/rekap/transaksi')->with('error', 'Gagal membuat laporan');
|
|
}
|
|
return redirect()->to('dashboard/rekap/transaksi')->with('success', 'Berhasil membuat laporan');
|
|
}
|
|
|
|
return view('dashboard/rekap/transaksi/create', [
|
|
'title' => 'Rekap Transaksi',
|
|
]);
|
|
}
|
|
|
|
public function update($id)
|
|
{
|
|
if ($this->request->getMethod() === 'POST') {
|
|
$data = [
|
|
'author' => session()->get('id'),
|
|
'start_date' => $this->request->getPost('start_date'),
|
|
'end_date' => $this->request->getPost('end_date'),
|
|
'kategori' => 'transaksi',
|
|
];
|
|
|
|
$update = $this->laporanModel->update($id, $data);
|
|
|
|
if (!$update) {
|
|
return redirect()->to('dashboard/rekap/transaksi')->with('error', 'Gagal update laporan');
|
|
}
|
|
return redirect()->to('dashboard/rekap/transaksi')->with('success', 'Berhasil update laporan');
|
|
}
|
|
|
|
return view('dashboard/rekap/transaksi/update', [
|
|
'title' => 'Rekap Transaksi',
|
|
'data' => $this->laporanModel->where('id', $id)->first(),
|
|
]);
|
|
}
|
|
|
|
public function delete($id)
|
|
{
|
|
$delete = $this->laporanModel->delete($id);
|
|
|
|
if (!$delete) {
|
|
return redirect()->to('dashboard/rekap/transaksi')->with('error', 'Gagal delete laporan');
|
|
}
|
|
return redirect()->to('dashboard/rekap/transaksi')->with('success', 'Berhasil delete laporan');
|
|
}
|
|
|
|
public function export($id)
|
|
{
|
|
$date = $this->laporanModel->find($id);
|
|
|
|
$startDate = $date['start_date'] . ' 00:00:00';
|
|
$endDate = $date['end_date'] . ' 23:59:59';
|
|
|
|
$data = $this->transaksiModel
|
|
->select('
|
|
transaksi.*,
|
|
pelanggan.alamat as alamat,
|
|
pelanggan.nomor_whatsapp as nomor,
|
|
users.name as nama_pelanggan,
|
|
users.email as email_pelanggan,
|
|
')
|
|
->join('pelanggan', 'pelanggan.id = transaksi.pelanggan_id')
|
|
->join('users', 'users.id = pelanggan.user_id')
|
|
->where('transaksi.created_at >=', $startDate)
|
|
->where('transaksi.created_at <=', $endDate)
|
|
->get()
|
|
->getResultArray();
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
|
|
$spreadsheet->getActiveSheet()->mergeCells('A1:I1');
|
|
$spreadsheet->getActiveSheet()->getStyle('A1')
|
|
->getAlignment()
|
|
->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
|
|
$spreadsheet->setActiveSheetIndex(0)
|
|
->setCellValue('A1', 'Laporan Transaksi')
|
|
->setCellValue('A2', 'Nama Pelanggan')
|
|
->setCellValue('B2', 'Email Pelanggan')
|
|
->setCellValue('C2', 'Alamat')
|
|
->setCellValue('D2', 'Nomor WhatsApp')
|
|
->setCellValue('E2', 'Total')
|
|
->setCellValue('F2', 'Keterangan')
|
|
->setCellValue('G2', 'Kategori Pembayaran')
|
|
->setCellValue('H2', 'Metode Pembayaran')
|
|
->setCellValue('I2', 'Tanggal');
|
|
$column = 3;
|
|
|
|
foreach ($data as $data) {
|
|
$status = $data['status'] === '1' ? 'Berhasil' : 'Diproses';
|
|
$kategori = $data['kategori_pembayaran'] === 'pasang_baru' ? 'Pasang Baru' : 'Bulanan';
|
|
$metode = $data['type_pembayaran'] === '1' ? 'Online' : 'Tunai/Cash';
|
|
$spreadsheet->setActiveSheetIndex(0)
|
|
->setCellValue('A' . $column, $data['nama_pelanggan'])
|
|
->setCellValue('B' . $column, $data['email_pelanggan'])
|
|
->setCellValue('C' . $column, $data['alamat'])
|
|
->setCellValue('D' . $column, $data['nomor'])
|
|
->setCellValue('E' . $column, $data['total'])
|
|
->setCellValue('F' . $column, $status)
|
|
->setCellValue('G' . $column, $kategori)
|
|
->setCellValue('H' . $column, $metode)
|
|
->setCellValue('I' . $column, $data['created_at']);
|
|
$column++;
|
|
}
|
|
|
|
$writer = new Xlsx($spreadsheet);
|
|
$fileName = 'Laporan Transaksi_' . $date['start_date'] . '_-_' . $date['end_date'];
|
|
|
|
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
header('Content-Disposition: attachment;filename=' . $fileName . '.xlsx');
|
|
header('Cache-Control: max-age=0');
|
|
|
|
$writer->save('php://output');
|
|
}
|
|
|
|
public function indexJadwal()
|
|
{
|
|
return view('dashboard/rekap/jadwal/index', [
|
|
'title' => 'Rekap Jadwal',
|
|
'data' => $this->laporanModel
|
|
->select('
|
|
laporan.*,
|
|
users.name as name
|
|
')
|
|
->join('users', 'users.id = laporan.author')
|
|
->where('kategori', 'jadwal')
|
|
->findAll(),
|
|
]);
|
|
}
|
|
|
|
public function createJadwal()
|
|
{
|
|
if ($this->request->getMethod() === 'POST') {
|
|
$data = [
|
|
'author' => session()->get('id') ?? '1',
|
|
'start_date' => $this->request->getPost('start_date'),
|
|
'end_date' => $this->request->getPost('end_date'),
|
|
'kategori' => 'jadwal',
|
|
];
|
|
|
|
$create = $this->laporanModel->insert($data);
|
|
|
|
if (!$create) {
|
|
return redirect()->to('dashboard/rekap/jadwal')->with('error', 'Gagal membuat laporan');
|
|
}
|
|
return redirect()->to('dashboard/rekap/jadwal')->with('success', 'Berhasil membuat laporan');
|
|
}
|
|
|
|
return view('dashboard/rekap/jadwal/create', [
|
|
'title' => 'Rekap Jadwal',
|
|
]);
|
|
}
|
|
|
|
public function updateJadwal($id)
|
|
{
|
|
if ($this->request->getMethod() === 'POST') {
|
|
$data = [
|
|
'author' => session()->get('id'),
|
|
'start_date' => $this->request->getPost('start_date'),
|
|
'end_date' => $this->request->getPost('end_date'),
|
|
'kategori' => 'jadwal',
|
|
];
|
|
|
|
$update = $this->laporanModel->update($id, $data);
|
|
|
|
if (!$update) {
|
|
return redirect()->to('dashboard/rekap/jadwal')->with('error', 'Gagal update laporan');
|
|
}
|
|
return redirect()->to('dashboard/rekap/jadwal')->with('success', 'Berhasil update laporan');
|
|
}
|
|
|
|
return view('dashboard/rekap/jadwal/update', [
|
|
'title' => 'Rekap Jadwal',
|
|
'data' => $this->laporanModel->where('id', $id)->first(),
|
|
]);
|
|
}
|
|
|
|
public function deleteJadwal($id)
|
|
{
|
|
$delete = $this->laporanModel->delete($id);
|
|
|
|
if (!$delete) {
|
|
return redirect()->to('dashboard/rekap/jadwal')->with('error', 'Gagal delete laporan');
|
|
}
|
|
return redirect()->to('dashboard/rekap/jadwal')->with('success', 'Berhasil delete laporan');
|
|
}
|
|
|
|
public function exportJadwal($id)
|
|
{
|
|
$date = $this->laporanModel->find($id);
|
|
|
|
$startDate = $date['start_date'] . ' 00:00:00';
|
|
$endDate = $date['end_date'] . ' 23:59:59';
|
|
|
|
$data = $this->jadwalModel
|
|
->select('
|
|
jadwal.*,
|
|
pelanggan.geolocation as geolocation,
|
|
pelanggan.alamat as alamat,
|
|
user_pelanggan.name as nama_pelanggan,
|
|
user_teknisi.name as nama_teknisi
|
|
')
|
|
->join('pelanggan', 'jadwal.pelanggan_id = pelanggan.id')
|
|
->join('users as user_pelanggan', 'pelanggan.user_id = user_pelanggan.id')
|
|
->join('users as user_teknisi', 'jadwal.teknisi_id = user_teknisi.id')
|
|
->where('jadwal.created_at >=', $startDate)
|
|
->where('jadwal.created_at <=', $endDate)
|
|
->get()
|
|
->getResultArray();
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
|
|
$spreadsheet->getActiveSheet()->getStyle('D')->getNumberFormat()
|
|
->setFormatCode('#,##0.00');
|
|
$spreadsheet->getActiveSheet()->mergeCells('A1:G1');
|
|
$spreadsheet->getActiveSheet()->getStyle('A1')
|
|
->getAlignment()
|
|
->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
|
|
$spreadsheet->setActiveSheetIndex(0)
|
|
->setCellValue('A1', 'Laporan Jadwal')
|
|
->setCellValue('A2', 'Nama Pelanggan')
|
|
->setCellValue('B2', 'Nama Teknisi')
|
|
->setCellValue('C2', 'ID Tiket Laporan')
|
|
->setCellValue('D2', 'Waktu Pemasangan')
|
|
->setCellValue('E2', 'Geolocation')
|
|
->setCellValue('F2', 'Alamat')
|
|
->setCellValue('G2', 'Tipe Jadwal');
|
|
$column = 3;
|
|
|
|
foreach ($data as $data) {
|
|
$status = $data['status'] === '1' ? 'Berhasil' : 'Diproses';
|
|
$spreadsheet->setActiveSheetIndex(0)
|
|
->setCellValue('A' . $column, $data['nama_pelanggan'])
|
|
->setCellValue('B' . $column, $data['nama_teknisi'])
|
|
->setCellValue('C' . $column, $data['ticket_id'])
|
|
->setCellValue('D' . $column, $data['waktu_pemasangan'])
|
|
->setCellValue('E' . $column, $data['geolocation'])
|
|
->setCellValue('F' . $column, $data['alamat'])
|
|
->setCellValue('G' . $column, $status);
|
|
$column++;
|
|
}
|
|
|
|
$writer = new Xlsx($spreadsheet);
|
|
$fileName = 'Laporan Transaksi_' . $date['start_date'] . '_-_' . $date['end_date'];
|
|
|
|
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
header('Content-Disposition: attachment;filename=' . $fileName . '.xlsx');
|
|
header('Cache-Control: max-age=0');
|
|
|
|
$writer->save('php://output');
|
|
}
|
|
}
|