Advertisement
Guest User

userapicontroller.php

a guest
Dec 30th, 2017
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 100.61 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use Illuminate\Http\Request;
  6.  
  7. use App\Helpers\Helper;
  8. use Auth;
  9. use Log;
  10. use Hash;
  11. use Validator;
  12. use File;
  13. use DB;
  14. use App\User;
  15. use App\ProviderService;
  16. use App\Requests;
  17. use App\Admin;
  18. use App\RequestsMeta;
  19. use App\ServiceType;
  20. use App\Provider;
  21. use App\Settings;
  22. use App\FavouriteProvider;
  23. use App\RequestPayment;
  24. use App\UserRating;
  25. use App\ProviderRating;
  26. use App\Cards;
  27. use App\ChatMessage;
  28.  
  29. use net\authorize\api\contract\v1\CreateCustomerPaymentProfileRequest;
  30. use net\authorize\api\contract\v1\CreateCustomerProfileRequest;
  31. use net\authorize\api\contract\v1\CreateTransactionRequest;
  32. use net\authorize\api\contract\v1\CreditCardType;
  33. use net\authorize\api\contract\v1\CustomerPaymentProfileType;
  34. use net\authorize\api\contract\v1\CustomerProfileType;
  35. use net\authorize\api\contract\v1\MerchantAuthenticationType;
  36. use net\authorize\api\contract\v1\PaymentType;
  37. use net\authorize\api\contract\v1\TransactionRequestType;
  38. use net\authorize\api\controller\CreateCustomerPaymentProfileController;
  39. use net\authorize\api\controller\CreateCustomerProfileController;
  40. use net\authorize\api\controller\CreateTransactionController;
  41. use App\Jobs\sendPushNotification;
  42. use App\Jobs\NormalPushNotification;
  43. use App\States_taxes;
  44.  
  45. define('USER', 0);
  46. define('PROVIDER',1);
  47.  
  48. define('NONE', 0);
  49.  
  50. define('DEFAULT_FALSE', 0);
  51. define('DEFAULT_TRUE', 1);
  52.  
  53. // Payment Constants
  54.  
  55. define('PAYPAL', 'PAYPAL');
  56. define('CARD', 'card');
  57. define('AUTHORIZE', 'AUTHORIZE');
  58.  
  59. // Request table status
  60. define('REQUEST_NEW', 0);
  61. define('REQUEST_WAITING', 1);
  62. define('REQUEST_INPROGRESS', 2);
  63. define('REQUEST_COMPLETE_PENDING', 3);
  64. define('WAITING_FOR_PROVIDER_CONFRIMATION_COD', 8);
  65. define('REQUEST_RATING', 4);
  66. define('REQUEST_COMPLETED', 5);
  67. define('REQUEST_CANCELLED', 6);
  68. define('REQUEST_NO_PROVIDER_AVAILABLE',7);
  69.  
  70.  
  71. //Only when manual request
  72. define('REQUEST_REJECTED_BY_PROVIDER', 9);
  73. define('PROVIDER_NOT_AVAILABLE', 0);
  74. define('PROVIDER_AVAILABLE', 1);
  75.  
  76. // Request table provider_status
  77. define('PROVIDER_NONE', 0);
  78. define('PROVIDER_ACCEPTED', 1);
  79. define('PROVIDER_STARTED', 2);
  80. define('PROVIDER_ARRIVED', 3);
  81. define('PROVIDER_SERVICE_STARTED', 4);
  82. define('PROVIDER_SERVICE_COMPLETED', 5);
  83. define('PROVIDER_RATED', 6);
  84.  
  85. define('REQUEST_META_NONE', 0);
  86. define('REQUEST_META_OFFERED', 1);
  87. define('REQUEST_META_TIMEDOUT', 2);
  88. define('REQUEST_META_DECLINED', 3);
  89.  
  90. define('WAITING_TO_RESPOND', 1);
  91. define('WAITING_TO_RESPOND_NORMAL',0);
  92.  
  93. define('RATINGS', '0,1,2,3,4,5');
  94.  
  95. define('DEVICE_ANDROID', 'android');
  96. define('DEVICE_IOS', 'ios');
  97.  
  98. class 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement