Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/e-tepian.aplikasipos.info/app/Models/
Upload File :
Current File : /home/aplikasiposinfo/www/e-tepian.aplikasipos.info/app/Models/Opd.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Session;
use App\Models\Duplikasi\DupProgram;
use App\Models\RealisasiRincianKegiatan;

class Opd extends Model
{
    use HasFactory, SoftDeletes;
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    protected $guarded = [];


    public function proker(){
        return $this->hasMany(Proker::class);
    }

    public function ProkerProgram(){
        return $this->hasManyThrough(ProkerProgram::class, Proker::class);
    }

    public function ProkerKegiatan(){
        return $this->hasManyDeep(ProkerKegiatan::class, [Proker::class, ProkerProgram::class]);
    }

    public function ProkerSubKegiatan(){
        return $this->hasManyDeep(ProkerSubKegiatan::class, [Proker::class, ProkerProgram::class, ProkerKegiatan::class]);
    }

    public function RincianKegiatan(){
        return $this->hasManyDeep(RincianKegiatan::class, [Proker::class, ProkerProgram::class, ProkerKegiatan::class, ProkerSubKegiatan::class]);
    }

    public function RealisasiRincianKegiatan(){
        return $this->hasManyDeep(RealisasiRincianKegiatan::class, [Proker::class, ProkerProgram::class, ProkerKegiatan::class, ProkerSubKegiatan::class, RincianKegiatan::class]);
    }

    public function RealisasiFisik(){
        return $this->hasManyDeep(RealisasiFisik::class, [Proker::class, ProkerProgram::class, ProkerKegiatan::class, ProkerSubKegiatan::class, RincianKegiatan::class, RealisasiRincianKegiatan::class]);
    }

    public function RealisasiKeuangan(){
        return $this->hasManyDeep(RealisasiKeuangan::class, [Proker::class, ProkerProgram::class, ProkerKegiatan::class, ProkerSubKegiatan::class, RincianKegiatan::class, RealisasiRincianKegiatan::class]);
    }

    public function getTkdnAkumulasiAttribute()
    {
        return $this->Proker->sum('TkdnAkumulasi');
    }

    public function getPhysicalPercentageByMonth($month, $year)
    {
        $totalPercentage = 0;
        $count = 0;

        // Ambil semua proker_kegiatans yang terkait dengan OPD ini
        $prokerKegiatans = $this->prokers()->with('prokerPrograms.prokerKegiatans')->get()
            ->pluck('prokerPrograms')
            ->flatten()
            ->pluck('prokerKegiatans')
            ->flatten();

        // Loop melalui setiap proker_kegiatan dan hitung persentase fisiknya
        foreach ($prokerKegiatans as $prokerKegiatan) {
            // Ambil semua rincian_kegiatans dan realisasi_rincian_kegiatans yang terkait dengan proker_kegiatan ini
            $rincianKegiatans = $prokerKegiatan->rincianKegiatans()
                ->with(['realisasiRincianKegiatans' => function ($query) use ($month, $year) {
                    $query->whereMonth('tanggal_realisasi', $month)
                        ->whereYear('tanggal_realisasi', $year);
                }])
                ->get();

            // Loop melalui setiap rincian_kegiatan dan hitung persentase fisiknya
            foreach ($rincianKegiatans as $rincianKegiatan) {
                $realisasiFisik = $rincianKegiatan->realisasiRincianKegiatans->sum('realisasi');

                // Hitung persentase fisik jika volume lebih dari 0
                if ($rincianKegiatan->volume > 0) {
                    $persentaseFisik = ($rincianKegiatan->pagu * ($realisasiFisik / $rincianKegiatan->volume)) * 100;
                } else {
                    $persentaseFisik = 0;
                }

                $totalPercentage += $persentaseFisik;
                $count++;
            }
        }

        // Hitung rata-rata persentase fisik
        if ($count > 0) {
            $averagePercentage = $totalPercentage / $count;
        } else {
            $averagePercentage = 0;
        }

        return $averagePercentage;
    }


    // public function dupProgram(){
    //     return $this->hasMany(DupProgram::class,'opd_id');
    // }
    public function getAnggaranAttribute(){
    	$result = 0;
        foreach ($this->proker as $data) {
            $result += $data->anggaran;
        }
        return $result;
    }
    public function getFisikAttribute(){
        $result = 0;
        foreach ($this->Proker as $data) {
            $result += $data->fisik;
        }
        return $result;
        
    }
    public function getKeuanganAttribute(){
        $result = 0;
        foreach ($this->Proker as $data) {
            $result += $data->keuangan;
        }
        return $result;
    }

    public function ppk(){
        return $this->hasMany(Ppk::class,'opd_id');
    }
    public function kpa(){
        return $this->hasMany(Kpa::class,'opd_id');
    }

    public function setYearAttribute($value)
    {
        $this->attributes['year'] = $value;
    }

    public function dupProgram(){
        return $this->hasMany(DupProgram::class,'opd_id');
    }
    public function getDupanggaranAttribute(){
        return $this->dupProgram->map(function($item,$key){
            return $item->anggaran;
        })->sum();
    }
    public function getPaguByYearAttribute($value)
    {
        # method ini wajib mendapat data dari method set Year;
        # silakan kawan-kawan optimasi jika perlu 😁🙏;
        try {
            return $this->proker
            ->where('tahun',$this->attributes['year'])
            ->map(function($item,$key){
                return $item->ProkerProgram->map(function($item,$key){
                    return $item->ProkerKegiatan->map(function($item,$key){
                        return $item->ProkerSubKegiatan->map(function($item,$key){
                            return $item->RincianKegiatan->map(function($item,$key){
                                return $item->pagu;
                            })->sum();
                        })->sum();
                    })->sum();
                })->sum();
            })->sum();
            
        } catch (\Exception $e) {
            return 0;
        }
    }

    public function getRincianRealisasiAttribute(){
        try {
            // return $this->proker
            // ->map(function($item,$key){
            //     return $item->ProkerProgram->map(function($item,$key){
            //         return $item->ProkerKegiatan->map(function($item,$key){
            //             return $item->ProkerSubKegiatan->map(function($item,$key){
            //                 return $item->RincianKegiatan->map(function($item,$key){
            //                     return $item->RealisasiRincianKegiatan;
            //                 })->filter(function($data,$key){
            //                     return $data != null;
            //                 })->sum('nilai_kontrak');
            //             })->sum();
            //         })->sum();
            //     })->sum();
            // })->sum();
            $ids = $this->id;
            return RealisasiRincianKegiatan::whereHas('RincianKegiatan.ProkerSubKegiatan.ProkerKegiatan.ProkerProgram.Proker.Opd',function($query)use($ids){
                $query->where('id',$ids);
            })->sum('nilai_kontrak');

        } catch (\Exception $e) {
            return 0;
        }
    }
    
    public function getPercentPaguAttribute($value){
        if (is_null(Session::get('total_pagu'))) {
            if (!Session::get('total_pagu') > 0) {
                $jum = self::select('id','nama_perangkat_daerah')->get()->map(function($item,$key){
                return $item->anggaran;
                })->sum();
                Session::put('total_pagu',$jum);
            }
        }
        $total = Session::get('total_pagu');
        if ($this->keuangan > 0) {
            return ($this->anggaran/$total)*100;
        }else{
            return 0;
        }
        
    }

    

    public function getPercentFisikAttribute(){
        return $this->proker->map(function($item,$key){
            return $item->percentfisik;
        })->sum();
    }
    public function scopeFilter($query,$request){
        if ($request->opd) {
            $query->where('id',$request->opd);
        }
        if ($request->tahun) {
            $query->whereHas('proker',function($query)use($request){
                $query->where('tahun',$request->tahun);
            });
        }
        if ($request->month) {
            $query->whereHas('proker.ProkerProgram.ProkerKegiatan.ProkerSubKegiatan.RincianKegiatan.RealisasiRincianKegiatan.realisasiFisik',function($query)use($request){
                $query->whereMonth('tanggal_realisasi',$request->month);
            })->orWhereHas('proker.ProkerProgram.ProkerKegiatan.ProkerSubKegiatan.RincianKegiatan.RealisasiRincianKegiatan.realisasiKeuangan',function($query)use($request){
                $query->whereMonth('tanggal_realisasi',$request->month);
            });
        }
        
        return $query;
    }

    public function getVolumeAttribute(){
        return $this->proker->sum('volume');
    }

    public function getTestingAttribute(){
        // return $this->anggaran;
        return $this->anggaran * (($this->fisik/$this->volume)*100);
        // return ($this->anggaran * (($this->fisik/$this->volume)*100)/$this->anggaran);
    }


}

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