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