Recipe.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Categories;
  4. use App\Models\MapRecipeCategories;
  5. use App\Models\Photos;
  6. use App\Models\Recipes;
  7. use App\Models\Restaurants;
  8. use App\Models\VariationData;
  9. use App\Models\VariationTypes;
  10. use Brian2694\Toastr\Facades\Toastr;
  11. use Carbon\Carbon;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\Storage;
  15. use Ramsey\Uuid\Uuid;
  16. use App\Models\ClothOptions;
  17. use Str;
  18. use File;
  19. use Illuminate\Support\Facades\Hash;
  20. use Image;
  21. use App\Models\ProductFAQs;
  22. use App\Helpers\CommonMethods;
  23. class Recipe extends Controller
  24. {
  25. public function update_inventory_option(Request $request){
  26. $id = $request->recipe_id;
  27. $recipe = Recipes::find($id);
  28. $recipe->inventory_options = $request->inventory_option;
  29. $recipe->save();
  30. }
  31. public function inventory(){
  32. $resto_id = CommonMethods::getRestuarantID();
  33. $resto = Restaurants::find($resto_id);
  34. $recipes = $resto->recipes();;
  35. $data = [
  36. 'recipes' => $recipes->get()
  37. ];
  38. return view('recipes.inventory',$data);
  39. }
  40. //
  41. public function recipes(){
  42. Toastr::success('Post added successfully :)','Success');
  43. $resto_id = CommonMethods::getRestuarantID();
  44. $resto = Restaurants::find($resto_id);
  45. // $recipes = $resto->recipes();;
  46. $categories = Categories::where('resto_id',$resto_id)->with(['categories_has_recipes'=>function($q){ $q->orderBy('tb_dm_recipe_categories_map.display_order','ASC'); }])->whereNull('deleted_at')->get();
  47. //dd($categories[0]->items);
  48. $data = [
  49. 'categories' => $categories
  50. ];
  51. return view('recipes.recipes',$data);
  52. }
  53. public function new_recipe(){
  54. $resto_id = CommonMethods::getRestuarantID();
  55. $categories = Categories::whereNull('deleted_at')->where('is_active',1)->whereIn('resto_id',[$resto_id])->get();
  56. $data = [
  57. 'categories' => $categories
  58. ];
  59. return view('recipes.recipe_form',$data);
  60. }
  61. public function editnew($id){
  62. $resto_id = CommonMethods::getRestuarantID();
  63. $categories = Categories::whereNull('deleted_at')->where('is_active',1)->whereIn('resto_id',[$resto_id])->get();
  64. $recipe = Recipes::find($id);
  65. $data = [
  66. 'categories' => $categories,
  67. 'recipe' =>$recipe
  68. ];
  69. return view('recipes.recipe_form_new',$data);
  70. }
  71. public function edit($id){
  72. $resto_id = CommonMethods::getRestuarantID();
  73. $categories = Categories::whereNull('deleted_at')->where('is_active',1)->whereIn('resto_id',[$resto_id])->get();
  74. $variant_types = VariationTypes::where('resto_id',$resto_id)->where('status','active')->whereNull('deleted_at')->get();
  75. $recipe = Recipes::find($id);
  76. $data = [
  77. 'categories' => $categories,
  78. 'recipe' =>$recipe,
  79. 'variant_types'=>$variant_types
  80. ];
  81. return view('recipes.recipe_form',$data);
  82. }
  83. public function get_variation_attributes(Request $request){
  84. $variations = $request->variations;
  85. $variations = VariationTypes::with('attributes')->whereIn('id',$variations)->get();
  86. return response()->json($variations);
  87. }
  88. public function save(Request $request){
  89. $resto_id = CommonMethods::getRestuarantID();
  90. $resto = Restaurants::find($resto_id);
  91. $id = $request->id;
  92. $colorOption = "";
  93. if(empty($id)){
  94. $recipe = new Recipes();
  95. $recipe->unique_shared_key = Str::uuid();
  96. }
  97. else{
  98. $recipe = Recipes::find($id);
  99. if($request->business_type=="ClothsStore"){
  100. $colorOption = $recipe->color_option;
  101. if($colorOption!=$request->color_option)
  102. $option = ClothOptions::where('resto_id',$resto_id)->where('product_id',$id)->where('type',$colorOption)->update(['deleted_at'=>date('Y-m-d H:i:s')]);
  103. }
  104. }
  105. $recipe->name = $request->name;
  106. $recipe->arabic_name = $request->arabic_name;
  107. $recipe->status = '1';
  108. $recipe->resto_id = $resto_id;
  109. $recipe->price = $request->price;
  110. $recipe->show_recipe_main_price = isset($request->show_recipe_main_price)?1:0;
  111. $recipe->short_description = $request->short_description;
  112. $recipe->short_description_arabic = $request->short_description_arabic;
  113. $recipe->is_customized = isset($request->is_customized)?1:0;
  114. $recipe->status = isset($request->status)?1:0;
  115. $recipe->allow_pre_order = isset($request->allow_pre_order)?"Yes":"No";
  116. if($request->business_type=="ClothsStore")
  117. $recipe->color_option = $request->color_option;
  118. $recipe->save();
  119. $recipe_id = $recipe->id;
  120. if($recipe_id > 0){
  121. $categories = $request->category;
  122. //dd($categories);
  123. MapRecipeCategories::where('recipe_id',$recipe_id)->delete();
  124. if(count($categories) > 0){
  125. foreach($categories as $category){
  126. $m_c = new MapRecipeCategories();
  127. $m_c->category_id = $category;
  128. $m_c->recipe_id = $recipe_id;
  129. $m_c->resto_id = $resto_id;;
  130. $m_c->save();
  131. }
  132. }
  133. if($request->hasFile('main_image')){
  134. $logo = $request->file('main_image');
  135. $file_name = Str::slug($request->name)."-main_image".'-'.time();
  136. $extension = $logo->getClientOriginalExtension();
  137. Storage::disk('main_image')->put($file_name.'.'.$extension, File::get($logo));
  138. $destinationPath = public_path('/uploads/main_image/');
  139. /*$img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(1400, null, function ($constraint) {
  140. $constraint->aspectRatio();
  141. });*/
  142. // $img->save($destinationPath . '/' . $file_name.'.'.$extension);
  143. $file = public_path('uploads/main_image/'.$file_name.'.'.$extension);
  144. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$resto_id, $resto->resto_unique_name,$file,$file_name);
  145. /*
  146. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(200, null, function ($constraint) {
  147. $constraint->aspectRatio();
  148. });
  149. $img->save($destinationPath . '/thumbnails/' . $file_name.'.'.$extension);*/
  150. $main_image = Photos::where('recipe_id',$recipe_id)->where('photo_type','main_image')->first();
  151. if(!$main_image)
  152. $main_image = new Photos();
  153. $main_image->file_name = $result['url'];
  154. $main_image->aws_cdn = $result['url'];
  155. $main_image->recipe_id = $recipe_id;
  156. $main_image->photo_type = 'main_image';
  157. $main_image->resto_id = $resto_id;;;
  158. $main_image->save();
  159. File::delete( $file);
  160. //$resto->text =
  161. }
  162. if($request->business_type=="ClothsStore"){
  163. $color_image = ($request->color_image);
  164. if($request->hasFile('color_image'))
  165. $color_image = $request->file('color_image');
  166. $colors = !empty($request->color)?$request->color:NULL;
  167. $sizes = !empty($request->size)?$request->size:NULL;
  168. if(isset($colors) && count($colors) > 0){
  169. // $option = ClothOptions::where('resto_id',$resto_id)->where('product_id',$recipe_id)->delete();
  170. foreach($colors as $color){
  171. $img_url = NULL;
  172. if(isset($color_image[$color])){
  173. // $color_image = $request->file($request->color_image);
  174. //dump($color_image[$color]);
  175. $file = $color_image[$color];
  176. $file_name = "color-image-main_image".'-'.time();
  177. $extension = $file->getClientOriginalExtension();
  178. Storage::disk('main_image')->put($file_name.'.'.$extension, File::get($file));
  179. $destinationPath = public_path('/uploads/main_image/');
  180. /*$img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(1400, null, function ($constraint) {
  181. $constraint->aspectRatio();
  182. });*/
  183. // $img->save($destinationPath . '/' . $file_name.'.'.$extension);
  184. $file = public_path('uploads/main_image/'.$file_name.'.'.$extension);
  185. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$resto_id, $resto->resto_unique_name,$file,$file_name);
  186. $img_url = $result['url'];
  187. }
  188. $options = new ClothOptions();
  189. $options->resto_id = $resto_id;
  190. $options->product_id = $recipe_id;
  191. $options->name = $color;
  192. $options->type=$request->color_option;
  193. $options->img_url = $img_url;
  194. $options->save();
  195. }
  196. }
  197. if(isset($sizes) && count($sizes) > 0){
  198. $option = ClothOptions::where('resto_id',$resto_id)->where('product_id',$recipe_id)->where('type','size')->delete();
  199. foreach($sizes as $size){
  200. $options = new ClothOptions();
  201. $options->resto_id = $resto_id;
  202. $options->product_id = $recipe_id;
  203. $options->name = $size;
  204. $options->type="size";
  205. $options->save();
  206. }
  207. }
  208. }
  209. echo json_encode(array('type' => 'success', 'message'=>"Item is saved successfully."));
  210. }
  211. else
  212. echo json_encode(array('type' => 'error', 'message'=>"Item is not saved successfully."));
  213. }
  214. /* public function save(Request $request){
  215. $id = $request->id;
  216. if(empty($id)){
  217. $recipe = new Recipes();
  218. $recipe->unique_shared_key = Str::uuid();
  219. }
  220. else
  221. $recipe = Recipes::find($id);
  222. $recipe->name = $request->name;
  223. $recipe->status = '1';
  224. $recipe->resto_id = Auth::user()->restaurants->id;
  225. $recipe->price = $request->price;
  226. $recipe->short_description = $request->short_description;
  227. $recipe->is_customized = isset($request->is_customized)?1:0;
  228. $recipe->status = isset($request->status)?1:0;
  229. $recipe->save();
  230. $recipe_id = $recipe->id;
  231. if($recipe_id > 0){
  232. $categories = $request->category;
  233. //dd($categories);
  234. MapRecipeCategories::where('recipe_id',$recipe_id)->delete();
  235. if(count($categories) > 0){
  236. foreach($categories as $category){
  237. $m_c = new MapRecipeCategories();
  238. $m_c->category_id = $category;
  239. $m_c->recipe_id = $recipe_id;
  240. $m_c->resto_id = Auth::user()->restaurants->id;;
  241. $m_c->save();
  242. }
  243. }
  244. if($request->hasFile('main_image')){
  245. $logo = $request->file('main_image');
  246. $file_name = Str::slug($request->name)."-main_image".'-'.time();
  247. $extension = $logo->getClientOriginalExtension();
  248. Storage::disk('main_image')->put($file_name.'.'.$extension, File::get($logo));
  249. $destinationPath = public_path('/uploads/main_image/');
  250. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(1400, null, function ($constraint) {
  251. $constraint->aspectRatio();
  252. });
  253. $img->save($destinationPath . '/' . $file_name.'.'.$extension);
  254. $img = Image::make($destinationPath . '/' . $file_name.'.'.$extension)->resize(200, null, function ($constraint) {
  255. $constraint->aspectRatio();
  256. });
  257. $img->save($destinationPath . '/thumbnails/' . $file_name.'.'.$extension);
  258. $main_image = Photos::where('recipe_id',$recipe_id)->where('photo_type','main_image')->first();
  259. if(!$main_image)
  260. $main_image = new Photos();
  261. $main_image->file_name = $file_name.'.'.$extension;
  262. $main_image->recipe_id = $recipe_id;
  263. $main_image->photo_type = 'main_image';
  264. $main_image->resto_id = Auth::user()->restaurants->id;;;
  265. $main_image->save();
  266. //$resto->text =
  267. }
  268. echo json_encode(array('type' => 'success', 'message'=>"Recipe's data is saved successfully."));
  269. }
  270. else
  271. echo json_encode(array('type' => 'error', 'message'=>"Recipe's data is not saved successfully."));
  272. }*/
  273. public function delete($id){
  274. $recipe = Recipes::find($id);
  275. $recipe->deleted_at = date('Y-m-d H:i:s');
  276. $recipe->save();
  277. }
  278. public function upload_gallery(Request $request){
  279. $resto_id = CommonMethods::getRestuarantID();
  280. $resto = Restaurants::find($resto_id);
  281. $files = $request->file('files');;
  282. $recipe_id = $request->recipe_id;
  283. if(isset($files) && count($files) > 0){
  284. foreach($files as $file){
  285. $photo = new Photos();
  286. $extension = $file->getClientOriginalExtension();
  287. $original_name = $file->getClientOriginalName();
  288. // $original_name = str_replace(' ', '-', $original_name);
  289. $extension_array = ['jpg', 'jpeg', 'bmp', 'png'];
  290. $image_array = ['jpg', 'jpeg', 'bmp', 'png'];
  291. if (in_array($extension, $extension_array)) {
  292. $file_name = 'recipe-gallery-'.$recipe_id. '-' . time().rand(1000,9999) . '.' . $extension;
  293. $destinationPath = public_path('/uploads/resto-gallery/');
  294. $file->move($destinationPath, $file_name);
  295. $file = public_path('uploads/resto-gallery/'.$file_name);
  296. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$resto->id, $resto->resto_unique_name,$file,$file_name);
  297. /* $img = Image::make($destinationPath . '/' . $file_name)->resize(1400, null, function ($constraint) {
  298. $constraint->aspectRatio();
  299. });
  300. $img->save($destinationPath . '/' . $file_name);
  301. $img = Image::make($destinationPath . '/' . $file_name)->resize(85, null, function ($constraint) {
  302. $constraint->aspectRatio();
  303. });
  304. $img->save($destinationPath . '/thumbnails/' . $file_name);
  305. */
  306. // dd($request->file('attachment'));
  307. $photo->recipe_id = $recipe_id;
  308. $photo->file_name = $result['url'];
  309. $photo->aws_cdn = $result['url'];
  310. $photo->photo_type = "gallery";
  311. $photo->resto_id = $resto->id;;;
  312. $photo->save();
  313. }
  314. }
  315. }
  316. }
  317. public function show($id){
  318. $recipe = Recipes::find($id);
  319. $categories = isset($recipe->categories)?$recipe->categories->pluck('category_id'):NULL;
  320. if($categories){
  321. $categories = Categories::whereIn('id',$categories)->pluck('name')->toArray();
  322. $categories = implode(', ',$categories);
  323. }
  324. $data = [
  325. 'recipe' => $recipe,
  326. 'categories' => $categories
  327. ];
  328. return view('recipes.show',$data);
  329. }
  330. public function remove_main_image(Request $request){
  331. $id = $request->id;
  332. $photo = Photos::where('recipe_id',$id)->where('photo_type','main_image')->first();
  333. $photo->delete();
  334. }
  335. public function exclude_outlet(Request $request){
  336. $is_exclude = $request->is_exclude;
  337. $outlet_id = $request->outlet_id;
  338. $recipe_id = $request->recipe_id;
  339. $recipe = Recipes::find($recipe_id);
  340. $exclude_outlets = $recipe->exclude_outlets;
  341. if(empty($exclude_outlets)){
  342. $o = explode(',',$exclude_outlets);
  343. $o[$outlet_id] = $outlet_id;
  344. // dump($o);
  345. $recipe->exclude_outlets = $outlet_id;
  346. }else{
  347. $o = explode(',',$exclude_outlets);
  348. if($is_exclude=="true"){
  349. $key = array_search($outlet_id, $o);
  350. unset($o[$key]);
  351. }
  352. else
  353. $o[] = $outlet_id;
  354. $o = array_unique($o);
  355. $recipe->exclude_outlets = implode(',',$o);
  356. }
  357. $recipe->save();
  358. }
  359. public function save_faq(Request $request){
  360. $id = $request->id;
  361. if(empty($id))
  362. $faq = new ProductFAQs();
  363. else
  364. $faq = ProductFAQs::find($id);
  365. $faq->product_id = $request->product_id;
  366. $faq->question = $request->question;
  367. $faq->answer = $request->answer;
  368. $faq->save();
  369. $faq_id = $faq->id;
  370. if($faq_id > 0)
  371. echo json_encode(array('type' => 'success', 'message'=>"FAQ's data is saved successfully."));
  372. else
  373. echo json_encode(array('type' => 'error', 'message'=>"FAQ's data is not saved."));
  374. }
  375. public function delete_faq(Request $request){
  376. $faq = ProductFAQs::find($request->id);
  377. $faq->deleted_at = date('Y-m-d H:i:s');
  378. $faq->save();
  379. }
  380. public function delete_color_image(Request $request){
  381. $id = $request->id;
  382. $c = ClothOptions::find($id);
  383. $c->deleted_at = date('Y-m-s H:i:s');
  384. $c->save();
  385. }
  386. public function update_recipe_orders(Request $request){
  387. $id = $request->ids;
  388. foreach($id as $i){
  389. $item_category_id = explode('-',$i['id']);
  390. $display_order = $i['position'];
  391. $item_id = $item_category_id[0];
  392. $category_id = $item_category_id[1];
  393. // dump('itemID: '.$item_id.' CategoryID: '.$category_id.' Order: '.$display_order);
  394. $item_category = MapRecipeCategories::where('recipe_id',$item_id)->where('category_id',$category_id)->first();
  395. $item_category->display_order = $display_order;
  396. $item_category->save();
  397. }
  398. }
  399. public function save_variation_data(Request $request){
  400. $product_id = $request->product_id;
  401. $resto_id = CommonMethods::getRestuarantID();
  402. $data = $request->all();
  403. $variant_type = $request->variant_type;
  404. $id = $request->id;
  405. $keys = [];
  406. $variant_id = 0;
  407. $i=0;
  408. foreach($data as $k=>$d){
  409. if(is_array($d)){
  410. $keys[] = $k;
  411. }
  412. }
  413. if(isset($keys[0])){
  414. $first_data = ($data[$keys[0]]);
  415. //dd($first_data);
  416. $i=0;
  417. foreach($first_data as $k=>$fd){
  418. $rows = null;
  419. foreach($keys as $key){
  420. if(isset($data[$key][$k]) && !empty($data[$key][$k])){
  421. if($key=="variant_type")
  422. $variant_id = $data[$key][$k];
  423. if($key!="image")
  424. $rows[$key]=isset($data[$key][$k])?$data[$key][$k]:null;
  425. else{
  426. if(isset($data[$key][$k])){
  427. $image = ($data[$key][$k]);
  428. $file_name = "variation-image".'-resto-'.$resto_id.'-'.time();
  429. $extension = $image->getClientOriginalExtension();
  430. Storage::disk('main_image')->put($file_name.'.'.$extension, File::get($image));
  431. $destinationPath = public_path('/uploads/main_image/');
  432. $file = public_path('uploads/main_image/'.$file_name.'.'.$extension);
  433. $result = CommonMethods::uploadFileToAWSCDN('meemapp-order',$resto_id, '',$file,$file_name);
  434. $rows[$key]= isset($result) && count($result) > 0 && $result['type']=="success"?$result['url']:"";
  435. }
  436. }
  437. }
  438. }
  439. if(isset($rows['variation_price']) && isset($rows['variation_quantity'])){
  440. if(empty($id))
  441. $variation_data = new VariationData();
  442. else
  443. $variation_data = VariationData::find($id);
  444. $variation_data->variation_ids = json_encode($variant_type);
  445. $variation_data->resto_id = $resto_id;
  446. $variation_data->product_id = $product_id;
  447. $variation_data->variations = json_encode($rows);
  448. $variation_data->save();
  449. $i++;
  450. }
  451. }
  452. if($i>0)
  453. return response()->json(array('type'=>'success','message'=>$i.' variants are saved with this item'));
  454. }
  455. return response()->json(array('type'=>'error','message'=>'No variants is saved with this item'));
  456. ;
  457. }
  458. public function delete_variation($id){
  459. $variation = VariationData::find($id)->update(['deleted_at'=>Carbon::now()->format('Y-m-d H:i:s')]);
  460. }
  461. public function getVaraitionDataBasedOnID($id){
  462. $variation = VariationData::find($id);
  463. $variation_type = json_decode($variation->variation_ids);
  464. $variations = json_decode($variation->variations);
  465. return response()->json(array('variation_type'=>$variation_type,'variations'=>$variations));
  466. }
  467. }