registration step 2 front end

This commit is contained in:
CheeSiong
2020-11-06 15:26:53 +08:00
parent a2381e44a7
commit 6b394420dc
9 changed files with 363 additions and 10 deletions
@@ -0,0 +1,157 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Http\Resources\UserResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Companies\Standards\Rules\CanUpdateCompany;
use App\Classes\Modules\Companies\Services\UpdatesCompany;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Documents\Standards\Rules\CanCreateDocument;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Standards\Rules\CanCreateFile;
use App\Classes\Modules\Documents\Services\CreatesFile;
use App\Classes\Modules\Documents\Services\Convert64ToFile;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
use App\Classes\ValueObjects\Constants\OwnerType;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\ObjectStatus;
use App\Classes\ValueObjects\Constants\FileType;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class RegistrationStep2Logic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Registration Step 2',
'message' => 'You have completed registration step 2'
];
}
/** @var FetchesUser */
private $fetchesUser;
/** @var CanUpdateCompany */
private $canUpdateCompany;
/** @var UpdatesCompany */
private $updatesCompany;
/** @var CanCreateDocument */
private $canCreateDocument;
/** @var CreatesDocument */
private $createsDocument;
/** @var CanCreateFile */
private $canCreateFIle;
/** @var CreatesFile */
private $createsFile;
/** @var Convert64ToFile */
private $convert64ToFile;
/**
* UpdateUserControllerLogic constructor.
* @param FetchesUser $fetchesUser
* @param CanUpdateCompany $canUpdateCompany
* @param UpdatesCompany $updatesCompany
* @param CanCreateDocument $canCreateDocument
* @param CreatesDocument $createsDocument
* @param CanCreateFile $canCreateFile
* @param CreatesFile $createsFile
*/
public function __construct(
FetchesUser $fetchesUser,
CanUpdateCompany $canUpdateCompany,
UpdatesCompany $updatesCompany,
CanCreateDocument $canCreateDocument,
CreatesDocument $createsDocument,
CanCreateFile $canCreateFile,
CreatesFile $createsFile,
Convert64ToFile $convert64ToFile
)
{
$this->fetchesUser = $fetchesUser;
$this->canUpdateCompany = $canUpdateCompany;
$this->updatesCompany = $updatesCompany;
$this->canCreateDocument = $canCreateDocument;
$this->createsDocument = $createsDocument;
$this->canCreateFile = $canCreateFile;
$this->createsFile = $createsFile;
$this->convert64ToFile = $convert64ToFile;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
DB::beginTransaction();
$user_query = $this->fetchesUser->execute(['id' => \Auth::user()->id]);
$company_query = $user_query->company()->first();
$company_object = new CompanyObject(
$request->input('company_name', $company_query->name),
$request->input('company_reference', $company_query->refence),
$request->input('type', $company_query->type)
);
$this->canUpdateCompany->passes($company_object);
$company_query = $this->updatesCompany->execute($company_query, $company_object);
$document_type = $company_query->type == 1 ? DocumentType::COMPANY_PUBLIC_SMS_REGISTER : DocumentType::COMPANY_PERSONAL_IC;
$document_object = new DocumentObject(
$user_query->id,
OwnerType::COMPANY,
$document_type,
$request->input('document_reference'),
ObjectStatus::PENDING,
null,
null,
null,
null
);
$this->canCreateDocument->passes($document_object);
$document_query = $this->createsDocument->execute($document_object);
$file = $this->convert64ToFile->convert($request->input('file'));
$file_type = $company_query->type == 1 ? FileType::COMPANY_PUBLIC_SMS_REGISTER : FileType::COMPANY_PERSONAL_IC;
$file_object = new FileObject(
$document_query->id,
!empty($file[0]) ? json_encode($file[0]) : null,
$file_type
);
$this->canCreateFile->passes($file_object);
$file_query = $this->createsFile->execute($file_object);
DB::commit();
return $this->resourceResponse(new UserResource(\Auth::user()));
} catch (\Exception $exception) {
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -150,7 +150,6 @@ class UpdateUserLogic extends AbstractControllerLogic
return $this->resourceResponse(new UserResource(\Auth::user()));
} catch (\Exception $exception) {
dd($exception);
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Accounts;
use App\Classes\Modules\Accounts\ControllersLogic\RegistrationStep2Logic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RegistrationStep2Controller
{
/**
* @param Request $request
* @param RegistrationStep2Logic $logic
* @return JsonResponse
*/
public function create(Request $request, RegistrationStep2Logic $logic): JsonResponse {
return $logic->execute($request);
}
}
+53
View File
@@ -1131,4 +1131,57 @@
.hidden-xs {
display: none;
}
}
.upload-box {
width: 250px;
/*margin: auto;*/
position: relative;
}
.file-container {
overflow: hidden;
position: relative;
}
.file-container [type=file] {
cursor: inherit;
display: block;
filter: alpha(opacity=0);
min-height: 100%;
min-width: 100%;
opacity: 0;
position: absolute;
right: 0;
text-align: right;
top: 0;
}
.file-container {
text-align: center;
border: 1px dashed #d9d9d9;
background: #f3f3f4;
/*border-radius: 10px;*/
/* float: left; */
padding: .5em;
}
.file-container:hover {
border-color: #1AB394;
}
.file-container [type=file] {
cursor: pointer;
}
.upload-img {
margin: 0 !important;
}
.upload-img img {
width: 100%;
border: 1px solid #d9d9d9;
border-top: none;
pointer-events: none;
}
@@ -79,14 +79,11 @@
methods:{
successHandler(response){
localStorage.setItem('user-token', response.payload.access_token);
console.log(response.payload.access_token);
this.$store.dispatch('userAuthentication', {access_token: response.payload.access_token});
this.error = '';
this.$store.dispatch('toggleSection', {name: 'loginSuccess', status: true})
setTimeout(function(){
// window.location.href = response.payload.redirect_url;
window.location.href = response.payload.redirect_url;
}, 2000);
},
errorHandler(error){
@@ -0,0 +1,122 @@
<template>
<div class="row p-t-25 text-left">
<div class="col">
<div class="row">
<div class="col">
<div class="b-l b-success p-l-15 m-b-15" style="border-left-width: 3px;">
<h6 class="bold all-caps no-margin text-success">Registration Step 2</h6>
</div>
</div>
</div>
<div class="row">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.type">
<label class="muted">Type</label>
<select class="form-control" v-model="parameters.type">
<option value="1">Public Company</option>
<option value="2">Personal Company</option>
</select>
</validation-wrapper-component>
<validation-wrapper-component :validator="$v.parameters.file">
<label class="muted">File</label>
<div class="upload-box">
<div class="file-container">
<i class="fa fa-cloud-upload"></i>
<input type='file'
@change="onChange"
/>
</div>
<div class="upload-img">
<div v-if="preview" v-for="(img, $index) in preview" :key="$index">
<img class='img-responsive' alt='' :src="img"/>
</div>
</div>
</div>
</validation-wrapper-component>
<validation-wrapper-component :validator="$v.parameters.document_reference">
<label class="muted">Refrence</label>
<input class="form-control" name="name" v-model="parameters.document_reference">
</validation-wrapper-component>
</div>
</div>
<div class="row mb-3">
<div class="col">
<div class="row">
<div class="col text-right">
<button type="button" class="btn btn-success" @click="submitForm()">Submit</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { required, email, sameAs, numeric } from "vuelidate/lib/validators";
export default {
props: {
},
data() {
return {
parameters : {
type: '',
file: [],
document_reference: ''
},
preview: []
}
},
validations: {
parameters: {
type: { required },
file: { required },
document_reference: { required },
}
},
methods:{
onChange(e) {
let vm = this;
let files = e.target.files;
vm.preview = [];
Array.from(files).forEach(file => {
vm.preview.push(URL.createObjectURL(file));
});
vm.imageBase64(e.target.files).then(data => {
vm.parameters.file = data;
});
},
imageBase64(imgs) {
let num = 1;
let base = [];
let count = imgs.length;
return new Promise((resolve, reject) => {
Array.from(imgs).forEach(file => {
let reader = new FileReader();
reader.onload = () => {
base.push(reader.result);
if (num >= count) {
resolve(base);
}
num++;
};
reader.readAsDataURL(file);
})
});
},
submitForm(){
this.submit((this.route('api.account.registration-step-2')), 'post', 'RegistrationSectionStep2', true, true)
},
errorHandler(){
},
successHandler(){
this.crudSuccess();
EventBus.$emit('updateAddress')
}
}
}
</script>
@@ -0,0 +1,4 @@
@extends('layouts.base_login')
@section('inner_content')
<registration-step-2-form-component ref="registration-step-2" :section="'RegistrationSectionStep2'"></registration-step-2-form-component>
@endSection
+1 -4
View File
@@ -10,18 +10,15 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account
Route::post('/attempt', 'UserAuthenticationController@authenticate')->name('attempt');
});
// Route::group(['prefix' => 'password', 'as' => 'password.'], function () {
// Route::post('/forget', 'GeneratePasswordResetController@generate')->name('forget');
// Route::post('/reset', 'ResetPasswordController@reset')->name('reset');
// });
});
Route::group(['middleware' => 'valid.token'], function () {
Route::post('/registration-setp-2', 'UpdateUserController@update')->name('registration');
Route::post('/registration-setp-2', 'RegistrationStep2Controller@create')->name('registration-step-2');
});
Route::post('/registration', 'CreateUserController@create')->name('registration');
+6 -1
View File
@@ -22,10 +22,15 @@ Route::get('account/registration', function () {
return view('pages.accounts.registration');
})->name('registration');
Route::get('account/registration-step-2', function () {
return view('pages.accounts.registration_step_2');
})->name('registration-step-2');
Route::get('account/password/reset/{token}', function ($token){
return view('pages.accounts.authentication.reset_password',['token' => $token]);
})->name('account.password.reset');
route::get('dashboard/', function (){
return 'dashboard page here';
return redirect()->route('registration-step-2');
})->name('dashboard');