mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-22 14:04:01 +00:00
132 lines
5.0 KiB
PHP
132 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Questionnaires\Processors;
|
|
|
|
|
|
use App\Models\QAUserAnswerSelected;
|
|
use App\Classes\Modules\Documents\Processors\UploadDocumentProcessor;
|
|
use App\Classes\ValueObjects\Constants\DocumentType;
|
|
use App\Classes\ValueObjects\Constants\QAType;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class SaveAnswerV1AdminWFProcessor
|
|
{
|
|
/** @var UploadDocumentProcessor */
|
|
private $uploadDocumentForProcessor;
|
|
|
|
/**
|
|
* SaveAnswerV1AdminWFProcessor constructor.
|
|
* @param UploadDocumentProcessor $uploadDocumentForProcessor
|
|
*/
|
|
public function __construct(UploadDocumentProcessor $uploadDocumentForProcessor)
|
|
{
|
|
$this->uploadDocumentForProcessor = $uploadDocumentForProcessor;
|
|
}
|
|
|
|
/**
|
|
* @return QAUserAnswerSelected|\Illuminate\Database\Eloquent\Model
|
|
*/
|
|
public function execute($userId, $sourceId, $currentQuestion, $questionMetadata, $answerInText, $answerOptionId, $filesUpload, $timeUsedSeconds, $isPrevious, $reference = null){
|
|
|
|
$answer = null;
|
|
$attachments = [];
|
|
$questionId = $currentQuestion['id'];
|
|
$questionType = $currentQuestion['question_type'];
|
|
$questionNumber = $currentQuestion['question_number'];
|
|
if ($isPrevious){
|
|
$answerInText = "go_back";
|
|
}
|
|
|
|
if(is_null($answer))
|
|
{
|
|
$answer = new QAUserAnswerSelected;
|
|
}
|
|
$answer->user_id = $userId;
|
|
$answer->source_id = $sourceId;
|
|
$answer->question_id = $questionId;
|
|
$answer->question_metadata = json_encode($questionMetadata);
|
|
$answer->answer_option_id = $answerOptionId;
|
|
$answer->time_used_seconds = $timeUsedSeconds;
|
|
$answer->is_previous = $isPrevious;
|
|
if($reference){
|
|
$answer->reference = $reference;
|
|
}
|
|
$answer->save(); //cief todo: why 2 save() in this file, this is wrong
|
|
|
|
if($filesUpload){
|
|
if (isset($filesUpload['filesA']))
|
|
{
|
|
foreach ($filesUpload as $key => $files) {
|
|
if($key === 'filesA'){
|
|
$attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::ECOMMERCE_PURCHASE_ORDER_EN);
|
|
}
|
|
else if($key === "filesB"){
|
|
$attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::ECOMMERCE_PURCHASE_ORDER_CH);
|
|
}
|
|
else if($key === "filesC"){
|
|
$attachments[$key] = $this->saveFile($answer, $files, 'questionnaires', DocumentType::ADMIN_WORK_FLOW.'/'.DocumentType::CURRENCY_VENDOR_PAYMENT_PROOF);
|
|
}
|
|
}
|
|
}
|
|
else if (isset($filesUpload['files']) && $filesUpload['files'])
|
|
{
|
|
$attachments = $this->saveFile($answer, $filesUpload['files']);
|
|
}
|
|
}
|
|
|
|
if(!$isPrevious) {
|
|
if($questionType === QAType::SUBMIT_1688_3_TYPES_DOCUMENTS){
|
|
$structuredAnswer = [
|
|
'text' => "3_DOCUMENTS_UPLOADED",
|
|
'files' => $attachments,
|
|
];
|
|
$answer->answer = json_encode($structuredAnswer);
|
|
}
|
|
else if($questionType === QAType::REMARKS_WITH_DOCUMENT_UPLOAD){
|
|
$structuredAnswer = [
|
|
'text' => $answerInText,
|
|
'files' => $attachments,
|
|
];
|
|
$answer->answer = json_encode($structuredAnswer);
|
|
}
|
|
else if($questionType === QAType::DOCUMENT_UPLOAD){
|
|
$structuredAnswer = [
|
|
'files' => $attachments,
|
|
];
|
|
$answer->answer = json_encode($structuredAnswer);
|
|
}
|
|
else if($questionType === QAType::FLOAT_MONEY){
|
|
$answer->answer = number_format(floatval(str_replace(',', '', $answerInText)), 3, '.', '');
|
|
}
|
|
else {
|
|
$answer->answer = $answerInText;
|
|
|
|
if($questionNumber === '1688_underpaid_order_1_proceed' || $questionNumber === '1688_underpaid_order_1'){
|
|
$answer->answer = $questionMetadata['amount_to_be_deducted'];
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$answer->answer = $answerInText;
|
|
}
|
|
|
|
$answer->save();
|
|
|
|
return $answer;
|
|
}
|
|
|
|
private function saveFile(QAUserAnswerSelected $answer, array $files, string $path = 'questionnaires', string $documentType = DocumentType::ADMIN_WORK_FLOW){
|
|
$result = $this->uploadDocumentForProcessor->execute($answer, $files, $path, $documentType);
|
|
$attachment = array_map(function ($item) use($documentType) {
|
|
return [
|
|
'name' => $item->document_id,
|
|
'file_id' => $item->id,
|
|
'document_type'=> $documentType,
|
|
];
|
|
}, $result);
|
|
|
|
return $attachment;
|
|
}
|
|
}
|