where('status', 1)->pluck('agency_id')->toArray(); $activityForms = ActivityForm::where('inventory_year', $inventoryYear) ->whereNotNull('agency_id')->whereIn('agency_id', $produsen)->rowActive()->get(); $formIds = $activityForms->pluck('id')->toArray(); $distinctActivity = ActivityForm::where('inventory_year', $inventoryYear) ->whereNotNull('agency_id')->whereIn('agency_id', $produsen)->rowActive() ->select('sector', 'form_code', 'inventory_year')->distinct()->get(); foreach ($distinctActivity as $activityForm) { ActivityForm::rowActive() ->where('sector', $activityForm->sector)->where('form_code', $activityForm->form_code) ->where('inventory_year', $activityForm->inventory_year) ->whereNull('agency_id')->each(function ($form) { $formDetail = ActivityFormDetail::where('form_id', $form->id)->get(); foreach ($formDetail as $item) { $this->delete($item); }; $this->delete($form); }); $dataForm = [ 'sector' => $activityForm->sector, 'form_code' => $activityForm->form_code, 'inventory_year' => $activityForm->inventory_year, 'verification_status' => 'unverified', 'validation_status' => 'unvalidated', 'lock_status' => 'open', ]; $mainActivityForm = $this->create($dataForm, ActivityForm::class); logUserActivity(ActivityType::PRODUSEN_CALCULATE, $mainActivityForm->id); $activityFormDetails = ActivityFormDetail::whereIn('form_id', $formIds) ->whereHas('form', function ($query) use ($activityForm) { $query->where('sector', $activityForm->sector) ->where('form_code', $activityForm->form_code) ->where('inventory_year', $activityForm->inventory_year); }) ->rowActive()->groupBy('activity_year', 'activity_code', 'activity_unit_code') ->selectRaw('activity_year, activity_code, activity_unit_code, SUM(activity_value) AS activity_value') ->whereIn('activity_year', $activityYears) ->get(); foreach ($activityFormDetails as $detail) { $dataFormDetail = [ 'form_id' => $mainActivityForm->id, 'activity_year' => $detail->activity_year, 'activity_code' => $detail->activity_code, 'activity_unit_code' => $detail->activity_unit_code, 'activity_value' => $detail->activity_value, ]; $this->createOrUpdate([ 'form_id' => $mainActivityForm->id, 'activity_year' => $detail->activity_year, 'activity_code' => $detail->activity_code, 'activity_unit_code' => $detail->activity_unit_code, 'row_status' => 1, ], $dataFormDetail, ActivityFormDetail::class); } } DB::commit(); return true; } catch (\Exception $e) { DB::rollBack(); throw $e; } } }