Skip to content

Commit 8f7fbe2

Browse files
committed
FOUR-15986
1 parent 9e08b40 commit 8f7fbe2

4 files changed

Lines changed: 121 additions & 0 deletions

File tree

‎ProcessMaker/Http/Controllers/Api/TaskController.php‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use ProcessMaker\Http\Resources\Task as Resource;
2121
use ProcessMaker\Http\Resources\TaskCollection;
2222
use ProcessMaker\Models\Process;
23+
use ProcessMaker\Models\ProcessAbeRequestToken;
2324
use ProcessMaker\Models\ProcessRequest;
2425
use ProcessMaker\Models\ProcessRequestToken;
2526
use ProcessMaker\Models\Screen;
@@ -257,6 +258,48 @@ public function update(Request $request, ProcessRequestToken $task)
257258
}
258259
}
259260

261+
public function updateVariable (Request $request, ProcessRequestToken $task, ProcessAbeRequestToken $abe)
262+
{
263+
$data = [];
264+
$varName = $request->input('varName');
265+
$varValue = $request->input('varValue');
266+
$data[$varName] = $varValue;
267+
try {
268+
// Verificar si la respuesta ya ha sido enviada
269+
$existingAbe = ProcessAbeRequestToken::where('id', $abe->id)
270+
->where('process_request_id', $task->id)->first();
271+
272+
if ($existingAbe && $existingAbe->is_answered) {
273+
return response()->json([
274+
'message' => 'This response has already been answered',
275+
'data' => $existingAbe
276+
], 200);
277+
}
278+
279+
// Update with the data
280+
$abe->data = $data;
281+
// Asignar answered_at y is_answered
282+
$abe->is_answered = true;
283+
$abe->answered_at = Carbon::now();
284+
$abe->is_answered = true;
285+
$abe->save();
286+
// Close the thread related
287+
$process = $task->process;
288+
$instance = $task->processRequest;
289+
WorkflowManager::completeTask($process, $instance, $task, $data);
290+
291+
return response()->json([
292+
'message' => 'Variable updated successfully',
293+
'data' => $abe
294+
], 200);
295+
} catch (\Exception $e) {
296+
return response()->json([
297+
'message' => 'Error updating variable',
298+
'error' => $e->getMessage()
299+
], 500);
300+
}
301+
}
302+
260303
private function handleQueryException($e)
261304
{
262305
$regex = '~Column not found: 1054 Unknown column \'(.*?)\' in \'where clause\'~';
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace ProcessMaker\Models;
4+
5+
use Illuminate\Database\Eloquent\Factories\HasFactory;
6+
use ProcessMaker\Models\ProcessMakerModel;
7+
use ProcessMaker\Traits\HasUuids;
8+
9+
class ProcessAbeRequestToken extends ProcessMakerModel
10+
{
11+
use HasFactory;
12+
use HasUuids;
13+
14+
protected $connection = 'processmaker';
15+
16+
protected $table = 'process_abe_request_tokens';
17+
18+
/**
19+
* The attributes that are mass assignable.
20+
*
21+
* @var array
22+
*/
23+
protected $fillable = [
24+
'process_request_id',
25+
'process_request_token_id',
26+
'data',
27+
'is_answered',
28+
'answered_at'
29+
];
30+
31+
public static function rules(): array
32+
{
33+
return [
34+
'process_request_id' => 'required',
35+
'process_request_token_id' => 'required',
36+
];
37+
}
38+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*/
12+
public function up(): void
13+
{
14+
Schema::create('process_abe_request_tokens', function (Blueprint $table) {
15+
$table->id();
16+
$table->uuid('uuid')->unique();
17+
$table->unsignedInteger('process_request_id')->nullable();
18+
$table->unsignedInteger('process_request_token_id')->nullable();
19+
$table->json('data');
20+
$table->boolean('is_answered')->default(false);
21+
$table->dateTime('answered_at')->nullable();
22+
$table->timestamps();
23+
// Indexes
24+
$table->index('process_request_id');
25+
$table->index('process_request_token_id');
26+
// Foreing keys
27+
$table->foreign('process_request_token_id')->references('id')->on('process_request_tokens')->onDelete('cascade');
28+
});
29+
}
30+
31+
/**
32+
* Reverse the migrations.
33+
*/
34+
public function down(): void
35+
{
36+
Schema::dropIfExists('process_abe_request_tokens');
37+
}
38+
};

‎routes/engine.php‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@
1818

1919
// Trigger intermediate event
2020
Route::post('requests/{request}/events/{event}', [ProcessRequestController::class, 'activateIntermediateEvent'])->name('requests.update,request');
21+
22+
Route::put('tasks/{token_id}/update_variable/{token_abe}', [TaskController::class, 'updateVariable'])->name('tasks.abe.update')->middleware('can:update,task');
2123
});

0 commit comments

Comments
 (0)