steps = collect([]); $this->modules = $modules; $this->primarySteps(); $this->modularSteps(); } /** * @return array */ public function getModules(): array { return $this->modules; } /** * @return Collection */ public function getSteps(): Collection { return $this->steps->sortBy('sequence'); } public function modularSteps(){ $modularSteps = ModularStep::with('moduleGroups.steps')->whereIn('reference_id', $this->getModules())->get(); foreach ($modularSteps as $module){ foreach($module->moduleGroups as $group){ $i = 0; foreach ($group->steps as $step){ $i++; $sequence = Constants::ORDER_PRIMARY_STEPS[$group->previous]['sequence'] + ($i/10); $this->addSteps((new OrderStepObject(false, $step->reference_id, $sequence))); } } } } private function primarySteps(){ PrimaryStep::all()->map(function ($step){ $this->addSteps((new OrderStepObject( true, $step->reference_id, Constants::ORDER_PRIMARY_STEPS[$step->reference_id]['sequence']))); }); } private function addSteps(OrderStepObject $step){ $this->steps->push([ 'primary' => $step->isPrimary(), 'reference_id' => $step->getReferenceId(), 'sequence' => $step->getSequence() ]); } }