252 lines
11 KiB
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');
|
|
}
|
|
}
|