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/ProkerSubKegiatan.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\LazyCollection;
use App\Models\RincianKegiatan;

class ProkerSubKegiatan extends Model
{
    use HasFactory;
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
    use \Znck\Eloquent\Traits\BelongsToThrough;

    protected $guarded = [];

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

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

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

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

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

    public function Pptk(){
    	return $this->belongsTo(User::class, 'user_id');
    }

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

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

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

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

    public function RincianSubBidang(){
        return $this->belongsToMany(RincianSubBidang::class, RincianKegiatan::class);
    }

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

    // public function RincianBidang(){
    //     return $this->belongsToMany(RincianBidang::class, [RincianKegiatan::class, RincianSubBidang::class]);
    // }

    public function subrincianKegiatans()
    {
        return $this->hasManyThrough(
            RincianKegiatan::class,
            RincianSubBidang::class,
            'proker_sub_kegiatan_id', // Kunci luar di RincianSubBidang
            'rincian_sub_bidang_id', // Kunci luar di RincianKegiatan
            'id', // Kunci lokal di ProkerSubKegiatan
            'id' // Kunci lokal di RincianBidang
        );
    }


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

    public function getPersentaseFisikAttribute(){

        return ($this->RincianKegiatan->map(function($item,$key){
            return ($item->PersentaseFisik);
        })->sum());
    }

    public function getAnggaranAttribute(){
    	// $result = 0;
        // foreach ($this->RincianKegiatan as $data) {
        //     $result += $data->pagu;
        // }
        // return $result;
        return $this->RincianKegiatan->sum('pagu');
        // return $this->RincianKegiatan->sum(function ($rincian) {
        //     return $rincian->pagu;
        // });
    }

    public function getAnggaranMurniAttribute(){
        return $this->RincianKegiatan->sum('pagu_murni');
    }

    public function getAnggaranPergeseranAttribute(){
        return $this->RincianKegiatan->sum('pagu_pergeseran');
    }

    public function getAnggaranPerubahanAttribute(){
        return $this->RincianKegiatan->sum('pagu_perubahan');
    }

    public function getAnggaranPerubahanPergeseranAttribute(){
        return $this->RincianKegiatan->sum('pagu_perubahan_pergeseran');
    }

    public function getTargetFisikJanAttribute(){
        return $this->target_fisik_1 * $this->anggaran;
    }

    public function getTargetFisikFebAttribute(){
        return $this->target_fisik_2 * $this->anggaran;
    }

    public function getTargetFisikMarAttribute(){
        return $this->target_fisik_3 * $this->anggaran;
    }

    public function getTargetFisikAprAttribute(){
        return $this->target_fisik_4 * $this->anggaran;
    }

    public function getTargetFisikMeiAttribute(){
        return $this->target_fisik_5 * $this->anggaran;
    }

    public function getTargetFisikJunAttribute(){
        return $this->target_fisik_6 * $this->anggaran;
    }

    public function getTargetFisikJulAttribute(){
        return $this->target_fisik_7 * $this->anggaran;
    }

    public function getTargetFisikAgsAttribute(){
        return $this->target_fisik_8 * $this->anggaran;
    }

    public function getTargetFisikSepAttribute(){
        return $this->target_fisik_9 * $this->anggaran;
    }

    public function getTargetFisikOktAttribute(){
        return $this->target_fisik_10 * $this->anggaran;
    }

    public function getTargetFisikNovAttribute(){
        return $this->target_fisik_11 * $this->anggaran;
    }

    public function getTargetFisikDesAttribute(){
        return $this->target_fisik_12 * $this->anggaran;
    }

    public function getTargetKeuanganJanAttribute(){
        return $this->target_keuangan_1 * $this->anggaran;
    }

    public function getTargetKeuanganFebAttribute(){
        return $this->target_keuangan_2 * $this->anggaran;
    }

    public function getTargetKeuanganMarAttribute(){
        return $this->target_keuangan_3 * $this->anggaran;
    }

    public function getTargetKeuanganAprAttribute(){
        return $this->target_keuangan_4 * $this->anggaran;
    }

    public function getTargetKeuanganMeiAttribute(){
        return $this->target_keuangan_5 * $this->anggaran;
    }

    public function getTargetKeuanganJunAttribute(){
        return $this->target_keuangan_6 * $this->anggaran;
    }

    public function getTargetKeuanganJulAttribute(){
        return $this->target_keuangan_7 * $this->anggaran;
    }

    public function getTargetKeuanganAgsAttribute(){
        return $this->target_keuangan_8 * $this->anggaran;
    }

    public function getTargetKeuanganSepAttribute(){
        return $this->target_keuangan_9 * $this->anggaran;
    }

    public function getTargetKeuanganOktAttribute(){
        return $this->target_keuangan_10 * $this->anggaran;
    }

    public function getTargetKeuanganNovAttribute(){
        return $this->target_keuangan_11 * $this->anggaran;
    }

    public function getTargetKeuanganDesAttribute(){
        return $this->target_keuangan_12 * $this->anggaran;
    }

    public function getKeuanganAttribute(){
        $result = 0;
        foreach ($this->RincianKegiatan as $data) {
            $result += $data->keuangan;
        }
        return $result;
    }

    public function getKeuTw($triwulan, $tahun){
        $result = 0;
        foreach ($this->RincianKegiatan as $data) {
            $result += $data->getKeuTw($triwulan, $tahun);
        }
        return $result;
    }

    public function getFisikAttribute(){
        $result = 0;
        foreach ($this->RincianKegiatan as $data) {
            $result += $data->fisik;
        }
        return $result;
    }
    public function getKontrakAttribute(){
        $result = 0;
        foreach ($this->RincianKegiatan as $data) {
            $result += $data->kontrak;
        }
        return $result;
    }


    public function getPercentFisikAttribute(){
        return ($this->RincianKegiatan->map(function($item,$key){
            if($item->volume > 0){
                return ($item->pagu * ($item->fisik/($item->volume))*100);
            }else{
                return 0;
            }
        })->sum());
    }

    public function getPercentFisikBulan($bulan, $tahun){
        $tgl_awal = $tahun.'-01-01';
        $tgl_akhir = $tahun.'-'.$bulan.'-31';
        
        return $this->RincianKegiatan->map(function($item) use($tgl_awal, $tgl_akhir) {
            $totalRealisasi = $item->RealisasiRincianKegiatan()
                ->with(['realisasiFisik' => function($query) use ($tgl_awal, $tgl_akhir) {
                    $query->whereBetween('tanggal_realisasi', [$tgl_awal, $tgl_akhir]);
                }])
                ->get()
                ->pluck('realisasiFisik')
                ->flatten()
                ->sum('realisasi');

            if ($item->volume > 0) {
                return ($item->pagu * ($totalRealisasi / $item->volume) * 100);
            } else {
                return 0;
            }
        })->sum();
    }

    public function getKeuPembayaran($bulan, $tahun)
    {
        $tgl_awal = $tahun . '-01-01';
        $tgl_akhir = date('Y-m-t', strtotime($tahun . '-' . $bulan . '-01')); // ambil tanggal akhir bulan yg benar

        return $this->RincianKegiatan->map(function ($item) use ($tgl_awal, $tgl_akhir) {
            return $item->RealisasiRincianKegiatan()
                ->withSum(['realisasiKeuangan as total_realisasi' => function ($query) use ($tgl_awal, $tgl_akhir) {
                    $query->whereBetween('tanggal_realisasi', [$tgl_awal, $tgl_akhir]);
                }], 'realisasi')
                ->get()
                ->sum('total_realisasi');
        })->sum();
    }


    public function getPaguBerjalanAttribute(){
        return $this->RincianKegiatan->map(function($item,$key){
            return $item->paguberjalan;
        })->filter()->sum();
    }

    public function getCustomNilaiKontrakAttribute(){
        return $this->RincianKegiatan->map(function($item,$key){
            return $item->customnilaikontrak;
        })->filter()->sum();
    }

    public function getPaguBelumBerjalanAttribute(){
        return $this->RincianKegiatan->map(function($item,$key){
            return $item->pagubelumberjalan;
        })->filter()->sum();
    }

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

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

}

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