resto-dhepot/app/Http/Controllers/Admins/Penjualan/PenjualanController.php

252 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers\Admins\Penjualan;
use App\Http\Controllers\Controller;
use App\Models\DetailPesanan;
use App\Models\Pesanan;
use App\Models\RekeningCoa;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
class PenjualanController extends Controller
{
public function index()
{
$aba = RekeningCoa::where('kode_coa', 1)->where('sub_kode_coa', 200)->get();
return view('pages.admin.penjualan.index', compact('aba'));
}
public function getDataPenjualan(Request $request)
{
$nomor = 1;
$filter_tanggal_1 = $request->filter_tanggal_1;
$filter_tanggal_2 = $request->filter_tanggal_2;
$akun_coa = $request->akun_coa;
if ($request->akun_coa == null) {
$data = Pesanan::with(['detailPesanan', 'user'])
->when($filter_tanggal_1, function ($query) use ($filter_tanggal_1) {
return $query->whereDate('tanggal_pesanan', '>=', $filter_tanggal_1);
})
->when($filter_tanggal_2, function ($query) use ($filter_tanggal_2) {
return $query->whereDate('tanggal_pesanan', '<=', $filter_tanggal_2);
})
->when(!$filter_tanggal_1 && !$filter_tanggal_2, function ($query) {
return $query->whereDate('tanggal_pesanan', Carbon::today());
})
->orderBy('tanggal_pesanan', 'desc')
->get();
} else {
$data = Pesanan::with(['detailPesanan', 'user', 'rekening_coa'])
->where('rekening_coa_id', $akun_coa)
->when($filter_tanggal_1, function ($query) use ($filter_tanggal_1) {
return $query->whereDate('tanggal_pesanan', '>=', $filter_tanggal_1);
})
->when($filter_tanggal_2, function ($query) use ($filter_tanggal_2) {
return $query->whereDate('tanggal_pesanan', '<=', $filter_tanggal_2);
})
->when(!$filter_tanggal_1 && !$filter_tanggal_2, function ($query) {
return $query->whereDate('tanggal_pesanan', Carbon::today());
})
->orderBy('tanggal_pesanan', 'desc')
->get();
}
return datatables()
->of($data)
->addColumn('nomor', function ($data) use (&$nomor) {
return $nomor++;
})
->addColumn('nama_pemesan', function ($data) {
$nomor = $data->nomor_pemesan != null ? '(' . $data->nomor_pemesan . ')' : '';
return $data->nama_pemesan . ' ' . $nomor;
})
->addColumn('nomor_meja', function ($data) {
return $data->nomor_meja != null ? $data->nomor_meja : '-';
})
->addColumn('created_at', function ($data) {
return \Carbon\Carbon::parse($data->created_at)->format('d F Y H:i:s');
})
->addColumn('total_bayar_rp', function ($data) {
return 'Rp ' . number_format($data->total_bayar, 0, ',', '.');
})
->addColumn('grand_total_rp', function ($data) {
return 'Rp ' . number_format($data->grand_total, 0, ',', '.');
})
->addColumn('jenis_pembayarannya', function ($data) {
return $data->jenis_pembayaran == 1 ? 'Tunai' : ($data->jenis_pembayaran == null ? 'Tunai' : 'Non-Tunai' . ' (' . ($data->rekening_coa?->keterangan_coa ?? '') . ')');
})
->addColumn('ubah', function ($data) {
return '<div class="btn-group">
<a class="btn btn-xs btn-warning mr-1" href="javascript:void(0)" onclick="detail(\'' . $data->id . '\')"><i class="fas fa-eye"></i></a>
<a class="btn btn-xs btn-success" href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><i class="fas fa-print"></i></a></div>';
})
->rawColumns(['nomor', 'nama_user', 'created_at', 'grand_total', 'ubah'])
->make(true);
}
public function print($id)
{
$pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
return view('pages.Kasir.print_dapur', compact('pesanan'));
}
public function getDataDetailPenjualan(Request $request)
{
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->withTrashed()->get();
$pesanan = Pesanan::find($request->id_pesanan);
return response()->json(['status' => true, 'data' => $data, 'pesanan' => $pesanan]);
}
public function laporan(Request $request)
{
try {
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'A4',
'orientation' => 'portrait',
'margin_left' => 15,
'margin_right' => 15,
'margin_top' => 10,
'margin_bottom' => 10,
'default_font_size' => 9,
'default_font' => 'arial',
]);
$mpdf->AddPage();
$mpdf->setFooter('{PAGENO}');
$filter_tanggal_1 = $request->filter_tanggal_1;
$filter_tanggal_2 = $request->filter_tanggal_2;
if ($request->jenis_coa == null) {
$keterangan_coa = 'Semua';
$data = Pesanan::with(['user', 'bukuBesar', 'rekening_coa'])->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1)
->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2)
->get();
} else {
$keterangan_coa = RekeningCoa::find($request->jenis_coa)->keterangan_coa;
$data = Pesanan::with(['user', 'bukuBesar', 'rekening_coa'])->where('rekening_coa_id', $request->jenis_coa)->whereDate('tanggal_pesanan', '>=', $request->filter_tanggal_1)
->whereDate('tanggal_pesanan', '<=', $request->filter_tanggal_2)
->get();
}
$alldata = [
'data' => $data,
'filter_tanggal_1' => $filter_tanggal_1,
'filter_tanggal_2' => $filter_tanggal_2,
'keterangan_coa' => $keterangan_coa
];
$html = view('pages.admin.penjualan.laporan', $alldata);
// $html->render();
// $mpdf->WriteHTML($html);
// $mpdf->chunkLoadView('<html-separator/>', 'pages.admin.penjualan.laporan', $alldata);
// return $mpdf->stream('document.pdf');
$chunks = explode("chunk", (string)$html);
foreach ($chunks as $key => $val) {
// $mpdf->WriteHTML($val);
}
$mpdf->writeHTML($html);
$mpdf->Output('Laporan_Penjualan.pdf', 'I');
return response()->header('Content-Type', 'application/pdf');
} catch (\Throwable $th) {
Session::flash('errors', 'Gagal membuat laporan, coba lagi dengan rentang tanggal yang lebih pendek');
return redirect()->back();
//throw $th;
}
}
public function cancel(Request $request)
{
try {
DB::beginTransaction();
$pesanan = Pesanan::find($request->id);
$pesanan->status_pesanan = 3;
// delete detail pesanan
$pesanan->detailPesanan()->delete();
$pesanan->delete();
$pesanan->save();
DB::commit();
return response()->json(['status' => true, 'message' => 'Pesanan berhasil di cancel']);
} catch (\Throwable $th) {
DB::rollBack();
return response()->json(['status' => false, 'message' => 'Pesanan gagal di cancel']);
//throw $th;
}
}
public function cancelDetail(Request $request)
{
try {
DB::beginTransaction();
$detailPesanan = DetailPesanan::find($request->id);
$pesanan = Pesanan::find($detailPesanan->pesanan_id);
$pesanan->total_bayar = $pesanan->total_bayar - $detailPesanan->total_harga_produk;
// check the diskon in pesanan
$pesanan->grand_total = $pesanan->total_bayar - $pesanan->diskon_rupiah;
$pesanan->total_pesanan = $pesanan->total_pesanan - $detailPesanan->jumlah_produk;
$pesanan->save();
$detailPesanan->status_pesanan = '3';
$detailPesanan->delete();
$detailPesanan->save();
DB::commit();
return response()->json(['status' => true, 'message' => 'Pesanan berhasil di cancel']);
} catch (\Throwable $th) {
DB::rollBack();
return response()->json(['status' => false, 'message' => 'Pesanan gagal di cancel']);
//throw $th;
}
}
public function dibatalkan()
{
if (request()->ajax()) {
$data = Pesanan::with(['detailPesanan', 'user'])
->where('status_pesanan', 3)
->orderBy('tanggal_pesanan', 'desc')
->withTrashed()
->get();
return datatables()
->of($data)
->addIndexColumn()
->addColumn('nama_pemesan', function ($data) {
$nomor = $data->nomor_pemesan != null ? '(' . $data->nomor_pemesan . ')' : '';
return $data->nama_pemesan . ' ' . $nomor;
})
->addColumn('nomor_meja', function ($data) {
return $data->nomor_meja != null ? $data->nomor_meja : '-';
})
->addColumn('created_at', function ($data) {
return \Carbon\Carbon::parse($data->created_at)->format('d F Y H:i:s');
})
->addColumn('total_bayar_rp', function ($data) {
return 'Rp ' . number_format($data->total_bayar, 0, ',', '.');
})
->addColumn('grand_total_rp', function ($data) {
return 'Rp ' . number_format($data->grand_total, 0, ',', '.');
})
->addColumn('ubah', function ($data) {
return '<div class="btn-group">
<a href="javascript:void(0)" onclick="detail(\'' . $data->id . '\')"><span class="btn btn-xs btn-warning mr-1"><i class="fas fa-eye"></i></span></a>
<a href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i></span></a></div>';
})
->rawColumns(['nomor', 'nama_user', 'created_at', 'grand_total', 'ubah'])
->make(true);
}
return view('pages.admin.penjualan.dibatalkan');
}
}