Admin Workflow - Partial fix of version 4 reported issues

This commit is contained in:
Dillon Ngo
2025-03-10 01:25:39 +08:00
parent 5844e86d4f
commit 64992e658d
7 changed files with 177 additions and 36 deletions
@@ -7,6 +7,7 @@ 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
@@ -96,7 +97,7 @@ class SaveAnswerV1AdminWFProcessor
$answer->answer = json_encode($structuredAnswer);
}
else if($questionType === QAType::FLOAT_MONEY){
$answer->answer = floatval(str_replace(',', '', $answerInText));
$answer->answer = number_format(floatval(str_replace(',', '', $answerInText)), 3, '.', '');
}
else {
$answer->answer = $answerInText;
+3 -3
View File
@@ -316,7 +316,7 @@ class QAWorkFlowSeeder extends Seeder
// ['display_text' => 'Done', 'value' => '1688_issue_submit', 'next_question_number' => '1688_issue_submit'],
// ],
// 'group' => '1688',
// ],
// ],
[
'question_number' => '1688_overpaid_order',
'question_title' => 'Overpaid Order',
@@ -338,7 +338,7 @@ class QAWorkFlowSeeder extends Seeder
'is_start' => false,
'is_end' => false,
'answer_options' => [
['display_text' => 'Yes', 'value' => '1688_underpaid_documents_submission', 'next_question_number' => '1688_underpaid_documents_submission'],
['display_text' => 'Done', 'value' => '1688_underpaid_documents_submission', 'next_question_number' => '1688_underpaid_documents_submission'],
['display_text' => 'Got Issue', 'value' => '1688_underpaid_proceed_order_issue', 'next_question_number' => '1688_underpaid_proceed_order_issue'],
],
'group' => '1688',
@@ -423,7 +423,7 @@ class QAWorkFlowSeeder extends Seeder
'is_start' => false,
'is_end' => false,
'answer_options' => [
['display_text' => 'Yes', 'value' => '1688_overpaid_documents_submission', 'next_question_number' => '1688_overpaid_documents_submission'],
['display_text' => 'Done', 'value' => '1688_overpaid_documents_submission', 'next_question_number' => '1688_overpaid_documents_submission'],
['display_text' => 'Got Issue', 'value' => '1688_overpaid_proceed_order_issue', 'next_question_number' => '1688_overpaid_proceed_order_issue'],
],
'group' => '1688',
+1
View File
@@ -33,6 +33,7 @@
"vue-avatar": "^2.1.8",
"vue-debounce": "^2.6.0",
"vue-the-mask": "^0.11.1",
"vue2-dropzone": "^3.6.0",
"vuelidate": "^0.7.4",
"vuex": "^3.1.1"
},
+25 -29
View File
@@ -1,31 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true">
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./app</directory>
</include>
</coverage>
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
@@ -199,7 +199,7 @@
<div class="col-auto text-left">
<div class="form-group form-group-default m-b-0">
<label>Amount Processed <span v-if="externalApiResponse">{{externalApiResponse.data.fixed_currency.short_code}}</span></label>
<input id="cc_get" name="cc_get" type="text" placeholder="0.00" value="0" class="form-control" v-model="answer" v-money="{decimal: '.',thousands: ',', precision: 2}">
<input id="cc_get" name="cc_get" type="text" placeholder="0.00" value="0" class="form-control" v-model="answer" v-money="{decimal: '.',thousands: ',', precision: 3}">
</div>
</div>
</div>
@@ -547,7 +547,7 @@
this.answerId = this.question.answer.answer_option_id;
}
else if(this.question.question_type === 9){ //FLOAT_MONEY
this.answer = this.externalApiResponse.data.amount_processed * 100;
this.answer = this.externalApiResponse.data.amount_processed * 1000;
}
else if(this.question.question_type === 7){ //REMARKS_WITH_DOCUMENT_UPLOAD
this.answer = JSON.parse(this.question.answer.answer).text;
@@ -655,7 +655,6 @@
this.submit(this.route('api.questionnaires.next.question'), 'post', this.section, false, false);
}
else if(direction === 'previous'){
console.log('previous');
this.formTouched = false;
this.parameters.isPrevious = true;
this.submit(this.route('api.questionnaires.next.question'), 'post', this.section, false, false);
@@ -0,0 +1,113 @@
<template>
<div class="dropzone-container">
<h2>{{ label }}</h2>
<vue-dropzone
:id="uniqueId"
ref="dropzone"
:options="dropzoneOptions"
@vdropzone-file-added="fileAdded"
@vdropzone-removed-file="fileRemoved"
/>
<div v-if="error" class="error">{{ errorMessage }}</div>
</div>
</template>
<script>
import vueDropzone from "vue2-dropzone";
import "vue2-dropzone/dist/vue2Dropzone.min.css";
export default {
components: {
vueDropzone,
},
props: {
value: Array, // Enables v-model binding
uniqueId: String,
label: String,
errorMessage: String,
},
data() {
return {
dropzoneOptions: {
url: '#',
autoQueue: false,
processQueue: false,
acceptedFiles: 'image/*, application/*',
uploadMultiple: true,
// url: "/upload", // Change this to your upload endpoint
// maxFilesize: 5, // MB
// addRemoveLinks: true,
// acceptedFiles: "image/*,application/pdf",
previewTemplate: this.template(),
},
};
},
computed: {
error() {
return this.value && this.value.length === 0;
},
},
methods: {
fileAdded(file) {
if(file.name.split('.').pop() === 'pdf'){
//$(file.previewElement).closest("img[data-dz-thumbnail]").attr("src", Vapor.asset("images/icons/pdf.png"));
//$(file.previewElement).closest("img[data-dz-thumbnail]").attr("src", pdfIconUrl);
const thumbnailElement = file.previewElement.querySelector("[data-dz-thumbnail]");
if (thumbnailElement) {
thumbnailElement.src = Vapor.asset("images/icons/pdf.png");
}
}
if(file.name.split('.').pop().indexOf("xls") !== -1){
//$(file.previewElement).closest("img[data-dz-thumbnail]").attr("src", Vapor.asset("images/icons/xlsx.png"));
//$(file.previewElement).closest("img[data-dz-thumbnail]").attr("src", xlsIconUrl);
const thumbnailElement = file.previewElement.querySelector("[data-dz-thumbnail]");
if (thumbnailElement) {
thumbnailElement.src = Vapor.asset("images/icons/xlsx.png");
}
}
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
// let updatedFiles = [...this.value, { file, base64: reader.result }];
this.$emit("input", [reader.result]); // Sync with v-model
};
},
fileRemoved(file) {
let updatedFiles = this.value.filter((f) => f.file !== file);
this.$emit("input", updatedFiles);
},
template() {
return `<div class="row m-l-0 m-r-0 align-items-center m-t-5 m-b-5 bg-master-lightest text-left p-t-10 p-b-10 ">
<div class="col-auto p-r-0"> <img data-dz-thumbnail style="width: 35px; height: 35px;" /> </div> <div class="col">
<div class="row m-b-5"> <div class="col"> <div class="dz-filename fs-8 bold"><span data-dz-name></span></div>
</div> </div> <div class="row"> <div class="col"> <div class="dz-size muted light fs-10" data-dz-size></div>
</div> </div> </div> <div class="col-auto"><i class="fs-16 fa fa-times-circle pointer hint-text" data-dz-remove></i></div>
</div>
`;
},
fileToBase64(file) {
return new Promise(resolve => {
var reader = new FileReader();
reader.onload = function(event) {
resolve(event.target.result);
};
reader.readAsDataURL(file);
});
},
},
};
</script>
<style>
.dropzone-container {
margin-bottom: 20px;
}
.error {
color: red;
font-size: 12px;
}
</style>