model = $model; } public function getAll() { return $this->model->rowActive()->orderByRowNum()->get(); } public function getRawAll() { return $this->model->rowActive()->orderByRowNum(); } public function find($id) { return $this->model->rowActive()->findOrFail($id); } public function create(array $data, $modelClass = null) { try { DB::beginTransaction(); $uuid = (string) Str::uuid(); $data['id'] = $uuid; $data['created_by'] = Auth::user()->name ?? 'superadmin'; if (!$modelClass) { $model = $this->model->create($data); } else { $model = new $modelClass; $model->fill($data); $model->save(); } DB::commit(); return $model; } catch (\Exception $e) { DB::rollBack(); throw $e; } } public function update(Model $model, array $data) { try { DB::beginTransaction(); $data['updated_by'] = Auth::user()->name; $model->update($data); DB::commit(); return $model; } catch (\Exception $e) { DB::rollBack(); throw $e; } } public function createOrUpdate(array $attributes, array $values, $modelClass = null) { try { DB::beginTransaction(); $model = $modelClass ? new $modelClass : $this->model; $record = $model->where($attributes)->first(); if ($record) { $values['updated_by'] = Auth::user()->name ?? 'superadmin'; $record->update($values); } else { $values['id'] = (string) Str::uuid(); $values['created_by'] = Auth::user()->name ?? 'superadmin'; $record = $model->create($values); } DB::commit(); return $record; } catch (\Exception $e) { DB::rollBack(); throw $e; } } public function delete(Model $model) { try { DB::beginTransaction(); $model->row_status = 0; $model->updated_at = now(); $model->updated_by = Auth::user()->name ?? 'superadmin'; $model->save(); DB::commit(); return true; } catch (\Exception $e) { DB::rollBack(); throw $e; } } public function getActivityForm($sector, $code, $inventoryYear) { return ActivityForm::where('sector', $sector) ->where('form_code', $code)->where('inventory_year', $inventoryYear)->whereNull('agency_id') ->rowActive()->orderBy('inventory_year', 'desc') ->first(); } public function getActivityFormDetails($formId) { return ActivityFormDetail::where('form_id', $formId) ->rowActive()->orderBy('activity_year', 'desc') ->get()->groupBy('activity_year'); } public function getWs($wsCode) { return ReferenceWs::select('code', 'ws_code', 'model') ->where('code', $wsCode) ->rowActive()->first(); } public static function getActivityFormDetailsByYear($inventoryYear, $activityYear, $sector, $formCode, $activityCodes = null) { $form = ActivityForm::where('inventory_year', $inventoryYear) ->where('sector', $sector) ->where('form_code', $formCode)->whereNull('agency_id') ->rowActive() ->first(); if ($form) { $query = ActivityFormDetail::where('form_id', $form->id) ->where('activity_year', $activityYear) ->rowActive(); if ($activityCodes !== null) { if (is_array($activityCodes)) { $query->whereIn('activity_code', $activityCodes); } else { $query->where('activity_code', $activityCodes); } } $activityFormDetail = $query->get(); return $activityFormDetail->isNotEmpty() ? $activityFormDetail : []; } return []; } public static function getActivityFormDetailsGroupedByYear($inventoryYear, $sector, $formCode) { $form = ActivityForm::where('inventory_year', $inventoryYear) ->where('sector', $sector)->where('form_code', $formCode)->whereNull('agency_id') ->rowActive()->orderBy('inventory_year', 'desc') ->first(); if ($form) { $query = ActivityFormDetail::where('form_id', $form->id) ->rowActive()->orderBy('activity_year', 'desc') ->get()->groupBy('activity_year'); $activityFormDetail = $query; return $activityFormDetail->isNotEmpty() ? $activityFormDetail : []; } return []; } public static function getDataSettingFormDetail($sector, $code) { $form = SettingForm::rowActive()->where('sector', $sector)->where('code', $code)->first(); if ($form) { $formDetails = SettingFormDetail::rowActive()->where('form_code', $code)->orderByRowNum()->get(); return $formDetails; } return []; } public function getGWPValues() { $gwp = ReferenceGwp::whereHas('ar', function ($query) { $query->isActive(); })->get(); return $gwp->keyBy('ghg_code'); } public function getDataApproval($sector, $code, $inventoryYear, $isRaw = false) { $query = ActivityApprovalKonsolidasi::where([ 'form_sector' => $sector, 'form_code' => $code, 'inventory_year' => $inventoryYear, ])->rowActive(); if (!$isRaw) { $query->get(); } return $query; } }