Anons79 Mini Shell

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

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;

class Sekolah extends Model
{
    use HasFactory, SoftDeletes;

    // protected $guarded = [];
    protected $fillable = [
        'npsn',
        'nama_sekolah',
        'bentuk_pendidikan',
        'status_sekolah',
        'daya_tampung', //tambahkan field daya tampung
        'kelurahan_id',
        'lintang',
        'bujur',
        'alamat'
    ];

    public function kelurahan()
    {
        return $this->belongsTo(Kelurahan::class);
    }

    //kuota_zonasi 
    //sd 75% dari daya tampung
    //smp 60% daya tampung

    public function getKuotaZonasiAttribute()
    {
        $kuota = 0;
        switch ($this->bentuk_pendidikan) {
            case "SD":
                $kuota = $this->daya_tampung * 75 / 100;
                break;
            case "SMP":
                $kuota = $this->daya_tampung * 60 / 100;
                break;
            default:
                $kuota = 0;
                break;
        }
        return round($kuota);
    }

    //kuota_afirmasi
    //sd 20% dari daya tampung
    //smp 15% daya tampung
    public function getKuotaAfirmasiAttribute()
    {
        $kuota = 0;
        switch ($this->bentuk_pendidikan) {
            case "SD":
                $kuota = $this->daya_tampung * 20 / 100;
                break;
            case "SMP":
                $kuota = $this->daya_tampung * 15 / 100;
                break;
            default:
                $kuota = 0;
                break;
        }
        return round($kuota);
    }

    //belongsToMany Siswa::class with SekolahSiswa::class
    public function siswas()
    {
        return $this->belongsToMany(Siswa::class,"sekolah_siswas")->withPivot("nomor_pilihan");
    }

    //siswa_afirmasi
    public function getSiswaAfirmasiAttribute(){
        $sekolah_id = $this->id;
        $siswas = $this->siswas()->where('jalur_pendaftaran','Afirmasi')->where('status','diverifikasi');
        //where siswa have media kartu_keluargas, have (kartu_keluarga_sejahtera or program_keluarga_harapan or kartu_indonesia_pintar)
        $siswas = $siswas
        ->with('media')
        //get age in year
        ->select('siswas.*',DB::raw("TIMESTAMPDIFF(day, DATE(tanggal_lahir), CURDATE()) as age_date"))
        // ->withCount('media')
        //berkas lengkap
        ->whereHas('media',function($query){
            $query->where('collection_name','kartu_keluargas');
        })
        //berkas keterangan tidak mampu
        ->whereHas('media',function($query){
            $query->whereIn('collection_name',['kartu_keluraga_sejahteras','program_keluarga_harapans','kartu_indonesia_pintars']);
        });
        $result = $siswas
        // ->orderBy('media_count','DESC')
        ->orderBy('pivot_nomor_pilihan','ASC')
        ->orderBy('age_date','DESC')
        ->orderBy('created_at','ASC')->get()->map(function($item)use($sekolah_id){
            $lolos_lain = $item->lolos_afirmasi;
            $tempat_lain = false;
            foreach ($lolos_lain as $urutan => $value) {
                if($value['id'] != $sekolah_id && $value['lolos'] && $urutan < $item->pivot->nomor_pilihan){
                    $tempat_lain = true;
                }
            }
            $item->tempat_lain = $tempat_lain;
            return $item;
        })->sortByDesc(function($item){
            return !$item->tempat_lain;
        });
        return $result;



    }
    
    //siswa_afirmasi_lolos
    public function getSiswaAfirmasiLolosAttribute(){
        $limit = $this->kuota_afirmasi;
        $siswas = $this->siswas()->where('jalur_pendaftaran','Afirmasi')->where('status','diverifikasi');
        //where siswa have media kartu_keluargas, have (kartu_keluarga_sejahtera or program_keluarga_harapan or kartu_indonesia_pintar)
        $siswas = $siswas
        ->with('media')
        
        //get age in year
        ->select('siswas.*',DB::raw("TIMESTAMPDIFF(day, DATE(tanggal_lahir), CURDATE()) as age_date"))
        // ->withCount('media')
        //berkas lengkap
        ->whereHas('media',function($query){
            $query->where('collection_name','kartu_keluargas');
        })
        //berkas keterangan tidak mampu
        ->whereHas('media',function($query){
            $query->whereIn('collection_name',['kartu_keluraga_sejahteras','program_keluarga_harapans','kartu_indonesia_pintars']);
        });
        $result = $siswas
        ->orderBy('pivot_nomor_pilihan','ASC')
        ->orderBy('age_date','DESC')
        
        ->orderBy('created_at','ASC')
        ->limit($limit)->get();

        return $result;
    }

    public function getSiswaZonasiAttribute() {
        $sekolah_id = $this->id;
        // (
        //     6371 * 2 
        //     * ASIN(SQRT(POWER(SIN((_latitude_value - _latitude_name) * pi()/180 / 2), 2)
        //     + COS(_latitude_value * pi()/180 )
        //     * COS(_latitude_name * pi()/180)
        //     * POWER(SIN((_longitude_value - _longitude_name) * pi()/180 / 2), 2) ))
        // );

        $siswas = $this->siswas()->where('jalur_pendaftaran','Zonasi')->where('status','diverifikasi');
        //where siswa have media kartu_keluargas, have (kartu_keluarga_sejahtera or program_keluarga_harapan or kartu_indonesia_pintar)
        $siswas = $siswas
        ->with('media')
        //berkas lengkap
        ->whereHas('media',function($query){
            $query->where('collection_name','kartu_keluargas');
        })
        //berkas keterangan tidak mampu
        // ->whereHas('media',function($query){
        //     $query->whereIn('collection_name',['kartu_keluraga_sejahteras','program_keluarga_harapans','kartu_indonesia_pintars']);
        // })
        //calculate distance siswas.lintang siswas.bujur sekolah.lintang sekolah.bujur
        ->select('siswas.*',DB::raw("TIMESTAMPDIFF(day, DATE(tanggal_lahir), CURDATE()) as age_date"),DB::raw("(
            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"))
        ;
        $result = $siswas
        // ->orderBy('media_count','DESC')
        ->orderBy('pivot_nomor_pilihan','ASC')
        ->orderBy('distance','ASC')
        ->orderBy('age_date','DESC')
        ->orderBy('created_at','ASC')->get()->map(function($item)use($sekolah_id){
            $lolos_lain = $item->lolos_zonasi;
            $tempat_lain = false;
            foreach ($lolos_lain as $urutan => $value) {
                if($value['id'] != $sekolah_id && $value['lolos'] && $urutan < $item->pivot->nomor_pilihan){
                    $tempat_lain = true;
                }
            }
            $item->tempat_lain = $tempat_lain;
            return $item;
        })->sortByDesc(function($item){
            return !$item->tempat_lain;
        });
        return $result;
    }

    //siswa_zonasi_lolos
    public function getSiswaZonasiLolosAttribute() {
        $limit = $this->kuota_zonasi;
        // (
        //     6371 * 2 
        //     * ASIN(SQRT(POWER(SIN((_latitude_value - _latitude_name) * pi()/180 / 2), 2)
        //     + COS(_latitude_value * pi()/180 )
        //     * COS(_latitude_name * pi()/180)
        //     * POWER(SIN((_longitude_value - _longitude_name) * pi()/180 / 2), 2) ))
        // );

        $siswas = $this->siswas()->where('jalur_pendaftaran','Zonasi')->where('status','diverifikasi');
        //where siswa have media kartu_keluargas, have (kartu_keluarga_sejahtera or program_keluarga_harapan or kartu_indonesia_pintar)
        $siswas = $siswas
        ->with('media')
        //berkas lengkap
        ->whereHas('media',function($query){
            $query->where('collection_name','kartu_keluargas');
        })
        //berkas keterangan tidak mampu
        // ->whereHas('media',function($query){
        //     $query->whereIn('collection_name',['kartu_keluraga_sejahteras','program_keluarga_harapans','kartu_indonesia_pintars']);
        // })
        //calculate distance siswas.lintang siswas.bujur sekolah.lintang sekolah.bujur
        ->select('siswas.*',DB::raw("TIMESTAMPDIFF(day, DATE(tanggal_lahir), CURDATE()) as age_date"),DB::raw("(
            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"));
        $result = $siswas
        // ->orderBy('media_count','DESC')
        ->orderBy('pivot_nomor_pilihan','ASC')
        ->orderBy('distance','ASC')
        ->orderBy('age_date','DESC')
        ->orderBy('created_at','ASC')
        ->limit($limit)
        ->get();
        return $result;
    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]