Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Imports\PetaOkupasiV3;
- ini_set('memory_limit', '1000M');
- use App\Models\AreaFungsiPetaOkupasi;
- use App\Models\MAreaFungsi;
- use App\Models\MasterAreaFungsiParent;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\DB;
- use Maatwebsite\Excel\Concerns\OnEachRow;
- use Maatwebsite\Excel\Concerns\WithBatchInserts;
- use Maatwebsite\Excel\Concerns\WithStartRow;
- use Maatwebsite\Excel\Events\AfterImport;
- use Maatwebsite\Excel\Row;
- class AreaFungsiSheetImport implements OnEachRow, WithBatchInserts, WithStartRow
- {
- // Properti $keyCache digunakan untuk menyimpan cache.
- protected $keyCache;
- // Properti $idVersion digunakan untuk menyimpan versi ID yang digunakan dalam sistem.
- protected $idVersion;
- // Konstanta MODULE_CODE digunakan untuk menyimpan kode modul yang berkaitan dengan area, fungsi, dan peta okupasi.
- const MODULE_CODE = 'area_fungsi_peta_okupasi';
- protected $modelMasterAreaFungsi;
- protected $modelMasterAreaFungsiParent;
- protected $modelAreaFungsiPO;
- /**
- * Konstruktor kelas.
- *
- * @param string $keyCache untuk penyimpanan cache.
- * @param string $idVersion Versi ID yang digunakan dalam sistem.
- */
- public function __construct(string $keyCache, string $idVersion)
- {
- $this->keyCache = $keyCache;
- $this->idVersion = $idVersion;
- $modelMasterAreaFungsi = new MAreaFungsi();
- $this->modelMasterAreaFungsi = $modelMasterAreaFungsi;
- $modelMasterAreaFungsiParent = new MasterAreaFungsiParent();
- $this->modelMasterAreaFungsiParent = $modelMasterAreaFungsiParent;
- $modelAreaFungsiPO = new AreaFungsiPetaOkupasi();
- $this->modelAreaFungsiPO = $modelAreaFungsiPO;
- }
- public function getAllMasterAreaFungsi()
- {
- $results = [];
- foreach ($this->modelMasterAreaFungsi->get() as $val) {
- $results[$val->kode] = $val;
- }
- return $results;
- }
- public function onRow(Row $row)
- {
- DB::beginTransaction();
- try {
- $row = $row->toArray();
- $idParent = '';
- $kodeAreaFungsi = trim($row[0]);
- $judulAreaFungsi = $row[1];
- $deskripsiAreaFungsi = $row[2];
- $levelAreaFungsi = $row[3];
- $kodeIndukAreaFungsi = $row[4];
- $dbExistingAreaFungsi = $this->getAllMasterAreaFungsi();
- $keyColumn = [
- 'kode' => $kodeAreaFungsi,
- ];
- $updateColumn = [
- 'judul' => $judulAreaFungsi,
- 'deskripsi' => $deskripsiAreaFungsi,
- 'is_aktif' => true,
- 'created_at' => Carbon::now(),
- 'updated_at' => Carbon::now(),
- 'created_by' => getUser(),
- 'updated_by' => getUser(),
- ];
- $instData = $this->modelMasterAreaFungsi::updateOrCreate($keyColumn,
- $updateColumn);
- if (array_key_exists($kodeIndukAreaFungsi, $dbExistingAreaFungsi)) {
- $dataAreaFungsi = $dbExistingAreaFungsi[$kodeIndukAreaFungsi];
- $idParent = $dataAreaFungsi['id'];
- }
- $keyColumn2 = [
- 'id_area_fungsi' => $idParent,
- 'id_child_fungsi' => $instData->id,
- ];
- $updateColumn2 = [
- 'id_child_fungsi' => $instData->id,
- ];
- $this->modelMasterAreaFungsiParent::updateOrCreate(
- $keyColumn2,
- $updateColumn2,
- );
- $keyColumn3 = [
- 'id_version' => $this->idVersion,
- 'id_area_fungsi' => $instData->id,
- ];
- $updateColumn3 = [
- 'id_area_fungsi' => $instData->id,
- 'id_parent_area_fungsi' => ! empty($idParent) ? $idParent : null,
- 'id_version' => $this->idVersion,
- 'kode' => ! empty($kodeAreaFungsi) ? $kodeAreaFungsi : '-',
- 'judul' => ! empty($judulAreaFungsi) ? $judulAreaFungsi : '-',
- 'is_aktif' => true,
- 'created_at' => Carbon::now(),
- 'updated_at' => Carbon::now(),
- 'created_by' => getUser(),
- 'updated_by' => getUser(),
- ];
- $this->modelAreaFungsiPO::updateOrCreate(
- $keyColumn3,
- $updateColumn3,
- );
- DB::commit();
- return true;
- } catch (\Exception $e) {
- DB::rollback();
- return $e;
- }
- }
- public function batchSize(): int
- {
- return 1000;
- }
- /**
- * Mendaftarkan events yang terkait dengan fungsi.
- *
- * @return array Daftar peristiwa yang didaftarkan beserta callable-nya.
- */
- public function registerEvents(): array
- {
- return [
- // Array callable, merujuk ke metode statis.
- AfterImport::class => [self::class, 'afterImport'],
- ];
- }
- /**
- * Metode yang dipanggil setelah proses impor selesai.
- *
- * @param AfterImport $event Objek peristiwa setelah impor.
- * @return bool Status keberhasilan penyelesaian proses impor.
- */
- public static function afterImport(AfterImport $event)
- {
- return true;
- }
- public function startRow(): int
- {
- return 2;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement