TIF_NGANJUK_E41220820/app/Http/Controllers/KeuanganController.php

155 lines
5.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Penjualan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\Models\User;
class KeuanganController extends Controller
{
public function index(Request $request)
{
// $query = Penjualan::orderBy('tanggal_penjualan', 'desc');
$query = Penjualan::orderByDesc('tanggal_penjualan')
->orderByDesc('created_at');
/** @var \App\Models\User $user */
$user = Auth::user();
if ($user->isKaryawan()) {
$query->where('user_id', $user->id);
}
// FILTER PRODUK AKTIF
if ($request->produk) {
$query->where('jenis_produk', $request->produk);
}
// SEARCH GLOBAL
if ($request->search) {
$s = $request->search;
$query->where(function ($q) use ($s) {
// cari jenis produk (telur / afkir)
$q->where('jenis_produk', 'like', "%$s%")
->orWhere('berat_terjual', 'like', "%$s%")
->orWhere('harga_satuan', 'like', "%$s%")
->orWhere('total_penjualan', 'like', "%$s%")
->orWhere('tanggal_penjualan', 'like', "%$s%")
->orWhereRaw("DATE_FORMAT(tanggal_penjualan, '%Y-%m-%d') like ?", ["%$s%"]);
});
}
if ($request->bulan) {
$query->whereMonth('tanggal_penjualan', $request->bulan);
}
if ($request->tahun) {
$query->whereYear('tanggal_penjualan', $request->tahun);
}
return view('produksi-keuangan', [
'penjualans' => $query->paginate($request->perPage ?? 10)->withQueryString(),
'produks' => [
'telur' => 'Telur Ayam',
'afkir' => 'Ayam Afkir',
],
]);
}
public function store(Request $request)
{
$request->validate(
[
'tanggal' => 'required|date|before_or_equal:today',
'jenis_produk' => 'required|in:telur,afkir',
'jumlah' => 'required|numeric|min:0.1|max:9999',
'harga_satuan' => 'required|numeric|min:1|max:99999999',
],
[
'tanggal.required' => 'Tanggal penjualan wajib diisi.',
'tanggal.date' => 'Tanggal penjualan tidak valid.',
'jenis_produk.required' => 'Jenis produk wajib diisi.',
'jumlah.required' => 'Jumlah penjualan wajib diisi.',
'jumlah.numeric' => 'Jumlah harus berupa angka.',
'jumlah.min' => 'Jumlah minimal 0,1 Kg.',
'harga_satuan.required' => 'Harga satuan wajib diisi.',
'harga_satuan.numeric' => 'Harga satuan harus berupa angka.',
'harga_satuan.min' => 'Harga satuan minimal Rp 1.',
]
);
Penjualan::create([
'user_id' => Auth::id(),
'jenis_produk' => $request->jenis_produk,
'berat_terjual' => $request->jumlah,
'harga_satuan' => $request->harga_satuan,
'total_penjualan' => $request->jumlah * $request->harga_satuan,
'tanggal_penjualan' => $request->tanggal,
]);
return back()->with('success', 'Penjualan berhasil ditambahkan.');
}
public function update(Request $request, $id)
{
$penjualan = Penjualan::findOrFail($id);
$validated = $request->validate(
[
'tanggal' => 'required|date|before_or_equal:today',
'jenis_produk' => 'required|in:telur,afkir',
'jumlah' => 'required|numeric|min:0.1',
'harga_satuan' => 'required|numeric|min:1',
],
[
'tanggal.required' => 'Tanggal penjualan wajib diisi.',
'tanggal.date' => 'Tanggal penjualan tidak valid.',
'jenis_produk.required' => 'Jenis produk wajib diisi.',
'jumlah.required' => 'Jumlah penjualan wajib diisi.',
'jumlah.numeric' => 'Jumlah harus berupa angka.',
'jumlah.min' => 'Jumlah minimal 0,1 Kg.',
'harga_satuan.required' => 'Harga satuan wajib diisi.',
'harga_satuan.numeric' => 'Harga satuan harus berupa angka.',
'harga_satuan.min' => 'Harga satuan minimal Rp 1.',
]
);
$penjualan->update([
'berat_terjual' => $validated['jumlah'],
'jenis_produk' => $validated['jenis_produk'],
'harga_satuan' => $validated['harga_satuan'],
'total_penjualan' => $validated['jumlah'] * $validated['harga_satuan'],
'tanggal_penjualan' => $validated['tanggal'],
]);
return redirect()->back()->with('success', 'Penjualan berhasil diupdate.');
}
public function destroy($id)
{
/** @var \App\Models\User $user */
$user = Auth::user();
if ($user->isKaryawan()) {
abort(403);
}
Penjualan::findOrFail($id)->delete();
return back()->with('success', 'Penjualan berhasil dihapus');
}
}