diff --git a/Dockerfile b/Dockerfile index dad9c2bd..5eb8b990 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,8 @@ FROM php:7.1.3 -RUN apt-get update -y && apt-get install -y openssl zip unzip git zlib1g-dev netcat mysql-client +RUN apt-get update -y && apt-get install -y openssl zip unzip git zlib1g-dev netcat mysql-client libgd-dev libfreetype6-dev libjpeg62-turbo-dev libpng12-dev RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer -RUN docker-php-ext-install pdo pdo_mysql zip +RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ +RUN docker-php-ext-install pdo pdo_mysql zip gd WORKDIR /app COPY . /app RUN composer install diff --git a/app/Booking.php b/app/Booking.php index 1add81f2..aa664ec4 100644 --- a/app/Booking.php +++ b/app/Booking.php @@ -7,10 +7,17 @@ use Illuminate\Database\Eloquent\Model; class Booking extends Model { // protected $guarded = []; - protected $fillable = ['term', 'amount', 'rate_id', 'user_id', 'account_name', 'account_num', 'bank_name', 'bank_branch', 'company_name', 'company_address', 'bank_address', 'swift_code', 'cnap' ,'verification_status']; + protected $fillable = ['term', 'rate_id', 'user_id', 'amount', 'account_name', 'account_num', 'bank_name', + 'bank_branch', 'company_name']; + public $timestamps = true; + public function user(){ return $this->belongsTo('app\User'); } + + public function userBankSlip(){ + return $this->hasOne(UserBankSlip::class); + } } diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 91b47067..ddd3c22e 100644 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -11,15 +11,37 @@ use App\UserBankSlip; use App\User; use Auth; use Validator; +use DateTime; class BookingController extends Controller { + 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')); + + + + $booking->timeout = $difference_in_seconds; + + 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'); - $rate = 1; // default + $amount = $request->input("amount"); + $user = Auth::user(); + $rate = 1; // default rate to 1 + switch ($term) { case "x1_cash": $rate = $rates->x1_cash; @@ -40,72 +62,71 @@ class BookingController extends Controller $rate = $rates->x2_ba; break; default: - return Response::json(array( + return response()->json([ 'success' => false, 'message' => 'Invalid input', - ), 422); + ], 422); break; } - - // Calculation Service charge - $amount = $request->input("amount"); - - //logic : if amount higher than 10,000, no service charge. if amount lower than 10,000, 20.00 service charge + + // 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 calculation - $RMBinMYR = (($amount + $svcharge) / $rate); + // initial rmb to myr amount + $RMBinMYR = (($amount + $svcharge) / $rate); - //calculate gst, 0% after 1june 2018 - $gst = 0*$RMBinMYR; + // TODO : Should be remove this ? + // gst 0% + $gst = 0 * $RMBinMYR; - //calculate Sales Tax, 10% of initial calculation - $sales_tax = 0.10*$RMBinMYR; + // Sales tax : 10 % + $sales_tax = 0.10 * $RMBinMYR; - //calculate billing, 1.5% of initial calculation - $billing = 0.015*$RMBinMYR; + // Billing fees : 1.5% + $billing = 0.015 * $RMBinMYR; - //bia = bank in amount in MYR - $bia = round($RMBinMYR + $gst + $sales_tax + $billing,2); + // Bank in amount + $bia = round($RMBinMYR + $gst + $sales_tax + $billing, 2); - $user = Auth::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->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->amount = $request->input('amount'); - $booking->rate_id = $rate; + + $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-; + $booking->user()->associate($user); + $booking->save(); - $booking->rmb_book_amount = $request->input('rmb_book_amount'); - $booking->rmb_book_pay_method = $request->input('rmb_book_pay_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->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->user()->associate($user); - $booking->bia = $bia; - $booking->save(); + // 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'); return response()->json($booking, 201); } @@ -131,41 +152,38 @@ class BookingController extends Controller $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); /* Validation*/ - if (!$booking) - { - return response()->json(['message'=>'Access denied'], 200); - } + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 200); + } - $validator = Validator::make($request->all(), [ - 'bankslip_url' => '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('bankslip_url')) - { - return response()->json(['message' => 'No file detected'], 400); - } + 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['bankslip_url'] = $filename; + $input['file'] = $filename; - $unique_name = 'bank_slip_' . md5($filename. time()); + $unique_name = 'bank_slip_' . md5($filename. time()); // probably not a good idea $unique_image_url = $unique_name. '.' .$ext; Storage::putFileAs( - 'bankslip_url',/*folder name*/ $bankslip_file, $unique_image_url + 'user_bankslip', $bankslip_file, $unique_image_url ); - $booking->cust_marking = $request->input('cust_marking'); - $booking->bank_slip_type = $request->input('bank_slip_type'); - $user_bankslip = new UserBankSlip; - $user_bankslip->book_id = $booking->id; + $user_bankslip->booking_id = $booking->id; $user_bankslip->bankslip_url = $unique_image_url; $user_bankslip->transfer_amount = $request->input('transfer_amount'); $user_bankslip->save(); @@ -173,6 +191,18 @@ class BookingController extends Controller 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(); + + 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(); @@ -223,7 +253,7 @@ class BookingController extends Controller $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()) @@ -237,6 +267,68 @@ class BookingController extends Controller 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(); + + // 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; + } + + 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); + + 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()) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 00000000..58f9b8ab --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,21 @@ +user(); + } +} diff --git a/app/Http/Controllers/WelcomeController.php b/app/Http/Controllers/WelcomeController.php new file mode 100644 index 00000000..fc034c21 --- /dev/null +++ b/app/Http/Controllers/WelcomeController.php @@ -0,0 +1,21 @@ +hasMany('App\Booking'); + return $this->hasMany(Booking::class); } } diff --git a/app/UserBankSlip.php b/app/UserBankSlip.php index 8aa809a6..3e3e6678 100644 --- a/app/UserBankSlip.php +++ b/app/UserBankSlip.php @@ -6,5 +6,10 @@ use Illuminate\Database\Eloquent\Model; class UserBankSlip extends Model { - protected $fillable = ['bank_slip_type','bankslip_url','transfer_amount','book_id','cust_marking']; + protected $fillable = ['bank_slip_type','bankslip_url','transfer_amount','booking_id','cust_marking']; + + public function booking() + { + return $this->belongsTo(Booking::class); + } } diff --git a/database/migrations/2019_05_22_032509_make_nullable_field_bookings_table.php b/database/migrations/2018_05_22_032509_make_nullable_field_bookings_table.php similarity index 100% rename from database/migrations/2019_05_22_032509_make_nullable_field_bookings_table.php rename to database/migrations/2018_05_22_032509_make_nullable_field_bookings_table.php diff --git a/database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php b/database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php new file mode 100644 index 00000000..9113a2dd --- /dev/null +++ b/database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php @@ -0,0 +1,31 @@ +renameColumn('book_id', 'booking_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/assets/js/pages/booking/uploadUserBankSlip.vue b/resources/assets/js/pages/booking/uploadUserBankSlip.vue index 7b8f829b..9323e09a 100644 --- a/resources/assets/js/pages/booking/uploadUserBankSlip.vue +++ b/resources/assets/js/pages/booking/uploadUserBankSlip.vue @@ -5,21 +5,36 @@

Waiting For Payment

- + - - - - + + + + + + + + + + + +
Amount :    + {{ booking.amount }} +
Bankin Amount :    + {{ booking.bankin_amount }} +
+
+
- Time Left : - + + +

@@ -27,7 +42,8 @@ - + @@ -40,32 +56,44 @@ -->
Bankin Amount (RM) : - + +
+ + + + +
+ Submit + + Upload Later + +
+
+
+


-
- Submit - - Upload Later - -
+