Files
izyim/app/Classes/Modules/Orders/Steps/GenerateOrderSteps.php
T
2019-01-23 23:53:20 +08:00

81 lines
2.0 KiB
PHP

<?php
namespace App\Classes\Modules\Orders\Steps;
use App\Classes\Constants;
use App\Classes\Objects\Orders\OrderStepObject;
use App\Models\ModularStep;
use App\Models\PrimaryStep;
use Illuminate\Support\Collection;
class GenerateOrderSteps
{
/** @var Collection */
protected $steps;
/** @var array */
protected $modules;
/**
* GenerateOrderSteps constructor.
* @param array $modules
*/
public function __construct(array $modules)
{
$this->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()
]);
}
}