Anons79 Mini Shell

Directory : /home/aplikasiposinfo/public_html/e-tepian.aplikasipos.info/app/Models/
Upload File :
Current File : /home/aplikasiposinfo/public_html/e-tepian.aplikasipos.info/app/Models/RincianKegiatan.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;
use App\Models\FileDokumentasi;
use File;

class RincianKegiatan extends Model
{
    use HasFactory, SoftDeletes;
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
    use \Znck\Eloquent\Traits\BelongsToThrough;

    protected $guarded = [];
    protected $fillable = [
        'proker_sub_kegiatan_id', 
        'kode_rekening',
        'uraian',
        'volume',
        'satuan', 
        'pagu',
        'volume_murni',
        'satuan_murni', 
        'pagu_murni',
        'volume_pergeseran',
        'satuan_pergeseran', 
        'pagu_pergeseran',
        'volume_perubahan',
        'satuan_perubahan', 
        'pagu_perubahan',
        'volume_perubahan_pergeseran',
        'satuan_perubahan_pergeseran', 
        'pagu_perubahan_pergeseran',
        'tanggal_akhir_pemilihan_penyedia',    
        'tanggal_mulai_pemilihan_penyedia',  
        'tanggal_akhir_pelaksanaan',
        'tanggal_mulai_pelaksanaan', 
        'tanggal_akhir_pemanfaatan', 
        'tanggal_mulai_pemanfaatan',
        'rincian_sub_bidang_id',
        'status_gabungan',
        'status_mendesak',
        'strategis',
        'sumber_dana_id',
        'latitude',
        'longitude',
        'kategori',
        'kunci_rincian',
        'jenis_umk_id',
        'pengadaan',
        'umkm',
    ];
    protected $casts = [
        'pagu'=>'integer',
        'volume'=>'float',
        'pagu_murni'=>'integer',
        'volume_murni'=>'float',
        'pagu_pergeseran'=>'integer',
        'volume_pergeseran'=>'float',
        'pagu_perubahan'=>'integer',
        'volume_perubahan'=>'float',
        'pagu_perubahan_pergeseran'=>'integer',
        'volume_perubahan_pergeseran'=>'float',
    ];    

    public function ProkerSubKegiatan(){
    	return $this->belongsTo(ProkerSubKegiatan::class);
    }
    public function RealisasiRincianKegiatan(){
        return $this->hasOne(RealisasiRincianKegiatan::class,'rincian_kegiatan_id');
    }

    public function DetailRincianKegiatan(){
        return $this->hasMany(DetailRincianKegiatan::class,'rincian_kegiatan_id');
    }

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

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

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

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

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

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

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

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

    public function Kegiatan(){
    	return $this->belongsToThrough(ProkerKegiatan::class, [ProkerSubKegiatan::class]);
    }

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

    public function subrincianSubBidang()
    {
        return $this->belongsTo(RincianSubBidang::class, 'rincian_sub_bidang_id');
    }

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

    public function jenisUmk()
    {
        return $this->belongsTo(JenisUmk::class, 'jenis_umk_id');
    }

    // public function getPaguMurniAttribute()
    // {
    //     return $this->attributes['pagu'];
    // }

    // public function getVolumeMurniAttribute()
    // {
    //     return $this->attributes['volume'];
    // }

    // public function getSatuanMurniAttribute()
    // {
    //     return $this->attributes['satuan'];
    // }

    // public function getPaguAttribute()
    // {
    //     return $this->attributes['pagu_perubahan_pergeseran'] ?? 
    //             $this->attributes['pagu_perubahan'] ?? 
    //             $this->attributes['pagu_pergeseran'] ?? 
    //             $this->attributes['pagu'];
    // }

    // public function getVolumeAttribute()
    // {
    //     return $this->attributes['volume_perubahan_pergeseran'] ?? 
    //             $this->attributes['volume_perubahan'] ?? 
    //             $this->attributes['volume_pergeseran'] ?? 
    //             $this->attributes['volume'];
    // }

    // public function getSatuanAttribute()
    // {
    //     return $this->attributes['satuan_perubahan_pergeseran'] ?? 
    //             $this->attributes['satuan_perubahan'] ?? 
    //             $this->attributes['satuan_pergeseran'] ?? 
    //             $this->attributes['satuan'];
    // }

    public function getPersentaseFisikAttribute(){
        if ($this->volume > 0) {
            return ($this->pagu*($this->rincian_kegiatan_realisasi_fisik_sum/$this->volume)*100);
        }else{
            return 0;
        }
    }

    public function getKeuanganAttribute(){
        $result = 0;
        if($this->RealisasiRincianKegiatan){
            $result += $this->RealisasiRincianKegiatan->keuangan;
        }
        return $result;
    }

    public function getKeuTw($triwulan, $tahun){
        $result = 0;

        $data = $this->RealisasiRincianKegiatan; // Ambil satu objek saja

        if ($data) { // Cek apakah data ada (bukan null)
            $result += $data->getKeuTw($triwulan, $tahun);
        }

        return $result;
    }


    public function getFisikAttribute(){
        // $result = 0;
        // if($this->RealisasiRincianKegiatan){
        //     $result += $this->RealisasiRincianKegiatan->fisik;
        // }
        // return $result;
        return $this->RealisasiRincianKegiatan->fisik ?? 0;
    }
    public function getKontrakAttribute(){
        $result = 0;
        if($this->RealisasiRincianKegiatan){
            $result += (float) $this->RealisasiRincianKegiatan->nilai_kontrak;
        }
        return $result;
    }

    public function getFisikPercentAttribute(){
        return $this->RealisasiRincianKegiatan->fisik->sum('realisasi');
    }
    public function scopeFilter($query,$request){
        if ($request->month) {
            $query->whereHas('RealisasiRincianKegiatan.realisasiFisik',function($q)use($request){
                $q->whereMonth('tanggal_realisasi',$request->month);
            })->orWhereHas('RealisasiRincianKegiatan.realisasiKeuangan',function($q)use($request){
                $q->whereMonth('tanggal_realisasi',$request->month);
            });
        }
        return $query;
    }

    public function getPaguBerjalanAttribute(){

        if ($this->RealisasiRincianKegiatan->nilai_kontrak > 0) {
            return $this->pagu;
            // $count = $this->RealisasiRincianKegiatan->realisasiFisik->count() + $this->RealisasiRincianKegiatan->realisasiKeuangan->count();
            // if ($count > 0) {
            //     return $this->pagu;
            // }else{
            //     return 0;
            // }
        }else{
            return 0;
        }
    }

    public function getPaguSwakelolaAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'swakelola') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguPengadaanLangsungAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'pengadaan langsung') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguPengadaanDikecualikanAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'pengadaan dikecualikan') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguEpurchasingAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'e-purchasing') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguPenunjukanLangsungAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'penunjukan langsung') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguTenderCepatAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'tender cepat') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguTenderAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'tender') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }
    
    public function getPaguSeleksiAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1 && $this->RealisasiRincianKegiatan->metode == 'seleksi') {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getPaguPengadaanAttribute(){

        if ($this->RealisasiRincianKegiatan) {
            if ($this->pengadaan == 1) {
                return $this->pagu;
            }else{
                return 0;
            }
        }else{
            return 0;
        }
    }

    public function getCustomNilaiKontrakAttribute(){
        return isset($this->RealisasiRincianKegiatan)?$this->RealisasiRincianKegiatan->CustomNilaiKontrak:0;
    }

    public function getPaguBelumBerjalanAttribute(){
        $pagu = 0;
        if ($this->RealisasiRincianKegiatan) {
            // if ($this->RealisasiRincianKegiatan->realisasiFisik->count() > 0 && $this->RealisasiRincianKegiatan->realisasiKeuangan->count() > 0) {
            // if ($this->RealisasiRincianKegiatan->nilai_kontrak == 0) {
            // if ($this->RealisasiRincianKegiatan->realisasiFisik->sum('realisasi') == null && $this->RealisasiRincianKegiatan->realisasiKeuangan->sum('realisasi') == null) {
            if ($this->RealisasiRincianKegiatan->nilai_kontrak == 0) {
               $pagu  = $this->pagu;
            }else{
                $pagu =  0;
            }
        }else{
            $pagu =  0;
        }
        
        return $pagu;
    }

    public function getTkdnAkumulasiAttribute(){
        return (($this->pagu * $this->RealisasiRincianKegiatan->tkdn));
    }

    // booted function
    protected static function booted()
    {

        static::created(function ($RincianKegiatan) {
            // Check if 'pagu' attribute has changed
            if ($RincianKegiatan->isDirty('pagu') or 
                $RincianKegiatan->isDirty('pagu_murni') or 
                $RincianKegiatan->isDirty('pagu_pergeseran') or 
                $RincianKegiatan->isDirty('pagu_perubahan') or 
                $RincianKegiatan->isDirty('pagu_perubahan_pergeseran') or 
                $RincianKegiatan->isDirty('volume') or 
                $RincianKegiatan->isDirty('volume_murni') or 
                $RincianKegiatan->isDirty('volume_pergeseran') or 
                $RincianKegiatan->isDirty('volume_perubahan') or 
                $RincianKegiatan->isDirty('volume_perubahan_pergeseran') or 
                $RincianKegiatan->isDirty('satuan') or 
                $RincianKegiatan->isDirty('satuan_murni') or 
                $RincianKegiatan->isDirty('satuan_pergeseran') or 
                $RincianKegiatan->isDirty('satuan_perubahan') or 
                $RincianKegiatan->isDirty('satuan_perubahan_pergeseran')) {
                DB::beginTransaction();
                try {
                    if (!is_null($RincianKegiatan->pagu_perubahan_pergeseran)) {
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_perubahan_pergeseran;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_perubahan_pergeseran;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_perubahan_pergeseran;
                    } elseif (!is_null($RincianKegiatan->pagu_perubahan)) {
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_perubahan;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_perubahan;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_perubahan;
                    } elseif (!is_null($RincianKegiatan->pagu_pergeseran)) {
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_pergeseran;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_pergeseran;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_pergeseran;
                    } elseif (!is_null($RincianKegiatan->pagu_murni)) {
                        // This condition is not necessary as it's always true
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_murni;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_murni;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_murni;
                    }
        
                    $RincianKegiatan->saveQuietly();
                    DB::commit();
                } catch (\Exception $ex) {
                    DB::rollback();
                    return response()->json(['error' => $ex->getMessage()], 500);
                }
            }
        });

        static::updated(function ($RincianKegiatan) {
            // Check if 'pagu' attribute has changed
            // dd($RincianKegiatan->isDirty('volume_murni'));
            if ($RincianKegiatan->isDirty('pagu') or 
                $RincianKegiatan->isDirty('pagu_murni') or 
                $RincianKegiatan->isDirty('pagu_pergeseran') or 
                $RincianKegiatan->isDirty('pagu_perubahan') or 
                $RincianKegiatan->isDirty('pagu_perubahan_pergeseran') or 
                $RincianKegiatan->isDirty('volume') or 
                $RincianKegiatan->isDirty('volume_murni') or 
                $RincianKegiatan->isDirty('volume_pergeseran') or 
                $RincianKegiatan->isDirty('volume_perubahan') or 
                $RincianKegiatan->isDirty('volume_perubahan_pergeseran') or 
                $RincianKegiatan->isDirty('satuan') or 
                $RincianKegiatan->isDirty('satuan_murni') or 
                $RincianKegiatan->isDirty('satuan_pergeseran') or 
                $RincianKegiatan->isDirty('satuan_perubahan') or 
                $RincianKegiatan->isDirty('satuan_perubahan_pergeseran')) {
                DB::beginTransaction();
                try {
                    if (!is_null($RincianKegiatan->pagu_perubahan_pergeseran)) {
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_perubahan_pergeseran;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_perubahan_pergeseran;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_perubahan_pergeseran;
                    } elseif (!is_null($RincianKegiatan->pagu_perubahan)) {
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_perubahan;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_perubahan;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_perubahan;
                    } elseif (!is_null($RincianKegiatan->pagu_pergeseran)) {
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_pergeseran;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_pergeseran;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_pergeseran;
                    } elseif (!is_null($RincianKegiatan->pagu_murni)) {
                        // This condition is not necessary as it's always true
                        $RincianKegiatan->pagu = $RincianKegiatan->pagu_murni;
                        $RincianKegiatan->volume = $RincianKegiatan->volume_murni;
                        $RincianKegiatan->satuan = $RincianKegiatan->satuan_murni;
                    }
        
                    $RincianKegiatan->saveQuietly();
                    DB::commit();
                } catch (\Exception $ex) {
                    DB::rollback();
                    return response()->json(['error' => $ex->getMessage()], 500);
                }
            }
        });
        

        // booted function ketika delete rincian kegiatan maka realisasirinciankegiatan, realisasi fisik, realisasikeuangan akan terhapus juga
        static::deleting(function ($RincianKegiatan) {
            DB::beginTransaction();
            try {
                // cek jika merupakan force delete
                if ($RincianKegiatan->isForceDeleting()) {
                    $RincianKegiatan->RealisasiRincianKegiatan()->onlyTrashed()->each(function ($realisasiRincianKegiatan) {
                        // cek jika realisasi fisik tidak null
                        if ($realisasiRincianKegiatan->realisasiFisik()->onlyTrashed()) {
                            $realisasiRincianKegiatan->realisasiFisik()->onlyTrashed()->forceDelete();
                        }
                        // cek jika realisasi keuangan tidak null
                        if ($realisasiRincianKegiatan->realisasiKeuangan()->onlyTrashed()) {
                            $realisasiRincianKegiatan->realisasiKeuangan()->onlyTrashed()->forceDelete();
                        }
                        // cek jika permasalahan dan tindak lanjut tidak null
                        if ($realisasiRincianKegiatan->permasalahanTindakLanjut()->onlyTrashed()) {
                            $realisasiRincianKegiatan->permasalahanTindakLanjut()->onlyTrashed()->forceDelete();
                        }

                        $file = FileDokumentasi::where('realisasi_rincian_kegiatan_id', $realisasiRincianKegiatan->id)->first();
                        if ($file) {
                            $path = public_path('/assets/document/');
                            File::delete($path . $file->file_name);
                            $file->forceDelete();
                        }
                        
                        $realisasiRincianKegiatan->forceDelete();
                        // $RincianKegiatan->RealisasiRincianKegiatan()->onlyTrashed()->forceDelete();
                    });
                } else {
                    // cek jika realisasi rincian kegiatan tidak null
                    if ($RincianKegiatan->RealisasiRincianKegiatan) {
                        // cek jika realisasi fisik tidak null
                        if ($RincianKegiatan->RealisasiRincianKegiatan->realisasiFisik()) {
                            $RincianKegiatan->RealisasiRincianKegiatan->realisasiFisik()->delete();
                        }
                        // cek jika realisasi keuangan tidak null
                        if ($RincianKegiatan->RealisasiRincianKegiatan->realisasiKeuangan()) {
                            $RincianKegiatan->RealisasiRincianKegiatan->realisasiKeuangan()->delete();
                        }
                        // cek jika realisasi permasalahan dan tidak lanjut tidak null
                        if ($RincianKegiatan->RealisasiRincianKegiatan->permasalahanTindakLanjut()) {
                            $RincianKegiatan->RealisasiRincianKegiatan->permasalahanTindakLanjut()->delete();
                        }
                        $RincianKegiatan->RealisasiRincianKegiatan()->delete();
                    }
                }
                DB::commit();
            } catch (\Illuminate\Database\QueryException $ex) {
                dd($ex->getMessage(), $ex->errorInfo);
                DB::rollback();
                return response()->json(['error' => $ex->getMessage()], 500);
            }
        });

        static::restored(function ($RincianKegiatan) {

            DB::beginTransaction();
            try {
                $RincianKegiatan->RealisasiRincianKegiatan()->onlyTrashed()->restore();
                $RincianKegiatan->RealisasiRincianKegiatan()->each(function ($realisasiRincianKegiatan) {
                    // $realisasiRincianKegiatan->restore();
                    if ($realisasiRincianKegiatan->realisasiFisik) {
                        $realisasiRincianKegiatan->realisasiFisik()->onlyTrashed()->restore();
                    }
                    if ($realisasiRincianKegiatan->realisasiKeuangan) {
                        $realisasiRincianKegiatan->realisasiKeuangan()->onlyTrashed()->restore();
                    }
                    if ($realisasiRincianKegiatan->permasalahanTindakLanjut) {
                        $realisasiRincianKegiatan->permasalahanTindakLanjut()->onlyTrashed()->restore();
                    }
                });
                DB::commit();
            } catch (\Exception $ex) {
                DB::rollback();
                return response()->json(['error' => $ex->getMessage()], 500);
            }
        });
    }
}

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