HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/javago-portal-updates/app/Services/CafeMenuItemService.php
<?php

namespace App\Services;

use App\Mail\SendCafeRequestApprovalMail;
use App\Models\Addon;
use App\Models\AddonItem;
use App\Models\AddonSize;
use App\Models\AddonSizeCafeItem;
use App\Models\CafeItemType;
use App\Models\CafeMenu;
use App\Models\CafeMenuItemSize;
use App\Models\PreDefinedItemImage;
use App\Models\Size;
use App\Models\SuggestedItem;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Yajra\DataTables\Facades\DataTables;

use Illuminate\Support\Facades\Session;

class CafeMenuItemService
{
    private $model;
    private $item_type;
    private $addon_item;
    private $item_price;
    private $item_option;

    public function __construct($model)
    {
        $this->model = new $model();
        // $this->item_type = new CafeItemType();
        $this->addon_item = new SuggestedItem();
        $this->item_price = new CafeMenuItemSize();
        $this->item_option = new AddonSizeCafeItem();
    }

    public function create()
    {
        Session::put('previous_url', url()->previous());
        $data = [];
        $data['addPage'] = true;
        $data['maxSizePrice'] = 3;
        $data['sizeNA'] = Size::where('size_name', 'N/A')->select('id')->first();
        $data['title'] = __('common.addItem');
        $data['preDefinedItem'] = PreDefinedItemImage::select('id', 'item_name', 'item_image')->get();
        $data['itemCategory'] = CafeMenu::where('cafe_id', Auth::user()->id)->pluck('menu_name', 'id');
        $data['itemType'] = config('constants.item_type');
        $data['items'] = $this->model->where('cafe_id', Auth::user()->id)->pluck('item_name', 'id');
        $data['itemSize'] = Size::pluck('size_name', 'id');
        $data['options'] = Addon::where('cafe_id', Auth::user()->id)->where('addon_deleted_at', 0)->pluck('addon_name', 'id');
        $data['optionSizes'] = AddonSize::where('cafe_id', Auth::user()->id)->where('addon_size_deleted_at', 0)->select('addon_size_name', 'id', 'addon_id')->get();
        $data['addonItemsTemplate'] = view('cafe.cafe-menu.items.addon-items-template', $data)->render();
        $data['url'] = route('cafe.cafe-menu-item.store');
        $data['getAddonUrl'] = route('cafe.cafe-menu-item.addon-item');
        $data['cancelUrl'] = route('cafe.cafe-menu-item.index');
	if (strpos(session('previous_url'), 'set-cafe-profile') !== false) {
            $data['cancelUrl'] = route('cafe.set_cafe_profile');
        }

        return view('cafe.cafe-menu.items.items', $data);
    }

    public function store($request)
    {
        DB::beginTransaction();
        //dd($request);
        try {
            $create = [];
            $create['item_name'] = $request->item_name;
            $create['cafe_id'] = Auth::user()->id;
            $create['cafe_menu_id'] = $request->item_category_id;
            $create['item_image_id'] = $request->item_image_id;
            $create['item_description'] = $request->item_description;
            //$create['item_price'] = $request->item_price == ''?$request->item_price:0;
            $create['item_price'] = $request->item[0]['item_price'];
            $create['status'] = 1;
            $create['item_type'] = $request->item_type_id;
            $create['created_at'] = Carbon::now()->timestamp;
            $create['updated_at'] = Carbon::now()->timestamp;
            $itemId = $this->model->insertGetId($create);

            //item prices based on size
            $item_prices = $request->item;
            if (!empty($item_prices)) {
                $ItemPrices = [];
                foreach ($item_prices as $item) {
                    if ($item['item_size_id'] != '' && $item['item_price'] != '') {
                        $ItemPrice = [
                            'item_id' => $itemId,
                            'size_id' => $item['item_size_id'],
                            'item_size_price' => $item['item_price'],
                            'created_at' => Carbon::now()->timestamp,
                            'updated_at' => Carbon::now()->timestamp,
                        ];
                        array_push($ItemPrices, $ItemPrice);
                    }
                    if (sizeof($item_prices) == 1) {
                        if ($item['item_size_id'] != '' && $item['item_price'] != '') {
                            $ItemPrices = $ItemPrice;
                        }
                    }
                }
                if (sizeof($ItemPrices) > 0) {
                    $this->item_price->insert($ItemPrices);
                }
            }

            // item options means addon Items
            $item_options = $request->item_option;
            $item_option_prices = $request->item_price;

            if (!empty($item_options)) {
                $itemOptions = [];

                // Ensure that both arrays have the same number of elements
                $totalOptions = count($item_options);
                $totalPrices = count($item_option_prices);
                $minCount = min($totalOptions, $totalPrices);

                for ($i = 0; $i < $minCount; $i++) {
                    $option = $item_options[$i];
                    $price = $item_option_prices[$i];

                    if (!empty($option)) {
                        $itemOption = [
                            'item_id' => $itemId,
                            'addon_size_id' => $option,
                            'addon_size_price' => !empty($price) ? $price : 0.00,
                            'created_at' => Carbon::now()->timestamp,
                            'updated_at' => Carbon::now()->timestamp,
                        ];

                        array_push($itemOptions, $itemOption);
                    }
                }

                // Insert into the database if there are items to insert
                if (sizeof($itemOptions) > 0) {
                    $this->item_option->insert($itemOptions);
                }
            }
            // $item_options = $request->item_option;
            // if (!empty($item_options)) {
            //     $itemOptions = [];
            //     foreach ($item_options as $option) {
            //         $item_option = [
            //             'item_id' => $itemId,
            //             'addon_size_id' => $option,
            //             'created_at' => Carbon::now()->timestamp,
            //             'updated_at' => Carbon::now()->timestamp,
            //         ];
            //         array_push($itemOptions, $item_option);
            //     }
            //     if (sizeof($itemOptions) > 0) {
            //         $this->item_option->insert($itemOptions);
            //     }
            // }

            //addon items means suggested Items
            $addon_items = $request->addon_item;
            $addonItems = [];
            foreach ($addon_items as $item) {
                if ($item['addon_item_id'] != null) {
                    $addon_item = [
                        'item_id' => $itemId,
                        'suggested_item_id' => $item['addon_item_id'],
                        'created_at' => Carbon::now()->timestamp,
                        'updated_at' => Carbon::now()->timestamp,
                    ];
                    array_push($addonItems, $addon_item);
                }
            }
            if (sizeof($addonItems) > 0) {
                $this->addon_item->insert($addonItems);
            }

            $cafe = Auth::user();
            $cafe->update(['menu_completed' => 1]);
            DB::commit();
            session()->flash('success_message', __('common.addItemSuccessfully'));
            if (strpos(session('previous_url'), 'set-cafe-profile') !== false) {
                Session::forget('previous_url');
                return redirect('/cafe/set-cafe-profile');
            }
            return redirect()->route('cafe.cafe-menu-item.index');
        } catch (\Throwable $th) {
            session()->flash('error_message', __('common.somethingWentWrong'));
            return redirect()->back();
        }
    }

    public function show($id)
    {
        abort_if(!$id, 404);
        $model = $this->model->find(decrypt($id));
        abort_if(!$model, 404);
        $data = [];
        $data['name'] = $model->cafe_name;
        $data['email'] = $model->email;
        $data['phone'] = $model->phone;
        $data['cafe_type'] = $model->cafe_type;
        $data['address'] = $model->address;
        $data['postcode'] = $model->postcode;
        $data['website'] = $model->website;
        $data['cafeListingRequestUrl'] = route('admin.cafe-listing-request.index');
        return view('admin.cafe-listing-request.view', $data);
    }

    public function addonItem($request)
    {
        try {
            $model = $this->model->find($request->id);
            if (!$model) {
                return response()->json([
                    'status' => 500,
                    'message' => __('common.somethingWentWrong'),
                ]);
            }
            $data = CafeMenuItemSize::join('sizes', 'sizes.id', 'cafe_menu_item_sizes.size_id')->where('item_id', $model->id)->select('size_name', 'item_size_price')->orderBy('cafe_menu_item_sizes.size_id')->get()->toArray();
            array_unshift($data, ['size_name' => config('constants.regular'), 'item_size_price' => $model->item_price]);
            $html = view('cafe.cafe-menu.items.addon-items', compact('data'))->render();
            return response()->json([
                'status' => 200,
                'html' => $html,
            ]);
        } catch (\Throwable $th) {
            return response()->json([
                'status' => 500,
                'message' => __('common.somethingWentWrong'),
            ]);
        }
    }

    public function edit($id)
    {
        abort_if(!$id, 404);
        $model = $this->model->where('id', decrypt($id))->first();
        abort_if(!$model, 404);
        Session::put('previous_url', url()->previous());
        $data = [];
        $data['addPage'] = false;
        $data['maxSizePrice'] = 3;
        $data['sizeNA'] = Size::where('size_name', 'N/A')->select('id')->first();
        $data['title'] = __('common.editItem');
        $data['preDefinedItem'] = PreDefinedItemImage::select('id', 'item_name', 'item_image')->get();
        $data['itemCategory'] = CafeMenu::where('cafe_id', Auth::user()->id)->pluck('menu_name', 'id');
        $data['itemType'] = config('constants.item_type');
        $data['items'] = $this->model->where('cafe_id', Auth::user()->id)->where('id', '<>', $model->id)->pluck('item_name', 'id');
        $itemSize = Size::pluck('size_name', 'id');
        $data['itemSize'] = $itemSize;
        $data['options'] = Addon::where('cafe_id', Auth::user()->id)->where('addon_deleted_at', 0)->pluck('addon_name', 'id');
        $data['optionSizes'] = AddonSize::where('cafe_id', Auth::user()->id)->where('addon_size_deleted_at', 0)->select('addon_size_name', 'id', 'addon_id')->get();
        //$data['optionSizeCafeItems'] = $this->item_option->where('item_id', $model->id)->pluck('addon_size_id')->toArray();
        $data['optionSizeCafeItems'] = $this->item_option->where('item_id', $model->id)
        ->get(['addon_size_id', 'addon_size_price'])
        ->map(function ($item) {
            return [
                'addon_size_id' => $item->addon_size_id,
                'addon_size_price' => $item->addon_size_price,
            ];
        })
        ->toArray();
        $data['item_image_id'] = $model->item_image_id;
        $data['item_name'] = $model->item_name;
        $data['item_category'] = $model->cafe_menu_id;
        $data['item_type'] = $model->item_type;
        $data['item_description'] = $model->item_description;
        $data['item_price'] = $model->item_price;
        $data['addon_items'] = SuggestedItem::where('item_id', $model->id)->pluck('suggested_item_id');
        $itemPriceSize = $this->item_price->where('item_id', $model->id)->get();
        $data['itemPriceSize'] = view('cafe.cafe-menu.items.item-price', compact('itemPriceSize', 'itemSize'))->render();
        $data['addonItemsTemplate'] = view('cafe.cafe-menu.items.addon-items-template', $data)->render();
        $data['url'] = route('cafe.cafe-menu-item.update', encrypt($model->id));
        $data['getAddonUrl'] = route('cafe.cafe-menu-item.addon-item');
        $data['cancelUrl'] = route('cafe.cafe-menu-item.index');
        $data['existingItemPrices'] = $this->item_option->where('item_id', $model->id)
        ->pluck('addon_size_price', 'addon_size_id')
        ->toArray();
        return view('cafe.cafe-menu.items.items', $data);
    }

    // public function update($request, $id)
    // {
    //     abort_if(!$id, 404);
    //     DB::beginTransaction();
    //     try {
    //         $model = $this->model->find(decrypt($id));
    //         if (!$model) {
    //             DB::rollback();
    //             abort(404);
    //         }
    //         $update = [];
    //         $update['item_name'] = $request->item_name;
    //         $update['cafe_id'] = Auth::user()->id;
    //         $update['cafe_menu_id'] = $request->item_category_id;
    //         $update['item_image_id'] = $request->item_image_id;
    //         $update['item_description'] = $request->item_description;
    //         //$update['item_price'] = $request->item_price;
    //         $update['item_price'] = $request->item[0]['item_price'];
    //         // $update['status'] = 1;
    //         $update['item_type'] = $request->item_type_id;
    //         $update['updated_at'] = Carbon::now()->timestamp;
    //         $itemId = $model->update($update);

    //         //item prices based on size
    //         $item_prices = $request->item;
    //         $deletePrices = array_diff(array_column($this->item_price->where('item_id', $model->id)->get()->toArray(), 'id'), !empty($item_prices) ? array_column($item_prices, 'item_price_id') : []);
    //         if (!empty($deletePrices)) {
    //             $this->item_price->whereIn('id', $deletePrices)->delete();
    //         }
    //         if (!empty($item_prices)) {
    //             $modelId = $model->id;
    //             // $this->item_price->chunk(1, function ($ItemPrices) use ($item_prices, $modelId) {
    //             foreach ($item_prices as $item) {
    //                 if ($item['item_price_id'] == '') {
    //                     if ($item['item_size_id'] != '' && $item['item_price'] != '') {
    //                         $ItemPrice = [
    //                             'item_id' => $modelId,
    //                             'size_id' => $item['item_size_id'],
    //                             'item_size_price' => $item['item_price'],
    //                             'created_at' => Carbon::now()->timestamp,
    //                             'updated_at' => Carbon::now()->timestamp,
    //                         ];
    //                         $this->item_price->insert($ItemPrice);
    //                     }
    //                 } else {
    //                     $ItemPrice = [
    //                         'size_id' => $item['item_size_id'],
    //                         'item_size_price' => $item['item_price'],
    //                         'updated_at' => Carbon::now()->timestamp,
    //                     ];
    //                     $this->item_price->where('item_id', $modelId)->where('id', $item['item_price_id'])->update($ItemPrice);
    //                 }
    //             }
    //             // });
    //         }

    //         // item options means addon Items
    //         $item_options = $request->item_option;
    //         $item_option_prices = $request->item_price;

    //         if (!empty($item_options)) {
    //             // Delete existing item options for this item
    //             $this->item_option->where('item_id', $model->id)->delete();

    //             $itemOptions = [];

    //             // Prepare new item options and prices
    //             $totalOptions = count($item_options);
    //             $totalPrices = count($item_option_prices);
    //             $minCount = min($totalOptions, $totalPrices);

    //             for ($i = 0; $i < $minCount; $i++) {
    //                 $option = $item_options[$i];
    //                 $price = $item_option_prices[$i];

    //                 if (!empty($option)) {
    //                     $itemOption = [
    //                         'item_id' => $model->id,
    //                         'addon_size_id' => $option,
    //                         'addon_size_price' => !empty($price) ? $price : null,
    //                         'created_at' => Carbon::now()->timestamp,
    //                         'updated_at' => Carbon::now()->timestamp,
    //                     ];

    //                     array_push($itemOptions, $itemOption);
    //                 }
    //             }

    //             // Insert new item options
    //             if (sizeof($itemOptions) > 0) {
    //                 $this->item_option->insert($itemOptions);
    //             }
    //         }

    //         // $item_options = $request->item_option;
    //         // if (!empty($item_options)) {
    //         //     $this->item_option->where('item_id', $model->id)->delete();
    //         //     $itemOptions = [];
    //         //     foreach ($item_options as $option) {
    //         //         $item_option = [
    //         //             'item_id' => $model->id,
    //         //             'addon_size_id' => $option,
    //         //             'created_at' => Carbon::now()->timestamp,
    //         //             'updated_at' => Carbon::now()->timestamp,
    //         //         ];
    //         //         array_push($itemOptions, $item_option);
    //         //     }
    //         //     if (sizeof($itemOptions) > 0) {
    //         //         $this->item_option->insert($itemOptions);
    //         //     }
    //         // }

    //         //addon items
    //         $addon_items = $request->addon_item;
    //         if (!empty($addon_items)) {
    //             $this->addon_item->where('item_id', $model->id)->delete();
    //             $addonItems = [];
    //             foreach ($addon_items as $item) {
    //                 if ($item['addon_item_id'] != null) {
    //                     $addon_item = [
    //                         'item_id' => $model->id,
    //                         'suggested_item_id' => $item['addon_item_id'],
    //                         'created_at' => Carbon::now()->timestamp,
    //                         'updated_at' => Carbon::now()->timestamp,
    //                     ];
    //                     array_push($addonItems, $addon_item);
    //                 }
    //             }
    //             if (sizeof($addonItems) > 0) {
    //                 $this->addon_item->insert($addonItems);
    //             }
    //         }

    //         DB::commit();
    //         session()->flash('success_message', __('common.updateItemSuccessfully'));
    //         if (strpos(session('previous_url'), 'set-cafe-profile') !== false) {
    //             Session::forget('previous_url');
    //             return redirect('/cafe/set-cafe-profile');
    //         }
    //         return redirect()->route('cafe.cafe-menu-item.index');
    //     } catch (\Throwable $th) {
    //         session()->flash('error_message', __('common.somethingWentWrong'));
    //         return redirect()->back();
    //     }
    // }

    public function update($request, $id)
    {
        abort_if(!$id, 404);
        DB::beginTransaction();
        try {
            $model = $this->model->find(decrypt($id));
            if (!$model) {
                DB::rollback();
                abort(404);
            }

            // Update basic item details
            $update = [
                'item_name' => $request->item_name,
                'cafe_id' => Auth::user()->id,
                'cafe_menu_id' => $request->item_category_id,
                'item_image_id' => $request->item_image_id,
                'item_description' => $request->item_description,
                'item_price' => $request->item[0]['item_price'],
                'item_type' => $request->item_type_id,
                'updated_at' => Carbon::now()->timestamp,
            ];
            $model->update($update);

            // Update item prices based on size
            $this->updateItemPrices($model->id, $request->item);

            // Update item options (addon items)
            $this->updateItemOptions($model->id, $request->item_option, $request->item_price);

            // Update addon items
            $this->updateAddonItems($model->id, $request->addon_item);

            DB::commit();
            session()->flash('success_message', __('common.updateItemSuccessfully'));
            
            if (strpos(session('previous_url'), 'set-cafe-profile') !== false) {
                Session::forget('previous_url');
                return redirect('/cafe/set-cafe-profile');
            }
            return redirect()->route('cafe.cafe-menu-item.index');
        } catch (\Throwable $th) {
            DB::rollback();
            session()->flash('error_message', __('common.somethingWentWrong'));
            return redirect()->back();
        }
    }

    private function updateItemPrices($itemId, $itemPrices)
    {
        if (!empty($itemPrices)) {
            $existingPriceIds = $this->item_price->where('item_id', $itemId)->pluck('id')->toArray();
            $updatedPriceIds = [];

            foreach ($itemPrices as $item) {
                if (empty($item['item_price_id'])) {
                    if (!empty($item['item_size_id']) && !empty($item['item_price'])) {
                        $this->item_price->create([
                            'item_id' => $itemId,
                            'size_id' => $item['item_size_id'],
                            'item_size_price' => $item['item_price'],
                        ]);
                    }
                } else {
                    $this->item_price->where('id', $item['item_price_id'])->update([
                        'size_id' => $item['item_size_id'],
                        'item_size_price' => $item['item_price'],
                    ]);
                    $updatedPriceIds[] = $item['item_price_id'];
                }
            }

            // Delete prices that are no longer present
            $deletePriceIds = array_diff($existingPriceIds, $updatedPriceIds);
            if (!empty($deletePriceIds)) {
                $this->item_price->whereIn('id', $deletePriceIds)->delete();
            }
        } else {
            // If no prices are provided, delete all existing prices for this item
            $this->item_price->where('item_id', $itemId)->delete();
        }
    }

    private function updateItemOptions($itemId, $itemOptions, $itemOptionPrices)
    {
        // Delete existing item options for this item
        $this->item_option->where('item_id', $itemId)->delete();

        if (!empty($itemOptions)) {
            $newOptions = [];
            $totalOptions = count($itemOptions);
            $totalPrices = count($itemOptionPrices);
            $minCount = min($totalOptions, $totalPrices);

            for ($i = 0; $i < $minCount; $i++) {
                $option = $itemOptions[$i];
                $price = $itemOptionPrices[$i];

                if (!empty($option)) {
                    $newOptions[] = [
                        'item_id' => $itemId,
                        'addon_size_id' => $option,
                        'addon_size_price' => !empty($price) ? $price : null,
                        'created_at' => Carbon::now()->timestamp,
                        'updated_at' => Carbon::now()->timestamp,
                    ];
                }
            }

            if (!empty($newOptions)) {
                $this->item_option->insert($newOptions);
            }
        }
    }

    private function updateAddonItems($itemId, $addonItems)
    {
        $this->addon_item->where('item_id', $itemId)->delete();

        if (!empty($addonItems)) {
            $newAddonItems = [];
            foreach ($addonItems as $item) {
                if (!empty($item['addon_item_id'])) {
                    $newAddonItems[] = [
                        'item_id' => $itemId,
                        'suggested_item_id' => $item['addon_item_id'],
                        'created_at' => Carbon::now()->timestamp,
                        'updated_at' => Carbon::now()->timestamp,
                    ];
                }
            }

            if (!empty($newAddonItems)) {
                $this->addon_item->insert($newAddonItems);
            }
        }
    }

    public function destroy($id, $modelName)
    {
        DB::beginTransaction();
        try {
            $model = $this->model->find(decrypt($id));
            if (!$model) {
                DB::rollback();
                return response()->json([
                    'status' => 500,
                    'message' => __('common.somethingWentWrong'),
                ]);
            }
            $delete = [];
            $delete['item_deleted_at'] = Carbon::now()->timestamp;
            $model->update($delete);
            // $model->delete();
            DB::commit();
            return response()->json([
                'status' => 200,
                'message' => __('common.DeletedSuccessfully', ['model' => $modelName]),
            ]);
        } catch (\Throwable $th) {
            DB::rollback();
            return response()->json([
                'status' => 500,
                'message' => __('common.somethingWentWrong'),
            ]);
        }
    }

    public function status($request, $id, $userType)
    {
        DB::beginTransaction();
        try {
            $model = $this->model->find(decrypt($id));
            if (!$model) {
                DB::rollback();
                return response()->json([
                    'status' => 500,
                    'message' => __('common.somethingWentWrong'),
                ]);
            }
            $status = [];
            $status['status'] = $request->status == 1 ? 0 : 1;
            $status['updated_at'] = Carbon::now()->timestamp;
            $model->update($status);
            DB::commit();
            return response()->json([
                'status' => 200,
                'message' => __('common.statusChangedSuccessfully', ['userType' => $userType]),
            ]);
        } catch (\Throwable $th) {
            DB::rollback();
            return response()->json([
                'status' => 500,
                'message' => __('common.somethingWentWrong'),
            ]);
        }
    }

    public function data($request)
    {
        $veg = $request->veg != null ? decrypt($request->veg) : '';
        $nonVeg = $request->nonVeg != null ? decrypt($request->nonVeg) : '';
        $vegan = $request->vegan != null ? decrypt($request->vegan) : '';
        $where = [];
        if ($veg) {
            array_push($where, $veg);
        }
        if ($nonVeg) {
            array_push($where, $nonVeg);
        }
        if ($vegan) {
            array_push($where, $vegan);
        }
        // $selectRaw = '(select MIN(cafe_menu_item_sizes.item_size_price) from cafe_menu_item_sizes where cafe_menu_item_sizes.item_id = cafe_menu_items.id) as item_price';
        $data = $this->model->query()->join('pre_defined_item_images', 'pre_defined_item_images.id', 'cafe_menu_items.item_image_id')
            ->join('cafe_menus', 'cafe_menus.id', 'cafe_menu_items.cafe_menu_id')
            ->where('cafe_menu_items.cafe_id', Auth::user()->id)
            ->where('cafe_menu_items.item_deleted_at', 0)
            ->select('cafe_menu_items.id', 'cafe_menu_items.item_name', 'cafe_menu_items.item_type', 'pre_defined_item_images.item_image as item_image', 'cafe_menus.menu_name as item_category', 'cafe_menu_items.item_description', 'cafe_menu_items.status', 'cafe_menu_items.item_price');
        // ->selectRaw($selectRaw);
        if (!empty($where)) {
            $data->whereIn('cafe_menu_items.item_type', $where);
        }
        // ->selectRaw($selectRow)
        // ->havingRaw('type_names != "NULL" and type_names != ""');
        return DataTables::eloquent($data)
            ->addIndexColumn()
            ->addColumn('item_image', function ($row) {
                return view(
                    "partials.common",
                    [
                        "isProfile" => 1,
                        "image" => $row->item_image
                    ]
                )->render();
            })
            ->editColumn('item_name', function ($row) {
                if (empty($row->item_name)) {
                    return '-';
                } else {
                    if (strlen($row->item_name) > 50) {
                        return substr($row->item_name, 0, 50) . '...';
                    } else {
                        return $row->item_name;
                    }
                }
            })
            ->addColumn('item_category', function ($row) {
                if (empty($row->item_category)) {
                    return '-';
                } else {
                    return $row->item_category;
                }
            })
            ->addColumn('item_type', function ($row) {
                if (empty($row->item_type)) {
                    return '-';
                } else {
                    return config('constants.item_type.' . $row->item_type);
                }
            })
            ->addColumn('item_price', function ($row) {
                if (empty($row->item_price)) {
                    return '-';
                } else {

                    return '  ' . $row->item_price;
                }
            })
            ->addColumn('status', function ($row) {
                return view(
                    "partials.common",
                    [
                        'row' => $row,
                        'isStatus' => 1,
                    ]
                )->render();
            })
            ->addColumn('is_available', function ($row) {
                return view(
                    "partials.action",
                    [
                        'currentRoute' => 'cafe.cafe-menu-item',
                        'row' => $row,
                        'isStatus' => 1,
                        'withStatus' => true,
                    ]
                )->render();
            })
            ->addColumn('action', function ($row) {
                return view(
                    "partials.action",
                    [
                        'currentRoute' => 'cafe.cafe-menu-item',
                        'row' => $row,
                        'isDelete' => 1,
                        'isView' => 0,
                        'isEdit' => 1,
                    ]
                )->render();
            })
            ->rawColumns(['item_image', 'status', 'is_available', 'action'])
            ->toJson();
    }
}