<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\DB;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class Siswa extends Authenticatable implements HasMedia
{
use HasFactory, SoftDeletes, InteractsWithMedia;
// protected $guarded = [];
protected $fillable = [
'nik',
'no_pendaftaran',
'status_pendidikan',
'jalur_pendaftaran',
'no_wa',
'nama',
'jenis_kelamin',
'tempat_lahir',
'tanggal_lahir',
'lintang',
'bujur',
'kelurahan_id',
'alamat',
'rt',
'rw',
'no_kk',
'nama_ortu',
'no_akta_kelahiran',
'otp',
'expiredOtpTime',
'status',
'created_at'
];
public function kelurahan()
{
return $this->belongsTo(Kelurahan::class);
}
public function sekolah()
{
return $this->belongsToMany(Sekolah::class, 'sekolah_siswas', 'siswa_id', 'sekolah_id')->withPivot("nomor_pilihan");
}
// protected function jenisKelamin(): Attribute
// {
// return Attribute::make(
// get: function ($value) {
// return $value == 'L' ? 'Laki-laki' : 'Perempuan';
// }
// );
// }
// public function getStatusAttribute($value)
// {
// $html = '';
// if ($value == "diproses") {
// $html = "<div class='text-info'> Diproses </div>";
// } else if ($value == "diverifikasi") {
// $html = "<div class='text-success'> Terverifikasi </div>";
// } else if ($value == "ditolak") {
// $html = "<div class='text-danger'> Ditolak </div>";
// }
// return $html;
// }
public function scopeTestLolosZonasi($query)
{
$query->addSelect([
'lolos_zonasi' => DB::raw("(SELECT CONCAT(sekolah_siswas.sekolah_id,sekolah_siswas.nomor_pilihan) FROM sekolah_siswas WHERE sekolah_siswas.siswa_id = siswas.id)")
]);
return $query;
}
public function getLolosZonasiAttribute()
{
//sekolah
$sekolahs = $this->sekolah;
//sort/order by pivot nomor_pilihan
// $sekolahs = $sekolahs->sortBy(function($sekolah){
// return $sekolah->pivot->nomor_pilihan;
// });
// $sql = 'SELECT sekolahs.id,sekolahs.nama_sekolah, siswas.id,siswas.status,siswas.nama,siswas.created_at,TIMESTAMPDIFF(day, DATE(siswas.tanggal_lahir), CURDATE()) as age_date,(
// 6371 * 2
// * ASIN(SQRT(POWER(SIN((siswas.lintang - ".$this->lintang.") * pi()/180 / 2), 2)
// + COS(siswas.lintang * pi()/180 )
// * COS(".$this->lintang." * pi()/180)
// * POWER(SIN((siswas.bujur - ".$this->bujur.") * pi()/180 / 2), 2) ))
// ) as distance FROM sekolahs
// LEFT JOIN sekolah_siswas ON sekolah_siswas.sekolah_id = sekolahs.id
// JOIN siswas ON sekolah_siswas.siswa_id = siswas.id
// WHERE siswas.status = "diverifikasi"
// ORDER BY
// sekolahs.id ASC,
// distance ASC,
// age_date DESC,
// siswas.created_at ASC;';
//another query
// SELECT sekolahs.id,sekolahs.nama_sekolah,siswas.nama FROM sekolahs
// LEFT JOIN sekolah_siswas ON sekolah_siswas.sekolah_id = sekolahs.id
// JOIN siswas ON siswas.id = sekolah_siswas.id
// WHERE sekolah_siswas.siswa_id in (
// SELECT a.id FROM (SELECT b.id,TIMESTAMPDIFF(day, DATE(b.tanggal_lahir), CURDATE()) as age_date,(
// 6371 * 2
// * ASIN(SQRT(POWER(SIN((b.lintang - s.lintang) * pi()/180 / 2), 2)
// + COS(b.lintang * pi()/180 )
// * COS(s.lintang * pi()/180)
// * POWER(SIN((b.bujur - s.bujur) * pi()/180 / 2), 2) ))
// ) as distance,(s.daya_tampung * 75 / 100) as kuota FROM siswas as b
// JOIN sekolah_siswas as ss ON ss.siswa_id = b.id
// JOIN sekolahs as s ON ss.sekolah_id = s.id
// WHERE b.status = "diverifikasi"
// ORDER BY
// b.id ASC,
// b.created_at ASC LIMIT 40) as a);
// $result_test = [];
// foreach ($sekolahs as $sekolah) {
// $cek = $sekolah->leftJoin('sekolah_siswas', 'sekolah_siswas.sekolah_id', '=', 'sekolahs.id')
// ->join('siswas', 'sekolah_siswas.siswa_id', '=', 'siswas.id')
// ->join('media', 'media.model_id', '=', 'siswas.id')
// ->where('media.model_type', 'App\Models\Siswa')
// ->where('siswas.status_pendidikan', 'SMP')
// ->where('siswas.status', 'diverifikasi')
// // ->orderBy('sekolahs.id', 'ASC')
// ->whereIn('sekolah_siswas.siswa_id', function ($query) use ($sekolah) {
// $query->select('a.id')
// ->from(DB::raw('(SELECT b.id,TIMESTAMPDIFF(day, DATE(b.tanggal_lahir), CURDATE()) as age_date,(6371 * 2 * ASIN(SQRT(POWER(SIN((b.lintang - ' . $sekolah->lintang . ') * pi()/180 / 2), 2) + COS(b.lintang * pi()/180 ) * COS(' . $sekolah->lintang . ' * pi()/180) * POWER(SIN((b.bujur - ' . $sekolah->bujur . ') * pi()/180 / 2), 2) )) ) as distance FROM siswas as b JOIN sekolah_siswas as ss ON ss.siswa_id = b.id JOIN sekolahs as s ON ss.sekolah_id = s.id WHERE b.status = "diverifikasi" AND b.status_pendidikan = "SMP" ORDER BY b.id ASC,distance ASC, age_date DESC LIMIT '.$sekolah->kuota_zonasi.') as a'));
// })
// ->get()->pluck('siswa_id')->toArray();
// dd($cek,$sekolah->siswa_zonasi_lolos->pluck('id')->toArray());
// }
$result = [];
foreach ($sekolahs as $sekolah) {
$cek = $sekolah->siswa_zonasi_lolos->pluck('id')->search($this->id);
if ($cek != -1) {
$result[$sekolah->pivot->nomor_pilihan] = [
"id" => $sekolah->id,
"lolos" => true
];
} else {
$result[$sekolah->pivot->nomor_pilihan] = [
"id" => $sekolah->id,
"lolos" => false
];
}
}
return $result;
}
public function getLolosAfirmasiAttribute()
{
$sekolahs = $this->sekolah;
$result = [];
foreach ($sekolahs as $sekolah) {
$cek = $sekolah->siswa_afirmasi_lolos->pluck('id')->search($this->id);
if ($cek != -1) {
$result[$sekolah->pivot->nomor_pilihan] = [
"id" => $sekolah->id,
"lolos" => true
];
} else {
$result[$sekolah->pivot->nomor_pilihan] = [
"id" => $sekolah->id,
"lolos" => false
];
}
}
return $result;
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]