Anons79 Mini Shell

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

<?php

namespace App\Imports;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use App\Models\Opd;
use App\Models\Bidang;
use App\Models\Ppk;
use App\Models\Kpa;
use App\Models\Proker;
use App\Models\Program;
use App\Models\Kegiatan;
use App\Models\ProkerProgram;
use App\Models\ProkerKegiatan;
use App\Models\SubKegiatan;
use App\Models\SumberDana;
use App\Models\ProkerSubKegiatan;
use App\Models\RincianKegiatan;
use App\Models\RealisasiRincianKegiatan;
use App\Models\RealisasiKeuangan;
use App\Models\RealisasiFisik;
use App\Models\User;
use App\Models\Level;
use DB,Str;

use App\Models\Duplikasi\DupProgram;
use App\Models\Duplikasi\DupKegiatan;
use App\Models\Duplikasi\DupSubKegiatan;
use App\Models\Duplikasi\DupRincianKegiatan;
use App\Models\Duplikasi\DupItem;


class Importer implements ToCollection
{
    /**
    * @param Collection $collection
    */
    public function collection(Collection $row)
    {
        $key_val = collect();
        foreach ($row->chunk(20) as $chunk) {
            foreach($chunk as $key => $value){
                $val = collect($value);
                $key_val->push([$value[0]=>$value[1]]);
            }
        }
       
        $data = [];
        $active_keys = null;
        $sub = -1;
        $sub1 = -1;
        $sub2 = -1;
        $sub3 = -1;
        $sub4 = -1;
        $sub5 = -1;
        $item = -1;
        foreach ($key_val as $key => $value) {
            $value = collect($value);
            if ($value->keys()->first() == 'type') {
                $active_keys = $value->values()->first();
            }
            $arr = ['opd','program','kegiatan','kpa','ppt','sumber_dana','bidang','user'];
            if (in_array($active_keys,$arr)) {
                if ($value->keys()->first() != 'type') {
                    $data[$active_keys][$value->keys()->first()] = $value->values()->first();
                }
            }
            if ($active_keys == 'sub_kegiatan') {
                if ($value->keys()->first() != 'type') {
                    if ($value->keys()->first() == 'kode_sub_kegiatan') {
                        $sub++;
                        $sub1 = -1;
                    }
                    $data['kegiatan']['sub_kegiatan'][$sub][$value->keys()->first()] = $value->values()->first();
                }
            }
            

            if ($active_keys == 'sub1') {
                if ($value->keys()->first() != 'type') {
                    if ($value->keys()->first() == 'kode_rekening') {
                        $sub1++;
                        $item = -1;
                    }
                    $data['kegiatan']['sub_kegiatan'][$sub]['sub1'][$sub1][$value->keys()->first()] = $value->values()->first();
                }
            }
            if ($active_keys == 'item'){
                if ($value->keys()->first() != 'type') {
                    if ($value->keys()->first() == 'uraian') {
                        $item++;
                    }
                    $data['kegiatan']['sub_kegiatan'][$sub]['sub1'][$sub1]['item'][$item][$value->keys()->first()] = $value->values()->first();
                }
            }

        }

        $data = json_decode(json_encode(array($data)));
        $dinas = [
            'Sekretariat Daerah'=>1,
            'Sekretariat DPRD'=>2,
            'Badan'=>3,
            'Dinas'=>4,
            'Kecamatan'=>5,
            'Lainnya'=>6,
        ];
        DB::beginTransaction();
        try {
            foreach ($data as $key => $value){
                // dd($value->opd->kategori_opd);
                $opd = Opd::firstOrCreate([
                    'kode'=>$value->opd->kode_opd,
                ],[
                    'kode'=>$value->opd->kode_opd,
                    'nama_perangkat_daerah'=>$value->opd->nama_opd,
                    'kategori'=>$dinas[$value->opd->kategori_opd],
                ]);
                $kpa = Kpa::firstOrCreate([
                    'nip'=>$value->kpa->nip,
                    'opd_id'=>$opd->id,
                ],[
                    'nama'=>$value->kpa->nama_kpa,
                    'bidang'=>$value->kpa->bagian,
                    'nip'=>$value->kpa->nip,
                    'telpon'=>$value->kpa->telpon,
                    'status'=>strval($value->kpa->status),
                    'opd_id'=>$opd->id,
                ]);

                $ppk = Ppk::firstOrCreate([
                    'nip'=>$value->ppt->nip,
                ],[
                    'nama'=>$value->ppt->nama_pptk,
                    'nip'=>$value->ppt->nip,
                    'telpon'=>$value->ppt->telpon,
                    'status'=>strval($value->ppt->status),
                    'opd_id'=>$opd->id,
                ]);

                $bidang = Bidang::firstOrCreate([
                    'kode'=>$value->bidang->kode
                ],[
                    'kode'=>$value->bidang->kode,
                    'unit'=>$value->bidang->unit,
                    'singkatan'=>$value->bidang->singkatan,
                    'opd_id'=>$opd->id,
                ]);

                $user = User::firstOrCreate([
                    'nip'=>$value->user->nip,
                ],[
                    'level_id'=>Level::where(['nama_level'=>'User OPD'])->firstOrFail()->id,
                    'opd_id'=>$opd->id,
                    'username'=>$value->user->username,
                    'nama'=>$value->user->nama,
                    'nip'=>$value->user->nip,
                    'telpon'=>$value->user->telpon,
                    'bidang'=>$bidang->unit,
                    'email'=>$value->user->email,
                    'status'=>strval($value->user->status),
                    'password'=>\Hash::make('12345678'),
                ]);

                $user->assignRole('admin-PPTK');

                $proker = Proker::firstOrCreate([
                    'tahun'=>$value->program->tahun_program,
                    'opd_id'=>$opd->id
                ],[
                    'tahun'=>$value->program->tahun_program,
                    'opd_id'=>$opd->id
                ]);

                $cek_program = Program::where('kode',$value->program->kode_program)
                ->whereHas('prokersProgram',function($query)use($proker){
                    $query->where('proker_id',$proker->id);
                });

                if ($cek_program->count() > 0) {
                    $program = $cek_program->firstOrFail();
                }else{
                    $program = Program::create(
                        [
                            'kode'=>$value->program->kode_program,
                            'nama_program'=>strtoupper($value->program->nama_program),
                        ]);
                }

                $cek_proker_program = ProkerProgram::where([
                    'proker_id'=>$proker->id,
                    'program_id'=>$program->id,
                ]);

                if($cek_proker_program->count() > 0) {
                    $proker_program = $cek_proker_program->first();
                }else{
                    $proker_program = ProkerProgram::create([
                        'proker_id'=>$proker->id, 
                        'program_id'=>$program->id,
                    ]);
                }

                $cek_kegiatan =  Kegiatan::where('kode',$value->kegiatan->kode_kegiatan)
                ->whereHas('prokerKegiatan',function($query)use($proker,$value){
                    $query->whereHas('Program',function($query)use($value){
                        $query->where('kode',$value->program->kode_program);
                    })
                    ->whereHas('Proker',function($query)use($proker){
                        $query->where('proker_id',$proker->id);
                    });
                });

                if($cek_kegiatan->count() > 0) {
                    $kegiatan = $cek_kegiatan->first();
                }else{
                    $kegiatan = Kegiatan::create(
                        [
                            'kode'=>$value->kegiatan->kode_kegiatan,
                            'nama_kegiatan'=>$value->kegiatan->nama_kegiatan,
                        ]);
                }
                // dd($kegiatan);
                $cek_proker_kegiatan = ProkerKegiatan::whereHas('Kegiatan',function($query)use($value){
                    $query->where('kode',$value->kegiatan->kode_kegiatan);
                })->whereHas('ProkerProgram',function($query)use($proker,$value){
                    $query->whereHas('Proker',function($query)use($proker){
                        $query->where('proker_id',$proker->id);
                    });
                });

                if($cek_proker_kegiatan->count() > 0) {
                    $proker_kegiatan = $cek_proker_kegiatan->first();
                }else{
                    $proker_kegiatan = ProkerKegiatan::create([
                        'proker_program_id'=>$proker_program->id,
                        'kegiatan_id'=>$kegiatan->id,
                    ]);
                }

                $sumber_dana = SumberDana::firstOrCreate([
                    'sumber_dana'=>$value->sumber_dana->sumber_dana,
                ],[
                    'sumber_dana'=>$value->sumber_dana->sumber_dana,
                ]);

                foreach ($value->kegiatan->sub_kegiatan as $keys => $values) {
                    $cek_sub_kegiatan = SubKegiatan::where('kode',$values->kode_sub_kegiatan)
                    ->whereHas('ProkerKegiatan',function($query)use($proker){
                        $query->whereHas('ProkerProgram',function($query)use($proker){
                            $query->whereHas('Proker',function($query)use($proker){
                                $query->where('proker_id',$proker->id);
                            });
                        });

                    });

                    if ($cek_sub_kegiatan->count() > 0) {
                       $sub_kegiatan = $cek_sub_kegiatan->first();
                    }else{
                    $sub_kegiatan = SubKegiatan::create(
                        [
                           'kode'=>$values->kode_sub_kegiatan,
                           'nama_sub_kegiatan'=>$values->nama_sub_kegiatan,
                       ]);
                    }

                    $cek_proker_sub_kegiatan = ProkerSubKegiatan::where([
                        'sub_kegiatan_id'=>$sub_kegiatan->id,
                        'bagian'=>$bidang->unit,
                    ])
                    ->whereHas('ProkerKegiatan',function($query)use($proker,$proker_kegiatan){
                        $query->where('proker_kegiatan_id',$proker_kegiatan)
                        ->whereHas('ProkerProgram',function($query)use($proker){
                            $query->whereHas('Proker',function($query)use($proker){
                                $query->where('proker_id',$proker->id);
                            });
                        });
                    });

                    if ($cek_proker_sub_kegiatan->count() > 0) {
                        $proker_sub_kegiatan = $cek_proker_sub_kegiatan->first();
                    }else{
                        $proker_sub_kegiatan = ProkerSubKegiatan::create([
                            'kpa_id'=>$kpa->id,
                            'proker_kegiatan_id'=>$proker_kegiatan->id,
                            'sub_kegiatan_id'=>$sub_kegiatan->id,
                            'user_id'=>$user->id,
                            'sumber_dana_id'=>$sumber_dana->id,
                            'bagian'=>$bidang->unit,
                        ]);
                    }

                    foreach ($values->sub1 as $sub_keys => $sub_keg) {
                        foreach ($sub_keg->item as $item_key => $item) {
                            $rincian_kegiatan = RincianKegiatan::create([
                                'proker_sub_kegiatan_id'=>$proker_sub_kegiatan->id,
                                'kode_rekening'=>$sub_keg->kode_rekening,
                                'uraian'=>$item->uraian,
                                'volume'=>$item->volume,
                                'satuan'=>$item->satuan,
                                'pagu'=>Str::replace('.','',Str::replace('Rp','',$item->jumlah_harga)),
                            ]);

                            // if (!$rincian_kegiatan->wasRecentlyCreated) {
                                $rincian_kegiatan->RealisasiRincianKegiatan()->create([
                                    'metode'=>$sub_keg->metode,
                                    'nilai_kontrak'=>$rincian_kegiatan->pagu,
                                ]);
                            // }
                        }
                    }
                }
                //end loop untuk Proker
                //begin loop for Dup Data
                foreach ($data as $key => $value) {
                    $opd = Opd::firstOrCreate([
                        'kode'=>$value->opd->kode_opd,
                    ],[
                        'kode'=>$value->opd->kode_opd,
                        'nama_perangkat_daerah'=>$value->opd->nama_opd,
                        'kategori'=>$dinas[$value->opd->kategori_opd],
                    ]);
                
                    $kpa = Kpa::firstOrCreate([
                        'nip'=>$value->kpa->nip,
                        'opd_id'=>$opd->id
                    ],[
                        'nama'=>$value->kpa->nama_kpa,
                        'bidang'=>$value->kpa->bagian,
                        'nip'=>$value->kpa->nip,
                        'telpon'=>$value->kpa->telpon,
                        'status'=>strval($value->kpa->status),
                        'opd_id'=>$opd->id
                    ]);

                    $ppk = Ppk::firstOrCreate([
                        'nip'=>$value->ppt->nip,
                    ],[
                        'nama'=>$value->ppt->nama_pptk,
                        'nip'=>$value->ppt->nip,
                        'telpon'=>$value->ppt->telpon,
                        'status'=>strval($value->ppt->status),
                        'opd_id'=>$opd->id,
                    ]);

                    $bidang = Bidang::firstOrCreate([
                        'kode'=>$value->bidang->kode
                    ],[
                        'kode'=>$value->bidang->kode,
                        'unit'=>$value->bidang->unit,
                        'singkatan'=>$value->bidang->singkatan,
                    ]);

                    $user = User::firstOrCreate([
                        'nip'=>$value->user->nip,
                    ],[
                        'level_id'=>Level::where(['nama_level'=>'User OPD'])->firstOrFail()->id,
                        'opd_id'=>$opd->id,
                        'username'=>$value->user->username,
                        'nama'=>$value->user->nama,
                        'nip'=>$value->user->nip,
                        'telpon'=>$value->user->telpon,
                        'bidang'=>$bidang->unit,
                        'email'=>$value->user->email,
                        'status'=>strval($value->user->status),
                        'password'=>\Hash::make('12345678'),
                    ]);

                    $program = DupProgram::firstOrCreate(
                        [
                            'kode'=>$value->program->kode_program,
                            'tahun'=>$value->program->tahun_program,
                            'opd_id'=>$opd->id,
                        ],
                        [
                            'kode'=>$value->program->kode_program,
                            'nama_program'=>strtoupper($value->program->nama_program),
                            'tahun'=>$value->program->tahun_program,
                            'opd_id'=>$opd->id,
                        ]);
                        
                        $cek_kegiatan = DupKegiatan::where('kode',$value->kegiatan->kode_kegiatan)
                        ->whereHas('program',function($query)use($program){
                            $query->where('program_id',$program->id);
                        });

                        if ($cek_kegiatan->count() > 0) {
                            $kegiatan = $cek_kegiatan->first();
                        }else{
                            $kegiatan = DupKegiatan::create(
                                [
                                    'kode'=>$value->kegiatan->kode_kegiatan,
                                    'nama_kegiatan'=>$value->kegiatan->nama_kegiatan,
                                    'program_id'=>$program->id,
                                ]);
                        }

                        $sumber_dana = SumberDana::firstOrCreate([
                            'sumber_dana'=>$value->sumber_dana->sumber_dana,
                        ],[
                            'sumber_dana'=>$value->sumber_dana->sumber_dana,
                        ]);

                    foreach ($value->kegiatan->sub_kegiatan as $keys => $values) {
                        $cek_sub_kegiatan = DupSubKegiatan::where([
                            'kode'=>$values->kode_sub_kegiatan,
                            'bagian'=>$bidang->unit,
                        ])
                        ->whereHas('kegiatan.program',function($query)use($program){
                            $query->where('program_id',$program->id);
                        });

                        if ($cek_sub_kegiatan->count() > 0) {
                            $sub_kegiatan = $cek_sub_kegiatan->first();
                        }else{
                            $sub_kegiatan = DupSubKegiatan::create(
                                [
                                    'kode'=>$values->kode_sub_kegiatan,
                                    'nama_sub_kegiatan'=>$values->nama_sub_kegiatan,
                                    'kpa_id'=>$kpa->id,
                                    'user_id'=>$user->id,
                                    'sumber_dana_id'=>$sumber_dana->id,
                                    'bagian'=>$bidang->unit,
                                    'kegiatan_id'=>$kegiatan->id,
                                ]);
                        }

                        foreach ($values->sub1 as $sub_keys => $sub_keg) {
                            $rincian_kegiatan = DupRincianKegiatan::create(
                            // [
                            //     'kode_rekening'=>$sub_keg->kode_rekening,
                            //     // 'metode'=>$sub_keg->metode,
                            //     'sub_kegiatan_id'=>$sub_kegiatan->id,
                            // ],
                            [
                                'kode_rekening'=>$sub_keg->kode_rekening,
                                'metode'=>$sub_keg->metode,
                                'sub_kegiatan_id'=>$sub_kegiatan->id,
                            ]);
                            foreach ($sub_keg->item as $item_key => $item) {
                                DupItem::create(
                                // [
                                //     'pagu'=>Str::replace('.','',Str::replace('Rp','',$item->jumlah_harga)),
                                //     'uraian'=>$item->uraian,
                                //     'satuan'=>$item->satuan,
                                //     'volume'=>$item->volume,
                                //     'rincian_kegiatan_id'=>$rincian_kegiatan->id,
                                // ],
                                [
                                    'pagu'=>Str::replace('.','',Str::replace('Rp','',$item->jumlah_harga)),
                                    'uraian'=>$item->uraian,
                                    'satuan'=>$item->satuan,
                                    'volume'=>$item->volume,
                                    'rincian_kegiatan_id'=>$rincian_kegiatan->id,
                                ]);
                            }
                        }
                    }
                }
                //end loop for dup data
            }
            DB::commit();
        }catch(\Exception $e) {
            DB::rollback();
            dd($e);
        }
        
    }
}

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