mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-30 18:03:59 +00:00
Admin Workflow - Code Refactoring
This commit is contained in:
+40
-52
@@ -19,6 +19,7 @@ use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Resources\QuestionResource;
|
||||
use App\Models\Booking;
|
||||
use App\Models\QAQuestions;
|
||||
|
||||
class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
{
|
||||
@@ -90,52 +91,57 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
public function logic(Request $request) : JsonResponse
|
||||
{
|
||||
$userId = Auth::user()->id;
|
||||
$currentQuestion = $request->question;
|
||||
$answerNextQuestionNumber = null;
|
||||
$answerValue = null;
|
||||
$timeUsedSeconds = 0;
|
||||
$reference = null;
|
||||
$questionMetadata = null;
|
||||
$booking = null;
|
||||
$isNoGoingBackOverwrite = 0;
|
||||
$previousAnswer = null;
|
||||
|
||||
$this->canFetchQuestion->passes();
|
||||
|
||||
if ($request->has('answerObj')) {
|
||||
$answer = $request->answerObj;
|
||||
$answerNextQuestionNumber = $answer['next_question_number'];
|
||||
$answerValue = $answer['value'];
|
||||
}
|
||||
|
||||
if ($request->has('extra')) {
|
||||
$extra = $request->extra;
|
||||
$questionMetadata = $extra['questionMetadata'] ?? null;
|
||||
$timeUsedSeconds = intval($extra['timeUsedSeconds']) ?? 0;
|
||||
$reference = $extra['session_id'];
|
||||
}
|
||||
|
||||
if($questionMetadata){
|
||||
$booking = Booking::where('id', $questionMetadata['id'])->first();
|
||||
$currentQuestion = $request->question;
|
||||
$filesUpload = $request->only(['files', 'filesA', 'filesB', 'filesC']);
|
||||
if ($request->has('questionContext')) {
|
||||
$questionMetadata = $request->questionContext['questionMetadata'] ?? null;
|
||||
$timeUsedSeconds = intval($request->questionContext['timeUsedSeconds']) ?? 0;
|
||||
$reference = $request->questionContext['session_id'];
|
||||
$booking = $questionMetadata ? Booking::where('id', $questionMetadata['id'])->first() : null;
|
||||
}
|
||||
|
||||
//Save answer given by user (both next and previous)
|
||||
$filesUpload = $request->only(['files', 'filesA', 'filesB', 'filesC']);
|
||||
$answerOptionId = 0;
|
||||
if ($request->has('answerObj')) {
|
||||
$answerOptionId = intval($request->answerObj['id']);
|
||||
}
|
||||
$answerInText = $request->answer;
|
||||
if ($request->has('isPrevious')){
|
||||
$answerInText = "go_back";
|
||||
}
|
||||
$this->saveAnswerProcessor->execute($userId, 0, $currentQuestion, $questionMetadata, $answerInText, $answerOptionId, $filesUpload, $timeUsedSeconds, $request->has('isPrevious'), $reference);
|
||||
|
||||
$this->saveAnswerProcessor->execute($userId, 0, $currentQuestion, $questionMetadata, $request->answer, $answerOptionId, $filesUpload, $timeUsedSeconds, $request->has('isPrevious'), $reference);
|
||||
if(!$request->has('isPrevious')){
|
||||
$isNoGoingBackOverwrite = $this->saveAnswerActionProcessor->execute($booking, $questionMetadata, $answerOptionId, $currentQuestion, $filesUpload);
|
||||
$this->saveAnswerActionProcessor->execute($booking, $questionMetadata, $answerOptionId, $currentQuestion, $filesUpload);
|
||||
}
|
||||
|
||||
if ($request->has('questionContext')) {
|
||||
$previousAnswer = $this->listsUserAnswerSelected->execute(['user_id' => $userId, 'reference' => $reference, 'is_previous' => 0, 'order_by' => (object)['column' => 'id','DESC' => true]])[0];
|
||||
}
|
||||
|
||||
if($booking){
|
||||
$this->markBookingAsProcessed($booking, $request->has('isPrevious'), $currentQuestion);
|
||||
}
|
||||
|
||||
//Get returned question (previous or next) and additional metadata if applicable
|
||||
$returnQuestion = $this->fetchNextQuestionV1AdminWFProcessor->execute($currentQuestion, $request->answerObj, $request->questionContext, $previousAnswer, $booking, $request->has('isPrevious'));
|
||||
$questionMetadata = $this->fetchNextQuestionMetadataProcessor->execute($returnQuestion, $questionMetadata);
|
||||
|
||||
//When a questionnaire ended, return back the first question
|
||||
if(is_null($returnQuestion)){
|
||||
$returnQuestion = $this->fetchFirstQuestionQAProcessor->execute($request);
|
||||
}
|
||||
|
||||
return $this->resourceResponse(new QuestionResource($returnQuestion, $userId, $request->has('isPrevious'), $this->isNoGoingBack($returnQuestion), $previousAnswer, $questionMetadata));
|
||||
}
|
||||
|
||||
private function markBookingAsProcessed(Booking $booking, bool $isPrevious, array $currentQuestion){
|
||||
//Marked data that has already been processed so that it does not appear again
|
||||
$isNoGoingBack = 0;
|
||||
if($currentQuestion && $currentQuestion['is_end'] === 1 && !$request->has('isPrevious')){
|
||||
if($currentQuestion && $currentQuestion['is_end'] === 1 && !$isPrevious){
|
||||
$key1 = "admin_workflow_processed";
|
||||
$key2 = "admin_workflow_processing";
|
||||
if (strpos($currentQuestion['question_number'], '1688') === 0) {
|
||||
@@ -162,36 +168,18 @@ class UpdateNextQuestionV1AdminWFLogic extends AbstractControllerLogic
|
||||
$keyValuePairObject = new KeyValuePairObject($key1, true);
|
||||
$this->createsKeyValuePair->execute($booking, $keyValuePairObject);
|
||||
}
|
||||
$isNoGoingBack = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$previousAnswer = null;
|
||||
if ($request->has('extra')) {
|
||||
$extra = $request->extra;
|
||||
$reference = $extra['session_id'];
|
||||
$previousAnswer = $this->listsUserAnswerSelected->execute(['user_id' => $userId, 'reference' => $reference, 'is_previous' => 0, 'order_by' => (object)['column' => 'id','DESC' => true]])[0];
|
||||
}
|
||||
private function isNoGoingBack(QAQuestions $returnQuestion){
|
||||
|
||||
//Get returned question (previous or next)
|
||||
$returnQuestion = $this->fetchNextQuestionV1AdminWFProcessor->execute($request, $previousAnswer, $booking);
|
||||
|
||||
if($returnQuestion && $returnQuestion->is_start){
|
||||
$isNoGoingBack = 1;
|
||||
if($returnQuestion && ($returnQuestion->is_start || $returnQuestion->is_end)){
|
||||
return 1;
|
||||
}
|
||||
else if($returnQuestion && $returnQuestion->is_start === 0 && $returnQuestion && $returnQuestion->is_end === 0){
|
||||
$isNoGoingBack = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if($isNoGoingBackOverwrite === 1 && $isNoGoingBack === 0){
|
||||
$isNoGoingBack = $isNoGoingBackOverwrite;
|
||||
}
|
||||
|
||||
$questionMetadata = $this->fetchNextQuestionMetadataProcessor->execute($returnQuestion, $questionMetadata);
|
||||
|
||||
//When a questionnaire ended, return back the first question
|
||||
if(is_null($returnQuestion)){
|
||||
$returnQuestion = $this->fetchFirstQuestionQAProcessor->execute($request);
|
||||
}
|
||||
return $this->resourceResponse(new QuestionResource($returnQuestion, $userId, $request->has('isPrevious'), $isNoGoingBack, $previousAnswer, $questionMetadata));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user