Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/exchange into feature/booking

# Conflicts:
#	app/Http/Controllers/BookingController.php
#	vendor/composer/autoload_classmap.php
#	vendor/composer/autoload_static.php
This commit is contained in:
Jack Goh
2018-06-13 15:57:08 +08:00
19 changed files with 17900 additions and 9839 deletions
+1
View File
@@ -1,3 +1,4 @@
APP_NAME=EXCHANGE
APP_NAME=Exchange
APP_ENV=local
APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ=
@@ -44,12 +44,6 @@ class ResetPasswordController extends Controller
}
protected function showResetForm(){
<<<<<<< HEAD
return view('index');
}
=======
return view('index');
}
>>>>>>> dac3e600db54490eae91cffe68b2a7c72b00df87
}
Generated
+233 -217
View File
File diff suppressed because it is too large Load Diff
@@ -15,8 +15,6 @@ class AddBiaInBookingsTable extends Migration
{
Schema::table('bookings', function (Blueprint $table) {
$table->double('bia')->default('0');
;
});
}
@@ -1,37 +0,0 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class MakeUsdNullableInBookingTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('bookings', function($table)
{
$table->double('usd_book_amount', 50)->nullable()->change();
$table->string('usd_book_pay_method')->nullable()->change();
$table->string('usd_book_company_name')->nullable()->change();
$table->string('usd_book_company_address')->nullable()->change();
$table->string('usd_book_swift_code')->nullable()->change();
$table->string('usd_book_cnap')->nullable()->change();
$table->string('usd_book_bank_branch')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
@@ -0,0 +1,50 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class MakeNullableFieldBookingsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('bookings', function (Blueprint $table) {
$table->decimal('rmb_book_amount',9,3)->nullable()->change();
$table->string('rmb_book_pay_method')->nullable()->change();
$table->string('rmb_book_account_name')->nullable()->change();
$table->string('rmb_book_bank_name')->nullable()->change();
$table->string('rmb_book_acc_no')->nullable()->change();
$table->string('rmb_book_bank_branch')->nullable()->change();
$table->decimal('usd_book_amount', 9,3)->nullable()->change();
$table->string('usd_book_pay_method')->nullable()->change();
$table->string('usd_book_company_name')->nullable()->change();
$table->string('usd_book_company_address')->nullable()->change();
$table->string('usd_book_swift_code')->nullable()->change();
$table->string('usd_book_cnap')->nullable()->change();
$table->string('usd_book_bank_branch')->nullable()->change();
$table->boolean('verification_status')->nullable()->change(); // Results in a default value of 1.
// $table->foreign('status_id')
// ->references('id')->on('status')
// ->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('bookings', function (Blueprint $table) {
//
});
}
}
+8260 -786
View File
File diff suppressed because it is too large Load Diff
+5 -3
View File
@@ -11,16 +11,19 @@
"lint": "vue-cli-service lint resources/assets/js"
},
"dependencies": {
"@dmaksimovic/vue-countdown": "^1.0.0",
"@fortawesome/fontawesome": "^1.1.4",
"@fortawesome/fontawesome-free-brands": "^5.0.8",
"@fortawesome/fontawesome-free-regular": "^5.0.8",
"@fortawesome/fontawesome-free-solid": "^5.0.8",
"@fortawesome/vue-fontawesome": "^0.0.22",
"@xkeshi/vue-countdown": "^0.6.0",
"axios": "^0.18.0",
"bootstrap": "^4.0.0",
"element-ui": "^2.3.9",
"jquery": "^3.3.1",
"js-cookie": "^2.2.0",
"npm": "^6.0.1",
"popper.js": "^1.14.1",
"sweetalert2": "^7.15.1",
"vform": "^1.0.0",
@@ -29,8 +32,7 @@
"vue-meta": "^1.4.4",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
"vuex-router-sync": "^5.0.0",
"yarn": "^1.7.0"
"vuex-router-sync": "^5.0.0"
},
"devDependencies": {
"@vue/cli-plugin-eslint": "^3.0.0-beta.6",
@@ -41,6 +43,6 @@
"laravel-mix": "^2.1.1",
"vue-template-compiler": "^2.5.16",
"webpack-bundle-analyzer": "^2.11.1",
"webpack-cli": "^3.0.3"
"webpack-cli": "^2.1.3"
}
}
+2 -2
View File
@@ -3,8 +3,8 @@ import store from '~/store'
import router from '~/router'
import i18n from '~/plugins/i18n'
import App from '~/components/App'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import locale from 'element-ui/lib/locale/lang/en'
import '~/plugins'
+13
View File
@@ -42,6 +42,8 @@
{{ $t('login') }}
</v-button>
<!-- <el-button type="primary" @click="openFullScreen2">As a service</el-button> -->
<!-- GitHub Login Button -->
<login-with-github/>
</div>
@@ -78,6 +80,17 @@ export default {
methods: {
async login () {
const loading = this.$loading({
lock: true,
text: 'Logging in',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
setTimeout(() => {
loading.close();
}, 1500);
// Submit the form.
const { data } = await this.form.post('/api/login')
+237 -70
View File
@@ -1,107 +1,235 @@
<template>
<el-main>
<div class="row">
<div class="col-lg-2 m-auto col-centered">
<el-input placeholder="Amount" v-model="input"></el-input>
</div>
<div class="col-lg-8 m-auto col-centered">
<el-select v-model="value" placeholder="MYR">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-button icon="el-icon-search" circle></el-button>
<el-select v-model="value2" placeholder="RMB">
<el-option v-for="item2 in options2" :key="item2.value2" :label="item2.label2" :value="item2.value2">
</el-option>
</el-select>
</div>
</div>
<!-- Input-Amount -->
<el-row :gutter="20" type="flex" justify="center" align="middle">
<el-col :span="8"><div class="grid-content bg-purple" align="left"><el-input placeholder="Amount" v-model="Booking.amount"></el-input></div></el-col>
<el-col :span="10"><div class="grid-content bg-purple" align="center"> <el-select v-model="value" placeholder="MYR">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-option v-for="item in options2" :key="item.value2" :label="item.label2" :value="item.value2"></el-option>
</el-select></div></el-col>
</el-row>
<!-- Input-Amount-end -->
<hr>
<el-row :gutter="20">
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="Date" sortable :filters="[{text: '2016-05-01', value: '2016-05-01'}, {text: '2016-05-02', value: '2016-05-02'}, {text: '2016-05-03', value: '2016-05-03'}, {text: '2016-05-04', value: '2016-05-04'}]"
:filter-method="filterHandler">
<!-- Rate-Display -->
<br>
<el-row :gutter="20" type="flex" justify="center" align="middle">
<el-col><div class="grid-content bg-purple" align="right"></div></el-col>
<el-col><div class="grid-content bg-purple" align="left"></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">Cash/Bank Transfer</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">Cheque</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">BA</div></el-col>
</el-row>
<el-row :gutter="20" type="flex" justify="center" align="middle">
<el-col><div class="grid-content bg-purple" align="right"><i type="button" class="el-icon-question" circle></i></div></el-col>
<el-col><div class="grid-content bg-purple" align="left">X1 :</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">1.56</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">1.64</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">1.62</div></el-col>
</el-row>
<el-row :gutter="20" type="flex" justify="center" align="middle">
<el-col><div class="grid-content bg-purple"></div></el-col>
<el-col><div class="grid-content bg-purple"></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">
<el-button type="text" @click="dialogFormVisible = true, acceptTerm('x1_cash')">Book</el-button></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">
<el-button type="text" @click="dialogFormVisible = true, acceptTerm('x1_cheque')">Book</el-button></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">
<el-button type="text" @click="dialogFormVisible = true, acceptTerm('x1_ba')">Book</el-button></div></el-col>
</el-row>
<br>
<el-row :gutter="20" type="flex" justify="center" align="middle">
<el-col><div class="grid-content bg-purple" align="right"><i type="button" class="el-icon-question" circle></i></div></el-col>
<el-col><div class="grid-content bg-purple" align="left">X2 :</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">1.56</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">1.64</div></el-col>
<el-col><div class="grid-content bg-purple" align="center">1.62</div></el-col>
</el-row>
<el-row :gutter="20" type="flex" justify="center" align="middle">
<el-col><div class="grid-content bg-purple"></div></el-col>
<el-col><div class="grid-content bg-purple"></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">
<el-button type="text" @click="dialogFormVisible = true, acceptTerm('x2_cash')">Book</el-button></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">
<el-button type="text" @click="dialogFormVisible = true, acceptTerm('x2_cheque')">Book</el-button></div></el-col>
<el-col><div class="grid-content bg-purple" align="center">
<el-button type="text" @click="acceptTerm('x2_ba')">Book</el-button></div></el-col>
</el-row>
<!-- Rate-Display-end -->
<!-- Form_popup -->
<el-dialog title="Booking" :visible.sync="dialogFormVisible" center fullscreen:true>
<el-form><div align="center">
<el-form-item>
<el-input type="text" placeholder="China Beneficiary Account" style="width: 80%" v-model="Booking.account_name"></el-input>
</el-form-item>
<el-form-item>
<el-input type="text" placeholder="Bank Name / AliPay / WechatPay" style="width: 80%" v-model="Booking.bank_name"></el-input>
</el-form-item>
<el-form-item>
<el-input type="text" placeholder="Branch / 分行/支行" style="width: 80%" v-model="Booking.bank_branch"></el-input>
</el-form-item>
<el-form-item>
<el-input type="text" placeholder="Account Number / AliPay_ID / WechatPay_ID" style="width: 80%" v-model="Booking.account_num"></el-input>
</el-form-item></div>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">Cancel</el-button>
<el-button type="submit" @click="createBooking">Book Now</el-button>
</span>
</el-dialog>
<!-- Form_popup-end -->
<!-- Booking_confirmation_popup -->
<el-dialog title="Booking Confirmation" :visible.sync="dialogFormVisible1" center fullscreen:true>
<!-- Table_booking_confirmation -->
<el-table :data="tableData1" align="center">
<el-table-column prop="data1" align="right" width="200"></el-table-column>
<el-table-column prop="data2" align="left" width="200"></el-table-column>
</el-table>
<!-- Table_booking_confirmation-end -->
<span slot="footer" class="dialog-footer">
<!-- <el-button @click="dialogFormVisible = false">Cancel</el-button> -->
<el-button type="primary" @click="dialogFormVisible1 = false">Confirm</el-button>
</span>
</el-dialog>
<!-- Booking_confirmation_popup -->
<br><br>
<hr>
<!-- Booking Table -->
<el-row :gutter="20" >
<div>
<el-table>
<el-table-column label="Order No" sortable width="106">
</el-table-column>
<el-table-column prop="name" label="Order" >
<el-table-column label="Date" sortable width="92">
</el-table-column>
<el-table-column prop="address" label="Term" :formatter="formatter">
<!-- <el-table-column label="Term" :filters="[{text: 'X1', value: 'X1'}, {text: 'X2', value: 'X2'}]" :filter-method="filterHandler">
</el-table-column> -->
<el-table-column label="Rate" sortable width="74">
</el-table-column>
<el-table-column prop="address" label="Rate" :formatter="formatter">
<el-table-column label="Amount" sortable justify="center" width="98">
</el-table-column>
<el-table-column prop="address" label="Amount" :formatter="formatter">
<el-table-column label="Transfer Amount (RMB / USD)" :filters="[{text: 'RMB', value: 'RMB'}, {text: 'USD', value: 'USD'}]" :filter-method="filterHandler" width="133">
</el-table-column>
<el-table-column prop="address" label="Transfer Amount" :formatter="formatter">
<el-table-column label="ETA" sortable width="92">
</el-table-column>
<el-table-column prop="address" label="ETA" :formatter="formatter">
<!-- <el-table-column label="Payment Method" :filters="[{text: 'Cash', value: 'Cash'}, {text: 'Cheque', value: 'Cheque'}, {text: 'BA', value: 'BA'}]" :filter-method="filterHandler">
</el-table-column> -->
<el-table-column label="Status" :filters="[{text: '(1/6)', value: '(1/6) Order Done'}, {text: '(2/6)', value: '(2/6) Waiting for Upload Bank in Slip'}, {text: '(3/6)', value: '(3/6) Order Confirmation'}, {text: '(4/6)', value: '(4/6) Processing Transfer'}, {text: '(5/6)', value: '(5/6) Waiting for Upload PO'}, {text: '(6/6)', value: '(6/6) Order Complete'}]" :filter-method="filterHandler">
</el-table-column>
<el-table-column prop="address" label="Pay Method" :formatter="formatter">
<el-table-column label="Balance Amount (RMB/USD)" sortable width="100">
</el-table-column>
<el-table-column prop="address" label="Status" :formatter="formatter">
<el-table-column label="Time Left" sortable>
</el-table-column>
<el-table-column prop="address" label="Balance" :formatter="formatter">
</el-table-column>
<el-table-column prop="address" label="Time Left" :formatter="formatter">
</el-table-column>
<el-table-column prop="tag" label="Tag" width="100" :filters="[{ text: 'Home', value: 'Home' }, { text: 'Office', value: 'Office' }]"
<el-table-column label="Tag" width="82" :filters="[{ text: 'Success', value: 'Success' }, { text: 'Pending', value: 'Pending' }]"
:filter-method="filterTag" filter-placement="bottom-end">
<template slot-scope="scope">
<el-tag :type="scope.row.tag === 'Home' ? 'primary' : 'success'" disable-transitions>{{scope.row.tag}}</el-tag>
</template>
</el-table-column>
</el-table>
</div>
</el-row>
<!-- Booking Table-end -->
</el-main>
</template>
<script>
import Form from 'vform'
import LoginWithGithub from '~/components/LoginWithGithub'
import store from '~/store'
import axios from 'axios'
export default {
middleware: ['auth'],
data() {
data () {
return {
Booking: {amount:'', account_name:'', bank_name:'', bank_branch:'', account_num:''},
term: '',
options1: [{
value: 'RMB',
label: 'RMB'
}, {
value: 'MYR',
label: 'MYR'
label: 'RMB to MYR'
}],
options2: [{
value2: 'MYR',
label2: 'MYR'
}, {
value2: 'RMB',
label2: 'RMB'
}],
tableData: [{
date: '2016-05-03',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
tag: 'Home'
}, {
date: '2016-05-02',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
tag: 'Office'
}, {
date: '2016-05-04',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
tag: 'Home'
}, {
date: '2016-05-01',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
tag: 'Office'
label2: 'MYR to RMB'
}],
value: '',
value2: '',
input: '',
}
dialogFormVisible: false,
dialogFormVisible1: false,
formLabelWidth: '0px',
tableData1: [{
data1: 'Order Number :',
data2: '001'
},{
data1: 'Date :',
data2: '25/5/2018'
},{
data1: 'Customer Marking :',
data2: 'CIEF/150ECE'
},{
data1: '',
data2: ''
},{
data1: 'Payment Method :',
data2: 'Cash/Bank Transfer'
},{
data1: '',
data2: ''
},{
data1: 'CNY/RMB :',
data2: 'CNY 120,500.00'
},{
data1: '+ Service Charge :',
data2: 'CNY 20.00'
},{
data1: '/ RATE :',
data2: '1.63'
},{
data1: '',
data2: 'MYR 73,848.04'
},{
data1: '+ GST 6% :',
data2: 'MYR 4,430.88'
},{
data1: '',
data2: 'MYR 78,278.92'
},{
data1: '',
data2: ''
},{
data1: 'China Beneficiary Acc :',
data2: ''
},{
data1: '',
data2: 'PENDING'
},{
data1: '',
data2: ''
},{
data1: 'Bank In Amount :',
data2: 'MYR 78,278.92'
},{
data1: '',
data2: ''
}],
};
},
methods: {
formatter(row, column) {
@@ -113,7 +241,46 @@
filterHandler(value, row, column) {
const property = column['property'];
return row[property] === value;
}
}
}
},
acceptTerm: function(newterm){
this.term = newterm
},
createBooking : function(){
this.dialogFormVisible1 = true
let newBooking = {
amount: this.Booking.amount,
account_name: this.Booking.account_name,
bank_name: this.Booking.bank_name,
bank_branch: this.Booking.bank_branch,
account_num: this.Booking.account_num,
term: this.term
}
console.log(newBooking);
axios.post('api/booking', newBooking)
.then((response) => {
console.log(response);
//this code to insert the input data into the database (success)
// this.Booking.amount = amount;
// this.Booking.account_name = account_name;
// this.Booking.bank_name = bank_name;
// this.Booking.branch = bank_branch;
// this.Booking.account_num = account_num;
// this.term = term;
})
.catch((error) => {
console.log(error);
});
},
BookingList(){
axios.get('api/booking')
.then((response) => {
console.log(response);
this.list = response.data;
})
}
},
}
</script>
+84
View File
@@ -0,0 +1,84 @@
<template>
<el-main>
<!-- action="https://jsonplaceholder.typicode.com/posts/" -->
<div align="center">
<h3>Your order has been book</h3>
<h3>Please upload the bank slip</h3>
</div>
<div align="center">
Time Left :
<vue-countdown label="Time Left :" v-on:time-expire="handleTimeExpire" :seconds="3600" v-bind:auto-start="false" ref="countdown"></vue-countdown>
<!-- <button v-on:click="startTimer">Start timer</button> -->
</div><br>
<!-- upload image -->
<el-upload
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove" align="center">
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog><br>
<!-- upload image end -->
<!-- <el-form label-width="300px">
<el-form-item label="Amount (RM) :"> -->
<div align="center">
Amount (RM) : <el-input placeholder="Enter Amount" style="width: 20%"></el-input><br><br>
</div>
<!-- </el-form-item>
</el-form> -->
<div align="center">
<el-button type="submit">Submit</el-button>
<el-button type="text">Upload Later</el-button>
</div>
</el-main>
</template>
<script>
import VueCountdown from '@dmaksimovic/vue-countdown';
export default {
name: 'my-component',
data() {
return {
start: false,
dialogImageUrl: '',
dialogVisible: false
};
},
mounted() {
this.$refs.countdown.start();
},
components: {
'vue-countdown': VueCountdown
},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
handleTimeExpire () {
alert('Time is up!');
},
startTimer () {
this.start = true;
}
}
}
</script>
+2
View File
@@ -6,6 +6,7 @@ const PasswordReset = () => import('~/pages/auth/password/reset').then(m => m.de
const NotFound = () => import('~/pages/errors/404').then(m => m.default || m)
const Home = () => import('~/pages/home').then(m => m.default || m)
const Upload = () => import('~/pages/upload').then(m => m.default || m)
const Settings = () => import('~/pages/settings/index').then(m => m.default || m)
const SettingsProfile = () => import('~/pages/settings/profile').then(m => m.default || m)
const SettingsPassword = () => import('~/pages/settings/password').then(m => m.default || m)
@@ -21,6 +22,7 @@ export default [
{ path: '/password/reset/:token', name: 'password.reset', component: PasswordReset },
{ path: '/home', name: 'home', component: Home },
{ path: '/upload', name: 'upload', component: Upload },
{ path: '/settings',
component: Settings,
children: [
+6
View File
@@ -14,3 +14,9 @@ $border-radius-sm: .15rem;
// Nav Pills
$nav-pills-border-radius: 0;
$primary-color: #FD7014;
$secondary-color: #393E46;
$background-color: #222831;
$text-color: #EEEEEE;
+1
View File
@@ -6,3 +6,4 @@
@import 'elements/navbar';
@import 'elements/buttons';
@import 'elements/transitions';
+2
View File
@@ -25,6 +25,8 @@ $polyfills = [
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{{ config('app.name') }}</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-8716
View File
File diff suppressed because it is too large Load Diff