예제 #1
0
 /**
  * 
  * @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);
     }
 }
예제 #3
0
 public function changeStatusToExpired()
 {
     $this->status = Connection::AUTH_STATUS_EXPIRED;
     $this->save();
     BpmFlow::removeFlows($this->connection_id);
 }
예제 #4
0
 /**
  * 
  * @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();
     }
 }
예제 #5
0
 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);
 }