Restaurant.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Categories;
  4. use App\Models\Cities;
  5. use App\Models\RestoMetaDefs;
  6. use App\Models\RestoMetas;
  7. use App\Helpers\CommonMethods;
  8. use App\Models\OrderNotifications;
  9. use App\Models\Photos;
  10. use App\Models\Restaurants;
  11. use Brian2694\Toastr\Facades\Toastr;
  12. use Illuminate\Http\Request;
  13. use App\Models\User;
  14. use App\Models\TimeZones;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\Cookie;
  17. use Illuminate\Support\Facades\Hash;
  18. use Str;
  19. use Illuminate\Support\Facades\Storage;
  20. use File;
  21. use Image;
  22. use Validator;
  23. use Redis;
  24. class Restaurant extends Controller
  25. {
  26. //
  27. public function restaurants(){
  28. $restaurants = Restaurants::whereNull('deleted_at')->get();
  29. $data = [
  30. 'restaurants'=>$restaurants
  31. ];
  32. return view('restaurants.restaurants',$data);
  33. }
  34. public function new_restaurant(){
  35. $cities = Cities::where('is_active',1)->get();
  36. $timezones = TimeZones::all();
  37. $data = [
  38. 'cities' => $cities,
  39. 'time_zones' => $timezones
  40. ];
  41. return view('restaurants.restaurant_form',$data);
  42. }
  43. public function save(Request $request){
  44. $n = isset($request->allow_email_notifications)?"Yes":"No";
  45. $id = $request->id;
  46. if(empty($id)){
  47. $resto = new Restaurants();
  48. $user = new User();
  49. $data = [
  50. 'resto_unique_name' => \Illuminate\Support\Str::slug($request->name)
  51. ];
  52. $validator = Validator::make($data, [
  53. 'resto_unique_name' => 'unique:restaurants'
  54. ]);
  55. if ($validator->fails()) {
  56. $error = $validator->errors()->all();
  57. $error[0] = "Business name already taken, try with different name";
  58. echo json_encode(array('type' => 'error', 'message' => $error));
  59. exit;
  60. }
  61. $user->name = $request->name;
  62. $user->username = CommonMethods::generate_user_name($request->name);
  63. $user->password = Hash::make('12345678');
  64. if(!empty($request->email))
  65. $user->email = $request->email;
  66. $user->is_active = 1;
  67. $user->role='restaurant';
  68. $user->save();
  69. $resto->unique_shared_key = Hash::make(Str::slug($request->name));
  70. $resto->unique_shared_key =Str::uuid();;
  71. $resto->user_id = $user->id;
  72. }
  73. else{
  74. $cookie = Cookie::forget('resto_metas');
  75. Cookie::queue(
  76. Cookie::forget('resto_metas')
  77. );
  78. $resto = Restaurants::find($id);
  79. }
  80. if(Auth::User()->role=="administrator"){
  81. if(!isset($request->active) && !empty($id)){
  82. $u = User::find($resto->user_id);
  83. $u->is_active = 0;
  84. $u->save();
  85. }else{
  86. if($resto->users->is_active==0){
  87. $u = User::find($resto->user_id);
  88. $u->is_active = 1;
  89. $u->save();
  90. }
  91. }
  92. }
  93. if(empty($id)) {
  94. $resto->resto_unique_name = \Illuminate\Support\Str::slug($request->name);
  95. }
  96. $resto->name = $request->name;
  97. $resto->whatsapp_numbers = $request->whatsapp_numbers;
  98. $resto->arabic_name = $request->arabic_name;
  99. if(Auth::User()->role=="restaurant") {
  100. $resto->short_description = $request->short_description;
  101. $resto->description = $request->description;
  102. $resto->address = $request->address;
  103. $resto->detail_address = $request->detail_address;
  104. $resto->default_color = $request->default_color;
  105. $resto->whatsapp_number_notification = $request->whatsapp_number_notification;
  106. $resto->sp_phone_number = $request->sp_phone_number;
  107. $resto->sp_whatsapp_number = $request->sp_whatsapp_number;
  108. $resto->social_insta = $request->social_insta;
  109. $resto->social_fb = $request->social_fb;
  110. $resto->social_tiktok = $request->social_tiktok;
  111. $resto->social_geo_location = $request->social_geo_location;
  112. $resto->social_site = $request->social_site;
  113. $resto->notification_email = $request->notification_email;
  114. $resto->time_zone = $request->time_zone;
  115. $resto->phone_number = $request->phone_number;
  116. }
  117. $resto->opening_timing = $request->opening_timing;
  118. $resto->closing_timing = $request->closing_timing;
  119. $resto->delivery_time_range = $request->delivery_time_range;
  120. $resto->min_basket_price = $request->min_basket_price;
  121. if(Auth::User()->role=="administrator") {
  122. $resto->outlet_countries = !empty($request->outlet_countries)?implode(',',$request->outlet_countries):NULL;
  123. $resto->city = $request->city;
  124. $resto->default_lang = $request->default_lang;
  125. $resto->domain_name = $request->domain_name;
  126. $resto->country_id = $request->country_id;
  127. $resto->active = isset($request->active)?1:0;
  128. $resto->allow_whatsapp_notifications = isset($request->allow_whatsapp_notifications)?1:0;
  129. $resto->allow_email_notifications = isset($request->allow_email_notifications)?"Yes":"No";;
  130. $resto->allow_whatsapp_notifications_to_customera = isset($request->allow_whatsapp_notifications_to_customera)?"Yes":"No";;
  131. }
  132. if(isset($request->multiple_langs) && count($request->multiple_langs) > 0)
  133. $resto->multiple_langs = isset($request->multiple_langs) && count($request->multiple_langs) > 0?implode(',',$request->multiple_langs):NULL;//;$request->multiple_langs;
  134. $resto->latitude = $request->latitude;
  135. $resto->longitude = $request->longitude;
  136. $resto->has_order = isset($request->has_order)?1:0;
  137. $resto->has_desserts = isset($request->has_desserts)?1:0;
  138. $resto->save();
  139. $id = $resto->id;
  140. if($id > 0){
  141. if($request->hasFile('logo')){
  142. $logo = $request->file('logo');
  143. // $validator = Validator::make($request->all(), [
  144. // 'logo' => 'mimes:jpeg,jpg, JPG, JPEG |max:2048',
  145. // ]);
  146. // if ($validator->fails()) {
  147. //
  148. // $error = $validator->errors()->all();
  149. // // $error[0] = "Business name already taken, try with different name";
  150. // echo json_encode(array('type' => 'error', 'message' => $error));
  151. // exit;
  152. // }
  153. $file_name = Str::slug($request->name)."-logo".'-'.time();
  154. $extension = $logo->getClientOriginalExtension();
  155. $allow_extensions = ['jpg','jpeg'];
  156. if(!in_array(strtolower($extension),$allow_extensions)){
  157. echo json_encode(array('type' => 'error', 'message' => "Only jpg, jpeg extensions are allowed."));
  158. exit;
  159. }
  160. Storage::disk('logo')->put($file_name.'.'.$extension, File::get($logo));
  161. $destinationPath = public_path('/uploads/logo/');
  162. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(1400, null, function ($constraint) {
  163. $constraint->aspectRatio();
  164. });
  165. $img->save($destinationPath . '/' . $file_name.'.'.$extension);
  166. /* $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(85, null, function ($constraint) {
  167. $constraint->aspectRatio();
  168. });
  169. $img->save($destinationPath . '/thumbnails/' . $file_name.'.'.$extension);*/
  170. $file = public_path('/uploads/logo/'.$file_name.'.'.$extension);
  171. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$id, \Illuminate\Support\Str::slug($request->name),$file,$file_name);
  172. $logo = Photos::where('resto_id',$id)->where('photo_type','logo')->first();
  173. if(!$logo)
  174. $logo = new Photos();
  175. //$logo->file_name = $file_name.'.'.$extension;
  176. //$logo->resto_id = $id;
  177. // $logo->photo_type = 'logo';
  178. //
  179. $logo->file_name = $result['url'];
  180. $logo->aws_cdn = $result['url'];
  181. $logo->resto_id = $id;
  182. $logo->photo_type = 'logo';
  183. $logo->save();
  184. //$resto->text =
  185. }
  186. if($request->hasFile('pwa_logo')){
  187. $pwalogo = $request->file('pwa_logo');
  188. $validator = Validator::make($request->all(), [
  189. 'pwa_logo' => 'max:20',
  190. ]);
  191. if ($validator->fails()) {
  192. $error = $validator->errors()->all();
  193. // $error[0] = "Business name already taken, try with different name";
  194. echo json_encode(array('type' => 'error', 'message' => $error));
  195. exit;
  196. }
  197. $file_name = Str::slug($request->name)."-pwalogo".'-'.time();
  198. $extension = $pwalogo->getClientOriginalExtension();
  199. $allow_extensions = ['jpg','jpeg','png'];
  200. if(!in_array(strtolower($extension),$allow_extensions)){
  201. echo json_encode(array('type' => 'error', 'message' => "Only jpg, jpeg and png extensions are allowed."));
  202. exit;
  203. }
  204. Storage::disk('logo')->put($file_name.'.'.$extension, File::get($pwalogo));
  205. $destinationPath = public_path('/uploads/logo/');
  206. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(1400, null, function ($constraint) {
  207. $constraint->aspectRatio();
  208. });
  209. $img->save($destinationPath . '/' . $file_name.'.'.$extension);
  210. /* $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(85, null, function ($constraint) {
  211. $constraint->aspectRatio();
  212. });
  213. $img->save($destinationPath . '/thumbnails/' . $file_name.'.'.$extension);*/
  214. $file = public_path('/uploads/logo/'.$file_name.'.'.$extension);
  215. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$id, \Illuminate\Support\Str::slug($request->name),$file,$file_name);
  216. $logo = Photos::where('resto_id',$id)->where('photo_type','logo-pwa')->first();
  217. if(!$logo)
  218. $logo = new Photos();
  219. //$logo->file_name = $file_name.'.'.$extension;
  220. //$logo->resto_id = $id;
  221. // $logo->photo_type = 'logo';
  222. //
  223. $logo->file_name = $result['url'];
  224. $logo->aws_cdn = $result['url'];
  225. $logo->resto_id = $id;
  226. $logo->photo_type = 'logo-pwa';
  227. $logo->save();
  228. //$resto->text =
  229. }
  230. if($request->hasFile('home_image')){
  231. $logo = $request->file('home_image');
  232. $file_name = Str::slug($request->name)."-home-image".'-'.time();
  233. $extension = $logo->getClientOriginalExtension();
  234. $r = Storage::disk('home_image')->put($file_name.'.'.$extension, File::get($logo));
  235. $file = public_path('uploads/home_image/'.$file_name.'.'.$extension);
  236. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$id, \Illuminate\Support\Str::slug($request->name),$file,$file_name);
  237. $logo = Photos::where('resto_id',$id)->where('photo_type','home_image')->first();
  238. if(!$logo)
  239. $logo = new Photos();
  240. $logo->file_name = $result['url'];
  241. $logo->aws_cdn = $result['url'];
  242. $logo->resto_id = $id;
  243. $logo->photo_type = 'home_image';
  244. $logo->save();
  245. File::delete( $file);
  246. //$resto->text =
  247. }
  248. $resto_metas = isset($request->resto_meta) && count($request->resto_meta) > 0?$request->resto_meta:[];
  249. // dump($resto_metas);
  250. $resto_meta_value = isset($request->resto_meta_value) && count($request->resto_meta_value) > 0?$request->resto_meta_value:[];
  251. //dump($resto_metas);
  252. if(count($resto_metas) > 0){
  253. RestoMetas::where('bussiness_id',$resto->id)->where('for_role',Auth::user()->role)->delete();
  254. foreach($resto_metas as $meta){
  255. $rm = RestoMetaDefs::find($meta);
  256. if(isset($rm)){
  257. $r = new RestoMetas();
  258. $r->meta_def_id = $meta;
  259. $r->bussiness_id = $resto->id;
  260. $r->meta_val = isset($resto_meta_value[$meta])?$resto_meta_value[$meta]:$rm->meta_def_name;
  261. $r->for_role = Auth::user()->role;
  262. $r->status = 1;
  263. $r->save();
  264. }
  265. }
  266. }
  267. // $keys = Redis::keys('*');
  268. //
  269. // /* $key_id =
  270. // dump(Auth::id().': '.Redis::get(str_replace('meem_orders_','',"resto_pakistan_".Auth::id()))); */
  271. // foreach($keys as $k){
  272. // //
  273. //
  274. // if(str_contains($k,"_".Auth::id())){
  275. //
  276. // Redis::del(str_replace('prod_meem_orders_','',$k));
  277. // }
  278. //
  279. // //dump($k.': '.Redis::get(str_replace('meem_orders_','',$k)));
  280. // }
  281. //dump($req_method);
  282. echo json_encode(array('type' => 'success', 'message'=>"Restaurant's data is saved successfully."));
  283. exit;
  284. }else{
  285. echo json_encode(array('type' => 'error', 'message'=>"Restaurant's data is not saved, check info again."));
  286. }
  287. }
  288. public function show($id){
  289. $id = CommonMethods::decrypt($id);
  290. $restaurant = Restaurants::find($id);
  291. $data = [
  292. 'restaurant' => $restaurant
  293. ];
  294. return view('restaurants.show',$data);
  295. }
  296. public function edit($id){
  297. $id = CommonMethods::decrypt($id);
  298. $restaurant = Restaurants::find($id);
  299. $cities = Cities::where('is_active',1)->get();
  300. $timezones = TimeZones::all();
  301. // dd($timezones);
  302. $data = [
  303. 'restaurant' => $restaurant,
  304. 'cities' => $cities,
  305. 'time_zones' => $timezones
  306. ];
  307. if(Auth::User()->role=="administrator"){
  308. return view('restaurants.restaurant_form',$data);
  309. }else{
  310. $cookie = Cookie::forget('resto_metas');
  311. Cookie::queue(
  312. Cookie::forget('resto_metas')
  313. );
  314. return view('restaurants.restaurant_form_marchent',$data);
  315. }
  316. }
  317. public function delete($id){
  318. //$id = CommonMethods::decrypt($id);
  319. $restaurant = Restaurants::find($id);
  320. $restaurant->deleted_at = date('Y-m-d H:i:s');
  321. $u = User::find($restaurant->user_id);
  322. $u->is_active = 0;
  323. $u->save();
  324. $restaurant->save();
  325. }
  326. public function generate_credentials($id){
  327. $resto = Restaurants::find($id);
  328. return response()->json(['username'=>$resto->users->username,'password'=>CommonMethods::generateRandomString()]);
  329. }
  330. public function update_password(Request $request){
  331. $resto = Restaurants::find($request->resto_id);
  332. $u = User::find($resto->user_id);
  333. $u->password = Hash::make($request->password);
  334. $u->save();
  335. }
  336. public function upload_gallery(Request $request){
  337. $files = $request->file('files');;
  338. $resto_id = $request->resto_id;
  339. if(isset($files) && count($files) > 0){
  340. foreach($files as $file){
  341. $photo = new Photos();
  342. $extension = $file->getClientOriginalExtension();
  343. $original_name = $file->getClientOriginalName();
  344. // $original_name = str_replace(' ', '-', $original_name);
  345. $extension_array = ['jpg', 'jpeg', 'bmp', 'png'];
  346. $image_array = ['jpg', 'jpeg', 'bmp', 'png'];
  347. if (in_array($extension, $extension_array)) {
  348. $file_name = 'resto-gallery-'.$resto_id. '-' . time().rand(1000,9999) . '.' . $extension;
  349. $destinationPath = public_path('/uploads/resto-gallery/');
  350. $file->move($destinationPath, $file_name);
  351. $img = Image::make($destinationPath . '/' . $file_name)->resize(1400, 1400, function ($constraint) {
  352. $constraint->aspectRatio();
  353. });
  354. $img->save($destinationPath . '/' . $file_name);
  355. $img = Image::make($destinationPath . '/' . $file_name)->resize(85, null, function ($constraint) {
  356. $constraint->aspectRatio();
  357. });
  358. $img->save($destinationPath . '/thumbnails/' . $file_name);
  359. // dd($request->file('attachment'));
  360. $photo->resto_id = $resto_id;
  361. $photo->file_name = $file_name;
  362. $photo->photo_type = "gallery";
  363. $photo->save();
  364. }
  365. }
  366. }
  367. }
  368. public function read_notifications(){
  369. $id = Auth::user()->restaurants->id;
  370. $notification = OrderNotifications::where('status','unread')->where('resto_id',$id)->update(['status'=>'read']);
  371. dd($notification);
  372. }
  373. public function rules()
  374. {
  375. return [
  376. 'image' => 'required|mimes:jpeg,jpg|size:2048'
  377. ];
  378. }
  379. }