From db7e30ea95a0805bfa97b51fa7f7c59efde042bc Mon Sep 17 00:00:00 2001 From: Too Date: Thu, 21 Jun 2018 13:15:36 +0800 Subject: [PATCH] add upload invoice and test --- app/Http/Controllers/BookingController.php | 660 ++++++++++-------- app/Invoice.php | 10 + ...2018_06_21_040652_create_invoice_table.php | 35 + routes/api.php | 3 + tests/Feature/BookingTest.php | 24 +- vendor/composer/autoload_classmap.php | 7 +- vendor/composer/autoload_static.php | 7 +- 7 files changed, 434 insertions(+), 312 deletions(-) create mode 100644 app/Invoice.php create mode 100644 database/migrations/2018_06_21_040652_create_invoice_table.php diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 722e6416..5d63d9eb 100644 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -9,6 +9,7 @@ use App\Booking; use App\Rate; use App\UserBankSlip; use App\User; +use App\Invoice; use Auth; use Validator; use DateTime; @@ -16,368 +17,413 @@ use DateTime; class BookingController extends Controller { - public function show($id) - { - $booking = Booking::where('user_id',Auth::user()->id)->where('id', $id)->first(); + public function show($id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id', $id)->first(); - $date1 = new DateTime($booking->created_at); - $date2 = new DateTime(); - $difference_in_seconds = ($date1->format('U') + 600) - ($date2->format('U')); + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $difference_in_seconds = ($date1->format('U') + 600) - ($date2->format('U')); - + - $booking->timeout = $difference_in_seconds; + $booking->timeout = $difference_in_seconds; - if (!$booking){ - return response()->json(['success'=>false, 'message'=>'not found'], 404); - } - return $booking; - } + if (!$booking){ + return response()->json(['success'=>false, 'message'=>'not found'], 404); + } + return $booking; + } - public function store(Request $request) - { - $rates = Rate::orderby('updated_at','desc')->first(); - $term = $request->input('term'); - $amount = $request->input("amount"); - $user = Auth::user(); - $rate = 1; // default rate to 1 + public function store(Request $request) + { + $rates = Rate::orderby('updated_at','desc')->first(); + $term = $request->input('term'); + $amount = $request->input("amount"); + $user = Auth::user(); + $rate = 1; // default rate to 1 - switch ($term) { - case "x1_cash": - $rate = $rates->x1_cash; - break; - case "x1_cheque": - $rate = $rates->x1_cheque; - break; - case "x1_ba": - $rate = $rates->x1_ba; - break; - case "x2_cash": - $rate = $rates->x2_cash; - break; - case "x2_cheque": - $rate = $rates->x2_cheque; - break; - case "x2_ba": - $rate = $rates->x2_ba; - break; - default: - return response()->json([ - 'success' => false, - 'message' => 'Invalid input', - ], 422); - break; - } - - // Service charge (RMB) : if amount higher than 10,000, no service charge. if amount lower than 10,000, 20.00 service charge - if ($amount >= 10000 && ($term == 'x2_cash' || $term = 'x2_cheque' || $term = 'x2_ba')) { - $svcharge = 0; - } else { - $svcharge = 20.00; - } + switch ($term) { + case "x1_cash": + $rate = $rates->x1_cash; + break; + case "x1_cheque": + $rate = $rates->x1_cheque; + break; + case "x1_ba": + $rate = $rates->x1_ba; + break; + case "x2_cash": + $rate = $rates->x2_cash; + break; + case "x2_cheque": + $rate = $rates->x2_cheque; + break; + case "x2_ba": + $rate = $rates->x2_ba; + break; + default: + return response()->json([ + 'success' => false, + 'message' => 'Invalid input', + ], 422); + break; + } + + // Service charge (RMB) : if amount higher than 10,000, no service charge. if amount lower than 10,000, 20.00 service charge + if ($amount >= 10000 && ($term == 'x2_cash' || $term = 'x2_cheque' || $term = 'x2_ba')) { + $svcharge = 0; + } else { + $svcharge = 20.00; + } - // initial rmb to myr amount - $RMBinMYR = (($amount + $svcharge) / $rate); + // initial rmb to myr amount + $RMBinMYR = (($amount + $svcharge) / $rate); - // TODO : Should be remove this ? - // gst 0% - $gst = 0 * $RMBinMYR; + // TODO : Should be remove this ? + // gst 0% + $gst = 0 * $RMBinMYR; - // Sales tax : 10 % - $sales_tax = 0.10 * $RMBinMYR; + // Sales tax : 10 % + $sales_tax = 0.10 * $RMBinMYR; - // Billing fees : 1.5% - $billing = 0.015 * $RMBinMYR; + // Billing fees : 1.5% + $billing = 0.015 * $RMBinMYR; - // Bank in amount - $bia = round($RMBinMYR + $gst + $sales_tax + $billing, 2); + // Bank in amount + $bia = round($RMBinMYR + $gst + $sales_tax + $billing, 2); - $booking = new Booking(); - $booking->account_name = $request->input('account_name'); - $booking->account_num = $request->input('account_num'); - $booking->bank_name = $request->input('bank_name'); - $booking->bank_branch = $request->input('bank_branch'); - $booking->amount = $request->input('amount'); - $booking->term = $term; - $booking->rate_id = $rates->id; - $booking->rmb_book_amount = $request->input('amount'); - $booking->bia = $bia; - // $booking->user_id = $user->id; - $booking->user()->associate($user); - + $booking = new Booking(); + $booking->account_name = $request->input('account_name'); + $booking->account_num = $request->input('account_num'); + $booking->bank_name = $request->input('bank_name'); + $booking->bank_branch = $request->input('bank_branch'); + $booking->amount = $request->input('amount'); + $booking->term = $term; + $booking->rate_id = $rates->id; + $booking->rmb_book_amount = $request->input('amount'); + $booking->bia = $bia; + // $booking->user_id = $user->id; + $booking->user()->associate($user); + - // The test failed due to ->save() before filling up the information at below + // The test failed due to ->save() before filling up the information at below - // TODO : handle RMB, MYR and USD (we can use exchange type: USDtoMYR, RMBtoMYR vise versa to switch case) - // $booking->rmb_book_pay_method = $request->input('payment_method'); - // $booking->rmb_book_account_name = $request->input('rmb_book_account_name'); - // $booking->rmb_book_acc_no = $request->input('rmb_book_acc_no'); - // $booking->rmb_book_bank_branch = $request->input('rmb_book_bank_branch'); - // $booking->company_name = $request->input('company_name'); - // $booking->company_address = $request->input('company_address'); - // $booking->bank_address = $request->input('bank_address'); - // $booking->swift_code = $request->input('swift_code'); - // $booking->cnap = $request->input('cnap'); - // $booking->term = $request->input('term'); + // TODO : handle RMB, MYR and USD (we can use exchange type: USDtoMYR, RMBtoMYR vise versa to switch case) + // $booking->rmb_book_pay_method = $request->input('payment_method'); + // $booking->rmb_book_account_name = $request->input('rmb_book_account_name'); + // $booking->rmb_book_acc_no = $request->input('rmb_book_acc_no'); + // $booking->rmb_book_bank_branch = $request->input('rmb_book_bank_branch'); + // $booking->company_name = $request->input('company_name'); + // $booking->company_address = $request->input('company_address'); + // $booking->bank_address = $request->input('bank_address'); + // $booking->swift_code = $request->input('swift_code'); + // $booking->cnap = $request->input('cnap'); + // $booking->term = $request->input('term'); - // $booking->usd_book_amount = $request->input('usd_book_amount'); - // $booking->usd_book_pay_method = $request->input('usd_book_pay_method'); - // $booking->usd_book_company_name = $request->input('usd_book_company_name'); - // $booking->usd_book_company_address = $request->input('usd_book_company_address'); - // $booking->usd_book_swift_code = $request->input('usd_book_swift_code'); - // $booking->usd_book_cnap = $request->input('usd_book_cnap'); - // $booking->usd_book_bank_branch = $request->input('usd_book_bank_branch'); - // $booking->verification_status = $request->input('verification_status'); - $booking->save(); - return response()->json($booking, 201); - } + // $booking->usd_book_amount = $request->input('usd_book_amount'); + // $booking->usd_book_pay_method = $request->input('usd_book_pay_method'); + // $booking->usd_book_company_name = $request->input('usd_book_company_name'); + // $booking->usd_book_company_address = $request->input('usd_book_company_address'); + // $booking->usd_book_swift_code = $request->input('usd_book_swift_code'); + // $booking->usd_book_cnap = $request->input('usd_book_cnap'); + // $booking->usd_book_bank_branch = $request->input('usd_book_bank_branch'); + // $booking->verification_status = $request->input('verification_status'); + $booking->save(); + return response()->json($booking, 201); + } - public function update(Request $request, $book_id) - { - $book_id = Booking::find($book_id); - $book_id->account_name = $request->input('account_name'); - $book_id->account_num = $request->input('account_num'); - $book_id->bank_name = $request->input('bank_name'); - $book_id->bank_branch = $request->input('bank_branch'); - $book_id->company_name = $request->input('company_name'); - $book_id->company_address = $request->input('company_address'); - $book_id->bank_address = $request->input('bank_address'); - $book_id->swift_code = $request->input('swift_code'); - $book_id->cnap = $request->input('cnap'); - $book_id->save(); + public function update(Request $request, $book_id) + { + $book_id = Booking::find($book_id); + $book_id->account_name = $request->input('account_name'); + $book_id->account_num = $request->input('account_num'); + $book_id->bank_name = $request->input('bank_name'); + $book_id->bank_branch = $request->input('bank_branch'); + $book_id->company_name = $request->input('company_name'); + $book_id->company_address = $request->input('company_address'); + $book_id->bank_address = $request->input('bank_address'); + $book_id->swift_code = $request->input('swift_code'); + $book_id->cnap = $request->input('cnap'); + $book_id->save(); - return response()->json(['book_id'=>$book_id],200); - } + return response()->json(['book_id'=>$book_id],200); + } - public function uploadbankslip(Request $request, $id) - { - $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); - - /* Validation*/ - if (!$booking) - { - return response()->json(['message'=>'Access denied'], 200); - } + public function uploadbankslip(Request $request, $id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + + /* Validation*/ + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 200); + } - $validator = Validator::make($request->all(), [ - 'file' => 'image|mimes:jpg,jpeg,bmp,png' - ]); + $validator = Validator::make($request->all(), [ + 'file' => 'image|mimes:jpg,jpeg,bmp,png' + ]); - if($validator->fails()) - { - return response()->json(['message'=>'Incorrect format'],200); - } + if($validator->fails()) + { + return response()->json(['message'=>'Incorrect format'],200); + } - if(!$bankslip_file = $request->file('file')) - { - return response()->json(['message' => 'No file detected'], 400); - } - /* End Validation */ - $filename = $bankslip_file->getClientOriginalName(); - $ext = $bankslip_file->getClientOriginalExtension(); - $input['file'] = $filename; + if(!$bankslip_file = $request->file('file')) + { + return response()->json(['message' => 'No file detected'], 400); + } + /* End Validation */ + $filename = $bankslip_file->getClientOriginalName(); + $ext = $bankslip_file->getClientOriginalExtension(); + $input['file'] = $filename; - $unique_name = 'bank_slip_' . md5($filename. time()); // probably not a good idea - $unique_image_url = $unique_name. '.' .$ext; - Storage::putFileAs( - 'user_bankslip', $bankslip_file, $unique_image_url - ); + $unique_name = 'bank_slip_' . md5($filename. time()); // probably not a good idea + $unique_image_url = $unique_name. '.' .$ext; + Storage::putFileAs( + 'user_bankslip', $bankslip_file, $unique_image_url + ); - $user_bankslip = new UserBankSlip; - $user_bankslip->booking_id = $booking->id; - $user_bankslip->bankslip_url = $unique_image_url; - $user_bankslip->transfer_amount = $request->input('transfer_amount'); - $user_bankslip->save(); + $user_bankslip = new UserBankSlip; + $user_bankslip->booking_id = $booking->id; + $user_bankslip->bankslip_url = $unique_image_url; + $user_bankslip->transfer_amount = $request->input('transfer_amount'); + $user_bankslip->save(); - return response()->json(['message'=>"Success"],200); - } + return response()->json(['message'=>"Success"],200); + } - public function updateBankSlipAmount(Request $request, $id){ - $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); - $user_bankslip = $booking->userBankSlip()->first(); + public function updateBankSlipAmount(Request $request, $id){ + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + $user_bankslip = $booking->userBankSlip()->first(); - if(!$user_bankslip){ - return response()->json(["message"=> "not found"],400); - } - $user_bankslip->transfer_amount = $request->input('transfer_amount'); - $user_bankslip->save(); - return response()->json(["message"=> "Success"],200); - } + if(!$user_bankslip){ + return response()->json(["message"=> "not found"],400); + } + $user_bankslip->transfer_amount = $request->input('transfer_amount'); + $user_bankslip->save(); + return response()->json(["message"=> "Success"],200); + } - public function uploadPurchaseOrder(Request $request, $id) - { - $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + public function uploadPurchaseOrder(Request $request, $id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); - /* Validation */ - if (!$booking) - { - return response()->json(['message'=>'Access denied'], 200); - } + /* Validation */ + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 200); + } - $validator = Validator::make($request->all(), [ - 'file' => 'image|mimes:jpg,jpeg,bmp,png' - ]); + $validator = Validator::make($request->all(), [ + 'file' => 'image|mimes:jpg,jpeg,bmp,png' + ]); - if($validator->fails()) - { - return response()->json(['message'=>'Incorrect format'],200); - } + if($validator->fails()) + { + return response()->json(['message'=>'Incorrect format'],200); + } - if(!$user_input_file = $request->file('file')) - { - return response()->json(['message' => 'No file detected'], 400); - } - /* End Validation */ + if(!$user_input_file = $request->file('file')) + { + return response()->json(['message' => 'No file detected'], 400); + } + /* End Validation */ - $filename = $user_input_file->getClientOriginalName(); - $ext = $user_input_file->getClientOriginalExtension(); + $filename = $user_input_file->getClientOriginalName(); + $ext = $user_input_file->getClientOriginalExtension(); - $input['file'] = $filename; - $unique_name = 'purchase_order_' . md5($filename. time()); - $unique_image_url = $unique_name. '.' .$ext; - Storage::putFileAs( - 'file',/*folder name*/ $user_input_file, $unique_image_url - ); + $input['file'] = $filename; + $unique_name = 'purchase_order_' . md5($filename. time()); + $unique_image_url = $unique_name. '.' .$ext; + Storage::putFileAs( + 'purchase_order',/*folder name*/ $user_input_file, $unique_image_url + ); - $user_po = new PurchaseOrder; - $user_po->image_url = $unique_image_url; - $user_po->book_id = $booking->id; - $user_po->amount = $request->input('amount'); - $user_po->save(); + $user_po = new PurchaseOrder; + $user_po->image_url = $unique_image_url; + $user_po->book_id = $booking->id; + $user_po->amount = $request->input('amount'); + $user_po->save(); - return response()->json(['message'=>'Success'],200); - } + return response()->json(['message'=>'Success'],200); + } - public function delete(Booking $book_id) - { - $booking = Booking::where('user_id', Auth::user())->where('id', $book_id)->firstOrFail(); - $booking->delete($book_id); - return response()->json($book_id, 204); - } + public function delete(Booking $book_id) + { + $booking = Booking::where('user_id', Auth::user())->where('id', $book_id)->firstOrFail(); + $booking->delete($book_id); + return response()->json($book_id, 204); + } - public function cancel(Request $request, $book_id) - { - if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) - { - return response()->json(['message'=>'Access denied'], 200); - } + public function cancel(Request $request, $book_id) + { + if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) + { + return response()->json(['message'=>'Access denied'], 200); + } - $booking->is_cancel = true; - $booking->save(); + $booking->is_cancel = true; + $booking->save(); - return response()->json(['message'=>'Success'],200); - } + return response()->json(['message'=>'Success'],200); + } - public function calculation(Request $request){ - $amount = $request->input('amount'); - $term = $request->input('term'); - $china_beneficiary = $request->input('china_beneficiary'); - $rates = Rate::orderby('updated_at','desc')->first(); + public function calculation(Request $request) + { + $amount = $request->input('amount'); + $term = $request->input('term'); + $china_beneficiary = $request->input('china_beneficiary'); + $rates = Rate::orderby('updated_at','desc')->first(); - // TODO : get marking - $marking = "123X"; + // TODO : get marking + $marking = "123X"; - switch ($term) { - case "x1_cash": - $rate = $rates->x1_cash; - $payment_method = "cash"; - break; - case "x1_cheque": - $rate = $rates->x1_cheque; - $payment_method = "Cheque"; - break; - case "x1_ba": - $rate = $rates->x1_ba; - $payment_method = "BA"; - break; - case "x2_cash": - $rate = $rates->x2_cash; - $payment_method = "Cash"; - break; - case "x2_cheque": - $rate = $rates->x2_cheque; - $payment_method = "Cheque"; - break; - case "x2_ba": - $rate = $rates->x2_ba; - $payment_method = "BA"; - break; - default: - return response()->json([ - 'success' => false, - 'message' => 'Invalid input', - ], 422); - break; - } + switch ($term) { + case "x1_cash": + $rate = $rates->x1_cash; + $payment_method = "cash"; + break; + case "x1_cheque": + $rate = $rates->x1_cheque; + $payment_method = "Cheque"; + break; + case "x1_ba": + $rate = $rates->x1_ba; + $payment_method = "BA"; + break; + case "x2_cash": + $rate = $rates->x2_cash; + $payment_method = "Cash"; + break; + case "x2_cheque": + $rate = $rates->x2_cheque; + $payment_method = "Cheque"; + break; + case "x2_ba": + $rate = $rates->x2_ba; + $payment_method = "BA"; + break; + default: + return response()->json([ + 'success' => false, + 'message' => 'Invalid input', + ], 422); + break; + } - if ($amount >= 10000 && ($term == 'x2_cash' || $term = 'x2_cheque' || $term = 'x2_ba')) { - $svcharge = 0; - } else { - $svcharge = 20.00; - } + if ($amount >= 10000 && ($term == 'x2_cash' || $term = 'x2_cheque' || $term = 'x2_ba')) { + $svcharge = 0; + } else { + $svcharge = 20.00; + } - $bankin_amount = round(($amount + $svcharge) / $rate + (0 * ($amount + $svcharge)), 2); + $bankin_amount = round(($amount + $svcharge) / $rate + (0 * ($amount + $svcharge)), 2); - return response()->json([ - 'date' => date('Y-m-d'), - 'marking' => $marking, - 'amount' => $amount, - 'payment_method' => $payment_method, - 'service_charge' => $svcharge, - 'rate' => $rate, - 'bankin_amount' => $bankin_amount, - 'china_beneficary' => $china_beneficiary - ], 200); - } + return response()->json([ + 'date' => date('Y-m-d'), + 'marking' => $marking, + 'amount' => $amount, + 'payment_method' => $payment_method, + 'service_charge' => $svcharge, + 'rate' => $rate, + 'bankin_amount' => $bankin_amount, + 'china_beneficary' => $china_beneficiary + ], 200); + } - public function approveBankSlip(Request $request, $book_id) - { - if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) - { - return response()->json(['message'=>'Access denied'], 200); - } + public function approveBankSlip(Request $request, $book_id) + { + if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) + { + return response()->json(['message'=>'Access denied'], 200); + } - if(!$userBankSlip = UserBankSlip::where('book_id',$booking->id)->first()) - { - return response()->json(['message'=>'Access denied'], 200); - } + if(!$userBankSlip = UserBankSlip::where('book_id',$booking->id)->first()) + { + return response()->json(['message'=>'Access denied'], 200); + } - // Rejected bankslip cannot be approve again - if($userBankSlip->is_reject == 1) - { - return response()->json(['message'=>'Bankslip already rejected'],200); - } + // Rejected bankslip cannot be approve again + if($userBankSlip->is_reject == 1) + { + return response()->json(['message'=>'Bankslip already rejected'],200); + } - $userBankSlip->is_approve = 1; - $userBankSlip->save(); - return response()->json(['message'=>'Success'],200); - } + $userBankSlip->is_approve = 1; + $userBankSlip->save(); + return response()->json(['message'=>'Success'],200); + } - public function rejectBankSlip(Request $request, $book_id) - { - if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) - { - return response()->json(['message'=>'Access denied'], 200); - } + public function rejectBankSlip(Request $request, $book_id) + { + if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) + { + return response()->json(['message'=>'Access denied'], 200); + } - if(!$userBankSlip = UserBankSlip::where('book_id',$booking->id)->first()) - { - return response()->json(['message'=>'Access denied'], 200); - } + if(!$userBankSlip = UserBankSlip::where('book_id',$booking->id)->first()) + { + return response()->json(['message'=>'Access denied'], 200); + } - // approved bankslip cannot be reject again - if($userBankSlip->is_approve == 1) - { - return response()->json(['message'=>'Bankslip already approved'],200); - } + // approved bankslip cannot be reject again + if($userBankSlip->is_approve == 1) + { + return response()->json(['message'=>'Bankslip already approved'],200); + } - $userBankSlip->is_reject = 1; - $userBankSlip->reject_reason = $request->reject_reason; - $userBankSlip->save(); + $userBankSlip->is_reject = 1; + $userBankSlip->reject_reason = $request->reject_reason; + $userBankSlip->save(); - return response()->json(['message'=>'Success'],200); - } + return response()->json(['message'=>'Success'],200); + } + + public function uploadInvoice(Request $request, $id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + + /* Validation */ + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 200); + } + + $validator = Validator::make($request->all(), [ + 'invoice_url' => 'mimes:jpg,jpeg,bmp,png,pdf,doc,docx' + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'Incorrect format'],200); + } + + if(!$input_file = $request->file('invoice_url')) + { + return response()->json(['message'=>'No file detected'], 400); + } + /* End Validation */ + + $filename = $input_file->getClientOriginalName(); + $ext = $input_file->getClientOriginalExtension(); + + $input['invoice_url'] = $filename; + $unique_name = 'invoice' . md5($filename. time()); + $unique_file_url = $unique_name. '.' .$ext; + Storage::putFileAs( + 'invoice',/*folder name*/ $input_file, $unique_file_url + ); + + $invoice = new Invoice; + $invoice->invoice_url = $unique_file_url; + $invoice->amount = $request->input('amount'); + $invoice->booking_id = $booking->id; + $invoice->save(); + + return response()->json(['message'=>"Success"],200); + } } diff --git a/app/Invoice.php b/app/Invoice.php new file mode 100644 index 00000000..570dc72b --- /dev/null +++ b/app/Invoice.php @@ -0,0 +1,10 @@ +increments('id'); + $table->string('invoice_url'); + $table->double('amount'); + $table->integer('booking_id')->unsigned(); + $table->foreign('booking_id')->references('id')->on('bookings'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invoices'); + } +} diff --git a/routes/api.php b/routes/api.php index dfd4c1e0..353b74a8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -60,6 +60,9 @@ Route::group(['middleware' => 'guest:api'], function () { }); Route::group(['middleware' => 'role:admin'], function() { + + Route::post('booking/{id}/upload-invoice', 'BookingController@uploadInvoice'); + Route::post('update-rate', 'RateController@store'); Route::put('update-rate/{rate}', 'RateController@update'); Route::delete('update-rate/{rate}', 'RateController@delete'); diff --git a/tests/Feature/BookingTest.php b/tests/Feature/BookingTest.php index a30608bc..3f2e92e9 100644 --- a/tests/Feature/BookingTest.php +++ b/tests/Feature/BookingTest.php @@ -107,11 +107,10 @@ class BookingTest extends TestCase $this->actingAs($this->user) ->json('POST', '/api/booking/' . $this->booking->id . '/upload-po', [ - 'file' => UploadedFile::fake()->image('comp.jpg'), + 'file' => $image_url, 'amount' => '12345' ]) ->assertSuccessful(); - } public function testCancel() @@ -128,7 +127,6 @@ class BookingTest extends TestCase ->assertSuccessful(); } - public function testRejectBankSlip() { $this->actingAs($this->user) @@ -137,4 +135,24 @@ class BookingTest extends TestCase ]) ->assertSuccessful(); } + + // Only this is Admin permision required + public function testUploadInvoice(){ + $this->user->roles()->sync([]); + $this->user->attachRole(Role::Where('name','admin')->first()); + + Storage::fake('invoice_url'); + $invoice_url = UploadedFile::fake()->create('document.pdf'); + + if(!file_exists($invoice_url)){ + $response->assertStatus(400); + } + + $this->actingAs($this->user) + ->json('POST', '/api/booking/' . $this->booking->id . '/upload-invoice', [ + 'invoice_url' => $invoice_url, + 'amount' => '12345' + ]) + ->assertSuccessful(); + } } diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index df4e674a..1e80bdb3 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -19,6 +19,7 @@ return array( 'App\\Http\\Controllers\\BookingController' => $baseDir . '/app/Http/Controllers/BookingController.php', 'App\\Http\\Controllers\\ChinaBankSlipController' => $baseDir . '/app/Http/Controllers/ChinaBankSlipController.php', 'App\\Http\\Controllers\\Controller' => $baseDir . '/app/Http/Controllers/Controller.php', + 'App\\Http\\Controllers\\MarkingController' => $baseDir . '/app/Http/Controllers/MarkingController.php', 'App\\Http\\Controllers\\RateController' => $baseDir . '/app/Http/Controllers/RateController.php', 'App\\Http\\Controllers\\SettingBeneficiaryController' => $baseDir . '/app/Http/Controllers/SettingBeneficiaryController.php', 'App\\Http\\Controllers\\SettingCreditController' => $baseDir . '/app/Http/Controllers/SettingCreditController.php', @@ -35,6 +36,7 @@ return array( 'App\\Http\\Middleware\\TrimStrings' => $baseDir . '/app/Http/Middleware/TrimStrings.php', 'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => $baseDir . '/app/Http/Middleware/VerifyCsrfToken.php', + 'App\\Marking' => $baseDir . '/app/Marking.php', 'App\\Notifications\\ResetPassword' => $baseDir . '/app/Notifications/ResetPassword.php', 'App\\OAuthProvider' => $baseDir . '/app/OAuthProvider.php', 'App\\Permission' => $baseDir . '/app/Permission.php', @@ -4128,12 +4130,15 @@ return array( 'Tests\\Browser\\WelcomeTest' => $baseDir . '/tests/Browser/WelcomeTest.php', 'Tests\\CreatesApplication' => $baseDir . '/tests/CreatesApplication.php', 'Tests\\DuskTestCase' => $baseDir . '/tests/DuskTestCase.php', + 'Tests\\Feature\\BookingTest' => $baseDir . '/tests/Feature/BookingTest.php', 'Tests\\Feature\\LocaleTest' => $baseDir . '/tests/Feature/LocaleTest.php', 'Tests\\Feature\\LoginTest' => $baseDir . '/tests/Feature/LoginTest.php', + 'Tests\\Feature\\MarkingTest' => $baseDir . '/tests/Feature/MarkingTest.php', + 'Tests\\Feature\\RateTest' => $baseDir . '/tests/Feature/RateTest.php', 'Tests\\Feature\\RegisterTest' => $baseDir . '/tests/Feature/RegisterTest.php', + 'Tests\\Feature\\SettingCreditTest' => $baseDir . '/tests/Feature/SettingCreditTest.php', 'Tests\\Feature\\SettingsTest' => $baseDir . '/tests/Feature/SettingsTest.php', 'Tests\\TestCase' => $baseDir . '/tests/TestCase.php', - 'Tests\\Unit\\BookingTest\\BookingTest' => $baseDir . '/tests/Feature/BookingTest.php', 'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php', 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index e2b83946..db238916 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -447,6 +447,7 @@ class ComposerStaticInit6dcfe61ea7999ade723f072fea748b5a 'App\\Http\\Controllers\\BookingController' => __DIR__ . '/../..' . '/app/Http/Controllers/BookingController.php', 'App\\Http\\Controllers\\ChinaBankSlipController' => __DIR__ . '/../..' . '/app/Http/Controllers/ChinaBankSlipController.php', 'App\\Http\\Controllers\\Controller' => __DIR__ . '/../..' . '/app/Http/Controllers/Controller.php', + 'App\\Http\\Controllers\\MarkingController' => __DIR__ . '/../..' . '/app/Http/Controllers/MarkingController.php', 'App\\Http\\Controllers\\RateController' => __DIR__ . '/../..' . '/app/Http/Controllers/RateController.php', 'App\\Http\\Controllers\\SettingBeneficiaryController' => __DIR__ . '/../..' . '/app/Http/Controllers/SettingBeneficiaryController.php', 'App\\Http\\Controllers\\SettingCreditController' => __DIR__ . '/../..' . '/app/Http/Controllers/SettingCreditController.php', @@ -463,6 +464,7 @@ class ComposerStaticInit6dcfe61ea7999ade723f072fea748b5a 'App\\Http\\Middleware\\TrimStrings' => __DIR__ . '/../..' . '/app/Http/Middleware/TrimStrings.php', 'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php', + 'App\\Marking' => __DIR__ . '/../..' . '/app/Marking.php', 'App\\Notifications\\ResetPassword' => __DIR__ . '/../..' . '/app/Notifications/ResetPassword.php', 'App\\OAuthProvider' => __DIR__ . '/../..' . '/app/OAuthProvider.php', 'App\\Permission' => __DIR__ . '/../..' . '/app/Permission.php', @@ -4556,12 +4558,15 @@ class ComposerStaticInit6dcfe61ea7999ade723f072fea748b5a 'Tests\\Browser\\WelcomeTest' => __DIR__ . '/../..' . '/tests/Browser/WelcomeTest.php', 'Tests\\CreatesApplication' => __DIR__ . '/../..' . '/tests/CreatesApplication.php', 'Tests\\DuskTestCase' => __DIR__ . '/../..' . '/tests/DuskTestCase.php', + 'Tests\\Feature\\BookingTest' => __DIR__ . '/../..' . '/tests/Feature/BookingTest.php', 'Tests\\Feature\\LocaleTest' => __DIR__ . '/../..' . '/tests/Feature/LocaleTest.php', 'Tests\\Feature\\LoginTest' => __DIR__ . '/../..' . '/tests/Feature/LoginTest.php', + 'Tests\\Feature\\MarkingTest' => __DIR__ . '/../..' . '/tests/Feature/MarkingTest.php', + 'Tests\\Feature\\RateTest' => __DIR__ . '/../..' . '/tests/Feature/RateTest.php', 'Tests\\Feature\\RegisterTest' => __DIR__ . '/../..' . '/tests/Feature/RegisterTest.php', + 'Tests\\Feature\\SettingCreditTest' => __DIR__ . '/../..' . '/tests/Feature/SettingCreditTest.php', 'Tests\\Feature\\SettingsTest' => __DIR__ . '/../..' . '/tests/Feature/SettingsTest.php', 'Tests\\TestCase' => __DIR__ . '/../..' . '/tests/TestCase.php', - 'Tests\\Unit\\BookingTest\\BookingTest' => __DIR__ . '/../..' . '/tests/Feature/BookingTest.php', 'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php', 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php',