canUpdateCurrentStep = $canUpdateCurrentStep; $this->updatesCurrentStep = $updatesCurrentStep; $this->fetchesOrder = $fetchesOrder; $this->fetchesOrderSteps = $fetchesOrderSteps; } public function execute(int $orderId, string $currentStep){ $order_object = new OrderObject(0, '', '', 0, 0, $currentStep, $orderId,0,0); $this->canUpdateCurrentStep->passes($order_object); $order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]); //Count steps / obligations that pending $order_steps_processing = $this->fetchesOrderSteps->getRepository()->where(['owner_id'=>$order_object->getId(), 'status'=> OrderStatus::PROCESSING])->count(); //If no more steps / obligations, then update Order status to complete (Contract fullfilled) if($order_steps_processing==0){ $order_object->setStatus(OrderStatus::COMPLETE); }else{ $order_object->setStatus($order->status); } $order_object->setCurrentStep($currentStep); $order = $this->updatesCurrentStep->execute($order, $order_object); } }