where('form_code', $code) ->where('inventory_year', $inventoryYear) ->rowActive() ->orderBy('inventory_year', 'desc'); if ($agency && $agency != 'none') { if ($agency === 'all') { // return $query->whereNotNull('agency_id')->get(); $produsen = $this->getDataApproval($sector, $code, $inventoryYear) ->where('status', 1)->pluck('agency_id')->toArray(); return $query->whereIn('agency_id', $produsen); } return $query->where('agency_id', $agency)->first(); } return $query->whereNull('agency_id')->first(); } public function getActivityFormDetails($formId, $agency = null) { if ($agency == 'all') { $results = ActivityFormDetail::whereIn('form_id', $formId) ->rowActive()->groupBy('activity_year', 'activity_code', 'activity_unit_code') ->selectRaw('activity_year, activity_code, activity_unit_code, sum(activity_value) as activity_value') ->orderBy('activity_year', 'desc')->get(); return $results; } return ActivityFormDetail::where('form_id', $formId) ->rowActive()->orderBy('activity_year', 'desc') ->get(); } public function save($sector, $code, $inventoryYear, $data, $instansi = null) { $query = ActivityForm::where('sector', $sector) ->where('form_code', $code)->where('inventory_year', $inventoryYear) ->whereNull('agency_id')->rowActive(); if ($instansi && $instansi != 'all' && $instansi != 'none') { $query->where('agency_id', $instansi); } else { $query->whereNull('agency_id'); } $activityForm = $query->first(); try { if (!$activityForm) { $instansiId = $instansi === 'all' || $instansi === 'none' ? null : $instansi; $dataForm = [ 'sector' => $sector, 'form_code' => $code, 'inventory_year' => $inventoryYear, 'verification_status' => 'unverified', 'validation_status' => 'unvalidated', 'lock_status' => 'open', 'agency_id' => $instansiId, ]; $activityForm = $this->create($dataForm); logUserActivity(ActivityType::INSERT_ACTIVITY_DATA, $activityForm->id); } else { $this->update($activityForm, []); logUserActivity(ActivityType::UPDATE_ACTIVITY_DATA, $activityForm->id); } foreach ($data as $activityCode => $activityValue) { // if (collect($activityValue)->filter(function ($value) { // return $value !== null; // })->isNotEmpty()) { $activityData = [ 'year' => $inventoryYear - 1, 'code' => $activityCode, 'value' => $activityValue ?? null ]; $this->saveDetail($activityForm, $activityData); // } } } catch (\Exception $e) { throw $e; } } public function saveDetail($activityForm, $activityData) { $activityFormDetail = ActivityFormDetail::where('form_id', $activityForm->id) ->where('activity_year', $activityData['year']) ->where('activity_code', $activityData['code']) ->rowActive() ->first(); if (!empty($activityData['value'])) { $newValue = getOriginalValue($activityData['value']); if ($activityFormDetail) { $oldValue = getFormattedValue($activityFormDetail->activity_value); if ($oldValue != $activityData['value']) { $this->update($activityFormDetail, ['activity_value' => $newValue]); } } else { $dataFormDetail = [ 'form_id' => $activityForm->id, 'activity_year' => $activityData['year'], 'activity_code' => $activityData['code'], 'activity_unit_code' => 'ha', 'activity_value' => $newValue ]; $this->create($dataFormDetail, ActivityFormDetail::class); } } else { if ($activityFormDetail) { $this->delete($activityFormDetail); } } } public function approvalKonsolidasi($form, $sector, $code, $inventoryYear, $agencyId) { $hasData = $this->getDataApproval($sector, $code, $inventoryYear, true)->where([ 'form_id' => $form->id, 'agency_id' => $agencyId, ])->rowActive()->first(); $newStatus = 1; if ($hasData) { $newStatus = $hasData->status == 1 ? 0 : 1; } $dataForm = [ 'form_id' => $form->id, 'form_sector' => $sector, 'form_code' => $code, 'inventory_year' => $inventoryYear, 'agency_id' => $agencyId, 'status' => $newStatus, ]; $this->createOrUpdate([ 'form_id' => $form->id, 'form_sector' => $sector, 'form_code' => $code, 'inventory_year' => $inventoryYear, 'agency_id' => $agencyId, ], $dataForm, ActivityApprovalKonsolidasi::class); $activityType = $newStatus == 1 ? ActivityType::APPROVAL_KONSOLIDASI : ActivityType::DISSAPPROVAL_KONSOLIDASI; logUserActivity($activityType, $form->id); } }