Help Menu prototype v0.1

This commit is contained in:
Dillon
2023-05-04 15:19:04 +08:00
parent cd3e955f3e
commit 5b00b7b45f
40 changed files with 1732 additions and 5 deletions
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateQAQuestionnaireSetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('qa_questionnaire_sets', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description')->nullable();
$table->unsignedSmallInteger('order')->default(0);
$table->unsignedBigInteger('next_set')->nullable();
$table->unsignedSmallInteger('version')->default(1);
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('qa_questionnaire_sets');
}
}
@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateQAQuestionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('qa_questions', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('question_number');
$table->text('question_text');
$table->unsignedBigInteger('questionnaire_set_id');
$table->unsignedBigInteger('next_nested_question')->nullable();
$table->unsignedBigInteger('next_main_question')->nullable();
$table->unsignedBigInteger('question_type');
$table->tinyInteger('is_start');
$table->tinyInteger('is_end');
$table->string('end_text')->nullable();
$table->unsignedInteger('order')->default(0);
$table->timestamps();
$table->softDeletes();
$table->foreign('questionnaire_set_id')->references('id')->on('qa_questionnaire_sets');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('qa_questions');
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateQAAnswerOptionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('qa_answer_options', function (Blueprint $table) {
$table->id();
$table->text('display_text');
$table->string('value');
$table->unsignedSmallInteger('order')->default(0);
$table->unsignedBigInteger('question_number');
$table->unsignedBigInteger('next_question_number')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('qa_answer_options');
}
}
@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateQAUserAnswerSelectedTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('qa_user_answer_selected', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('question_id');
$table->unsignedBigInteger('answer_option_id')->default(0);
$table->string('free_text_answer')->nullable();
$table->timestamps();
$table->softDeletes();
$table->foreign('question_id')->references('id')->on('qa_questions');
// $table->foreign('answer_option_id')->references('id')->on('qa_answer_options');
$table->foreign('user_id')->references('id')->on('users');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('qa_answer_option_selections');
}
}
+3
View File
@@ -21,5 +21,8 @@ class DatabaseSeeder extends Seeder
$this->call(SegmentConstantsTableSeeder::class);
$this->call(DummyDataSeeder::class);
// $this->call(QAQuestionSeeder::class);
// $this->call(QAAnswerOptionsSeeder::class);
}
}
+155
View File
@@ -0,0 +1,155 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\QAAnswerOptions;
class QAAnswerOptionsSeeder extends Seeder
{
public function run()
{
// Option 1 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Billing";
$answerOption->value = "Billing";
$answerOption->question_number = 10;
$answerOption->next_question_number = 100;
$answerOption->save();
// Option 2 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Shipping";
$answerOption->value = "Shipping";
$answerOption->question_number = 10;
$answerOption->next_question_number = 100;
$answerOption->save();
// Option 3 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Returns";
$answerOption->value = "Returns";
$answerOption->question_number = 10;
$answerOption->next_question_number = 100;
$answerOption->save();
// Option 4 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Product Information";
$answerOption->value = "Product Information";
$answerOption->question_number = 10;
$answerOption->next_question_number = 100;
$answerOption->save();
// Option 5 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Technical Support";
$answerOption->value = "Technical Support";
$answerOption->question_number = 10;
$answerOption->next_question_number = 100;
$answerOption->save();
// Option 6 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Shipping Fee Calculation";
$answerOption->value = "Shipping Fee Calculation";
$answerOption->question_number = 10;
$answerOption->next_question_number = 600;
$answerOption->save();
// Option 7 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Error-in Measurements";
$answerOption->value = "Error-in Measurements";
$answerOption->question_number = 10;
$answerOption->next_question_number = 700;
$answerOption->save();
// Option 8 for Question 10
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Contact Us";
$answerOption->value = "Contact Us";
$answerOption->question_number = 10;
$answerOption->next_question_number = 800;
$answerOption->save();
// Option 1 for Question 20
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 1 for Question 20";
$answerOption->value = "Option 1 for Question 20";
$answerOption->question_number = 20;
$answerOption->save();
// Option 2 for Question 20
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 2 for Question 20";
$answerOption->value = "Option 2 for Question 20";
$answerOption->question_number = 20;
$answerOption->save();
// Option 1 for Question 100
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 1 for Question 100";
$answerOption->value = "Option 1 for Question 100";
$answerOption->question_number = 100;
$answerOption->save();
// Option 2 for Question 100
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 2 for Question 100";
$answerOption->value = "Option 2 for Question 100";
$answerOption->question_number = 100;
$answerOption->save();
// Option 1 for Question 30
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 1 for Question 30";
$answerOption->value = "Option 1 for Question 30";
$answerOption->question_number = 30;
$answerOption->save();
// Option 2 for Question 30
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 2 for Question 30";
$answerOption->value = "Option 2 for Question 30";
$answerOption->question_number = 30;
$answerOption->save();
// Option 3 for Question 30
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 3 for Question 30";
$answerOption->value = "Option 3 for Question 30";
$answerOption->question_number = 30;
$answerOption->save();
// Option 1 for Question 300
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 1 for Question 300";
$answerOption->value = "Option 1 for Question 300";
$answerOption->question_number = 300;
$answerOption->save();
// Option 2 for Question 300
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 2 for Question 300";
$answerOption->value = "Option 2 for Question 300";
$answerOption->question_number = 300;
$answerOption->save();
// Option 3 for Question 300
$answerOption = new QAAnswerOptions;
$answerOption->display_text = "Option 3 for Question 300";
$answerOption->value = "Option 3 for Question 300";
$answerOption->question_number = 300;
$answerOption->save();
// Option 1 for Question 600
$answerOption = new QAAnswerOptions;
$answerOption->display_text = '<h1>Et harum accusamus eum quis dolorum? </h1><p>Lorem ipsum dolor sit amet. Est corporis voluptas et repudiandae libero <em>Aut quis</em>! Est aperiam voluptatum eum quidem rerumnam deserunt sit internos possimus non dolore voluptate. Vel explicabo aliquam <strong>Sit sunt ut maxime voluptatibus non vero libero ad ratione dolore</strong>. </p><h2>Ea incidunt dolor in obcaecati harum ut dignissimos facilis! </h2><p>Et adipisci illo et laborum internos <strong>Nam aperiam est ipsa nisi non quia architecto ut itaque autem</strong>. Eos maiores sunt <em>Et voluptas aut expedita quidem aut odio repellendus eum neque voluptate</em> et iusto nisi vel consequatur quos. Sit doloribus omnis in minima illoQui soluta est omnis quasi vel officia reiciendis qui aliquid quis! Sed odit esse aut sint laborumEa internos et magni amet sed dolores omnis hic totam temporibus ut quia numquam. </p><ul><li>Est soluta praesentium ut vero obcaecati! </li><li>Sit nobis facere in porro rerum et quidem deserunt qui inventore odit. </li></ul><h3>Et laborum quaerat vel animi ipsum. </h3><p>Aut quos libero <a href="https://www.loremipzum.com" target="_blank">Et explicabo qui enim libero id rerum ipsa</a>. Est quod tempora est soluta enimaut quasi aut eligendi fugit et fugit Quis. </p>
';
$answerOption->value = "Answer";
$answerOption->question_number = 600;
$answerOption->save();
}
}
+187
View File
@@ -0,0 +1,187 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\QAQuestionnaireSet;
use App\Models\QAQuestions;
use App\Classes\ValueObjects\Constants\QAType;
class QAQuestionSeeder extends Seeder
{
public function run()
{
$questionnaireSets = [
[
'name' => 'Set 1',
'description' => 'This is set 1 questions',
],
];
foreach ($questionnaireSets as $set) {
$questionnaireSet = QAQuestionnaireSet::create([
'name' => $set['name'],
'description' => $set['description'],
]);
$questions = [];
switch ($set['name']) {
case 'Set 1':
$questions = [
[
'question_number' => 10,
'question_text' => 'Please select one',
'question_type' => QAType::MULTIPLE_CHOICES,
'is_start' => true,
'is_end' => false,
],
[
'question_number' => 20,
'question_text' => 'Question text for question number 20?',
'question_type' => QAType::MULTIPLE_CHOICES,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 30,
'question_text' => 'Question text for question number 30?',
'question_type' => QAType::MULTIPLE_CHOICES,
'next_nested_question' => 300,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 40,
'question_text' => 'What is your name?',
'question_type' => QAType::FREE_TEXT,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 50,
'question_text' => 'The End',
'question_type' => QAType::ANSWER,
'is_start' => false,
'is_end' => true,
],
[
'question_number' => 60,
'question_text' => 'We have received your request and will response as soon as possible.',
'question_type' => QAType::TICKET_CRM,
'is_start' => false,
'is_end' => true,
],
[
'question_number' => 100,
'question_text' => 'Question text for question number 100?',
'question_type' => QAType::MULTIPLE_CHOICES,
'next_nested_question' => 110, //200 //3 digits - first level
'next_main_question' => 20,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 110,
'question_text' => 'Question text for question number 110?',
'question_type' => QAType::FREE_TEXT,
'next_nested_question' => 1000, //1000 //4 digits - second level
'next_main_question' => 20,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 300,
'question_text' => 'Question text for question number 300?',
'question_type' => QAType::MULTIPLE_CHOICES,
'next_main_question' => 40,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 600,
'question_text' => 'Shipping Fee Calculations',
'question_type' => QAType::ANSWER,
'is_start' => false,
'is_end' => true,
],
[
'question_number' => 700,
'question_text' => 'Please enter your measurements',
'question_type' => QAType::FREE_TEXT,
'next_nested_question' => 710,
'next_main_question' => 20,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 710,
'question_text' => 'Please upload the photo proof',
'question_type' => QAType::DOCUMENT_UPLOAD,
'next_main_question' => 60,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 800,
'question_text' => 'What is your name?',
'question_type' => QAType::FREE_TEXT,
'next_nested_question' => 810,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 810,
'question_text' => 'Click Next to speak to our customer service',
'question_type' => QAType::FREE_TEXT,
'is_start' => false,
'is_end' => true,
'end_text' => 'We have received your request and will response as soon as possible.',
],
[
'question_number' => 1000,
'question_text' => 'Question text for question number 1000?',
'question_type' => QAType::FREE_TEXT,
'next_nested_question' => 10000, //10000 - 5 digits - 3rd level
'next_main_question' => 20,
'is_start' => false,
'is_end' => false,
],
[
'question_number' => 10000,
'question_text' => 'Question text for question number 10000?',
'question_type' => QAType::FREE_TEXT,
'next_main_question' => 20,
'is_start' => false,
'is_end' => false,
],
];
break;
}
foreach ($questions as $key => $questionData) {
$question = new QAQuestions;
$question->question_number = $questionData['question_number'];
$question->question_text = $questionData['question_text'];
$question->question_type = $questionData['question_type'];
$question->questionnaire_set_id = $questionnaireSet->id;
if (isset($questionData['next_nested_question'])) {
$question->next_nested_question = $questionData['next_nested_question'];
}
if (isset($questionData['next_main_question'])) {
$question->next_main_question = $questionData['next_main_question'];
}
$question->is_start = $questionData['is_start'];
$question->is_end = $questionData['is_end'];
if (isset($questionData['end_text'])) {
$question->end_text = $questionData['end_text'];
}
$question->order = $key + 1;
$question->save();
}
}
}
}