92 lines
2.4 KiB
PHP
92 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class EventCharges extends BaseModel
|
|
{
|
|
protected $table = 'event_charges';
|
|
|
|
// ✅ legacy: useTimestamps = true (created_at/updated_at)
|
|
public $timestamps = true;
|
|
|
|
protected $fillable = [
|
|
'event_id',
|
|
'event_name',
|
|
'description',
|
|
'amount',
|
|
'parent_id',
|
|
'student_id',
|
|
'participation',
|
|
'charged',
|
|
'waiver_signed',
|
|
'event_paid',
|
|
'event_payment_id',
|
|
'class_section_id',
|
|
'external_firstname',
|
|
'external_lastname',
|
|
'external_note',
|
|
'external_parent_firstname',
|
|
'external_parent_lastname',
|
|
'external_parent_phone',
|
|
'external_parent_email',
|
|
'semester',
|
|
'school_year',
|
|
'created_by',
|
|
'updated_by',
|
|
'created_at',
|
|
'updated_at',
|
|
];
|
|
|
|
protected $casts = [
|
|
'event_id' => 'integer',
|
|
'parent_id' => 'integer',
|
|
'student_id' => 'integer',
|
|
'participation' => 'boolean', // change if stored as string/enum
|
|
'charged' => 'boolean', // change if stored as string/enum
|
|
'updated_by' => 'integer',
|
|
];
|
|
|
|
/* Optional relationships */
|
|
public function event()
|
|
{
|
|
return $this->belongsTo(Event::class, 'event_id');
|
|
}
|
|
|
|
public function parent()
|
|
{
|
|
return $this->belongsTo(User::class, 'parent_id');
|
|
}
|
|
|
|
public function student()
|
|
{
|
|
return $this->belongsTo(Student::class, 'student_id');
|
|
}
|
|
|
|
/**
|
|
* Equivalent of legacy getChargesWithEventInfo()
|
|
* Returns rows with: event_charges.*, events.event_name, events.amount
|
|
*/
|
|
public static function getChargesWithEventInfo(?int $parentId = null, ?string $schoolYear = null, ?string $semester = null): array
|
|
{
|
|
$q = DB::table('event_charges')
|
|
->leftJoin('events', 'events.id', '=', 'event_charges.event_id')
|
|
->select('event_charges.*', 'events.event_name', 'events.amount');
|
|
|
|
if (! empty($parentId)) {
|
|
$q->where('event_charges.parent_id', $parentId);
|
|
}
|
|
|
|
if (! empty($schoolYear)) {
|
|
$q->where('event_charges.school_year', $schoolYear);
|
|
}
|
|
|
|
if (! empty($semester)) {
|
|
$q->where('event_charges.semester', $semester);
|
|
}
|
|
|
|
return $q->get()->map(fn ($r) => (array) $r)->all();
|
|
}
|
|
}
|