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