/** * * @param int $id * @return boolean */ public static function disable($id) { $workflow = BpmWorkflow::findOne(['id' => $id]); $workflow->active = 0; $domain = Domain::findOne(['name' => $workflow->domain]); if (!$domain) { return false; } if (!$workflow->save()) { return false; } // Procura por execuções em aberto envolvendo o workflow. $flows = BpmFlow::find()->where(['workflow_id' => $id])->all(); foreach ($flows as $flow) { $conId = $flow->connection_id; //Deleta o fluxo $flow->delete(); //Deleta autorizações ConnectionAuth::deleteAll(['connection_id' => $conId, 'domain' => $domain->name]); //Cria novo fluxo, com workflow desativado BpmFlow::startFlow($conId, $domain->name); //Dispara continuidade dos workflows Connection::continueWorkflows($conId, true); } return true; }
/** * ACTION REJECT * @param string $id * @param string $message */ public function actionReject($id = null, $message = null) { Yii::trace("Reject"); Yii::trace("ID: " . $id); Yii::trace("Msg: " . $message); if ($id) { $req = ConnectionAuth::findOne(['id' => $id]); if ($req->type == ConnectionAuth::TYPE_GROUP) { $req->manager_user_id = Yii::$app->user->getId(); } if ($message != null) { $req->manager_message = $message; } $req->status = Connection::AUTH_STATUS_REJECTED; $req->save(); $flow = new BpmFlow(); $flow->response($req->connection_id, $req->domain, BpmFlow::STATUS_NO); } }
public function changeStatusToExpired() { $this->status = Connection::AUTH_STATUS_EXPIRED; $this->save(); BpmFlow::removeFlows($this->connection_id); }
/** * * @param BpmFlow $flow */ public function removeFlow($flow) { $type = $flow->type; $connection_id = $flow->connection_id; $flow->delete(); if ($type != 'Accept_Automatically') { if (BpmFlow::find()->where(['domain' => $flow->domain, 'connection_id' => $connection_id])->count() == 0) { BpmFlow::deleteAll(['connection_id' => $connection_id]); $conn = Connection::findOne(['id' => $connection_id]); $conn->auth_status = Connection::AUTH_STATUS_REJECTED; if (!$conn->save()) { Yii::error('Unsuccesful save in Request'); } $auth = new ConnectionAuth(); $auth->domain = $flow->domain; $auth->status = Connection::AUTH_STATUS_REJECTED; $auth->type = ConnectionAuth::TYPE_WORKFLOW; $auth->manager_workflow_id = $flow->workflow_id; $auth->connection_id = $connection_id; $auth->save(); ReservationNotification::create($connection_id); } } else { $auth = new ConnectionAuth(); $auth->domain = $flow->domain; $auth->status = Connection::AUTH_STATUS_APPROVED; $auth->type = ConnectionAuth::TYPE_WORKFLOW; $auth->manager_workflow_id = $flow->workflow_id; $auth->connection_id = $connection_id; $auth->save(); } }
public static function continueWorkflows($id, $asking = true) { Yii::trace("CONTINUA WORKFLOWS"); $paths = ConnectionPath::find()->select('DISTINCT `domain`')->where(['conn_id' => $id])->all(); Yii::trace("Dominios envolvidos:"); foreach ($paths as $path) { Yii::trace($path->domain); } //Analisa se existem pedidos em espera. Neste momento, realiza as perguntas aos admins. foreach ($paths as $path) { if (Connection::findOne(['id' => $id])->auth_status == self::AUTH_STATUS_REJECTED) { break; } else { $domain = Domain::findOne(['name' => $path->domain]); if (isset($domain)) { BpmFlow::doRequest($id, $domain->name, $asking); } } if (ConnectionAuth::find()->where(['connection_id' => $id, 'status' => self::AUTH_STATUS_PENDING])->count() > 0) { break; } //Se tem uma pergunta ativa. } if (!$asking || ConnectionAuth::find()->where(['connection_id' => $id, 'status' => self::AUTH_STATUS_PENDING])->count() > 0) { return; } $conn = Connection::findOne(['id' => $id]); if ($conn->auth_status == self::AUTH_STATUS_PENDING) { $conn->auth_status = self::AUTH_STATUS_APPROVED; if (!$conn->save()) { } if (!$conn->isCancelStatus()) { $conn->requestProvision(); } } //Remove fluxos não finalizados BpmFlow::removeFlows($id); }