Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/ppdb.samarinda.app/app/Models/
Upload File :
Current File : /home/aplikasiposinfo/www/ppdb.samarinda.app/app/Models/Siswa.php

<?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]