Update workshop

This commit is contained in:
2026-05-04 11:55:58 +07:00
parent dec76e8b1d
commit f040dcdc55
17 changed files with 1248 additions and 69 deletions
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Enums;
enum JenisWorkshop: string
{
case LOKAKARYA = 'lokakarya';
case PELATIHAN = 'pelatihan';
case SOSIALISASI = 'sosialisasi';
}
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace App\Enums;
enum StatusWorkshop: string
{
case DRAFT = 'draft';
case AKTIF = 'aktif';
case TUNDA = 'tunda';
case BATAL = 'batal';
case SELESAI = 'selesai';
}
@@ -1,11 +0,0 @@
<?php
namespace App\Http\Controllers\Web\Program;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PelatihanController extends Controller
{
//
}
@@ -0,0 +1,189 @@
<?php
namespace App\Http\Controllers\Web\Program;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Program\Workshop;
use App\Models\Program\SesiWorkshop;
use App\Models\Program\PesertaWorkshop;
use App\Models\Program\Aktivitas;
use App\Enums\StatusWorkshop;
class WorkshopController extends Controller
{
public function index(Request $request)
{
$title = 'Workshop';
$summary = ([
'kegiatan' => Workshop::count(),
'lokakarya' => Workshop::where('jenis', 'lokakarya')->count(),
'pelatihan' => Workshop::where('jenis', 'pelatihan')->count(),
'sosialisasi' => Workshop::where('jenis', 'sosialisasi')->count(),
'sesi' => SesiWorkshop::count(),
'peserta' => PesertaWorkshop::count(),
]);
$query = Workshop::query();
if ($request->filled('search')) {
$search = $request->search;
$query->where(function($q) use ($search) {
$q->where('judul', 'ilike', "%{$search}%")
->orWhere('deskripsi', 'ilike', "%{$search}%");
});
}
if ($request->filled('jenis')) {
$query->where('jenis', $request->jenis);
}
if ($request->filled('status')) {
$query->where('status', $request->status);
}
if ($request->filled('tanggal_awal') && $request->filled('tanggal_akhir')) {
$query->whereBetween('tanggal_awal', [$request->tanggal_awal, $request->tanggal_akhir]);
} elseif ($request->filled('tanggal_awal')) {
$query->where('tanggal_awal', '>=', $request->tanggal_awal);
} elseif ($request->filled('tanggal_akhir')) {
$query->where('tanggal_akhir', '<=', $request->tanggal_akhir);
}
$perPage = $request->input('per_page', 10);
$workshops = $query->latest()->paginate($perPage);
return view('program.workshop.index', compact('workshops', 'summary', 'title'));
}
public function create()
{
$programs = Aktivitas::latest()->get();
return view('program.workshop.add', compact('programs'));
}
public function store(Request $request)
{
$validated = $request->validate([
'program_aktivitas_id' => 'nullable|integer',
'judul' => 'required|string|max:255',
'jenis' => 'required|string',
'tanggal_awal' => 'required|date',
'tanggal_akhir' => 'required|date|after_or_equal:tanggal_awal',
'status' => 'required|string',
'deskripsi' => 'nullable|string',
], [
'program_aktivitas_id.integer' => 'Program aktivitas harus berupa angka.',
'judul.required' => 'Judul wajib diisi.',
'judul.string' => 'Judul harus berupa teks.',
'judul.max' => 'Judul maksimal 255 karakter.',
'jenis.required' => 'Jenis wajib diisi.',
'jenis.string' => 'Jenis harus berupa teks.',
'tanggal_awal.required' => 'Tanggal awal wajib diisi.',
'tanggal_awal.date' => 'Tanggal awal harus berupa tanggal yang valid.',
'tanggal_akhir.required' => 'Tanggal akhir wajib diisi.',
'tanggal_akhir.date' => 'Tanggal akhir harus berupa tanggal yang valid.',
'tanggal_akhir.after_or_equal' => 'Tanggal akhir harus setelah atau sama dengan tanggal awal.',
'status.required' => 'Status wajib diisi.',
'status.string' => 'Status harus berupa teks.',
'deskripsi.string' => 'Deskripsi harus berupa teks.',
]);
$workshop = Workshop::create([
'judul' => $request->judul,
'jenis' => $request->jenis,
'tanggal_awal' => $request->tanggal_awal,
'tanggal_akhir' => $request->tanggal_akhir,
'status' => $request->status,
'deskripsi' => $request->deskripsi,
'program_aktivitas_id' => $request->program_aktivitas_id ?? null,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
return response()->json([
'status' => 'success',
'message' => 'Workshop berhasil disimpan sebagai Draft.'
]);
}
public function edit($id)
{
$workshop = Workshop::findOrFail($id);
$programs = Aktivitas::latest()->get();
return view('program.workshop.edit', compact('workshop', 'programs'));
}
public function update(Request $request, $id)
{
$validated = $request->validate([
'program_aktivitas_id' => 'nullable|integer',
'judul' => 'required|string|max:255',
'jenis' => 'required|string',
'tanggal_awal' => 'required|date',
'tanggal_akhir' => 'required|date|after_or_equal:tanggal_awal',
'status' => 'required|string',
'deskripsi' => 'nullable|string',
], [
'program_aktivitas_id.integer' => 'Program aktivitas harus berupa angka.',
'judul.required' => 'Judul wajib diisi.',
'judul.string' => 'Judul harus berupa teks.',
'judul.max' => 'Judul maksimal 255 karakter.',
'jenis.required' => 'Jenis wajib diisi.',
'jenis.string' => 'Jenis harus berupa teks.',
'tanggal_awal.required' => 'Tanggal awal wajib diisi.',
'tanggal_awal.date' => 'Tanggal awal harus berupa tanggal yang valid.',
'tanggal_akhir.required' => 'Tanggal akhir wajib diisi.',
'tanggal_akhir.date' => 'Tanggal akhir harus berupa tanggal yang valid.',
'tanggal_akhir.after_or_equal' => 'Tanggal akhir harus setelah atau sama dengan tanggal awal.',
'status.required' => 'Status wajib diisi.',
'status.string' => 'Status harus berupa teks.',
'deskripsi.string' => 'Deskripsi harus berupa teks.',
]);
$workshop = Workshop::findOrFail($id);
$workshop->update([
'judul' => $request->judul,
'jenis' => $request->jenis,
'tanggal_awal' => $request->tanggal_awal,
'tanggal_akhir' => $request->tanggal_akhir,
'status' => $request->status,
'deskripsi' => $request->deskripsi,
'program_aktivitas_id' => $request->program_aktivitas_id ?? null,
'updated_by' => auth()->user()->id,
]);
return response()->json([
'status' => 'success',
'message' => 'Perubahan workshop berhasil disimpan.'
]);
}
public function destroy($id)
{
$workshop = Workshop::findOrFail($id);
$workshop->update(['deleted_by' => auth()->user()->id]);
$workshop->delete();
return response()->json([
'status' => 'success',
'message' => 'Workshop berhasil dihapus.'
]);
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
namespace App\Models\Program;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Profile;
use App\Models\Program\SesiWorkshop;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class PesertaWorkshop extends Model
{
use HasFactory, SoftDeletes;
protected $table = 'peserta_workshop';
protected $fillable = [
'sesi_workshop_id',
'profil_id',
'status',
'created_by',
'updated_by',
'deleted_by',
];
public function profil()
{
return $this->belongsTo(Profile::class, 'profil_id');
}
public function sesiWorkshop()
{
return $this->belongsTo(SesiWorkshop::class, 'sesi_workshop_id');
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace App\Models\Program;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Program\Workshop;
use App\Models\Program\PesertaWorkshop;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class SesiWorkshop extends Model
{
use HasFactory, SoftDeletes;
protected $table = 'sesi_workshop';
protected $fillable = [
'workshop_id',
'judul',
'deskripsi',
'tanggal_awal',
'tanggal_akhir',
'status',
'created_by',
'updated_by',
'deleted_by',
];
public function workshop()
{
return $this->belongsTo(Workshop::class, 'workshop_id');
}
public function pesertaWorkshop()
{
return $this->hasMany(PesertaWorkshop::class, 'sesi_workshop_id');
}
}
+47
View File
@@ -0,0 +1,47 @@
<?php
namespace App\Models\Program;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Program\Aktivitas;
use App\Models\Program\SesiWorkshop;
use App\Enums\StatusWorkshop;
use App\Enums\JenisWorkshop;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Workshop extends Model
{
use HasFactory, SoftDeletes;
protected $table = 'workshop';
protected $casts = [
'status' => StatusWorkshop::class,
'jenis' => JenisWorkshop::class,
];
protected $fillable = [
'program_aktivitas_id',
'judul',
'deskripsi',
'jenis',
'tanggal_awal',
'tanggal_akhir',
'status',
'created_by',
'updated_by',
'deleted_by',
];
public function program()
{
return $this->belongsTo(Aktivitas::class, 'program_aktivitas_id');
}
public function sesiWorkshop()
{
return $this->hasMany(SesiWorkshop::class, 'workshop_id');
}
}