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

<?php

namespace App\Imports;


use Illuminate\Support\Collection;
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\Notifikasi;

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;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\ToCollection;


class ImportSipd implements ToCollection, WithHeadingRow
{

    // private $tipe;

    // public function __construct($tipe)
    // {
    //     $this->tipe = $tipe;
    // }

    /**
    * @param Collection $collection
    */
    public function collection(collection $rows) 
    {
        // dd($rows->count());
        // dd($rows->pluck('nama_sumber_dana')->unique());
        // dd($rows->pluck('nama_sumber_dana')->unique());

        // $tipe = $this->tipe;
        $previous_sub_kegiatan_name = null;  
        $batas_anggaran = 0;  

        function extractNumbersAndText($input)
        {
            // Menggunakan regular expression untuk mengekstrak angka dan teks
            preg_match_all('/(\d+)\s*(\D*)/', $input, $matches, PREG_SET_ORDER);

            $results = [];

            foreach ($matches as $match) {
                // $match[1] adalah angka dan $match[2] adalah teks setelah angka
                $results[] = [
                    'number' => $match[1],
                    'text' => trim($match[2])
                ];
            }

            return $results;
        }


        function trimSpaces($string) {
            return trim($string, " \t\n\r\0\x0B");
        }

        function jaccardSimilarity($string1, $string2) {
            $set1 = array_unique(explode(' ', $string1));
            $set2 = array_unique(explode(' ', $string2));
        
            $intersection = count(array_intersect($set1, $set2));
            $union = count(array_unique(array_merge($set1, $set2)));
        
            return $union > 0 ? $intersection / $union : 0;
        } 

        // Fungsi untuk memproses string
        function processString($input) {
            // Memisahkan angka dan kalimat menggunakan regex
            preg_match_all('/(\d+)\s*([A-Za-z]+)/', $input, $matches);

            $total = 1; // Untuk menyimpan hasil kali angka
            $kalimat = []; // Untuk menyimpan kalimat

            // Mengiterasi hasil pencocokan
            foreach ($matches[1] as $index => $angka) {
                $total *= (int)$angka; // Mengalikan angka
                $kalimat[] = $matches[2][$index]; // Menyimpan kalimat
            }

            // Jika kalimat kosong, tetapkan "paket" sebagai default
            if (empty($kalimat)) {
                $kalimat[] = 'paket';
            }

            return [
                'total' => $total,
                'kalimat' => $kalimat
            ];
        }

        foreach ($rows as $row => $data) {
            // dd($data);

            if ($data['total_harga'] != 0 and $data['total_harga'] != '0' and $data['total_harga'] != "" and $data['total_harga'] != null) {
                $year = '2025';

                $opd = Opd::where('kode', $data['kode_skpd'])->first();

                if (!$opd) {
                    $opd = Opd::create([
                        'nama_perangkat_daerah' => $data['nama_skpd'],
                        'kode' => trim($data['kode_skpd']),
                    ]);
                }

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

                $program = Program::firstOrCreate(
                    [
                        'kode' => $data['kode_program']
                    ],
                    [
                        'nama_program' => trim(substr($data['nama_program'], 0, 255))
                    ]
                );

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

                $kegiatan = Kegiatan::firstOrCreate(
                    [
                        'kode' => $data['kode_kegiatan']
                    ],
                    [
                        'nama_kegiatan' => trim(substr($data['nama_kegiatan'], 0, 255))
                    ]
                );

                $proker_kegiatan = ProkerKegiatan::firstOrCreate(
                    [
                        'proker_program_id' => $proker_program->id,
                        'kegiatan_id' => $kegiatan->id
                    ],
                );

                $sub_kegiatan = SubKegiatan::firstOrCreate(
                    [
                        'kode' => $data['kode_sub_kegiatan']
                    ],
                    [
                        'nama_sub_kegiatan' => trim(substr($data['nama_sub_kegiatan'], 0, 255))
                    ]
                );

                // dd($data['nama_sumber_dana']);

                if ($data['sumber_dana'] == null ) {
                    $sumber_dana = 'PAD';
                }elseif (trim($data['sumber_dana']) == 'PENDAPATAN ASLI DAERAH (PAD)') {
                    $sumber_dana = 'PAD';
                }elseif (trim($data['sumber_dana']) == 'Pendapatan dari BLUD') {
                    $sumber_dana = 'PAD';
                }elseif (trim($data['sumber_dana']) == 'Pajak Daerah') {
                    $sumber_dana = 'PAD';
                }elseif (trim($data['sumber_dana']) == 'Bantuan Keuangan Khusus dari Pemerintah Daerah Provinsi') {
                    $sumber_dana = 'BanKeu';
                }elseif (trim($data['sumber_dana']) == 'Dana Transfer Khusus-Dana Alokasi Khusus Fisik') {
                    $sumber_dana = 'DAK Fisik';
                }elseif (trim($data['sumber_dana']) == 'DAK Non Fisik-Fasilitasi Penanaman Modal') {
                    $sumber_dana = 'DAK Non Fisik';
                }elseif (trim($data['sumber_dana']) == 'Dana Transfer Umum-Dana Bagi Hasil') {
                    $sumber_dana = 'DAU';
                }elseif (trim($data['sumber_dana']) == 'Dana Transfer Umum-Dana Alokasi Umum') {
                    $sumber_dana = 'DAU';
                }elseif (trim($data['sumber_dana']) == 'DAU Tambahan Dukungan Pendanaan Bagi Kelurahan') {
                    $sumber_dana = 'DAU';
                }else{
                    $sumber_dana = 'PAD';
                }

                $sumber_dana = SumberDana::where('sumber_dana', $sumber_dana)->first();

                // if ($data['total_harga'] == 0 or $data['total_harga'] == '0' or $data['total_harga'] == "") {
                //     $pagu = $data['harga_satuan'];
                // }else {
                //     $pagu = $data['total_harga'];
                // }

                $pagu = $data['total_harga'];

                // if ($pagu == null) {
                //     $pagu == 1;
                // }

                if ($previous_sub_kegiatan_name == trim($data['nama_sub_kegiatan'])) {
                    $batas_anggaran += $pagu;
                } else {
                    $batas_anggaran = $pagu;
                }

                $previous_sub_kegiatan_name = trim($data['nama_sub_kegiatan']);

                $prokerSubKegiatan = ProkerSubKegiatan::firstOrCreate(
                    [
                        'proker_kegiatan_id' => $proker_kegiatan->id,
                        'sub_kegiatan_id' => $sub_kegiatan->id,
                        'bagian' => $data['nama_unit_skpd'],
                    ],
                    [
                        'sumber_dana_id' => $sumber_dana->id,
                        'kpa_id' => null,
                        'user_id' => null,
                        'bagian' => $data['nama_unit_skpd'],
                        // 'batas_anggaran' => $batas_anggaran,
                    ]
                );
                
                $volume_satuan = processString($data['koefisien']);

                if ($pagu >= 15000000000) {
                    $umkm = 0;
                }else{
                    $umkm = 1;
                }

                // dd($data);

                $rincian_kegiatan = RincianKegiatan::create([
                    'proker_sub_kegiatan_id' => $prokerSubKegiatan->id,
                    'kode_rekening' => trim($data['kode_akun']),
                    'uraian' => trim(substr($data['spesifikasi'] ?? $data['nama_standar_harga'] ?? $data['keterangan_belanja'], 0, 255)),
                    'volume' => $volume_satuan['total'],
                    'satuan' => implode(' ', $volume_satuan['kalimat']),
                    'pagu' => $pagu,
                    'volume_murni' => $volume_satuan['total'],
                    'satuan_murni' => implode(' ', $volume_satuan['kalimat']),
                    'pagu_murni' => $pagu,
                    'tanggal_mulai_pelaksanaan'=> null,
                    'tanggal_akhir_pelaksanaan'=> null,
                    'rincian_sub_bidang_id' => null,
                    'sumber_dana_id' => $sumber_dana->id,
                    'umkm' => $umkm,
                    'pengadaan' => 1,
                    'kategori' => 'non-fisik',
                    'status_mendesak' => 0,
                    'kunci_rincian' => 0,
                    'jenis_umk_id' => null,
                ]);

                $rincian_kegiatan->RealisasiRincianKegiatan()->create([
                    'rincian_kegiatan_id'=> $rincian_kegiatan->id,
                    'metode'=> 'swakelola',
                    'nilai_kontrak'=> 0,
                    'pdn'=> 1,
                ]);
            }
            
            
            
            // if (
            //     $data['koefisien_murni'] == "" &&
            //     $data['harga_satuan_murni'] == "" &&
            //     $data['total_harga_murni'] == "" &&
            //     $data['total_harga'] != "0" &&
            //     $data['total_harga'] != "0"
            // ) {
            //     // dd($sumber_dana->id);
            //     $rincian_kegiatan = RincianKegiatan::create([
            //         'proker_sub_kegiatan_id' => $prokerSubKegiatan->id,
            //         'kode_rekening' => trim($data['kode_akun']),
            //         'uraian' => trim(substr($data['spesifikasi'] ?? $data['nama_standar_harga'] ?? $data['keterangan_belanja'], 0, 255)),
            //         'volume' => $volume_satuan['total'],
            //         'satuan' => implode(' ', $volume_satuan['kalimat']),
            //         'pagu' => $pagu ?? 1,
            //         'volume_murni' => $volume_satuan['total'],
            //         'satuan_murni' => implode(' ', $volume_satuan['kalimat']),
            //         'pagu_murni' => $pagu ?? 1,
            //         'tanggal_mulai_pelaksanaan'=> null,
            //         'tanggal_akhir_pelaksanaan'=> null,
            //         'rincian_sub_bidang_id' => null,
            //         'sumber_dana_id' => $sumber_dana->id,
            //         'umkm' => 1,
            //         'pengadaan' => 1,
            //     ]);


            //     $rincian_kegiatan->RealisasiRincianKegiatan()->create([
            //         'rincian_kegiatan_id'=> $rincian_kegiatan->id,
            //         'metode'=> 'swakelola',
            //         'nilai_kontrak'=> $pagu ?? 1,
            //         'pdn'=> 1,
            //     ]);
            // }

            // if ($prokerSubKegiatan->pagu > $prokerSubKegiatan->batas_anggaran) {
            //     $link = '/proker/'.$prokerSubKegiatan->id;

            //     $notifikasi = Notifikasi::where('link_tautan', $link)->where('status_baca', 0)->orderBy('created_at', 'DESC')->first();

            //     if (!$notifikasi) {
            //         $notifikasi = Notifikasi::create([
            //             'deskripsi' => ' Pagu Sub Kegiatan tidak sesuai dari batas pagu '. $prokerSubKegiatan->SubKegiatan->nama_sub_kegiatan,
            //             'link_tautan' => $link,
            //             'link_tautan' => $link,
            //             'status_baca' => 0
            //         ]);
            //     }
                
            // }else {
            //     $link = '/proker/'.$prokerSubKegiatan->id;
                
            //     $notifikasi = Notifikasi::where('link_tautan', $link)->where('status_baca', 0)->orderBy('created_at', 'DESC')->first();

            //     if (!$notifikasi) {
            //         $notifikasi = Notifikasi::create([
            //             'deskripsi' => ' Pagu Sub Kegiatan tidak sesuai dari batas pagu '. $prokerSubKegiatan->SubKegiatan->nama_sub_kegiatan,
            //             'link_tautan' => $link,
            //             'link_tautan' => $link,
            //             'status_baca' => 0
            //         ]);
            //     }
            // }
            

            


            // $rincianKegiatanAll = RincianKegiatan::where('proker_sub_kegiatan_id', $prokerSubKegiatan->id)->get();

            // $maxSimilarity = 0;
            // $rincianKegiatan = null;

            // // foreach ($rincianKegiatanAll as $record) {
            // //     $uraian = $record->uraian;

            // //     $similarity1 = jaccardSimilarity(trimSpaces($data['nama_paketkelompok']), $uraian);

            // //     $maxPercentage = $similarity1;

            // //     $threshold = 0.2; 

            // //     if ($maxPercentage >= $threshold && $maxPercentage > $maxSimilarity) {
            // //         $maxSimilarity = $maxPercentage;
            // //         $rincianKegiatan = $record;
            // //     }
            // // }


            // // dd($rincianKegiatan);

            // if ($rincianKegiatan == null or $tipe == 0) {
            //     if ($tipe == 0) {
            //         # murni
            //         $rincian_kegiatan = RincianKegiatan::create([
            //             'proker_sub_kegiatan_id' => $prokerSubKegiatan->id,
            //             'kode_rekening' => trim($data['kode_rekening']),
            //             'uraian' => trim(substr($data['nama_paketkelompok']. ' ['. $data['nama_rekening'] .']', 0, 255)),
            //             'volume' => 0,
            //             'satuan' => $data['paketkelompok'],
            //             'pagu' => $data['pagu'],
            //             'volume_murni' => 0,
            //             'satuan_murni' => $data['paketkelompok'],
            //             'pagu_murni' => $data['pagu'],
            //             'tanggal_mulai_pelaksanaan'=> null,
            //             'tanggal_akhir_pelaksanaan'=> null,
            //             'rincian_sub_bidang_id' => null,
            //             'sumber_dana_id' => $sumber_dana->id,
            //         ]);
            //     }elseif ($tipe == 1) {
            //         # pergeseran
            //         $koefisien = extractNumbersAndText($data['koefisien']);
            //         // dd($koefisien['0']);
            //         $rincian_kegiatan = RincianKegiatan::create([
            //             'proker_sub_kegiatan_id' => $prokerSubKegiatan->id,
            //             'kode_rekening' => trim($data['kode_standar_harga']),
            //             'uraian' => trim(substr($data['spesifikasi'], 0, 255)),
            //             'volume' => $koefisien['0']['number'],
            //             'satuan' => $koefisien['0']['text'],
            //             'pagu' => $data['total_harga'],
            //             'volume_murni' => 0,
            //             'satuan_murni' => 0,
            //             'pagu_murni' => 0,
            //             'volume_pergeseran' => $koefisien['0']['number'],
            //             'satuan_pergeseran' => $koefisien['0']['text'],
            //             'pagu_pergeseran' => $data['total_harga'],
            //             'tanggal_mulai_pelaksanaan'=> null,
            //             'tanggal_akhir_pelaksanaan'=> null,
            //             'rincian_sub_bidang_id' => null,
            //             'sumber_dana_id' => $sumber_dana->id,
            //         ]);

            //         if ($previousProkerSubKegiatan && $previousProkerSubKegiatan->id == $prokerSubKegiatan->id) {
            //             $prokerSubKegiatan->batas_anggaran += $data['total_harga'];
            //         } else {
            //             $prokerSubKegiatan->batas_anggaran = 0;
            //             $link = '/proker/'.$prokerSubKegiatan->id;
            //             $notifikasi = Notifikasi::create([
            //                 'deskripsi' => ' Pagu Sub Kegiatan tidak sesuai dari batas pagu '. $prokerSubKegiatan->SubKegiatan->nama_sub_kegiatan,
            //                 'link_tautan' => $link,
            //                 'status_baca' => 0
            //             ]);
            //         }
                
            //         $prokerSubKegiatan->save();
            //         $previousProkerSubKegiatan = $prokerSubKegiatan;
            //     }elseif ($tipe == 2) {
            //         # perubahan
            //         $rincian_kegiatan = RincianKegiatan::create([
            //             'proker_sub_kegiatan_id' => $prokerSubKegiatan->id,
            //             'kode_rekening' => trim($data['kode_rekening']),
            //             'uraian' => trim(substr($data['nama_paketkelompok'], 0, 255)),
            //             'volume' => 0,
            //             'satuan' => $data['paketkelompok'],
            //             'pagu' => $data['pagu'],
            //             'volume_murni' => 0,
            //             'satuan_murni' => 0,
            //             'pagu_murni' => 0,
            //             'volume_perubahan' => 0,
            //             'satuan_perubahan' => $data['paketkelompok'],
            //             'pagu_perubahan' => $data['pagu'],
            //             'tanggal_mulai_pelaksanaan'=> null,
            //             'tanggal_akhir_pelaksanaan'=> null,
            //             'rincian_sub_bidang_id' => null,
            //             'sumber_dana_id' => $sumber_dana->id,
            //         ]);
            //     }else{
            //         # perubahan pergeseran
            //         $rincian_kegiatan = RincianKegiatan::create([
            //             'proker_sub_kegiatan_id' => $prokerSubKegiatan->id,
            //             'kode_rekening' => trim($data['kode_rekening']),
            //             'uraian' => trim(substr($data['nama_paketkelompok'], 0, 255)),
            //             'volume' => 0,
            //             'satuan' => $data['paketkelompok'],
            //             'pagu' => $data['pagu'],
            //             'volume_murni' => 0,
            //             'satuan_murni' => $data['paketkelompok'],
            //             'pagu_murni' => $data['pagu'],
            //             'volume_perubahan_pergeseran' => 0,
            //             'satuan_perubahan_pergeseran' => $data['paketkelompok'],
            //             'pagu_perubahan_pergeseran' => $data['pagu'],
            //             'tanggal_mulai_pelaksanaan'=> null,
            //             'tanggal_akhir_pelaksanaan'=> null,
            //             'rincian_sub_bidang_id' => null,
            //             'sumber_dana_id' => $sumber_dana->id,
            //         ]);
            //     }
            
            //     $rincian_kegiatan->RealisasiRincianKegiatan()->create([
            //         'rincian_kegiatan_id'=> $rincian_kegiatan->id,
            //         'metode'=> 'swakelola',
            //         'nilai_kontrak'=> $data['total_harga'],
            //     ]);

            // } elseif ($rincianKegiatan->status_gabungan == 1) {
                
            //     $detailrinciankegiatanall = DetailRincianKegiatan::where('rincian_kegiatan_id', $rincianKegiatan->id)->get();

            //     $maxSimilarity = 0;

            //     foreach ($detailrinciankegiatanall as $record) {
            //         $uraian = $record->uraian;

            //         $similarity1 = jaccardSimilarity(trimSpaces($data['nama_paketkelompok']), $uraian);

            //         $maxPercentage = $similarity1;

            //         $threshold = 0.2; 

            //         if ($maxPercentage >= $threshold && $maxPercentage > $maxSimilarity) {
            //             $maxSimilarity = $maxPercentage;
            //             $detailrincianKegiatan = $record;

            //             $detailrincianKegiatan->update(['volume' => 0]);
            //             $detailrincianKegiatan->update(['satuan' => $data['paketkelompok']]);
            //             $detailrincianKegiatan->update(['pagu' => $data['pagu']]);
            //         }
            //     }


            // } else{

            //     if ($tipe == 0) {
            //         # murni
            //         $rincianKegiatan->update(['volume_murni' => 0 ]);
            //         $rincianKegiatan->update(['satuan_murni' => $data['paketkelompok']]);
            //         $rincianKegiatan->update(['pagu_murni' => $data['pagu']]);
            //     }elseif ($tipe == 1) {
            //         # pergeseran
            //         $rincianKegiatan->update(['volume_pergeseran' => 0 ]);
            //         $rincianKegiatan->update(['satuan_pergeseran' => $data['paketkelompok']]);
            //         $rincianKegiatan->update(['pagu_pergeseran' => $data['pagu']]);
            //     }elseif ($tipe == 2) {
            //         # perubahan
            //         $rincianKegiatan->update(['volume_perubahan' => 0 ]);
            //         $rincianKegiatan->update(['satuan_perubahan' => $data['paketkelompok']]);
            //         $rincianKegiatan->update(['pagu_perubahan' => $data['pagu']]);
            //     }else{
            //         # perubahan pergeseran
            //         $rincianKegiatan->update(['volume_perubahan_pergeseran' => 0 ]);
            //         $rincianKegiatan->update(['satuan_perubahan_pergeseran' => $data['paketkelompok']]);
            //         $rincianKegiatan->update(['pagu_perubahan_pergeseran' => $data['pagu']]);
            //     }
            // }


            
        }
    }
}

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