Outlet.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\BranchDeliveryAreas;
  4. use App\Models\BranchFeatures;
  5. use App\Models\BranchHours;
  6. use App\Helpers\CommonMethods;
  7. use App\Models\Outlets;
  8. use App\Models\Restaurants;
  9. use App\Models\Photos;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Auth;
  12. use Illuminate\Support\Facades\Storage;
  13. use Str;
  14. use File;
  15. use Image;
  16. use App\Models\RestoMetaDefs;
  17. use App\Models\RestoMetas;
  18. class Outlet extends Controller
  19. {
  20. //
  21. public function outlets(){
  22. $resto_id = CommonMethods::getRestuarantID();
  23. // $resto = Restaurants::find($this->resto_id);
  24. $outlets = Outlets::whereNull('deleted_at')->where('resto_id',$resto_id)->get();
  25. return view('outlets.outlets',['outlets'=>$outlets]);
  26. }
  27. public function outlet_form(){
  28. return view('outlets.new-outlets',['outlet'=>NULL]);
  29. }
  30. public function outlet_edit($unique_key){
  31. $outlet = Outlets::where('unique_key',$unique_key)->first();
  32. return view('outlets.new-outlets',['outlet'=>$outlet]);
  33. }
  34. public function outlet_address(){
  35. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  36. return view('outlets.outlet-address',['outlet'=>$outlet]);
  37. }
  38. public function outlet_delivery_area(){
  39. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  40. $areas = BranchDeliveryAreas::where('branch_id',$outlet->id)->whereNull('deleted_at')->get();
  41. //dd($areas);
  42. return view('outlets.outlet-delivery-area',['outlet'=>$outlet,'areas'=>$areas]);
  43. }
  44. public function edit_area($id){
  45. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  46. $area = BranchDeliveryAreas::find($id);
  47. $areas = BranchDeliveryAreas::where('branch_id',$outlet->id)->whereNull('deleted_at')->get();
  48. return view('outlets.outlet-delivery-area',['outlet'=>$outlet,'area'=>$area,'areas'=>$areas]);
  49. }
  50. public function outlet_delivery_area_listing(){
  51. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  52. $areas = BranchDeliveryAreas::where('branch_id',$outlet->id)->whereNull('deleted_at')->get();
  53. return view('outlets.outlet-delivery-area-listing',['outlet'=>$outlet,'areas'=>$areas]);
  54. }
  55. public function outlet_delivery(){
  56. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  57. $features = isset($outlet->delivery_feature)?$outlet->delivery_feature:NULL;
  58. //$hours = isset($outlet->delivery_hours_feature)?$outlet->delivery_hours_feature:NULL;
  59. return view('outlets.outlet-delivery',['outlet'=>$outlet,'features'=>$features]);
  60. }
  61. public function outlet_ordering_mode(){
  62. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  63. return view('outlets.outlet-ordering-mode',['outlet'=>$outlet]);
  64. }
  65. public function outlet_pickup(){
  66. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  67. $features = isset($outlet->pickup_feature)?$outlet->pickup_feature:NULL;
  68. return view('outlets.outlet-pickup',['outlet'=>$outlet,'features'=>$features]);
  69. }
  70. public function outlet_dining(){
  71. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  72. $features = isset($outlet->contactless_dining_feature)?$outlet->contactless_dining_feature:NULL;
  73. return view('outlets.outlet-contactless-dining',['outlet'=>$outlet,'features'=>$features]);
  74. }
  75. public function update_feature_status_1(Request $request){
  76. $id = $request->id;
  77. $status = $request->status;
  78. $type = $request->type;
  79. $offDate = isset($request->offDate)?$request->offDate:"";
  80. $outlet = Outlets::find($id);
  81. if($type=="delivery"){
  82. $outlet->is_delivery = $status;
  83. if($status==0)
  84. $outlet->outlet_delivery_off_date=$offDate;
  85. else
  86. $outlet->outlet_delivery_off_date=null;
  87. }
  88. if($type=="pickup"){
  89. $outlet->is_pickup = $status;
  90. if($status==0)
  91. $outlet->outlet_pickup_off_date=$offDate;
  92. else
  93. $outlet->outlet_pickup_off_date=null;
  94. }
  95. if($type=="dine-in"){
  96. $outlet->is_contactless_dining = $status;
  97. }
  98. $result = $outlet->save();
  99. }
  100. public function save_outlet(Request $request){
  101. $name = $request->outlet_name;
  102. $outlet_arabic_name = $request->outlet_arabic_name;
  103. $time_zone = $request->time_zone;
  104. $email = $request->email;
  105. $phone = $request->phone;
  106. $id = $request->id;
  107. $resto_id = CommonMethods::getRestuarantID();
  108. $resto = Restaurants::find($resto_id);
  109. $restaurants =$resto;
  110. $branch_id = 0;
  111. if(empty($id)){
  112. $outlet= new Outlets(); $outlet->unique_key = \Illuminate\Support\Str::uuid();
  113. }else{
  114. $outlet = Outlets::find($id);
  115. }
  116. $outlet->resto_id = $restaurants->id;
  117. $outlet->time_zone = $time_zone;
  118. $outlet->outlet_arabic_name = $outlet_arabic_name;
  119. $outlet->name = $name;
  120. $outlet->whatsapp_number = $request->whatsapp_number;
  121. $outlet->email = $email;
  122. $outlet->country_id = $request->country_id;
  123. $outlet->phone_number = $phone;
  124. $outlet->vat = $request->vat;
  125. $outlet->vat_type = $request->vat_type;
  126. $outlet->resto_id = $restaurants->id;
  127. $outlet->save();
  128. $branch_id = $outlet->id;
  129. if($branch_id > 0){
  130. if($request->hasFile('image')){
  131. $logo = $request->file('image');
  132. $file_name = Str::slug($request->name)."-branch-main-image".'-'.time();
  133. $extension = $logo->getClientOriginalExtension();
  134. Storage::disk('logo')->put($file_name.'.'.$extension, File::get($logo));
  135. $file = public_path('uploads/logo/'.$file_name.'.'.$extension);
  136. //uploadFileToAWSCDN($budketName, $restoID ,$restoName ,$sourceFile,$fileName )
  137. $destinationPath = public_path('/uploads/logo/');
  138. /* $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(800, null, function ($constraint) {
  139. $constraint->aspectRatio();
  140. });
  141. $img->save($destinationPath . '/' . $file_name.'.'.$extension);*/
  142. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$restaurants->id, $restaurants->resto_unique_name,$file,$file_name);
  143. /* dd($buckets);
  144. $path = Storage::disk('s3')->put("meemcdn/".$file_name.'.'.$extension, File::get($logo));
  145. dd($path);*/
  146. /* $destinationPath = public_path('/uploads/logo/');
  147. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(1400, null, function ($constraint) {
  148. $constraint->aspectRatio();
  149. });
  150. $img->save($destinationPath . '/' . $file_name.'.'.$extension);
  151. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(85, null, function ($constraint) {
  152. $constraint->aspectRatio();
  153. });
  154. $img->save($destinationPath . '/thumbnails/' . $file_name.'.'.$extension);*/
  155. if($result['type']=="success"){
  156. $logo = Photos::where('resto_id',$restaurants->id)->where('branch_id',$branch_id)->where('photo_type','branch')->first();
  157. if(!$logo)
  158. $logo = new Photos();
  159. $logo->file_name = $result['url'];
  160. $logo->aws_cdn = $result['url'];
  161. $logo->resto_id = $restaurants->id;
  162. $logo->branch_id = $branch_id;
  163. $logo->photo_type = 'branch';
  164. $r = $logo->save();
  165. File::delete($file);
  166. }
  167. //$resto->text =
  168. }
  169. $resto_metas = isset($request->resto_meta) && count($request->resto_meta) > 0?$request->resto_meta:[];
  170. //dump($resto_metas);
  171. $resto_meta_value = isset($request->resto_meta_value) && count($request->resto_meta_value) > 0?$request->resto_meta_value:[];
  172. if(count($resto_metas) > 0){
  173. RestoMetas::where('bussiness_id',$resto->id)->where('for_role',Auth::user()->role)->where('outlet_id',$branch_id)->delete();
  174. foreach($resto_metas as $meta){
  175. $rm = RestoMetaDefs::find($meta);
  176. // dump($rm);
  177. $r = new RestoMetas();
  178. $r->meta_def_id = $meta;
  179. $r->bussiness_id = $resto->id;
  180. $r->outlet_id = $branch_id;
  181. $r->meta_val = isset($resto_meta_value[$meta])?$resto_meta_value[$meta]:(isset($rm)?$rm->meta_def_name:"");
  182. $r->for_role = Auth::user()->role;
  183. $r->status = 1;
  184. $r->save();
  185. }
  186. }
  187. echo json_encode(array('type' => 'success', 'message'=>"Outlet's data is saved successfully.",'unique_key'=>$outlet->unique_key));
  188. }else{
  189. echo json_encode(array('type' => 'error', 'message'=>"Outlet's data is not saved, check info again."));
  190. }
  191. }
  192. public function update_outlet(Request $request){
  193. $id = $request->id;
  194. $status = $request->status;
  195. $outlet = Outlets::find($id);
  196. $outlet->active = $status;
  197. $outlet->save();
  198. }
  199. public function save_address(Request $request){
  200. $unique_id = $request->unique_id;
  201. $address = $request->address;
  202. $area = $request->area;
  203. $outlet = Outlets::where('unique_key',$unique_id)->first();
  204. $outlet->latitude = $request->lat;
  205. $outlet->longitude = $request->lng;
  206. if(isset($outlet)){
  207. $outlet->address = $address;
  208. $outlet->address_arabic = $request->address_arabic;
  209. $outlet->place = $area;
  210. $result = $outlet->save();
  211. if($result)
  212. echo json_encode(array('type' => 'success', 'message'=>"Outlet's address is saved successfully."));
  213. else
  214. echo json_encode(array('type' => 'error', 'message'=>"Outlet's address is not saved, check info again."));
  215. }else{
  216. echo json_encode(array('type' => 'error', 'message'=>"Outlet key is invalid."));
  217. }
  218. }
  219. public function save_branch_feature(Request $request){
  220. $payment_method = isset($request->payment_methods)?implode(',',$request->payment_methods):NULL;
  221. $feature_type = $request->feature_type;
  222. $preparation_time = $request->preparation_time;
  223. $preparation_delivery_time = $request->preperation_delivery;
  224. $time_from = $request->time_from;
  225. $time_to = $request->time_to;
  226. $estimated_time_type = $request->estimated_time_type;
  227. $estimated_time = $time_from.' - '.$time_to.':'.$estimated_time_type;
  228. $is_open = $request->is_open;
  229. $id = $request->id;
  230. $feature = BranchFeatures::where('branch_id',$id)->where('feature_type',$feature_type)->first();
  231. if(!isset($feature))
  232. $feature = new BranchFeatures();
  233. $feature->payment_methods = $payment_method;
  234. $feature->feature_type = $feature_type;
  235. $feature->preparation_timing = $preparation_time;
  236. $feature->preparation_delivery_time = $preparation_delivery_time;
  237. $feature->preparation_delivery_type = $request->preparation_delivery_type;
  238. $feature->estimated_time = $estimated_time;
  239. $feature->slot_length = $request->slot_length;
  240. //$feature->estimated_time_type = $request->estimated_time_type;
  241. $feature->branch_id = $id;
  242. $feature->save();
  243. $start_time = $request->start_time;
  244. $end_time = $request->end_time;
  245. if(isset($start_time)){
  246. $time = BranchHours::where('branch_id',$id)->where('hours_for',$feature_type)->delete();
  247. foreach($start_time as $k=>$s){
  248. // $time = BranchHours::where('day_name',$k)->where('branch_id',$id)->where('hours_for',$feature_type)->first();
  249. // if(!isset($time))
  250. foreach($s as $a=>$v){
  251. $time = new BranchHours();
  252. $time->day_name = $k;
  253. $time->branch_id = $id;
  254. $time->hours_for = $feature_type;
  255. $time->start_time = isset($is_open[strtolower($k)])? date('H:i',strtotime($v)):NULL;
  256. $time->end_time = isset($is_open[strtolower($k)])?date('H:i',strtotime($end_time[$k][$a])):NULL;
  257. $time->status = isset($is_open[strtolower($k)])?"open":"close";
  258. $result = $time->save();
  259. //$time->status = 'open';
  260. }
  261. //$result = $time->save();
  262. }
  263. }
  264. if($result)
  265. echo json_encode(array('type' => 'success', 'message'=>"Outlet's ".$feature_type." is saved successfully."));
  266. else
  267. echo json_encode(array('type' => 'error', 'message'=>"Outlet's ".$feature_type." is not saved, check info again."));
  268. }
  269. public function update_feature_status(Request $request){
  270. $id = $request->outletId;
  271. $status = $request->is_active=="true"?1:0;
  272. $feature = $request->feature;
  273. $outlet = Outlets::find($id);
  274. $outlet->$feature = $status;
  275. $result = $outlet->save();
  276. }
  277. public function delete_outlet ($id){
  278. $outlet = Outlets::where('unique_key',$id)->first();
  279. $outlet->deleted_at =date('Y-m-d H:i:s');
  280. $outlet->save();
  281. }
  282. public function delete_area ($id){
  283. $outlet = BranchDeliveryAreas::find($id);
  284. $outlet->deleted_at =date('Y-m-d H:i:s');
  285. $outlet->save();
  286. }
  287. public function save_outlet_area(Request $request){
  288. $id = $request->id;
  289. $coordinates = $request->coordinates;
  290. $area_name = $request->area_name;
  291. $min_price = $request->min_basket;
  292. $delivery_fee = $request->delivery_fee;
  293. $unique_id = $request->unique_id;
  294. $center_radius = $request->center_radius;
  295. $outlet = Outlets::where('unique_key',$unique_id)->first();
  296. $outlet_id = $outlet->id;
  297. if($id==0)
  298. $area = new BranchDeliveryAreas();
  299. else
  300. $area = BranchDeliveryAreas::find($id);
  301. $area->branch_id = $outlet_id;
  302. $area->lat_lag = $coordinates;
  303. // $area->center_radius = $center_radius;
  304. $area->area_name = $area_name;
  305. $area->delivery_fee = $delivery_fee;
  306. $area->min_price = $min_price;
  307. $result = $area->save();
  308. if($result)
  309. echo json_encode(array('type' => 'success', 'message'=>"Area's information is saved successfully."));
  310. else
  311. echo json_encode(array('type' => 'error', 'message'=>"Outlet's information is not saved, check info again."));
  312. }
  313. public function update_area_status(Request $request){
  314. $id = $request->id;
  315. $status = $request->status;
  316. $outlet = BranchDeliveryAreas::find($id);
  317. $outlet->status = $status;
  318. $outlet->save();
  319. }
  320. public function outlet_digital_menu(){
  321. $outlet = Outlets::where('unique_key',request()->get('o'))->first();
  322. return view('outlets.outlet-digital-menu',['outlet'=>$outlet]);
  323. }
  324. public function pause_orders(){
  325. $resto_id = CommonMethods::getRestuarantID();
  326. // $resto = Restaurants::find($this->resto_id);
  327. $outlets = Outlets::whereNull('deleted_at')->where('resto_id',$resto_id)->get();
  328. return view('outlets.outlets-pause-orders',['outlets'=>$outlets]);
  329. }
  330. }