RestoUser.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\RestoUsers;
  5. use App\Models\RestoUserInvites;
  6. use Illuminate\Support\Facades\Auth;
  7. use App\Models\Outlets;
  8. use App\Models\User;
  9. use App\Models\SendEmail;
  10. use Illuminate\Support\Facades\Hash;
  11. use App\Helpers\CommonMethods;
  12. use Str;
  13. use App\Models\Restaurants;
  14. class RestoUser extends Controller
  15. {
  16. //
  17. public function users(){
  18. $users = RestoUsers::whereNull('deleted_at')->where('resto_id',Auth::user()->restaurants->id)->get();
  19. $invited_users = RestoUserInvites::whereNull('deleted_at')->where('invite_type','pending')->where('resto_id',Auth::user()->restaurants->id)->get();
  20. return view('users.users',['users'=>$users,'invited_users'=>$invited_users]);
  21. }
  22. public function invite(){
  23. $outlets = Outlets::whereNull('deleted_at')->where('resto_id',Auth::user()->restaurants->id)->get();
  24. return view('users.invite',['outlets'=>$outlets]);
  25. }
  26. public function send_invitation(Request $request){
  27. $emails = $request->emails;
  28. $role = $request->role;
  29. $selected_outlets = $request->selected_outlets;
  30. $resto_id = Auth::user()->restaurants->id;
  31. $role_based_access = $request->role_based_access;
  32. $emails = explode(',', $emails);
  33. $existing_email = [];
  34. $new = false;
  35. foreach($emails as $email){
  36. $invite = RestoUserInvites::where('email',$email)->whereNull('deleted_at')->where('resto_id',$resto_id)->first();
  37. if(isset($invite)){
  38. $existing_email[] = $email;
  39. }else{
  40. $new = true;
  41. $in = new RestoUserInvites();
  42. $uuid = Str::uuid();
  43. $in->email = $email;
  44. $in->resto_id = $resto_id;
  45. $in->unique_key = $uuid;
  46. $in->role = $role;
  47. $in->access_level = $role_based_access;
  48. $in->selected_outlets = $selected_outlets;
  49. $in->invite_type = 'pending';
  50. $in->save();
  51. $id = $in->id;
  52. if($id > 0){
  53. $param = array(
  54. 'email'=>$email,
  55. 'name' => '',
  56. 'shop_name' => Auth::user()->restaurants->name,
  57. 'role' => $role,
  58. 'access_level' => $role_based_access,
  59. 'selected_outlets' => $selected_outlets,
  60. 'link' => env('APP_URL').'user/invite/'.$uuid
  61. );
  62. SendEmail::SendInvitationLink($param);
  63. }
  64. }
  65. }
  66. if($new){
  67. $message = "Invitation sent successfully.";
  68. if(count($existing_email) > 0)
  69. $message .=', '.implode(', ' , $existing_email).' already in database.';
  70. $array = array(
  71. 'type'=>"success",
  72. 'message'=>$message
  73. );
  74. echo json_encode($array);
  75. }else{
  76. $message = "Invitation is not sent";
  77. if(count($existing_email) > 0){
  78. $message.=", ".implode(",",$existing_email).' are already in database';
  79. }
  80. $array = array(
  81. 'type'=>"error",
  82. 'message'=>$message
  83. );
  84. echo json_encode($array);
  85. }
  86. }
  87. public function create_user($id){
  88. $invite = RestoUserInvites::where('unique_key',$id)->where('invite_type','pending')->first();
  89. $resto = NULL;
  90. if(isset($invite)){
  91. $resto = Restaurants::find($invite->resto_id);
  92. }
  93. return view('users.create',['user'=>$invite,'resto'=>$resto]);
  94. }
  95. public function save_user(Request $request){
  96. $invite_id = $request->invite_id;
  97. $invite = RestoUserInvites::where('unique_key',$invite_id)->where('invite_type','pending')->first();
  98. $first_name = $request->first_name;
  99. $last_name = $request->last_name;
  100. $mobile_number = $request->country_code.''.$request->mobile_number;
  101. $email = $request->email;
  102. $password = $request->password;
  103. $e_user = User::where('email',$email)->first();
  104. if(isset($e_user)){
  105. $response = array(
  106. 'type'=>'error',
  107. 'message' => 'Email already found! try other email address'
  108. );
  109. echo json_encode($response);
  110. exit();
  111. }
  112. $user = new User();
  113. $username = CommonMethods::generate_user_name($request->first_name.' '.$request->last_name);
  114. $user->name = $request->first_name.' '.$request->last_name;
  115. $user->username = $username;
  116. $user->password = Hash::make($password);
  117. if(!empty($request->email))
  118. $user->email = $request->email;
  119. $user->is_active = 1;
  120. $user->role='resto_user';
  121. $user->save();
  122. $user_id = $user->id;
  123. $resto_user = new RestoUsers();
  124. $resto_user->user_id = $user_id;
  125. $resto_user->resto_id = $invite->resto_id;
  126. $resto_user->unique_key = Str::uuid();
  127. $resto_user->first_name = $first_name;
  128. $resto_user->last_name = $last_name;
  129. $resto_user->email = $email;
  130. $resto_user->mobile_number = $mobile_number;
  131. $resto_user->is_active = 1;
  132. $resto_user->role=$invite->role;
  133. $resto_user->access_level=$invite->access_level;
  134. $resto_user->selected_outlets=$invite->selected_outlets;
  135. $resto_user->save();
  136. $id = $resto_user->id;
  137. if($id > 0){
  138. $invite->invite_type = 'completed';
  139. $invite->save();
  140. $shop = Restaurants::find($invite->resto_id);
  141. $param = array(
  142. 'email'=>$email,
  143. 'name' => $first_name.' '.$last_name,
  144. 'shop_name' => $shop->name,
  145. 'username' => $username,
  146. 'password' => $password
  147. );
  148. SendEmail::sendRestoUserCredentials($param);
  149. Auth::loginUsingId($user_id);
  150. $response = array(
  151. 'type'=>'success',
  152. 'message' => 'Your profile is created',
  153. 'role'=>$resto_user->role
  154. );
  155. echo json_encode($response);
  156. }else{
  157. $response = array(
  158. 'type'=>'error',
  159. 'message' => 'Your profile is not created, try again'
  160. );
  161. echo json_encode($response);
  162. }
  163. }
  164. public function delete_invitation($id){
  165. $invite = RestoUserInvites::where('unique_key',$id)->where('invite_type','pending')->first();
  166. $invite->deleted_at = date('Y-m-d H:i:s');
  167. $invite->save();
  168. }
  169. public function delete_saved_user($id){
  170. $invite = RestoUsers::where('id',$id)->first();
  171. $invite->deleted_at = date('Y-m-d H:i:s');
  172. $invite->save();
  173. }
  174. public function user_profile($id){
  175. $user = RestoUsers::where('unique_key',$id)->first();
  176. $outlets = Outlets::whereNull('deleted_at')->where('resto_id',Auth::user()->restaurants->id)->get();
  177. return view('users.profile',['user'=>$user,'outlets'=>$outlets]);
  178. }
  179. public function save_changes(Request $request){
  180. $user = $request->user;
  181. $resto_user = RestoUsers::where('unique_key',$user)->first();
  182. $role = $request->role;
  183. $selected_outlets = $request->selected_outlets;
  184. $resto_id = Auth::user()->restaurants->id;
  185. $role_based_access = $request->role_based_access;
  186. $resto_user->role = $role;
  187. $resto_user->access_level = $role_based_access;
  188. $resto_user->selected_outlets = $selected_outlets ;
  189. $resto_user->save();
  190. $id = $resto_user->id;
  191. if($id > 0){
  192. $response = array(
  193. 'type'=>'success',
  194. 'message' => 'Your profile is updated'
  195. );
  196. echo json_encode($response);
  197. }else{
  198. $response = array(
  199. 'type'=>'error',
  200. 'message' => 'Your profile is not updated, try again'
  201. );
  202. echo json_encode($response);
  203. }
  204. }
  205. public function generate_credentials($id){
  206. $user = RestoUsers::find($id);
  207. return response()->json(['username'=>$user->users->username,'password'=>CommonMethods::generateRandomString()]);
  208. }
  209. public function update_password(Request $request){
  210. $user = RestoUsers::find($request->user_id);
  211. $u = User::find($user->user_id);
  212. $password = Hash::make($request->password);
  213. $param = array(
  214. 'email'=>$user->email,
  215. 'name' => $user->first_name.' '.$user->last_name,
  216. 'shop_name' => Auth::user()->restaurants->name,
  217. 'username' => $u->username,
  218. 'password' => $request->password
  219. );
  220. // dd($param);
  221. SendEmail::sendRestoUserCredentials($param);
  222. $u->password = $password;
  223. $u->save();
  224. }
  225. public function get_invitation_link($unique_key){
  226. $invite = RestoUserInvites::where('unique_key',$unique_key)->where('invite_type','pending')->first();
  227. $param = array(
  228. 'email'=>$invite->email,
  229. 'name' => '',
  230. 'shop_name' => Auth::user()->restaurants->name,
  231. 'role' => $invite->role,
  232. 'access_level' => $invite->access_level,
  233. 'selected_outlets' => $invite->selected_outlets ,
  234. 'link' => env('APP_URL').'user/invite/'.$invite->unique_key
  235. );
  236. //dd($param);
  237. try{
  238. SendEmail::SendInvitationLink($param);
  239. return response()->json(['type'=>"success",'message'=>"Invitation link sent successfully at ".$invite->email]);
  240. }catch(Exception $e){
  241. return response()->json(['type'=>"error",'message'=>"Invitation link is not successfully "]);
  242. }
  243. }
  244. }