From 8c31bcc420ee62d7c558f44a20ff2a919f12754c Mon Sep 17 00:00:00 2001 From: weiweitoo Date: Tue, 17 Jul 2018 16:31:37 +0800 Subject: [PATCH 01/20] remove date option in supplier report. upload china bankslip detail should be optional. make accept for uploadpurchaseorder - frontend only --- app/Http/Controllers/BookingController.php | 5 +- .../admin/booking/uploadChinaBankslip.vue | 76 ++++++++-------- .../assets/js/pages/booking/uploadPo.vue | 18 ++-- .../js/pages/booking/uploadUserBankSlip.vue | 91 +++++++++---------- 4 files changed, 93 insertions(+), 97 deletions(-) diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 372e762f..6658cb6e 100644 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -456,7 +456,7 @@ class BookingController extends Controller } $validator = Validator::make($request->all(), [ - 'file' => 'image|mimes:jpg,jpeg,bmp,png' + 'file' => 'image|mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' ]); if($validator->fails()) @@ -470,7 +470,7 @@ class BookingController extends Controller if($validator->fails()) { - return response()->json(['message'=>'Image too large, upload files up to 3 MB'], 400); + return response()->json(['message'=>'File too large, upload files up to 3 MB'], 400); } if(!$user_input_file = $request->file('file')) @@ -739,6 +739,7 @@ class BookingController extends Controller $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); $purchase_order = $booking->purchaseOrder()->first(); + return($purchase_order); if(!$purchase_order){ return response()->json(["message"=> "Please upload your purchase order"],400); diff --git a/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue b/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue index a2cb054c..7d0481ad 100644 --- a/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue +++ b/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue @@ -213,10 +213,10 @@
- + @@ -266,7 +266,7 @@ supplier_options: null, chinaSlipForm: { actual_transfer_amount: null, - date: null, + // date: null, details: null, }, rules: { @@ -275,42 +275,42 @@ message: 'Please input transfer amount', trigger: 'change' }], - date: [{ - required: true, - message: 'Please input date', - trigger: 'change' - }], - details: [{ - required: true, - message: 'Please input details', - trigger: 'change' - }] + // date: [{ + // required: true, + // message: 'Please input date', + // trigger: 'change' + // }], + // details: [{ + // required: true, + // message: 'Please input details', + // trigger: 'change' + // }] }, - pickerOptions1: { - disabledDate(time) { - return time.getTime() > Date.now(); - }, - shortcuts: [{ - text: 'Today', - onClick(picker) { - picker.$emit('pick', new Date()); - } - }, { - text: 'Yesterday', - onClick(picker) { - const date = new Date(); - date.setTime(date.getTime() - 3600 * 1000 * 24); - picker.$emit('pick', date); - } - }, { - text: 'A week ago', - onClick(picker) { - const date = new Date(); - date.setTime(date.getTime() - 3600 * 1000 * 24 * 7); - picker.$emit('pick', date); - } - }] - } + // pickerOptions1: { + // disabledDate(time) { + // return time.getTime() > Date.now(); + // }, + // shortcuts: [{ + // text: 'Today', + // onClick(picker) { + // picker.$emit('pick', new Date()); + // } + // }, { + // text: 'Yesterday', + // onClick(picker) { + // const date = new Date(); + // date.setTime(date.getTime() - 3600 * 1000 * 24); + // picker.$emit('pick', date); + // } + // }, { + // text: 'A week ago', + // onClick(picker) { + // const date = new Date(); + // date.setTime(date.getTime() - 3600 * 1000 * 24 * 7); + // picker.$emit('pick', date); + // } + // }] + // } } }, beforeCreate() { diff --git a/resources/assets/js/pages/booking/uploadPo.vue b/resources/assets/js/pages/booking/uploadPo.vue index 5ce467b5..97f104fc 100644 --- a/resources/assets/js/pages/booking/uploadPo.vue +++ b/resources/assets/js/pages/booking/uploadPo.vue @@ -20,15 +20,16 @@ + accept=".jpeg, .jpg, .png, .bmp, .doc, .docx, .xls, .xlsx, .pdf" + :on-remove="handleRemove" + class="upload-demo" + drag + multiple>
Drop file here or click to upload
-
jpg/png/pdf files with a size less than 3mb
+
bmp/jpeg/jpg/png/pdf/xls/xlxs/doc/docx files with a size less than 3mb

@@ -65,7 +66,7 @@ Order Details -
+
@@ -307,7 +308,8 @@ export default { axios .post('/api/booking/' + this.$route.params.id + '/confirm-po') .then((response) => { - console.log(response) + console.log(12); + console.log(response); this.$message({ showClose: true, message: 'Your PO has been uploaded. We are processing the Invoice.', @@ -321,7 +323,7 @@ export default { }).catch((error) => { this.$message({ showClose: true, - message: 'Please upload purchase order', + message: "Please upload your purchase order", type: 'error', duration: 30000 }) diff --git a/resources/assets/js/pages/booking/uploadUserBankSlip.vue b/resources/assets/js/pages/booking/uploadUserBankSlip.vue index 593af081..5036dd1c 100644 --- a/resources/assets/js/pages/booking/uploadUserBankSlip.vue +++ b/resources/assets/js/pages/booking/uploadUserBankSlip.vue @@ -168,7 +168,6 @@ export default { } this.start = true - loading.close() if (this.booking.timeout < 0){ this.$message({ @@ -182,15 +181,49 @@ export default { }) } }).catch((error) => { - console.log(error) - loading.close() - this.$router.push({ - name: 'notfound' + this.$router.push({ + name: 'notfound' + }) + console.log(error) }) - }) - }, - beforeMount(){ - this.updateBankDetail(); + + axios.get('/api/active-bank') + .then((response) => { + this.active_bank_setting = response.data; + console.log(this.active_bank_setting.x1_bank_id); + var url = ''; + if(this.booking.term === 'x1_cash' || this.booking.term === 'x1_cheque' ||this.booking.term === 'x1_ba'){ + url = '/api/malaysia-bank/' + this.active_bank_setting.x1_bank_id; + } + else if(this.booking.term === 'x2_cash' || this.booking.term === 'x2_cheque' ||this.booking.term === 'x2_ba'){ + url = '/api/malaysia-bank/' + this.active_bank_setting.x2_bank_id; + } + + axios.get(url) + .then((response) => { + this.bankDetail = response.data; + loading.close() + }) + .catch((error) => { + loading.close() + console.log(error); + this.$message({ + showClose: true, + message: 'Fetch data fail', + type: 'error', + duration: 10000 + }); + }); + }) + .catch((error) => { + console.log(error); + this.$message({ + showClose: true, + message: 'Fetch data fail', + type: 'error', + duration: 10000 + }); + }); }, methods: { handleCoutdownend () { @@ -255,46 +288,6 @@ export default { }, startTimer () { this.start = true; - }, - updateBankDetail(){ - axios.get('/api/active-bank') - .then((response) => { - this.active_bank_setting = response.data; - console.log(this.active_bank_setting.x1_bank_id); - this.getBankDetailWithTerm(); - }) - .catch((error) => { - console.log(error); - this.$message({ - showClose: true, - message: 'Fetch data fail', - type: 'error', - duration: 10000 - }); - }); - }, - getBankDetailWithTerm(){ - var url = ''; - if(this.booking.term === 'x1_cash' || this.booking.term === 'x1_cheque' ||this.booking.term === 'x1_ba'){ - url = '/api/malaysia-bank/' + this.active_bank_setting.x1_bank_id; - } - else if(this.booking.term === 'x2_cash' || this.booking.term === 'x2_cheque' ||this.booking.term === 'x2_ba'){ - url = '/api/malaysia-bank/' + this.active_bank_setting.x2_bank_id; - } - - axios.get(url) - .then((response) => { - this.bankDetail = response.data; - }) - .catch((error) => { - console.log(error); - this.$message({ - showClose: true, - message: 'Fetch data fail', - type: 'error', - duration: 10000 - }); - }); } } } From a35c07a79480f0b376bdfb3362d6fb26c7d4dcff Mon Sep 17 00:00:00 2001 From: weiweitoo Date: Wed, 18 Jul 2018 14:35:05 +0800 Subject: [PATCH 02/20] Add admin page 1. show error when upload wrong file in upload po and invoice --- app/Http/Controllers/BookingController.php | 17 +- .../js/pages/admin/booking/bookingDetail.vue | 262 ++++++++++++++++++ .../js/pages/admin/booking/uploadInvoice.vue | 7 +- resources/assets/js/pages/admin/home.vue | 2 +- .../assets/js/pages/booking/uploadPo.vue | 9 +- resources/assets/js/router/routes.js | 2 + 6 files changed, 286 insertions(+), 13 deletions(-) create mode 100644 resources/assets/js/pages/admin/booking/bookingDetail.vue diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 6658cb6e..b675e7b5 100644 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -452,16 +452,16 @@ class BookingController extends Controller /* Validation */ if (!$booking) { - return response()->json(['message'=>'Access denied'], 200); + return response()->json(['message'=>'Access denied'], 403); } $validator = Validator::make($request->all(), [ - 'file' => 'image|mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' + 'file' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' ]); if($validator->fails()) { - return response()->json(['message'=>'Incorrect format'],200); + return response()->json(['message'=>'Incorrect format'],400); } $validator = Validator::make($request->all(), [ @@ -475,7 +475,7 @@ class BookingController extends Controller if(!$user_input_file = $request->file('file')) { - return response()->json(['message' => 'No file detected'], 400); + return response()->json(['message' => 'No file detected'], 404); } /* End Validation */ @@ -495,7 +495,8 @@ class BookingController extends Controller $user_po->save(); $booking->status = 6; - $booking->admin_status = 7; + // $booking->admin_status = 7; + $booking->admin_status = 6; $booking->save(); return response()->json(['message'=>'Success'],200); @@ -678,16 +679,16 @@ class BookingController extends Controller /* Validation */ if (!$booking) { - return response()->json(['message'=>'Access denied'], 200); + return response()->json(['message'=>'Access denied'], 403); } $validator = Validator::make($request->all(), [ - 'invoice_path' => 'mimes:jpg,jpeg,bmp,png,pdf,doc,docx' + 'invoice_path' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' ]); if($validator->fails()) { - return response()->json(['message'=>'Incorrect format'],200); + return response()->json(['message'=>'Incorrect format'],400); } $validator = Validator::make($request->all(), [ diff --git a/resources/assets/js/pages/admin/booking/bookingDetail.vue b/resources/assets/js/pages/admin/booking/bookingDetail.vue new file mode 100644 index 00000000..82d2b812 --- /dev/null +++ b/resources/assets/js/pages/admin/booking/bookingDetail.vue @@ -0,0 +1,262 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/uploadInvoice.vue b/resources/assets/js/pages/admin/booking/uploadInvoice.vue index 8d08a264..cfc0652f 100644 --- a/resources/assets/js/pages/admin/booking/uploadInvoice.vue +++ b/resources/assets/js/pages/admin/booking/uploadInvoice.vue @@ -192,6 +192,7 @@ @@ -199,7 +200,7 @@
Drop file here or click to upload
-
jpg/png/pdf files with a size less than 3mb
+
bmp/jpeg/jpg/png/pdf/xls/xlxs/doc/docx files with a size less than 3mb

@@ -369,12 +370,16 @@ }, handleRemove(file, fileList) { console.log(file, fileList); + // Should send some reqeust to controller to delete the file }, handlePreview(file) { console.log(file); }, handleExceed(file){ console.log(file) + }, + uploadError(file,fileList){ + this.$message.warning(`Incorrect file format or file size too big.`) } } } diff --git a/resources/assets/js/pages/admin/home.vue b/resources/assets/js/pages/admin/home.vue index d9e5f9b5..80b66878 100644 --- a/resources/assets/js/pages/admin/home.vue +++ b/resources/assets/js/pages/admin/home.vue @@ -86,7 +86,7 @@ export default { switch (this.status) { case 1: this.$router.push({ - name: 'booking.admin.pending', + name: 'booking.admin.booking.detail', params: {id: booking_id } }) break diff --git a/resources/assets/js/pages/booking/uploadPo.vue b/resources/assets/js/pages/booking/uploadPo.vue index 97f104fc..c786eaa7 100644 --- a/resources/assets/js/pages/booking/uploadPo.vue +++ b/resources/assets/js/pages/booking/uploadPo.vue @@ -20,9 +20,10 @@ @@ -308,8 +309,6 @@ export default { axios .post('/api/booking/' + this.$route.params.id + '/confirm-po') .then((response) => { - console.log(12); - console.log(response); this.$message({ showClose: true, message: 'Your PO has been uploaded. We are processing the Invoice.', @@ -332,6 +331,7 @@ export default { }, handleRemove (file, fileList) { console.log(file, fileList) + // Should send some reqeust to controller to delete the file }, handlePreview (file) { console.log(file) @@ -341,6 +341,9 @@ export default { }, beforeRemove (file, fileList) { return this.$confirm(`确定移除 ${file.name}?`) + }, + uploadError(file,fileList){ + this.$message.warning(`Incorrect file format or file size too big.`) } } } diff --git a/resources/assets/js/router/routes.js b/resources/assets/js/router/routes.js index 4e2231a0..3bec3b2b 100644 --- a/resources/assets/js/router/routes.js +++ b/resources/assets/js/router/routes.js @@ -26,6 +26,7 @@ const Completed = () => import('~/pages/booking/completed').then(m => m.default const PurchaseOrder = () => import('~/pages/booking/po').then(m => m.default || m) // Admin booking +const BookingDetail = () => import('~/pages/admin/booking/bookingDetail').then(m => m.default || m) const Verification = () => import('~/pages/admin/booking/verification').then(m => m.default || m) const Supplier = () => import('~/pages/admin/booking/supplierBooking').then(m => m.default || m) const SupplierReport = () => import('~/pages/admin/booking/supplierReport').then(m => m.default || m) @@ -72,6 +73,7 @@ export default [ { path: '/booking/:id/complete', name: 'booking.user.complete', component: Completed }, // Admin booking + { path: '/booking/:id/booking-detail', name: 'booking.admin.booking.detail', component: BookingDetail }, { path: '/booking/:id/verification', name: 'booking.admin.verification', component: Verification }, { path: '/booking/:id/supplier', name: 'booking.admin.supplier', component: Supplier }, { path: '/booking/:id/supplier-report', name: 'booking.admin.supplier.report', component: SupplierReport }, From 812040a4333dd9dc015f4239ee1906fe0350e754 Mon Sep 17 00:00:00 2001 From: weiweitoo Date: Wed, 18 Jul 2018 15:38:06 +0800 Subject: [PATCH 03/20] fix timezone issue. Add refresh rate button. Add success message for all refresh button. Fix typo in user step 4 --- config/app.php | 2 +- .../assets/js/components/LocaleDropdown.vue | 57 ++++++++----------- .../js/pages/admin/booking/supplierReport.vue | 2 +- .../admin/booking/uploadChinaBankslip.vue | 2 +- .../js/pages/admin/booking/uploadInvoice.vue | 1 + resources/assets/js/pages/admin/home.vue | 15 ++++- .../assets/js/pages/booking/transfer.vue | 2 +- .../js/pages/booking/uploadUserBankSlip.vue | 1 + resources/assets/js/pages/home.vue | 36 ++++++++++-- 9 files changed, 73 insertions(+), 45 deletions(-) diff --git a/config/app.php b/config/app.php index 9d2e4b07..03944677 100644 --- a/config/app.php +++ b/config/app.php @@ -65,7 +65,7 @@ return [ | */ - 'timezone' => 'UTC', + 'timezone' => 'Asia/Singapore', /* |-------------------------------------------------------------------------- diff --git a/resources/assets/js/components/LocaleDropdown.vue b/resources/assets/js/components/LocaleDropdown.vue index 822dfcb4..6faefff5 100644 --- a/resources/assets/js/components/LocaleDropdown.vue +++ b/resources/assets/js/components/LocaleDropdown.vue @@ -34,20 +34,20 @@ - + - X1:    Cash : - Cheque : - BA : + X1:    Cash : + Cheque : + BA :
- X2:    Cash : - Cheque : - BA : + X2:    Cash : + Cheque : + BA :

Cancel - Save + Save
@@ -74,21 +74,13 @@ export default { UpdateRateDialogVisible: false, DoneUpdateRateDialogVisible: false, rate: { - x1_ba: null, - x1_cheque: null, - x1_cash: null, - x2_ba: null, - x2_cash: null, - x2_cheque: null, + x1_ba: null, + x1_cheque: null, + x1_cash: null, + x2_ba: null, + x2_cash: null, + x2_cheque: null, }, - rateForm: { - x1_cash: '', - x1_cheque: '', - x1_ba: '', - x1_cash: '', - x1_cheque: '', - x1_ba: '', - }, rules: { x1_cash: [ { required: true, message: 'Please input rate for X1 Cash', trigger: 'change'}, @@ -123,11 +115,9 @@ export default { user: 'auth/user', role: 'auth/role' }), - - mounted () { - this.getRate() + mounted () { + this.getRate(); }, - methods: { setLocale (locale) { if (this.$i18n.locale !== locale) { @@ -140,10 +130,9 @@ export default { let $this = this axios.get('/api/rate').then(response => { this.rate = response.data - console.log(this.rate) + console.log(this.rate); }) }, - createRate: function () { this.loading = true, this.dialogFormVisible1 = true @@ -179,12 +168,12 @@ export default { this.$refs[formName].validate((valid) => { if (valid) { let newRate = { - x1_cash: this.rateForm.x1_cash, - x1_cheque: this.rateForm.x1_cheque, - x1_ba: this.rateForm.x1_ba, - x2_cash: this.rateForm.x2_cash, - x2_cheque: this.rateForm.x2_cheque, - x2_ba: this.rateForm.x2_ba, + x1_cash: this.rate.x1_cash, + x1_cheque: this.rate.x1_cheque, + x1_ba: this.rate.x1_ba, + x2_cash: this.rate.x2_cash, + x2_cheque: this.rate.x2_cheque, + x2_ba: this.rate.x2_ba, } axios.post('/api/update-rate', newRate) diff --git a/resources/assets/js/pages/admin/booking/supplierReport.vue b/resources/assets/js/pages/admin/booking/supplierReport.vue index 9f20635c..6cff23ee 100644 --- a/resources/assets/js/pages/admin/booking/supplierReport.vue +++ b/resources/assets/js/pages/admin/booking/supplierReport.vue @@ -5,7 +5,7 @@


-
Supplier Report
+
Supplier Report

diff --git a/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue b/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue index 7d0481ad..158489c3 100644 --- a/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue +++ b/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue @@ -206,6 +206,7 @@ Click to upload
jpg/png files with a size less than 3 MB
@@ -371,7 +372,6 @@ duration: 10000 }) }) - } else { this.loading_btn = false this.$message({ diff --git a/resources/assets/js/pages/admin/booking/uploadInvoice.vue b/resources/assets/js/pages/admin/booking/uploadInvoice.vue index cfc0652f..c48aa193 100644 --- a/resources/assets/js/pages/admin/booking/uploadInvoice.vue +++ b/resources/assets/js/pages/admin/booking/uploadInvoice.vue @@ -193,6 +193,7 @@ diff --git a/resources/assets/js/pages/admin/home.vue b/resources/assets/js/pages/admin/home.vue index 80b66878..5e4f2ab8 100644 --- a/resources/assets/js/pages/admin/home.vue +++ b/resources/assets/js/pages/admin/home.vue @@ -62,14 +62,25 @@ export default { } }, mounted () { - this.RefreshBooking() + this.getBooking() }, methods: { + getBooking() { + let $this = this + axios.get(this.url).then(response => { + this.bookingTable = response.data + }) + }, RefreshBooking() { let $this = this axios.get(this.url).then(response => { this.bookingTable = response.data - console.log(this.bookingTable); + this.$message({ + showClose: true, + message: 'Booking is updated', + type: 'success', + duration: 5000 + }) }) }, filterTag (value, row) { diff --git a/resources/assets/js/pages/booking/transfer.vue b/resources/assets/js/pages/booking/transfer.vue index 5fac361e..94fce616 100644 --- a/resources/assets/js/pages/booking/transfer.vue +++ b/resources/assets/js/pages/booking/transfer.vue @@ -3,7 +3,7 @@
-

Bankin Slip Aprroved

Transfer In Progress

+

Bankin Slip Approved

Transfer In Progress


Go Back
diff --git a/resources/assets/js/pages/booking/uploadUserBankSlip.vue b/resources/assets/js/pages/booking/uploadUserBankSlip.vue index 5036dd1c..b8abc5f2 100644 --- a/resources/assets/js/pages/booking/uploadUserBankSlip.vue +++ b/resources/assets/js/pages/booking/uploadUserBankSlip.vue @@ -57,6 +57,7 @@ diff --git a/resources/assets/js/pages/home.vue b/resources/assets/js/pages/home.vue index c045ed52..48e105c6 100644 --- a/resources/assets/js/pages/home.vue +++ b/resources/assets/js/pages/home.vue @@ -23,6 +23,10 @@ + +
+ Refresh Rate
+

@@ -388,16 +392,15 @@ export default { } }, mounted () { - this.getBooking() - this.RefreshBooking() - this.getRate() + this.getBooking(); + this.initBooking(); + this.getRate(); }, methods: { getRate(){ let $this = this axios.get(this.url).then(response => { this.bookingTable = response.data.data - $this.makePagination(response.data) }) }, @@ -405,13 +408,36 @@ export default { let $this = this axios.get('api/rate').then(response => { this.rate = response.data - console.log(this.rate) + }) + }, + refreshRate() { + let $this = this + axios.get('api/rate').then(response => { + this.rate = response.data + this.$message({ + showClose: true, + message: 'Rate is updated', + type: 'success', + duration: 5000 + }) + }) + }, + initBooking() { + let $this = this + axios.get(this.url).then(response => { + this.bookingTable = response.data.data }) }, RefreshBooking() { let $this = this axios.get(this.url).then(response => { this.bookingTable = response.data.data + this.$message({ + showClose: true, + message: 'Booking is updated', + type: 'success', + duration: 5000 + }) }) }, makePagination(data){ From eda6aabecfb72fc9008edf0dd442fc35d3ac1717 Mon Sep 17 00:00:00 2001 From: weiweitoo Date: Wed, 18 Jul 2018 17:31:11 +0800 Subject: [PATCH 04/20] Fix filter --- resources/assets/js/pages/admin/home.vue | 28 +++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/resources/assets/js/pages/admin/home.vue b/resources/assets/js/pages/admin/home.vue index 5e4f2ab8..3c7d02a4 100644 --- a/resources/assets/js/pages/admin/home.vue +++ b/resources/assets/js/pages/admin/home.vue @@ -12,16 +12,16 @@ - + - - +