· 8 years ago · Dec 30, 2017, 08:32 PM
1<?php
2
3namespace App\Http\Controllers;
4
5use Illuminate\Http\Request;
6
7use App\Helpers\Helper;
8use Auth;
9use Log;
10use Hash;
11use Validator;
12use File;
13use DB;
14use App\User;
15use App\ProviderService;
16use App\Requests;
17use App\Admin;
18use App\RequestsMeta;
19use App\ServiceType;
20use App\Provider;
21use App\Settings;
22use App\FavouriteProvider;
23use App\RequestPayment;
24use App\UserRating;
25use App\ProviderRating;
26use App\Cards;
27use App\ChatMessage;
28
29use net\authorize\api\contract\v1\CreateCustomerPaymentProfileRequest;
30use net\authorize\api\contract\v1\CreateCustomerProfileRequest;
31use net\authorize\api\contract\v1\CreateTransactionRequest;
32use net\authorize\api\contract\v1\CreditCardType;
33use net\authorize\api\contract\v1\CustomerPaymentProfileType;
34use net\authorize\api\contract\v1\CustomerProfileType;
35use net\authorize\api\contract\v1\MerchantAuthenticationType;
36use net\authorize\api\contract\v1\PaymentType;
37use net\authorize\api\contract\v1\TransactionRequestType;
38use net\authorize\api\controller\CreateCustomerPaymentProfileController;
39use net\authorize\api\controller\CreateCustomerProfileController;
40use net\authorize\api\controller\CreateTransactionController;
41use App\Jobs\sendPushNotification;
42use App\Jobs\NormalPushNotification;
43use App\States_taxes;
44
45define('USER', 0);
46define('PROVIDER',1);
47
48define('NONE', 0);
49
50define('DEFAULT_FALSE', 0);
51define('DEFAULT_TRUE', 1);
52
53// Payment Constants
54
55define('PAYPAL', 'PAYPAL');
56define('CARD', 'card');
57define('AUTHORIZE', 'AUTHORIZE');
58
59// Request table status
60define('REQUEST_NEW', 0);
61define('REQUEST_WAITING', 1);
62define('REQUEST_INPROGRESS', 2);
63define('REQUEST_COMPLETE_PENDING', 3);
64define('WAITING_FOR_PROVIDER_CONFRIMATION_COD', 8);
65define('REQUEST_RATING', 4);
66define('REQUEST_COMPLETED', 5);
67define('REQUEST_CANCELLED', 6);
68define('REQUEST_NO_PROVIDER_AVAILABLE',7);
69
70
71//Only when manual request
72define('REQUEST_REJECTED_BY_PROVIDER', 9);
73define('PROVIDER_NOT_AVAILABLE', 0);
74define('PROVIDER_AVAILABLE', 1);
75
76// Request table provider_status
77define('PROVIDER_NONE', 0);
78define('PROVIDER_ACCEPTED', 1);
79define('PROVIDER_STARTED', 2);
80define('PROVIDER_ARRIVED', 3);
81define('PROVIDER_SERVICE_STARTED', 4);
82define('PROVIDER_SERVICE_COMPLETED', 5);
83define('PROVIDER_RATED', 6);
84
85define('REQUEST_META_NONE', 0);
86define('REQUEST_META_OFFERED', 1);
87define('REQUEST_META_TIMEDOUT', 2);
88define('REQUEST_META_DECLINED', 3);
89
90define('WAITING_TO_RESPOND', 1);
91define('WAITING_TO_RESPOND_NORMAL',0);
92
93define('RATINGS', '0,1,2,3,4,5');
94
95define('DEVICE_ANDROID', 'android');
96define('DEVICE_IOS', 'ios');
97
98class UserapiController extends Controller
99{
100
101 public function __construct(Request $request)
102 {
103 $this->middleware('UserApiVal' , array('except' => ['register' , 'login' , 'forgot_password']));
104
105 }
106 public function register(Request $request)
107 {
108 $response_array = array();
109 $operation = false;
110 $new_user = DEFAULT_TRUE;
111
112 // validate basic field
113
114 $basicValidator = Validator::make(
115 $request->all(),
116 array(
117 'device_type' => 'required|in:'.DEVICE_ANDROID.','.DEVICE_IOS,
118 'device_token' => 'required',
119 'login_by' => 'required|in:manual,facebook,google',
120 )
121 );
122
123 if($basicValidator->fails()) {
124
125 $error_messages = implode(',', $basicValidator->messages()->all());
126 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
127 // Log::info('Registration basic validation failed');
128
129 } else {
130
131 $login_by = $request->login_by;
132 $allowedSocialLogin = array('facebook','google');
133
134 // check login-by
135
136 if(in_array($login_by,$allowedSocialLogin)){
137
138 // validate social registration fields
139
140 $socialValidator = Validator::make(
141 $request->all(),
142 array(
143 'social_unique_id' => 'required',
144 'first_name' => 'required|max:255',
145 'last_name' => 'max:255',
146 'email' => 'required|email|max:255',
147 'mobile' => 'digits_between:6,13',
148 'picture' => 'mimes:jpeg,jpg,bmp,png',
149 'gender' => 'in:male,female,others',
150 )
151 );
152
153 if($socialValidator->fails()) {
154
155 $error_messages = implode(',', $socialValidator->messages()->all());
156 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
157
158 // Log::info('Registration social validation failed');
159
160 }else {
161
162 $check_social_user = User::where('email' , $request->email)->first();
163
164 if($check_social_user) {
165 $new_user = DEFAULT_FALSE;
166 }
167
168 // Log::info('Registration passed social validation');
169 $operation = true;
170 }
171
172 } else {
173
174 // Validate manual registration fields
175
176 $manualValidator = Validator::make(
177 $request->all(),
178 array(
179 'first_name' => 'required|max:255',
180 'last_name' => 'required|max:255',
181 'zip_code' => 'required',
182 'email' => 'required|email|max:255',
183 'mobile' => 'required|digits_between:6,13',
184 'password' => 'required|min:6',
185 'picture' => 'mimes:jpeg,jpg,bmp,png',
186 )
187 );
188
189 // validate email existence
190
191 $emailValidator = Validator::make(
192 $request->all(),
193 array(
194 'email' => 'unique:users,email',
195 )
196 );
197
198 if($manualValidator->fails()) {
199
200 $error_messages = implode(',', $manualValidator->messages()->all());
201 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
202 //Log::info('Registration manual validation failed');
203
204 } elseif($emailValidator->fails()) {
205
206 $error_messages = implode(',', $emailValidator->messages()->all());
207 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
208 //Log::info('Registration manual email validation failed');
209
210 } else {
211 // Log::info('Registration passed manual validation');
212 $operation = true;
213 }
214
215 }
216
217 if($operation) {
218
219 // Creating the user
220 if($new_user) {
221 $user = new User;
222 // Settings table - COD Check is enabled
223 if(Settings::where('key' , PAYPAL)->where('value' , DEFAULT_TRUE)->first()) {
224 // Save the default payment method
225 //$user->payment_mode = PAYPAL;
226 }
227
228 } else {
229 $user = $check_social_user;
230 }
231
232 if($request->has('first_name')) {
233 $user->first_name = $request->first_name;
234 }
235
236 if($request->has('last_name')) {
237 $user->last_name = $request->last_name;
238 }
239
240 if($request->has('email')) {
241 $user->email = $request->email;
242 }
243 if($request->has('zip_code')) {
244 $user->email = $request->zip_code;
245 }
246
247 if($request->has('mobile')) {
248 $user->mobile = $request->mobile;
249 }
250
251 if($request->has('password'))
252 $user->password = Hash::make($request->password);
253
254 $user->gender = $request->has('gender') ? $request->gender : "male";
255
256 $user->token = Helper::generate_token();
257 $user->token_expiry = Helper::generate_token_expiry();
258
259 $check_device_exist = User::where('device_token', $request->device_token)->first();
260
261 if($check_device_exist){
262 $check_device_exist->device_token = "";
263 $check_device_exist->save();
264 }
265
266 $user->device_token = $request->has('device_token') ? $request->device_token : "";
267 $user->device_type = $request->has('device_type') ? $request->device_type : "";
268 $user->login_by = $request->has('login_by') ? $request->login_by : "manual";
269 $user->social_unique_id = $request->has('social_unique_id') ? $request->social_unique_id : '';
270
271 // Upload picture
272 if($request->hasFile('picture')) {
273 $user->picture = Helper::upload_picture($request->file('picture'));
274 }
275
276 $user->is_activated = 1;
277 $user->is_approved = 1;
278
279 $user->save();
280 $user->password = $request->password;
281 $payment_mode_status = $user->payment_mode ? $user->payment_mode : 0;
282
283 // Send welcome email to the new user:
284 if($new_user) {
285 $subject = Helper::tr('user_welcome_title');
286 $email_data = $user;
287 $page = "emails.user.welcome";
288 $email = $user->email;
289 Helper::send_email($page,$subject,$email,$email_data);
290 }
291
292 // Response with registered user details:
293
294 $response_array = array(
295 'success' => true,
296 'id' => $user->id,
297 'name' => $user->first_name.' '.$user->last_name,
298 'first_name' => $user->first_name,
299 'last_name' => $user->last_name,
300 'mobile' => $user->mobile,
301 'gender' => $user->gender,
302 'email' => $user->email,
303 'zip_code' => isset($user->zip_code) ? $user->zip_code : 0,
304 'picture' => $user->picture,
305 'token' => $user->token,
306 'token_expiry' => $user->token_expiry,
307 'login_by' => $user->login_by,
308 'social_unique_id' => $user->social_unique_id,
309 'payment_mode_status' => $payment_mode_status,
310 );
311
312 $response_array = Helper::null_safe($response_array);
313
314 //Log::info('Registration completed');
315
316 }
317
318 }
319
320 $response = response()->json($response_array, 200);
321 return $response;
322 }
323
324 public function login(Request $request)
325 {
326
327
328 $response_array = array();
329 $operation = false;
330
331 $basicValidator = Validator::make(
332 $request->all(),
333 array(
334 'device_token' => 'required',
335 'device_type' => 'required|in:'.DEVICE_ANDROID.','.DEVICE_IOS,
336 'login_by' => 'required|in:manual,facebook,google',
337 )
338 );
339
340 if($basicValidator->fails()){
341 $error_messages = implode(',',$basicValidator->messages()->all());
342 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
343 }else{
344
345 $login_by = $request->login_by;
346 if($login_by == 'manual'){
347
348 /*validate manual login fields*/
349 $manualValidator = Validator::make(
350 $request->all(),
351 array(
352 'email' => 'required|email',
353 'password' => 'required',
354 )
355 );
356
357 if ($manualValidator->fails()) {
358 $error_messages = implode(',',$manualValidator->messages()->all());
359 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
360 } else {
361
362 $email = $request->email;
363 $password = $request->password;
364
365 // Validate the user credentials
366 if($user = User::where('email', '=', $email)->first()){
367 if($user->is_activated) {
368 if(Hash::check($password, $user->password)){
369
370 /*manual login success*/
371 $operation = true;
372
373 }else{
374 $response_array = array( 'success' => false, 'error' => Helper::get_error_message(105), 'error_code' => 105 );
375 }
376 } else {
377 $response_array = array('success' => false , 'error' => Helper::get_error_message(144),'error_code' => 144);
378 }
379
380 } else {
381 $response_array = array( 'success' => false, 'error' => Helper::get_error_message(105), 'error_code' => 105 );
382 }
383 }
384
385 } else {
386 /*validate social login fields*/
387 $socialValidator = Validator::make(
388 $request->all(),
389 array(
390 'social_unique_id' => 'required',
391 )
392 );
393
394 if ($socialValidator->fails()) {
395 $error_messages = implode(',',$socialValidator->messages()->all());
396 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
397 } else {
398 $social_unique_id = $request->social_unique_id;
399 if ($user = User::where('social_unique_id', '=', $social_unique_id)->first()) {
400 if($user->is_activated) {
401 /*social login success*/
402 $operation = true;
403 } else {
404 $response_array = array('success' => false , 'error' => Helper::get_error_message(144),'error_code' => 144);
405 }
406
407 }else{
408 $response_array = array('success' => false, 'error' => Helper::get_error_message(125), 'error_code' => 125);
409 }
410
411 }
412 }
413
414 if($operation){
415
416 $device_token = $request->device_token;
417 $device_type = $request->device_type;
418
419 // Generate new tokens
420 $user->token = Helper::generate_token();
421 $user->token_expiry = Helper::generate_token_expiry();
422
423 // Save device details
424 $user->device_token = $device_token;
425 $user->device_type = $device_type;
426 $user->login_by = $login_by;
427
428 $user->save();
429
430 $payment_mode_status = $user->payment_mode ? $user->payment_mode : 0;
431
432 // Respond with user details
433
434 $response_array = array(
435 'success' => true,
436 'id' => $user->id,
437 'name' => $user->first_name.' '.$user->last_name,
438 'first_name' => $user->first_name,
439 'last_name' => $user->last_name,
440 'mobile' => $user->mobile,
441 'email' => $user->email,
442 'zip_code' => isset($user->zip_code) ? $user->zip_code : 0,
443 'gender' => $user->gender,
444 'picture' => $user->picture,
445 'token' => $user->token,
446 'token_expiry' => $user->token_expiry,
447 'login_by' => $user->login_by,
448 'social_unique_id' => $user->social_unique_id,
449 'payment_mode_status' => $payment_mode_status,
450 );
451
452 $response_array = Helper::null_safe($response_array);
453 }
454 }
455
456 $response = response()->json($response_array, 200);
457 return $response;
458 }
459
460 public function forgot_password(Request $request)
461 {
462 $email =$request->email;
463 // Validate the email field
464 $validator = Validator::make(
465 $request->all(),
466 array(
467 'email' => 'required|email|exists:users,email',
468 )
469 );
470 if ($validator->fails()) {
471 $error_messages = implode(',',$validator->messages()->all());
472 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=> $error_messages);
473 }
474 else
475 {
476 $user = User::where('email' , $email)->first();
477 $new_password = Helper::generate_password();
478 $user->password = Hash::make($new_password);
479
480 $email_data = array();
481 $subject = Helper::tr('user_forgot_email_title');
482 $email_data['password'] = $new_password;
483 $email_data['user'] = $user;
484 $page = "emails.user.forgot_password";
485 $email_send = Helper::send_email($page,$subject,$user->email,$email_data);
486
487 $response_array['success'] = true;
488 $response_array['message'] = Helper::get_message(106);
489 $user->save();
490 }
491
492 $response = response()->json($response_array, 200);
493 return $response;
494 }
495
496 public function change_password(Request $request) {
497
498 $old_password = $request->old_password;
499 $new_password = $request->password;
500 $confirm_password = $request->confirm_password;
501
502 $validator = Validator::make($request->all(), [
503 'password' => 'required|confirmed',
504 'old_password' => 'required',
505 ]);
506
507 if($validator->fails()) {
508 $error_messages = implode(',',$validator->messages()->all());
509 $response_array = array('success' => false, 'error' => 'Invalid Input', 'error_code' => 401, 'error_messages' => $error_messages );
510 } else {
511 $user = User::find($request->id);
512
513 if(Hash::check($old_password,$user->password))
514 {
515 $user->password = Hash::make($new_password);
516 $user->save();
517
518 $response_array = Helper::null_safe(array('success' => true , 'message' => Helper::get_message(102)));
519
520 } else {
521 $response_array = array('success' => false , 'error' => Helper::get_error_message(131), 'error_code' => 131);
522 }
523
524 }
525
526 $response = response()->json($response_array,200);
527 return $response;
528
529 }
530
531 public function user_details(Request $request)
532 {
533 $user = User::find($request->id);
534 $timezones = Helper::generate_timezone_list();
535 $response_array = array(
536 'success' => true,
537 'id' => $user->id,
538 'first_name' => $user->first_name,
539 'last_name' => $user->last_name,
540 'mobile' => $user->mobile,
541 'gender' => $user->gender,
542 'email' => $user->email,
543 'picture' => $user->picture,
544 'token' => $user->token,
545 'token_expiry' => $user->token_expiry,
546 'login_by' => $user->login_by,
547 'social_unique_id' => $user->social_unique_id,
548 'saved_timezone' => $user->timezone,
549 'timezone' => $timezones,
550 );
551 $response = response()->json(Helper::null_safe($response_array), 200);
552 return $response;
553 }
554
555 public function update_profile(Request $request)
556 {
557 $user_id = $request->id;
558
559 $validator = Validator::make(
560 $request->all(),
561 array(
562 'id' => 'required',
563 'first_name' => 'required|max:255',
564 'last_name' => 'required|max:255',
565 'email' => 'email|unique:users,email,'.$user_id.'|max:255',
566 'mobile' => 'required|digits_between:6,13',
567 'picture' => 'mimes:jpeg,bmp,png',
568 'gender' => 'in:male,female,others',
569 'device_token' => '',
570 ));
571
572 if ($validator->fails()) {
573 // Error messages added in response for debugging
574 $error_messages = implode(',',$validator->messages()->all());
575 $response_array = array(
576 'success' => false,
577 'error' => Helper::get_error_message(101),
578 'error_code' => 101,
579 'error_messages' => $error_messages
580 );
581 } else {
582
583 $name = $request->name;
584 $email = $request->email;
585 $mobile = $request->mobile;
586 $picture = $request->file('picture');
587
588 $user = User::find($user_id);
589 if($request->has('first_name')) {
590 $user->first_name = $request->first_name;
591 }
592 if($request->has('last_name')) {
593 $user->last_name = $request->last_name;
594 }
595 if($request->has('email')) {
596 $user->email = $email;
597 }
598 if ($mobile != "")
599 $user->mobile = $mobile;
600 // Upload picture
601 if ($picture != "") {
602 Helper::delete_picture($user->picture); // Delete the old pic
603 $user->picture = Helper::upload_picture($picture);
604 }
605 if($request->has('gender')) {
606 $user->gender = $request->gender;
607 }
608
609 if($request->has('saved_timezone')) {
610 $user->timezone = $request->saved_timezone;
611 }
612
613 // Generate new tokens
614 // $user->token = Helper::generate_token();
615 // $user->token_expiry = Helper::generate_token_expiry();
616
617 $user->save();
618
619 $payment_mode_status = $user->payment_mode ? $user->payment_mode : "";
620 $timezones = Helper::generate_timezone_list();
621 $response_array = array(
622 'success' => true,
623 'id' => $user->id,
624 'first_name' => $user->first_name,
625 'last_name' => $user->last_name,
626 'mobile' => $user->mobile,
627 'gender' => $user->gender,
628 'email' => $user->email,
629 'picture' => $user->picture,
630 'token' => $user->token,
631 'token_expiry' => $user->token_expiry,
632 'login_by' => $user->login_by,
633 'social_unique_id' => $user->social_unique_id,
634 'payment_mode_status' => $payment_mode_status,
635 'saved_timezone' => $user->timezone,
636 'timezone' => $timezones
637, );
638 $response_array = Helper::null_safe($response_array);
639 }
640
641 $response = response()->json($response_array, 200);
642 return $response;
643 }
644
645 public function token_renew(Request $request)
646 {
647
648 $user_id = $request->id;
649
650 $token_refresh = $request->token;
651
652 // Check if refresher token is valid
653
654 if ($user = User::where('id', '=', $user_id)->where('token', '=', $token_refresh)->first()) {
655
656 // Generate new tokens
657 $user->token = Helper::generate_token();
658 $user->token_expiry = Helper::generate_token_expiry();
659
660 $user->save();
661 $response_array = Helper::null_safe(array('success' => true,'token' => $user->token));
662 } else {
663 $response_array = array('success' => false,'error' => Helper::get_error_message(115),'error_code' => 115);
664 }
665
666 $response = response()->json($response_array, 200);
667 return $response;
668
669 }
670
671 public function service_list(Request $request) {
672
673 if($serviceList = ServiceType::all()) {
674 $response_array = Helper::null_safe(array('success' => true,'services' => $serviceList));
675 } else {
676 $response_array = array('success' => false,'error' => Helper::get_error_message(115),'error_code' => 115);
677 }
678 $response = response()->json($response_array, 200);
679 return $response;
680
681 }
682
683 // Not using now
684 public function single_service(Request $request) {
685
686 $validator = Validator::make(
687 $request->all(),
688 array(
689 'service_id' => 'required',
690 ));
691
692 if ($validator->fails())
693 {
694 $error_messages = implode(',', $validator->messages()->all());
695 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages' => $error_messages);
696 }
697 else
698 {
699 if($serviceList = ServiceType::find($request->id))
700 {
701 $providerList = ProviderService::where('service_type_id',$request->id)->get();
702 $provider_details = array();
703 $provider_details_data = array();
704
705 foreach ($providerList as $provider_details)
706 {
707 $provider = Provider::find($provider_details->id);
708 $provider_details['id'] = $provider->id;
709 $provider_details['name'] = $provider->name;
710 $provider_details['latiude'] = $provider->latiude;
711 $provider_details['longitude'] = $provider->longitude;
712 $provider_details_data[] = $provider_details;
713 $provider_details = array();
714 }
715 $response_array = array('success' => true,'provider_details' => $provider_details_data);
716 $response_array = Helper::null_safe($response_array);
717 } else {
718 $response_array = array('success' => false,'error' => Helper::get_error_message(115),'error_code' => 115);
719 }
720 }
721
722 $response = response()->json($response_array, 200);
723 return $response;
724 }
725
726
727 public function payment_authorize(Request $request){
728
729
730
731 $response = new \stdClass();
732 $param = new \stdClass();
733 if( $request->year == '' ||
734 $request->month == '' ||
735 $request->number == '' ||
736 $request->cvc == '' ||
737 $request->name == '' ||
738 $request->month == 0){
739 //var_dump($request->name);
740
741 $error_messages = 'Your Card Details Are Not Correct';
742 $response->success = false;
743 $response->message = $error_messages;
744
745 }else{
746
747 $authorize_login = Settings::where('key', 'authorize_login_id')->first();
748 $authorize_login_id = $authorize_login->value;
749 $transaction_key = Settings::where('key', 'authorize_transaction_key')->first();
750 $authorize_key = $transaction_key->value;
751 if ($authorize_login_id && $authorize_key && $request->number && $request->name && $request->month && $request->year && $request->cvc) {
752
753 require base_path().'/vendor/authorizenet/authorizenet/vendor/autoload.php';
754 $requests = Requests::where('id',$request->request_id)->where('status' , 3)->first();
755
756 $user = User::find($request->id);
757
758
759 if($requests && intval($requests->status) != 4 ) {
760
761 $total = $requests->amount;
762 if($request_payment = RequestPayment::where('request_id' , $request->request_id)->first()) {
763 $request_payment->payment_mode = $request->payment_mode;
764 $request_payment->save();
765 $total = $request_payment->total;
766 }
767 $merchantAuthentication = new MerchantAuthenticationType();
768 $merchantAuthentication->setName($authorize_login_id);
769 $merchantAuthentication->setTransactionKey($authorize_key);
770
771 $creditCard = new CreditCardType();
772 $creditCard->setCardNumber(str_replace(' ', '', $request->number));
773 $creditCard->setExpirationDate('20' . $request->year . '-' . $request->month);
774 $paymentOne = new PaymentType();
775 $paymentOne->setCreditCard($creditCard);
776
777 $transactionRequestType = new TransactionRequestType();
778 $transactionRequestType->setTransactionType("authCaptureTransaction");
779 $transactionRequestType->setAmount($total);
780 $transactionRequestType->setPayment($paymentOne);
781
782 $requestpayment = new CreateTransactionRequest();
783 $requestpayment->setMerchantAuthentication($merchantAuthentication);
784 $requestpayment->setTransactionRequest($transactionRequestType);
785 $controller = new CreateTransactionController($requestpayment);
786 $response_tran = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX);
787
788 if ($response_tran != null) {
789
790 $tresponse = $response_tran->getTransactionResponse();
791
792 if (($tresponse != null) && ($tresponse->getResponseCode() == "1")) {
793 if($request_payment = RequestPayment::where('request_id' , $request->request_id)->first()) {
794 $request_payment->payment_id = $tresponse->getTransId();
795 $request_payment->status = 1;
796 $request_payment->save();
797 }
798 $requests->is_paid = 1;
799 $requests->status = 4;
800 $requests->amount = $total;
801 $requests->save();
802 $response->success = true;
803 $response->message = tr('payment_successful');
804
805
806
807 $invoice_data = array();
808
809 $user = User::find($requests->user_id);
810 $provider = Provider::find($requests->confirmed_provider);
811 $request_get_tax = RequestPayment::where('request_id' , $requests->id)->first();
812 $total_time_price = $request_get_tax->time_price;
813 $base_price = $request_get_tax->base_price;
814 $serviceType = ServiceType::where('id',$requests->request_type)->first();
815
816
817 $invoice_data['request_id'] = $requests->id;
818 $invoice_data['user_id'] = $requests->user_id;
819 $invoice_data['provider_id'] = $requests->confirmed_provider;
820 $invoice_data['provider_name'] = $provider->first_name." ".$provider->last_name;
821 $invoice_data['provider_address'] = $provider->address;
822 $invoice_data['user_name'] = $user->first_name." ".$user->last_name;
823 $invoice_data['user_address'] = $requests->s_address;
824 $invoice_data['base_price'] = $base_price;
825 $invoice_data['other_price'] = 0;
826 $invoice_data['total_time_price'] = $total_time_price;
827 $invoice_data['sub_total'] = $total_time_price + $base_price;
828 $invoice_data['tax_price'] = $request_get_tax->tax_price;
829 $invoice_data['total'] = $request_get_tax->total;
830 $invoice_data['bill_no'] = $request_get_tax->id;
831 $invoice_data['service_type'] = $serviceType->name;
832
833 // Send Push Notification to User
834 $title = Helper::tr('request_complete_payment_title');
835 // $message = $invoice_data;
836 $message = Helper::tr('request_complete_payment_message');
837
838 $this->dispatch( new sendPushNotification($requests->user_id, USER,$requests->id,$title, $message,''));
839
840 // Send invoice notification to the user and provider
841 $subject = Helper::tr('request_completed_invoice');
842 $email = Helper::get_emails(3,$requests->user_id,$requests->confirmed_provider);
843 $page = "emails.provider.invoice";
844 $email_send = Helper::send_email($page,$subject,$user->email,$invoice_data);
845
846 $response = Helper::null_safe(array(
847 'success' => true,
848 'request_id' => $request->request_id,
849 'status' => REQUEST_COMPLETE_PENDING,
850 'invoice' => $invoice_data,
851 'message' => Helper::get_message(115)
852 ));
853 } else {
854 $response->success = false;
855 $response->message = 'Card invalid! Choose another.';
856 }
857 } else {
858 $response->success = false;
859 $response->message = 'Charge Credit card Null response returned';
860 }
861 }
862 else {
863 $response->success = false;
864 $response->message = Helper::get_error_message(138);
865 }
866 }
867 }
868 return response()->json($response, 200);
869 }
870
871 public function guest_provider_list(Request $request) {
872
873
874 $validator = Validator::make(
875 $request->all(),
876 array(
877 'latitude' => 'required',
878 'longitude' => 'required|numeric',
879 'service_id' => 'exists:service_types,id',
880 ));
881
882 if ($validator->fails()) {
883 $error_messages = implode(',',$validator->messages()->all());
884 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages' => $error_messages);
885 } else {
886 $latitude = $request->latitude;
887 $longitude = $request->longitude;
888
889 /*Get default search radius*/
890 $settings = Settings::where('key', 'search_radius')->first();
891 $settingsmin = Settings::where('key', 'min_radius')->first();
892 $distance = $settings->value;
893 $distancemin = $settingsmin->value;
894
895 $service_type_id = $request->service_type;
896
897 if(!$request->service_id) {
898 if($service_type = ServiceType::first()) {
899 $service_type_id = $service_type->id;
900 }
901 }
902
903 // $query = "SELECT providers.id,providers.first_name,providers.last_name,providers.latitude,providers.longitude,
904 // 1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) AS distance
905 // FROM providers
906 // LEFT JOIN provider_services ON providers.id = provider_services.provider_id
907 // WHERE provider_services.service_type_id = $service_type_id AND
908 // providers.is_available = 1 AND is_activated = 1 AND is_approved = 1
909 // AND (1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) < $distance AND (1.609344 * 3956 * acos( cos( radians('$latitude') ) * cos( radians(latitude) ) * cos( radians(longitude) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians(latitude) ) ) ) > $distancemin
910 // ORDER BY distance";
911
912 $query = "SELECT providers.id,providers.first_name,providers.last_name,providers.latitude,providers.longitude,
913 1.609344 * 3956 * acos(
914 cos( radians('$latitude') )
915 * cos( radians(latitude) )
916 * cos( radians(longitude) - radians('$longitude') )
917 + sin( radians('$latitude') )
918 * sin( radians(latitude) )
919 ) AS distance
920 FROM providers
921 LEFT JOIN provider_services ON providers.id = provider_services.provider_id
922 WHERE provider_services.service_type_id = $service_type_id
923 AND providers.is_available = 1
924 AND is_activated = 1
925 AND is_approved = 1
926 HAVING distance < $distance
927 AND distance > $distancemin
928 ORDER BY distance";
929
930 $providers = DB::select(DB::raw($query));
931
932 $response_array = Helper::null_safe(array(
933 'success' => true,
934 'providers' => $providers
935 ));
936
937 }
938
939 return response()->json($response_array , 200);
940 }
941
942 // Automated Request
943 public function send_request(Request $request) {
944
945
946 //Log::info('send_request'.print_r($request->all() ,true));
947
948 $validator = Validator::make(
949 $request->all(),
950 array(
951 'd_latitude' => 'required',
952 'd_longitude' => 'required|numeric',
953 'service_type' => 'numeric|exists:service_types,id',
954 ), array( 'required' => 'Location Selected was incorrect! Please try again!'));
955
956
957 if ($validator->fails())
958 {
959 $error_messages = implode(',', $validator->messages()->all());
960 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages' => $error_messages);
961
962 } else {
963 // Log::info('Create request start');
964 // Check the user filled the payment details
965
966 $user = User::find($request->id);
967 // Save the user location
968 $user->latitude = $request->d_latitude;
969 $user->longitude = $request->d_longitude;
970 $user->save();
971
972
973 if(!$user->payment_mode) {
974 // Log::info('Payment Mode is not available');
975 $response_array = array('success' => false , 'error' => Helper::get_error_message(134) , 'error_code' => 134);
976 } else {
977
978 $allow = DEFAULT_FALSE;
979
980 // if the payment mode is CARD , check if any default card is available
981 if($user->payment_mode == CARD) {
982 if($user_card = Cards::find($user->default_card)) {
983 $allow = DEFAULT_TRUE;
984 }
985 } else {
986 $allow = DEFAULT_TRUE;
987 }
988
989 if($allow == DEFAULT_TRUE) {
990
991 // Check already request exists
992 $check_status = array(REQUEST_NO_PROVIDER_AVAILABLE,REQUEST_CANCELLED,REQUEST_COMPLETED);
993
994 $check_requests = Requests::where('user_id' , $request->id)->whereNotIn('status' , $check_status)->count();
995
996 if($check_requests == 0) {
997
998 //Log::info('Previous requests check is done');
999 $service_type = $request->service_type; // Get the service type
1000
1001 // Initialize the variable
1002 $list_fav_providers = array(); $first_provider_id = 0; $list_fav_provider = array();
1003
1004 /** Fav Providers SEARCH started */
1005 $favProviders = Helper::get_fav_providers($service_type,$request->id);
1006
1007 // Check Favourite Providers list is not empty
1008 if($favProviders) {
1009 foreach ($favProviders as $key => $favProvider) {
1010 $list_fav_provider['id'] = $favProvider->provider_id;
1011 $list_fav_provider['waiting'] = $favProvider->waiting;
1012 $list_fav_provider['distance'] = 0;
1013
1014 array_push($list_fav_providers, $list_fav_provider);
1015 }
1016 }
1017
1018
1019 /** Fav providers end */
1020
1021 $latitude = $request->d_latitude;
1022 $longitude = $request->d_longitude;
1023 /*if(isset($request->timezone) && in_array($request->timezone,timezone_identifiers_list())){
1024 $timezone = $request->timezone;
1025 date_default_timezone_set($timezone);
1026 }
1027 else {
1028 $timezone = 'America/Los_Angeles';
1029 date_default_timezone_set($timezone);
1030 }*/
1031
1032 $request_start_time = time();
1033
1034 /*Get default search radius*/
1035 $settings = Settings::where('key', 'search_radius')->first();
1036 $distance = $settings->value;
1037 $settingsmin = Settings::where('key', 'min_radius')->first();
1038 $distancemin = $settingsmin->value;
1039
1040 // Search Providers
1041 $providers = array(); // Initialize providers variable
1042
1043 // Check the service type value to search the providers based on the nearby location
1044 if($service_type) {
1045
1046 // Log::info('Location Based search started - service_type');
1047 // Get the providers based on the selected service types
1048
1049 $service_providers = ProviderService::where('service_type_id' , $service_type)->where('is_available' , 1)->select('provider_id')->get();
1050
1051 $list_service_ids = array(); // Initialize list_service_ids
1052 if($service_providers) {
1053 foreach ($service_providers as $sp => $service_provider) {
1054 $list_service_ids[] = $service_provider->provider_id;
1055 }
1056 $list_service_ids = implode(',', $list_service_ids);
1057 }
1058
1059 if($list_service_ids) {
1060 $query = "SELECT providers.id,providers.waiting_to_respond as waiting,
1061 1.609344 * 3956 * acos(
1062 cos( radians('$latitude') )
1063 * cos( radians(latitude) )
1064 * cos( radians(longitude) - radians('$longitude') )
1065 + sin( radians('$latitude') )
1066 * sin( radians(latitude) ) ) AS distance
1067 FROM providers
1068 WHERE id IN ($list_service_ids)
1069 AND is_available = 1
1070 AND is_activated = 1
1071 AND is_approved = 1
1072 HAVING distance < $distance
1073 AND distance > $distancemin
1074 ORDER BY distance";
1075
1076 $providers = DB::select(DB::raw($query));
1077 // Log::info("Search query: " . $query);
1078 }
1079 } else {
1080 // Log::info('Location Based search started - without service_type');
1081
1082 $query = "SELECT providers.id,providers.waiting_to_respond as waiting,
1083 1.609344 * 3956 * acos(
1084 cos( radians('$latitude') )
1085 * cos( radians(latitude) )
1086 * cos( radians(longitude) - radians('$longitude') )
1087 + sin( radians('$latitude') )
1088 * sin( radians(latitude) ) ) AS distance
1089 FROM providers
1090 WHERE is_available = 1
1091 AND is_activated = 1
1092 AND is_approved = 1
1093 HAVING distance < $distance
1094 AND distance > $distancemin
1095 ORDER BY distance";
1096
1097 $providers = DB::select(DB::raw($query));
1098 //Log::info("Search query: " . $query);
1099 }
1100 // Log::info('List of providers'." ".print_r($providers));
1101
1102 $merge_providers = array();
1103 // Initialize Final list of provider variable
1104 $search_providers = array();
1105 $search_provider = array();
1106
1107 if ($providers) {
1108
1109 foreach ($providers as $provider) {
1110 $search_provider['id'] = $provider->id;
1111 $search_provider['waiting'] = $provider->waiting;
1112 $search_provider['distance'] = $provider->distance;
1113
1114 array_push($search_providers, $search_provider);
1115 }
1116 } else {
1117 if(!$list_fav_providers) {
1118 // Log::info("No Provider Found");
1119 // Send push notification to User
1120
1121 $title = Helper::get_push_message(601);
1122 $messages = Helper::get_push_message(602);
1123 $this->dispatch( new NormalPushNotification($user->id, USER,$title, $messages));
1124 $response_array = array('success' => false, 'error' => Helper::get_error_message(112), 'error_code' => 112);
1125 }
1126 }
1127
1128 // Merge the favourite providers and search providers
1129 $merge_providers = array_merge($list_fav_providers,$search_providers);
1130
1131 // Sort the providers based on the waiting time
1132 $sort_waiting_providers = Helper::sort_waiting_providers($merge_providers);
1133
1134 // Get the final providers list
1135 $final_providers = $sort_waiting_providers['providers'];
1136 //
1137 $check_waiting_provider_count = $sort_waiting_providers['check_waiting_provider_count'];
1138
1139 if(count($final_providers) == $check_waiting_provider_count){
1140 return response()->json($response_array = array('success' => false, 'error' => Helper::get_error_message(112), 'error_code' => 112) , 200);
1141
1142 }
1143
1144 // Create Requests
1145 $requests = new Requests;
1146 $requests->user_id = $user->id;
1147
1148 if($service_type) {
1149 $requests->request_type = $service_type;
1150 $get_service_type = ServiceType::find($service_type);
1151 if($get_service_type){
1152 $requests->amount = ($get_service_type->hourly_rates+$get_service_type->base_price);
1153 }
1154 }
1155
1156 $requests->status = REQUEST_NEW;
1157 $requests->confirmed_provider = NONE;
1158 $requests->request_start_time = date("Y-m-d H:i:s", $request_start_time);
1159 $requests->d_address = $request->d_address ? $request->d_address : "";
1160
1161 if($latitude){ $requests->d_latitude = $latitude; }
1162 if($longitude) { $requests->d_longitude = $longitude; }
1163
1164 $requests->save();
1165
1166 if($requests) {
1167 $requests->status = REQUEST_WAITING;
1168 //No need fo current provider state
1169 // $requests->current_provider = $first_provider_id;
1170 $requests->save();
1171
1172 // Save all the final providers
1173 $first_provider_id = 0;
1174
1175 if($final_providers) {
1176 foreach ($final_providers as $key => $final_provider) {
1177
1178 $request_meta = new RequestsMeta();
1179
1180 if($first_provider_id == 0) {
1181
1182 $first_provider_id = $final_provider;
1183
1184 $request_meta->status = REQUEST_META_OFFERED; // Request status change
1185
1186 // Availablity status change
1187 if($current_provider = Provider::find($first_provider_id)) {
1188 $current_provider->waiting_to_respond = WAITING_TO_RESPOND;
1189 $current_provider->save();
1190 }
1191
1192 // Send push notifications to the first provider
1193 $title = Helper::get_push_message(604);
1194 $message = "You got a new request from ".$user->first_name." ".$user->last_name;
1195
1196 $this->dispatch(new sendPushNotification($first_provider_id,PROVIDER,$requests->id,$title,$message,''));
1197
1198 // Push End
1199 }
1200
1201 $request_meta->request_id = $requests->id;
1202 $request_meta->provider_id = $final_provider;
1203 $request_meta->save();
1204 }
1205 }
1206 $response_array = array(
1207 'success' => true,
1208 'request_id' => $requests->id,
1209 'current_provider' => $first_provider_id,
1210 'address' => $requests->d_address,
1211 'latitude' => $requests->d_latitude,
1212 'longitude' => $requests->d_longitude,
1213 );
1214
1215 $response_array = Helper::null_safe($response_array);
1216 //Log::info('Create request end');
1217 } else {
1218 $response_array = array('success' => false , 'error' => Helper::get_error_message(126) , 'error_code' => 126 );
1219 }
1220 } else {
1221 $response_array = array('success' => false , 'error' => Helper::get_error_message(127) , 'error_code' => 127);
1222 }
1223
1224 } else {
1225 $response_array = array('success' => false , 'error' => Helper::get_error_message(142) ,'error_code' => 142);
1226 }
1227 }
1228 }
1229
1230 $response = response()->json($response_array, 200);
1231 return $response;
1232
1233 }
1234
1235 // Manual request
1236 public function manual_create_request(Request $request) {
1237
1238 $validator = Validator::make(
1239 $request->all(),
1240 array(
1241 'd_latitude' => 'required|numeric',
1242 'd_longitude' => 'required|numeric',
1243 'service_type' => 'numeric|exists:service_types,id',
1244 'provider_id' => 'required|exists:providers,id',
1245 ));
1246
1247 if ($validator->fails())
1248 {
1249 $error_messages = implode(',', $validator->messages()->all());
1250 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages' => $error_messages);
1251 } else {
1252 //Log::info('Create request start');
1253 // Check the user filled the payment details
1254 $user = User::find($request->id);
1255 if(!$user->payment_mode) {
1256 //Log::info('Payment Mode is not available');
1257 $response_array = array('success' => false , 'error' => Helper::get_error_message(134) , 'error_code' => 134);
1258 } else {
1259
1260 $allow = DEFAULT_FALSE;
1261 // if the payment mode is CARD , check if any default card is available
1262 if($user->payment_mode == CARD) {
1263 if($user_card = Cards::find($user->default_card)) {
1264 $allow = DEFAULT_TRUE;
1265 }
1266 } else {
1267 $allow = DEFAULT_TRUE;
1268 }
1269
1270 if($allow == DEFAULT_TRUE) {
1271
1272 // Check the provider is available
1273 if($provider = Provider::where('id' , $request->provider_id)->where('is_available' , DEFAULT_TRUE)->where('is_activated' , DEFAULT_TRUE)->where('is_approved' , DEFAULT_TRUE)->where('waiting_to_respond' ,DEFAULT_FALSE)->first()) {
1274
1275 // Check already request exists
1276 $check_status = array(REQUEST_NO_PROVIDER_AVAILABLE,REQUEST_CANCELLED,REQUEST_COMPLETED);
1277
1278 $check_requests = Requests::where('user_id' , $request->id)->whereNotIn('status' , $check_status)->count();
1279
1280 if($check_requests == 0) {
1281
1282 //Log::info('Previous requests check is done');
1283
1284 // Create Requests
1285 $requests = new Requests;
1286 $requests->user_id = $user->id;
1287
1288 if($request->service_type)
1289 $requests->request_type = $request->service_type;
1290
1291 $requests->status = REQUEST_NEW;
1292 $requests->confirmed_provider = NONE;
1293 $requests->request_start_time = date("Y-m-d H:i:s");
1294 $requests->d_address = $request->d_address ? $request->d_address : "";
1295
1296 if($request->d_latitude){ $requests->d_latitude = $request->d_latitude; }
1297 if($request->d_longitude) { $requests->d_longitude = $request->d_longitude; }
1298
1299 $requests->save();
1300
1301 if($requests) {
1302 $requests->status = REQUEST_WAITING;
1303
1304 $request_meta = new RequestsMeta;
1305
1306 $request_meta->status = REQUEST_META_OFFERED; // Request status change
1307
1308 // Availablity status change
1309 $provider->waiting_to_respond = WAITING_TO_RESPOND;
1310 $provider->save();
1311
1312
1313 // Send push notifications to the first provider
1314 $title = Helper::get_push_message(604);
1315 $message = "You got a new request from".$user->name;
1316
1317 $this->dispatch(new sendPushNotification($request->provider_id,PROVIDER,$requests->id,$title,$message,''));
1318
1319 // Push End
1320
1321 $request_meta->request_id = $requests->id;
1322 $request_meta->provider_id = $request->provider_id;
1323 $request_meta->save();
1324
1325 $response_array = array(
1326 'success' => true,
1327 'request_id' => $requests->id,
1328 'current_provider' => $request->provider_id,
1329 'address' => $requests->d_address,
1330 'latitude' => $requests->d_latitude,
1331 'longitude' => $requests->d_longitude,
1332 );
1333
1334 $response_array = Helper::null_safe($response_array); Log::info('Create request end');
1335 } else {
1336 $response_array = array('success' => false , 'error' => Helper::get_error_message(126) , 'error_code' => 126 );
1337 }
1338
1339 } else {
1340 $response_array = array('success' => false , 'error' => Helper::get_error_message(127) , 'error_code' => 127);
1341 }
1342
1343 } else {
1344 $response_array = array('success' => false , 'error' => Helper::get_error_message(153) ,'error_code' => 153);
1345 }
1346 } else {
1347 $response_array = array('success' => false , 'error' => Helper::get_error_message(142) ,'error_code' => 142);
1348 }
1349 }
1350 }
1351 $response = response()->json($response_array, 200);
1352 return $response;
1353 }
1354
1355 public function cancel_request(Request $request) {
1356
1357 $user_id = $request->id;
1358
1359 $validator = Validator::make(
1360 $request->all(),
1361 array(
1362 'request_id' => 'required|numeric|exists:requests,id,user_id,'.$user_id,
1363 ));
1364
1365 if ($validator->fails())
1366 {
1367 $error_messages = implode(',', $validator->messages()->all());
1368 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=>$error_messages);
1369 }else
1370 {
1371 $request_id = $request->request_id;
1372 $requests = Requests::find($request_id);
1373 $requestStatus = $requests->status;
1374 $providerStatus = $requests->provider_status;
1375 $allowedCancellationStatuses = array(
1376 PROVIDER_ACCEPTED,
1377 PROVIDER_STARTED,
1378 );
1379
1380 // Check whether request cancelled previously
1381 if($requestStatus != REQUEST_CANCELLED)
1382 {
1383 // Check whether request eligible for cancellation
1384
1385 if(in_array($providerStatus, $allowedCancellationStatuses)) {
1386
1387 // Update status of the request to cancellation
1388 $requests->status = REQUEST_CANCELLED;
1389 $requests->save();
1390
1391 // If request has confirmed provider then release him to available status
1392 if($requests->confirmed_provider != DEFAULT_FALSE){
1393
1394 $provider = Provider::find( $requests->confirmed_provider );
1395 $provider->is_available = PROVIDER_AVAILABLE;
1396 $provider->waiting_to_respond = WAITING_TO_RESPOND_NORMAL;
1397 $provider->save();
1398
1399 // Send Push Notification to Provider
1400 $title = Helper::tr('cancel_by_user_title');
1401 $message = Helper::tr('cancel_by_user_message');
1402
1403 $this->dispatch(new sendPushNotification($requests->confirmed_provider,PROVIDER,$requests->id,$title,$message,''));
1404
1405 //Log::info("Cancelled request by user");
1406 // Send mail notification to the provider
1407 $email_data = array();
1408
1409 $subject = Helper::tr('request_cancel_user');
1410
1411 $email_data['provider_name'] = $email_data['username'] = "";
1412
1413/* if($user = User::find($requests->user_id)) {
1414 $email_data['username'] = $user->first_name." ".$user->last_name;
1415 }
1416
1417 if($provider = Provider::find($requests->confirmed_provider)) {*/
1418 $email_data['provider_name'] = $provider->first_name. " " . $provider->last_name;
1419 //}
1420
1421 $page = "emails.user.request_cancel";
1422 $email_send = Helper::send_email($page,$subject,$provider->email,$email_data);
1423 }
1424
1425 // No longer need request specific rows from RequestMeta
1426 RequestsMeta::where('request_id', '=', $request_id)->delete();
1427
1428 $response_array = Helper::null_safe(array('success' => true,'request_id' => $request->id));
1429
1430 } else {
1431 $response_array = array( 'success' => false, 'error' => Helper::get_error_message(114), 'error_code' => 114 );
1432 }
1433
1434 } else {
1435 $response_array = array( 'success' => false, 'error' => Helper::get_error_message(113), 'error_code' => 113 );
1436 }
1437 }
1438
1439 $response = response()->json($response_array, 200);
1440 return $response;
1441 }
1442
1443 public function waiting_request_cancel(Request $request) {
1444
1445 $get_requests = Requests::where('user_id' , $request->id)->where('status' , REQUEST_WAITING)->get();
1446
1447 if($get_requests) {
1448 foreach ($get_requests as $key => $requests) {
1449 $requests->status = REQUEST_CANCELLED;
1450 $requests->save();
1451
1452 $requests_meta = RequestsMeta::where('request_id' , $requests->id);
1453 $meta_status = $requests_meta->where('status' , DEFAULT_TRUE)->first();
1454 if($meta_status){
1455 $current_provider = $meta_status->provider_id;
1456 if($provider = Provider::find($current_provider)) {
1457 $provider->waiting_to_respond = WAITING_TO_RESPOND_NORMAL;
1458 $provider->save();
1459 }
1460 }
1461 $delete_request_meta = RequestsMeta::where('request_id' , $requests->id)->delete();
1462
1463 $email_data = array();
1464 $email_data['provider_name'] = "";
1465 $email_data['provider_name'] = $provider->first_name. " " . $provider->last_name;
1466 //Send notification to the provider
1467 $title = Helper::tr('waiting_cancel_by_user_title');
1468 $message = Helper::tr('waiting_cancel_by_user_message');
1469 $subject = Helper::tr('request_cancel_user');
1470 //Log::info("waiting cancelled - current provider".$current_provider);
1471 $page = "emails.user.request_cancel";
1472 $email_send = Helper::send_email($page,$subject,$provider->email,$email_data);
1473
1474 $this->dispatch(new sendPushNotification($current_provider,PROVIDER,$requests->id,$title,$message,''));
1475
1476 }
1477 }
1478
1479 $response_array = array('success' => true);
1480
1481 return response()->json($response_array , 200);
1482
1483 }
1484
1485 public function request_status_check(Request $request) {
1486
1487 $user = User::find($request->id);
1488
1489 $check_status = array(REQUEST_COMPLETED,REQUEST_CANCELLED,REQUEST_NO_PROVIDER_AVAILABLE);
1490
1491 $requests = Requests::where('requests.user_id', '=', $request->id)
1492 ->whereNotIn('requests.status', $check_status)
1493 ->leftJoin('users', 'users.id', '=', 'requests.user_id')
1494 ->leftJoin('providers', 'providers.id', '=', 'requests.confirmed_provider')
1495 ->leftJoin('service_types', 'service_types.id', '=', 'requests.request_type')
1496 ->select(
1497 'requests.id as request_id',
1498 'requests.request_type as request_type',
1499 'service_types.name as service_type_name',
1500 'service_types.provider_name as service_provider_name',
1501 'requests.after_image as after_image',
1502 'requests.before_image as before_image',
1503 'requests.end_time as end_time',
1504 'request_start_time as request_start_time',
1505 'requests.status','providers.id as provider_id',
1506 DB::raw('CONCAT(providers.first_name, " ", providers.last_name) as provider_name'),
1507 'providers.picture as provider_picture',
1508 'providers.mobile as provider_mobile',
1509 'requests.provider_status',
1510 'requests.amount',
1511 DB::raw('CONCAT(users.first_name, " ", users.last_name) as user_name'),
1512 'users.picture as user_picture',
1513 'users.id as user_id',
1514 'requests.d_latitude',
1515 'requests.d_longitude'
1516 )->get()->toArray();
1517
1518 $requests_data = array();
1519 $invoice = array();
1520
1521 if($requests) {
1522 foreach ($requests as $req) {
1523
1524 $req['rating'] = DB::table('user_ratings')->where('provider_id', $req['provider_id'])->avg('rating') ?: 0;
1525 $req['is_fav_provider'] = FavouriteProvider::where('user_id' , $request->id)->where('provider_id' , $req['provider_id'])->where('status' , 1)->count() ? 1 : 0;
1526 // unset($req['provider_id']);
1527 $requests_data[] = $req;
1528
1529 $allowed_status = array(REQUEST_COMPLETE_PENDING,REQUEST_COMPLETED,REQUEST_RATING);
1530
1531 if( in_array($req['status'], $allowed_status)) {
1532
1533 $invoice_query = RequestPayment::where('request_id' , $req['request_id'])
1534 ->leftJoin('requests' , 'request_payments.request_id' , '=' , 'requests.id')
1535 ->leftJoin('users' , 'requests.user_id' , '=' , 'users.id')
1536 ->leftJoin('cards' , 'users.default_card' , '=' , 'cards.id');
1537 if($user->payment_mode == CARD) {
1538 $invoice_query = $invoice_query->where('cards.is_default' , DEFAULT_TRUE) ;
1539 }
1540
1541 $invoice = $invoice_query->select('requests.confirmed_provider as provider_id' , 'request_payments.total_time',
1542 'request_payments.payment_mode as payment_mode' , 'request_payments.base_price',
1543 'request_payments.time_price' , 'request_payments.tax_price' ,
1544 'request_payments.total',
1545 'cards.card_token','cards.customer_id','cards.last_four')
1546 ->get()->toArray();
1547 $invoice[0]['extra_price'] = 10;
1548
1549 }
1550 }
1551 }
1552
1553 $response_array = Helper::null_safe(array(
1554 'success' => true,
1555 'data' => $requests_data,
1556 'invoice' => $invoice
1557 ));
1558
1559 $response = response()->json($response_array, 200);
1560 return $response;
1561 }
1562
1563 public function paybypaypal(Request $request) {
1564
1565 $user = User::find($request->id);
1566
1567 $validator = Validator::make($request->all() ,
1568 array(
1569
1570 'request_id' => 'required|exists:requests,id,user_id,'.$request->id,
1571 'payment_mode' => 'required|in:'.PAYPAL.'|exists:settings,key,value,1',
1572 'is_paid' => 'required|in:'.DEFAULT_TRUE,
1573 'payment_id' => 'required',
1574 ),array(
1575 'exists' => 'The :attribute doesn\'t belong to user:'.$user->firstname.' '.$user->last_name,
1576 'in' => 'The :attribute must be one of the following types: :values',
1577 )
1578 );
1579 if($validator->fails()) {
1580
1581 $error_messages = implode(',', $validator->messages()->all());
1582 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages' => $error_messages);
1583
1584 } else {
1585 $requests = Requests::where('id',$request->request_id)->where('status' , REQUEST_COMPLETE_PENDING)->first();
1586 // Check the status is completed
1587 if( $requests && $requests->status != REQUEST_RATING) {
1588
1589 if($requests->status == REQUEST_COMPLETE_PENDING) {
1590
1591 $requests->status = REQUEST_RATING;
1592
1593 $requests->is_paid = DEFAULT_TRUE;
1594 $requests->amount = $request->amount;
1595 $requests->save();
1596
1597 if($request_payment = RequestPayment::where('request_id' , $request->request_id)->first()) {
1598
1599 $request_payment->payment_id = $request->payment_id;
1600 $request_payment->payment_mode = $request->payment_mode;
1601 $request_payment->status = DEFAULT_TRUE;
1602 $request_payment->save();
1603 }
1604
1605 // Send push notification to provider
1606
1607 if($user)
1608 $title = "The"." ".$user->first_name.' '.$user->last_name." done the payment";
1609 else
1610 $title = Helper::tr('request_completed_user_title');
1611
1612 $message = Helper::tr('request_completed_user_message');
1613 $this->dispatch(new sendPushNotification($requests->confirmed_provider,PROVIDER,$requests->id,$title,$message,''));
1614
1615 // Send mail notification to the provider
1616 $subject = Helper::tr('request_completed_bill');
1617 $email = Helper::get_emails(3,$request->id,$requests->confirmed_provider);
1618 $page = "emails.user.invoice";
1619 Helper::send_invoice($requests->id,$page,$subject,$email);
1620
1621 // Send Response
1622 $response_array = Helper::null_safe(array('success' => true , 'message' => Helper::get_message(107)));
1623
1624 } else {
1625 $response_array = array('success' => 'false' , 'error' => Helper::get_error_message(137) , 'error_code' => 137);
1626 }
1627
1628 } else {
1629 $response_array = array('success' => 'false' , 'error' => Helper::get_error_message(138) , 'error_code' => 138);
1630 }
1631 }
1632
1633 return response()->json($response_array,200);
1634
1635 }
1636
1637 public function paynow(Request $request) {
1638
1639 $validator = Validator::make($request->all(),
1640 array(
1641 'request_id' => 'required|exists:requests,id,user_id,'.$request->id,
1642 'payment_mode' => 'required|in:'.COD.','.PAYPAL.','.CARD.'|exists:settings,key,value,1',
1643 'is_paid' => 'required',
1644 ),
1645 array(
1646 'exists' => Helper::get_error_message(139),
1647 )
1648 );
1649
1650 if($validator->fails()) {
1651 $error_messages = implode(',', $validator->messages()->all());
1652 $response_array = array('success' => false , 'error' => $error_messages , 'error_messages' => Helper::get_error_message(101));
1653 } else {
1654
1655 $requests = Requests::where('id',$request->request_id)->where('status' , REQUEST_COMPLETE_PENDING)->first();
1656 $user = User::find($request->id);
1657
1658 //Check current status of the request
1659 if($requests && intval($requests->status) != REQUEST_RATING ) {
1660
1661 $total = 0;
1662
1663 if($request_payment = RequestPayment::where('request_id' , $request->request_id)->first()) {
1664 $request_payment->payment_mode = $request->payment_mode;
1665 $request_payment->save();
1666 $total = $request_payment->total;
1667 }
1668
1669 if($request->payment_mode == COD) {
1670
1671 $requests->status = WAITING_FOR_PROVIDER_CONFRIMATION_COD;
1672 // $requests->is_paid = DEFAULT_TRUE;
1673
1674 $request_payment->payment_id = uniqid();
1675 $request_payment->status = DEFAULT_TRUE;
1676
1677 } elseif($request->payment_mode == CARD) {
1678
1679
1680 $check_card_exists = User::where('users.id' , $request->id)
1681 ->leftJoin('cards' , 'users.id','=','cards.user_id')
1682 ->where('cards.id' , $user->default_card)
1683 ->where('cards.is_default' , DEFAULT_TRUE);
1684
1685 if($check_card_exists->count() != 0) {
1686
1687 $user_card = $check_card_exists->first();
1688
1689 // Get the key from settings table
1690 $settings = Settings::where('key' , 'stripe_secret_key')->first();
1691 $stripe_secret_key = $settings->value;
1692
1693 $customer_id = $user_card->customer_id;
1694
1695 if($stripe_secret_key) {
1696 \Stripe\Stripe::setApiKey($stripe_secret_key);
1697 } else {
1698 $response_array = array('success' => false, 'error' => Helper::get_error_message(155) , 'error_code' => 155);
1699 return response()->json($response_array , 200);
1700 }
1701
1702 try{
1703
1704 $user_charge = \Stripe\Charge::create(array(
1705 "amount" => $total * 100,
1706 "currency" => "usd",
1707 "customer" => $customer_id,
1708 ));
1709
1710 $payment_id = $user_charge->id;
1711 $amount = $user_charge->amount/100;
1712 $paid_status = $user_charge->paid;
1713
1714 $request_payment->payment_id = $payment_id;
1715 $request_payment->status = 1;
1716
1717 if($paid_status) {
1718 $requests->is_paid = DEFAULT_TRUE;
1719 }
1720 $requests->status = REQUEST_RATING;
1721 $requests->amount = $amount;
1722
1723 } catch (\Stripe\StripeInvalidRequestError $e) {
1724 //Log::info(print_r($e,true));
1725 $response_array = array('success' => false , 'error' => Helper::get_error_message(141) ,'error_code' => 141);
1726 return response()->json($response_array , 200);
1727
1728 }
1729
1730 } else {
1731 $response_array = array('success' => false, 'error' => Helper::get_error_message(140) , 'error_code' => 140);
1732 return response()->json($response_array , 200);
1733 }
1734
1735 }
1736
1737 $requests->save();
1738 $request_payment->save();
1739
1740 // Send notification to the provider Start
1741 if($user)
1742 $title = "The"." ".$user->first_name.' '.$user->last_name." done the payment";
1743 else
1744 $title = Helper::tr('request_completed_user_title');
1745
1746 $message = Helper::get_push_message(603);
1747 $this->dispatch(new sendPushNotification($requests->confirmed_provider,PROVIDER,$requests->id,$title,$message,''));
1748 // Send notification end
1749
1750 // Send invoice notification to the user, provider and admin
1751 $subject = Helper::tr('request_completed_bill');
1752 $email = Helper::get_emails(3,$request->id,$requests->confirmed_provider);
1753 $page = "emails.user.invoice";
1754 Helper::send_invoice($requests->id,$page,$subject,$email);
1755
1756 $response_array = array('success' => true);
1757
1758 } else {
1759 $response_array = array('success' => false,'error' => Helper::get_error_message(138) , 'error_code' => 138);
1760 }
1761 }
1762
1763 return response()->json($response_array , 200);
1764
1765 }
1766
1767 public function rate_provider(Request $request) {
1768
1769 $user = User::find($request->id);
1770
1771 $validator = Validator::make(
1772 $request->all(),
1773 array(
1774 'request_id' => 'required|integer|exists:requests,id,user_id,'.$user->id.'|unique:provider_ratings,request_id',
1775 'rating' => 'required|integer|in:'.RATINGS,
1776 'comments' => 'max:255',
1777 'is_favorite' => 'in:'.DEFAULT_TRUE.','.DEFAULT_FALSE,
1778 ),
1779 array(
1780 'exists' => 'The :attribute doesn\'t belong to user:'.$user->id,
1781 'unique' => 'The :attribute already rated.'
1782 )
1783 );
1784
1785
1786 if ($validator->fails()) {
1787 $error_messages = implode(',', $validator->messages()->all());
1788 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=>$error_messages);
1789 } else {
1790
1791 $request_id = $request->request_id;
1792 $comment = $request->comment;
1793
1794 $req = Requests::where('id' ,$request_id)
1795 ->where('status' ,REQUEST_RATING)
1796 ->first();
1797
1798 if ($req && intval($req->status) != REQUEST_COMPLETED) {
1799 //Save Rating
1800 $rev_user = new ProviderRating();
1801 $rev_user->provider_id = $req->confirmed_provider;
1802 $rev_user->user_id = $req->user_id;
1803 $rev_user->request_id = $req->id;
1804 $rev_user->rating = $request->rating;
1805 $rev_user->comment = $comment ? $comment: '';
1806 $rev_user->save();
1807
1808 $req->status = REQUEST_COMPLETED;
1809 $req->save();
1810
1811 // Save favourite provider details
1812 $fav_provider = FavouriteProvider::where('provider_id',$req->confirmed_provider)->where('user_id' , $request->id)->first();
1813
1814 if(!$fav_provider){
1815 $fav_provider = new FavouriteProvider;
1816 }
1817 $fav_provider->provider_id = $req->confirmed_provider;
1818 $fav_provider->user_id = $request->id;
1819 $fav_provider->status = $request->is_favorite;
1820 $fav_provider->save();
1821
1822 // Send Push Notification to Provider
1823 // $title = Helper::tr('provider_rated_by_user_title');
1824 // $messages = Helper::tr('provider_rated_by_user_message');
1825 // $this->dispatch( new sendPushNotification($req->confirmed_provider, PROVIDER,$req->id,$title, $messages));
1826 $response_array = array('success' => true);
1827
1828 } else {
1829 $response_array = array('success' => false,'error' => Helper::get_error_message(150),'error_code' => 150);
1830 }
1831 }
1832
1833 $response = response()->json($response_array, 200);
1834 return $response;
1835 }
1836
1837 public function add_fav_provider(Request $request) {
1838
1839 $validator = Validator::make(
1840 $request->all(),
1841 array(
1842 'fav_provider' => 'exists:providers,id'
1843 )
1844 );
1845
1846 if ($validator->fails()) {
1847 $error_messages = implode(',', $validator->messages()->all());
1848 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=>$error_messages);
1849
1850 } else {
1851 // Save favourite provider details
1852 $fav_provider = FavouriteProvider::where('provider_id',$request->fav_provider)->where('user_id' , $request->id)->first();
1853 if(!$fav_provider){
1854
1855 $favProvider = new FavouriteProvider;
1856 $favProvider->provider_id = $request->fav_provider;
1857 $favProvider->user_id = $request->id;
1858 $favProvider->status = DEFAULT_TRUE;
1859 $favProvider->save();
1860
1861 $response_array = Helper::null_safe(array('success' => true));
1862
1863 } else {
1864 $response_array = array('success' => false , 'error' => Helper::get_error_message(143) , 'error_code' => 143);
1865 }
1866 }
1867
1868 $response = response()->json($response_array, 200);
1869 return $response;
1870 }
1871
1872 public function fav_providers(Request $request) {
1873
1874 $fav_providers = FavouriteProvider::where('favourite_providers.user_id' , $request->id)
1875 ->leftJoin('providers' , 'favourite_providers.provider_id' , '=' ,'providers.id')
1876 ->select('favourite_providers.id as favourite_id' ,'favourite_providers.status as status','providers.id as provider_id' ,
1877 DB::raw('CONCAT(providers.first_name, " ", providers.last_name) as provider_name'),'providers.picture'
1878 )
1879 ->get()
1880 ->toArray();
1881 $providers = array();
1882 $data = array();
1883
1884 if($fav_providers) {
1885
1886 foreach ($fav_providers as $f => $fav_provider) {
1887 $fav_provider['user_rating'] = DB::table('user_ratings')->where('provider_id', $fav_provider['provider_id'])->avg('rating') ?: 0;
1888 $providers[] = $fav_provider;
1889 }
1890
1891 }
1892
1893 $response_array = Helper::null_safe(array('success' => true , 'providers' => $providers));
1894
1895 return response()->json($response_array,200);
1896
1897 }
1898
1899 public function delete_fav_provider(Request $request) {
1900
1901 $favourite_id = $request->favourite_id;
1902
1903 $validator = Validator::make($request->all() ,
1904 array(
1905 'favourite_id' => "required|exists:favourite_providers,id",
1906 ));
1907 if($validator->fails()) {
1908
1909 $error_messages = implode(',', $validator->messages()->all());
1910 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages' => $error_messages);
1911 } else {
1912
1913 $favourite = FavouriteProvider::find($request->favourite_id);
1914
1915 if($provider = Provider::find($favourite->provider_id)) {
1916
1917 $fav_delete = $favourite->delete();
1918
1919 $response_array = Helper::null_safe(array('success' => true , 'message' => Helper::get_message(108)));
1920
1921 } else {
1922 $response_array = array('success' => false , 'error' => Helper::get_error_message(132) ,'error_code' =>132);
1923 }
1924
1925 }
1926
1927 return response()->json($response_array , 200);
1928
1929 }
1930
1931 public function history(Request $request) {
1932
1933 // Get the completed request details
1934 $requests = Requests::where('requests.user_id', '=', $request->id)
1935 ->where('requests.status', '=', REQUEST_COMPLETED)
1936 ->leftJoin('providers', 'providers.id', '=', 'requests.confirmed_provider')
1937 ->leftJoin('users', 'users.id', '=', 'requests.user_id')
1938 ->leftJoin('request_payments', 'requests.id', '=', 'request_payments.request_id')
1939 ->orderBy('request_start_time','desc')
1940 ->select('requests.id as request_id', 'requests.request_type as request_type', 'request_start_time as date','requests.amount',
1941 DB::raw('CONCAT(providers.first_name, " ", providers.last_name) as provider_name'), 'providers.picture',
1942 DB::raw('ROUND(requests.amount) as total'))
1943 ->get()
1944 ->toArray();
1945
1946 $response_array = Helper::null_safe(array('success' => true,'requests' => $requests));
1947 return response()->json($response_array , 200);
1948 }
1949
1950 public function single_request(Request $request) {
1951
1952 $user = User::find($request->id);
1953
1954 $validator = Validator::make(
1955 $request->all(),
1956 array(
1957 'request_id' => 'required|integer|exists:requests,id,user_id,'.$user->id,
1958 ),
1959 array(
1960 'exists' => 'The :attribute doesn\'t belong to user:'.$user->id,
1961 )
1962 );
1963
1964 if ($validator->fails()) {
1965 $error_messages = implode(',', $validator->messages()->all());
1966 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=>$error_messages);
1967
1968 } else {
1969
1970 $requests = Requests::where('requests.id' , $request->request_id)
1971 ->leftJoin('providers' , 'requests.confirmed_provider','=' , 'providers.id')
1972 ->leftJoin('users' , 'requests.user_id','=' , 'users.id')
1973 ->leftJoin('user_ratings' , 'requests.id','=' , 'user_ratings.request_id')
1974 ->leftJoin('request_payments' , 'requests.id','=' , 'request_payments.request_id')
1975 ->leftJoin('service_types', 'service_types.id', '=', 'requests.request_type')
1976 ->leftJoin('cards','users.default_card','=' , 'cards.id')
1977 ->select('providers.id as provider_id' , 'providers.picture as provider_picture','request_payments.payment_mode as payment_mode',
1978 DB::raw('CONCAT(providers.first_name, " ", providers.last_name) as provider_name'),'user_ratings.rating','user_ratings.comment',
1979 DB::raw('ROUND(request_payments.base_price) as base_price'), DB::raw('ROUND(request_payments.tax_price) as tax_price'),
1980 DB::raw('ROUND(request_payments.time_price) as time_price'), DB::raw('ROUND(request_payments.total) as total'),
1981 'cards.id as card_id','cards.customer_id as customer_id',
1982 'cards.card_token','cards.last_four',
1983 'requests.id as request_id','requests.before_image','requests.after_image',
1984 'requests.user_id as user_id',
1985 'requests.request_type as request_type',
1986 'service_types.name as service_type_name',
1987 'service_types.provider_name as service_provider_name',
1988 DB::raw('CONCAT(users.first_name, " ", users.last_name) as user_name'))
1989 ->get()->toArray();
1990
1991 $response_array = Helper::null_safe(array('success' => true , 'data' => $requests));
1992 }
1993
1994 return response()->json($response_array , 200);
1995
1996 }
1997
1998 public function get_payment_modes(Request $request) {
1999
2000 $payment_modes = array();
2001 $modes = Settings::whereIn('key' , array('cod','paypal','card','AUTHORIZE'))->where('value' , 1)->get();
2002 if($modes) {
2003 foreach ($modes as $key => $mode) {
2004 $payment_modes[$mode->key] = $mode->key;
2005 }
2006 }
2007
2008 $response_array = Helper::null_safe(array('success' => true , 'payment_modes' => $payment_modes));
2009
2010 return response()->json($response_array,200);
2011 }
2012
2013 /*public function get_states(Request $request) {
2014
2015 $getstate = $data = $states = array();
2016 if($getstate = States_taxes::all()) {
2017
2018 foreach ($getstate as $s => $state) {
2019 $data['id'] = $state->id;
2020 $data['states'] = $state->states;
2021 $data['abbreviation'] = $state->abbreviation;
2022 $data['tax'] = $state->tax;
2023
2024 array_push($states, $data);
2025 }
2026 }
2027
2028 $response_array = Helper::null_safe(array('success' => true , 'states' => $states));
2029
2030 return response()->json($response_array,200);
2031 }*/
2032
2033
2034 public function get_user_payment_modes(Request $request) {
2035
2036 $user = User::find($request->id);
2037
2038 if($user->payment_mode) {
2039
2040 $payment_data = $data = $card_data = array();
2041
2042 if($user_cards = Cards::where('user_id' , $request->id)->get()) {
2043 foreach ($user_cards as $c => $card) {
2044 $data['id'] = $card->id;
2045 $data['customer_id'] = $card->customer_id;
2046 $data['card_id'] = $card->card_token;
2047 $data['last_four'] = $card->last_four;
2048 $data['is_default']= $card->is_default;
2049 $data['month']= $card->month;
2050 $data['year']= $card->year;
2051 $data['cvc']= $card->cvc;
2052 $data['name']= $card->name;
2053
2054 array_push($card_data, $data);
2055 }
2056 }
2057
2058 $response_array = Helper::null_safe(array('success' => true, 'payment_mode' => $user->payment_mode , 'card' => $card_data));
2059
2060 } else {
2061 $response_array = array('success' => false , 'error' => Helper::get_error_message(142) , 'error_code' => 142);
2062 }
2063
2064 return response()->json($response_array , 200);
2065
2066 }
2067
2068 public function payment_mode_update(Request $request) {
2069
2070 $validator = Validator::make($request->all() ,
2071 array(
2072 'payment_mode' => 'required'
2073 )
2074 );
2075
2076 if($validator->fails()) {
2077 $error_messages = implode(',', $validator->messages()->all());
2078 $response_array = array('success' => false ,'error' => $error_messages , 'error_messages' => Helper::get_error_message(101));
2079 } else {
2080 $user = User::where('id', '=', $request->id)->update( array('payment_mode' => $request->payment_mode));
2081
2082 $response_array = Helper::null_safe(array('success' => true , 'message' => Helper::get_message(109)));
2083 }
2084
2085 return response()->json($response_array , 200);
2086
2087 }
2088
2089 public function add_card(Request $request) {
2090
2091 $validator = Validator::make(
2092 $request->all(),
2093 array(
2094 'last_four' => 'required',
2095 'card_token' => 'required',
2096 'customer_id' => 'required',
2097 )
2098 );
2099
2100 if ($validator->fails())
2101 {
2102 $error_messages = implode(',', $validator->messages()->all());
2103 $response_array = array('success' => false , 'error' => Helper::get_error_message(101) , 'error_code' => 101 , 'error_messages' => $error_messages);
2104
2105 } else {
2106
2107 $user = User::find($request->id);
2108
2109 $customer_id = $request->customer_id;
2110
2111 $cards = new Cards;
2112 $cards->user_id = $request->id;
2113 $cards->customer_id = $request->customer_id;
2114 $cards->last_four = $request->last_four;
2115 $cards->card_token = $request->card_token;
2116
2117 // Check is any default is available
2118 $check_card = Cards::where('user_id',$request->id)->first();
2119
2120 if($check_card ) {
2121 $cards->is_default = 0;
2122 } else {
2123 $cards->is_default = 1;
2124 }
2125
2126 $cards->save();
2127
2128 if($user) {
2129 // $user->payment_mode = CARD;
2130 $user->default_card = $check_card ? $user->default_card : $cards->id;
2131 $user->save();
2132 }
2133
2134 $response_array = Helper::null_safe(array('success' => true));
2135 }
2136
2137 $response = response()->json($response_array,200);
2138 return $response;
2139 }
2140
2141 public function delete_card(Request $request) {
2142
2143 $card_id = $request->card_id;
2144
2145 $validator = Validator::make(
2146 $request->all(),
2147 array(
2148 'card_id' => 'required|integer|exists:cards,id,user_id,'.$request->id,
2149 ),
2150 array(
2151 'exists' => 'The :attribute doesn\'t belong to user:'.$request->id
2152 )
2153 );
2154
2155 if ($validator->fails()) {
2156 $error_messages = implode(',', $validator->messages()->all());
2157 $response_array = array('success' => false , 'error' => Helper::get_error_message(101) , 'error_code' => 101 , 'error_messages' => $error_messages);
2158 } else {
2159
2160 Cards::where('id',$card_id)->delete();
2161
2162 $user = User::find($request->id);
2163
2164 if($user) {
2165
2166 if($user->payment_mode = AUTHORIZE) {
2167 // Check he added any other card
2168 if($check_card = Cards::where('user_id' , $request->id)->first()) {
2169 $check_card->is_default = DEFAULT_TRUE;
2170 $user->default_card = $check_card->id;
2171 $check_card->save();
2172 } else {
2173 $user->payment_mode = PAYPAL;
2174 $user->default_card = DEFAULT_FALSE;
2175 }
2176 }
2177
2178 $user->save();
2179 }
2180
2181 $response_array = array('success' => true );
2182 }
2183
2184 return response()->json($response_array , 200);
2185 }
2186
2187 public function default_card(Request $request) {
2188
2189 $validator = Validator::make(
2190 $request->all(),
2191 array(
2192 'card_id' => 'required|integer|exists:cards,id,user_id,'.$request->id,
2193 ),
2194 array(
2195 'exists' => 'The :attribute doesn\'t belong to user:'.$request->id
2196 )
2197 );
2198
2199 if($validator->fails()) {
2200
2201 $error_messages = implode(',', $validator->messages()->all());
2202 $response_array = array('success' => false, 'error' => Helper::get_error_message(101), 'error_code' => 101, 'error_messages'=>$error_messages);
2203
2204 } else {
2205
2206 $user = User::find($request->id);
2207
2208 $old_default = Cards::where('user_id' , $request->id)->where('is_default', DEFAULT_TRUE)->update(array('is_default' => DEFAULT_FALSE));
2209
2210 $card = Cards::where('id' , $request->card_id)->update(array('is_default' => DEFAULT_TRUE));
2211
2212 if($card) {
2213 if($user) {
2214 $user->payment_mode = AUTHORIZE;
2215 $user->default_card = $request->card_id;
2216 $user->save();
2217 }
2218 $response_array = Helper::null_safe(array('success' => true));
2219 } else {
2220 $response_array = array('success' => false , 'error' => 'Something went wrong');
2221 }
2222 }
2223 return response()->json($response_array , 200);
2224
2225 }
2226
2227 public function message_get(Request $request)
2228 {
2229 $Messages = ChatMessage::where('user_id', $request->id)
2230 ->where('request_id', $request->request_id);
2231 // ->orderBy('id', 'desc');
2232
2233 $response_array = Helper::null_safe(array(
2234 'success' => true,
2235 'data' => $Messages->get()->toArray(),
2236 ));
2237
2238 return response()->json($response_array, 200);
2239 }
2240
2241 public function message_send(Request $request)
2242 {
2243 $message = new ChatMessage;
2244 $message->request_id = $request->request_id;
2245 $message->user_id = $request->user_id;
2246 $message->provider_id = $request->provider_id;
2247 $message->delivered = $request->delivered;
2248 $message->type = $request->type;
2249 $message->message = $request->message;
2250 $message->save();
2251 $response_array = Helper::null_safe(array(
2252 'success' => true,
2253 'data' => $request->all(),
2254 ));
2255 return response()->json($response_array, 200);
2256 }
2257
2258
2259 public function chat_history_user(Request $request)
2260 {
2261 $id = $request->id;
2262
2263 $messages = ChatMessage::with('infouser')
2264 ->where('user_id',$id)
2265 ->where('type','up')
2266 ->groupBy('request_id')
2267 ->orderBy('created_at','DESC')->get();
2268
2269
2270 $response_array = Helper::null_safe(array(
2271 'success' => true,
2272 'data' => $messages->toArray(),
2273 ));
2274
2275 return response()->json($response_array, 200);
2276 }
2277
2278 public function single_chat_history(Request $request)
2279 {
2280 $validator = Validator::make(
2281 $request->all(),
2282 array(
2283 'id' => 'required|exists:users,id',
2284 'request_id' => 'required|exists:requests,id',
2285 'token' => 'required'
2286 )
2287 );
2288
2289 if ($validator->fails()) {
2290 $error_messages = implode(',', $validator->messages()->all());
2291 $response_array = array('success' => false, 'error' => $error_messages, 'error_messages' => Helper::get_error_message(104) ,'error_code' => 104);
2292 } else {
2293 $user_id = $request->id;
2294 $request_id = $request->request_id;
2295
2296 $ProMessages = ChatMessage::with('infouser')
2297 ->where('user_id',$user_id)
2298 ->where('request_id',$request_id)
2299 ->orderBy('created_at','DESC')->get();
2300
2301 $response_array = Helper::null_safe(array(
2302 'success' => true,
2303 'data' => $ProMessages->toArray(),
2304 ));
2305
2306 return response()->json($response_array, 200);
2307 }
2308 }
2309
2310 //get timezone for userprofile
2311 public function profile_timezone()
2312 {
2313 $timezones = Helper::generate_timezone_list();
2314
2315
2316 return response()->json(['success'=>'true', 'timezone'=> $timezones], 200);
2317 }
2318}