Files
alrahma_sunday_school_api/app/Models/EventCharges.php
T
2026-06-09 02:32:58 -04:00

93 lines
2.4 KiB
PHP

<?php
namespace App\Models;
use App\Models\BaseModel;
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();
}
}