errors()->getMessages() as $index => $error) { array_push($err_keeper, ['code' => $index, 'message' => $error[0]]); } return $err_keeper; } public static function error_formater($key, $mesage, $errors = []) { $errors[] = ['code' => $key, 'message' => $mesage]; return $errors; } public static function schedule_order() { return (bool)BusinessSetting::where(['key' => 'schedule_order'])->first()->value; } public static function combinations($arrays) { $result = [[]]; foreach ($arrays as $property => $property_values) { $tmp = []; foreach ($result as $result_item) { foreach ($property_values as $property_value) { $tmp[] = array_merge($result_item, [$property => $property_value]); } } $result = $tmp; } return $result; } public static function variation_price($product, $variations) { // $match = json_decode($variations, true)[0]; $match = $variations; $result = 0; // foreach (json_decode($product['variations'], true) as $property => $value) { // if ($value['type'] == $match['type']) { // $result = $value['price']; // } // } foreach($product as $product_variation){ foreach($product_variation['values'] as $option){ foreach($match as $variation){ if($product_variation['name'] == $variation['name'] && isset($variation['values']) && in_array($option['label'], $variation['values']['label'])){ $result += $option['optionPrice']; } } } } return $result; } public static function product_data_formatting($data, $multi_data = false, $trans = false, $local = 'en') { $storage = []; if ($multi_data == true) { foreach ($data as $item) { $variations = []; if ($item->title) { $item['name'] = $item->title; unset($item['title']); } if ($item->start_time) { $item['available_time_starts'] = $item->start_time->format('H:i'); unset($item['start_time']); } if ($item->end_time) { $item['available_time_ends'] = $item->end_time->format('H:i'); unset($item['end_time']); } if ($item->start_date) { $item['available_date_starts'] = $item->start_date->format('Y-m-d'); unset($item['start_date']); } if ($item->end_date) { $item['available_date_ends'] = $item->end_date->format('Y-m-d'); unset($item['end_date']); } $item['recommended'] =(int) $item->recommended; $categories = []; foreach (json_decode($item['category_ids']) as $value) { $categories[] = ['id' => (string)$value->id, 'position' => $value->position]; } $item['category_ids'] = $categories; $item['attributes'] = json_decode($item['attributes']); $item['choice_options'] = json_decode($item['choice_options']); $item['add_ons'] = self::addon_data_formatting(AddOn::withoutGlobalScope('translate')->whereIn('id', json_decode($item['add_ons']))->active()->get(), true, $trans, $local); $item['tags'] = $item->tags; $item['variations'] = json_decode($item['variations'], true); $item['restaurant_name'] = $item->restaurant->name; $item['restaurant_status'] = (int) $item->restaurant->status; $item['restaurant_discount'] = self::get_restaurant_discount($item->restaurant) ? $item->restaurant->discount->discount : 0; $item['restaurant_opening_time'] = $item->restaurant->opening_time ? $item->restaurant->opening_time->format('H:i') : null; $item['restaurant_closing_time'] = $item->restaurant->closeing_time ? $item->restaurant->closeing_time->format('H:i') : null; $item['schedule_order'] = $item->restaurant->schedule_order; $item['tax'] = $item->restaurant->tax; $item['rating_count'] = (int)($item->rating ? array_sum(json_decode($item->rating, true)) : 0); $item['avg_rating'] = (float)($item->avg_rating ? $item->avg_rating : 0); if ($trans) { $item['translations'][] = [ 'translationable_type' => 'App\Models\Food', 'translationable_id' => $item->id, 'locale' => 'en', 'key' => 'name', 'value' => $item->name ]; $item['translations'][] = [ 'translationable_type' => 'App\Models\Food', 'translationable_id' => $item->id, 'locale' => 'en', 'key' => 'description', 'value' => $item->description ]; } if (count($item['translations']) > 0) { foreach ($item['translations'] as $translation) { if ($translation['locale'] == $local) { if ($translation['key'] == 'name') { $item['name'] = $translation['value']; } if ($translation['key'] == 'title') { $item['name'] = $translation['value']; } if ($translation['key'] == 'description') { $item['description'] = $translation['value']; } } } } if (!$trans) { unset($item['translations']); } unset($item['restaurant']); unset($item['rating']); array_push($storage, $item); } $data = $storage; } else { $variations = []; $categories = []; foreach (json_decode($data['category_ids']) as $value) { $categories[] = ['id' => (string)$value->id, 'position' => $value->position]; } $data['category_ids'] = $categories; // $data['category_ids'] = json_decode($data['category_ids']); $data['attributes'] = json_decode($data['attributes']); $data['choice_options'] = json_decode($data['choice_options']); $data['add_ons'] = self::addon_data_formatting(AddOn::whereIn('id', json_decode($data['add_ons']))->active()->get(), true, $trans, $local); if ($data->title) { $data['name'] = $data->title; unset($data['title']); } if ($data->start_time) { $data['available_time_starts'] = $data->start_time->format('H:i'); unset($data['start_time']); } if ($data->end_time) { $data['available_time_ends'] = $data->end_time->format('H:i'); unset($data['end_time']); } if ($data->start_date) { $data['available_date_starts'] = $data->start_date->format('Y-m-d'); unset($data['start_date']); } if ($data->end_date) { $data['available_date_ends'] = $data->end_date->format('Y-m-d'); unset($data['end_date']); } $data['variations'] = json_decode($data['variations'], true); $data['restaurant_name'] = $data->restaurant->name; $data['restaurant_status'] = (int) $data->restaurant->status; $data['restaurant_discount'] = self::get_restaurant_discount($data->restaurant) ? $data->restaurant->discount->discount : 0; $data['restaurant_opening_time'] = $data->restaurant->opening_time ? $data->restaurant->opening_time->format('H:i') : null; $data['restaurant_closing_time'] = $data->restaurant->closeing_time ? $data->restaurant->closeing_time->format('H:i') : null; $data['schedule_order'] = $data->restaurant->schedule_order; $data['rating_count'] = (int)($data->rating ? array_sum(json_decode($data->rating, true)) : 0); $data['avg_rating'] = (float)($data->avg_rating ? $data->avg_rating : 0); $data['recommended'] =(int) $data->recommended; if ($trans) { $data['translations'][] = [ 'translationable_type' => 'App\Models\Food', 'translationable_id' => $data->id, 'locale' => 'en', 'key' => 'name', 'value' => $data->name ]; $data['translations'][] = [ 'translationable_type' => 'App\Models\Food', 'translationable_id' => $data->id, 'locale' => 'en', 'key' => 'description', 'value' => $data->description ]; } if (count($data['translations']) > 0) { foreach ($data['translations'] as $translation) { if ($translation['locale'] == $local) { if ($translation['key'] == 'name') { $data['name'] = $translation['value']; } if ($translation['key'] == 'title') { $item['name'] = $translation['value']; } if ($translation['key'] == 'description') { $data['description'] = $translation['value']; } } } } if (!$trans) { unset($data['translations']); } unset($data['restaurant']); unset($data['rating']); } return $data; } public static function addon_data_formatting($data, $multi_data = false, $trans = false, $local = 'en') { $storage = []; if ($multi_data == true) { foreach ($data as $item) { if ($trans) { $item['translations'][] = [ 'translationable_type' => 'App\Models\AddOn', 'translationable_id' => $item->id, 'locale' => 'en', 'key' => 'name', 'value' => $item->name ]; } if (count($item->translations) > 0) { foreach ($item['translations'] as $translation) { if ($translation['locale'] == $local && $translation['key'] == 'name') { $item['name'] = $translation['value']; } } } if (!$trans) { unset($item['translations']); } $storage[] = $item; } $data = $storage; } else if (isset($data)) { if ($trans) { $data['translations'][] = [ 'translationable_type' => 'App\Models\AddOn', 'translationable_id' => $data->id, 'locale' => 'en', 'key' => 'name', 'value' => $data->name ]; } if (count($data->translations) > 0) { foreach ($data['translations'] as $translation) { if ($translation['locale'] == $local && $translation['key'] == 'name') { $data['name'] = $translation['value']; } } } if (!$trans) { unset($data['translations']); } } return $data; } public static function category_data_formatting($data, $multi_data = false, $trans = false) { $storage = []; if ($multi_data == true) { foreach ($data as $item) { if (count($item->translations) > 0) { $item->name = $item->translations[0]['value']; } if (!$trans) { unset($item['translations']); } if($item->relationLoaded('childes') && $item['childes']){ $item['products_count'] += $item['childes']->sum('products_count'); unset($item['childes']); } $storage[] = $item; } $data = $storage; } else if (isset($data)) { if (count($data->translations) > 0) { $data->name = $data->translations[0]['value']; } if (!$trans) { unset($data['translations']); } if($data->relationLoaded('childes') && $data['childes']){ $data['products_count'] += $data['childes']->sum('products_count'); unset($data['childes']); } } return $data; } public static function basic_campaign_data_formatting($data, $multi_data = false) { $storage = []; if ($multi_data == true) { foreach ($data as $item) { $variations = []; if ($item->start_date) { $item['available_date_starts'] = $item->start_date->format('Y-m-d'); unset($item['start_date']); } if ($item->end_date) { $item['available_date_ends'] = $item->end_date->format('Y-m-d'); unset($item['end_date']); } if (count($item['translations']) > 0) { $translate = array_column($item['translations']->toArray(), 'value', 'key'); $item['title'] = $translate['title']; $item['description'] = $translate['description']; } if (count($item['restaurants']) > 0) { $item['restaurants'] = self::restaurant_data_formatting($item['restaurants'], true); } array_push($storage, $item); } $data = $storage; } else { if ($data->start_date) { $data['available_date_starts'] = $data->start_date->format('Y-m-d'); unset($data['start_date']); } if ($data->end_date) { $data['available_date_ends'] = $data->end_date->format('Y-m-d'); unset($data['end_date']); } if (count($data['translations']) > 0) { $translate = array_column($data['translations']->toArray(), 'value', 'key'); $data['title'] = $translate['title']; $data['description'] = $translate['description']; } if (count($data['restaurants']) > 0) { $data['restaurants'] = self::restaurant_data_formatting($data['restaurants'], true); } } return $data; } public static function restaurant_data_formatting($data, $multi_data = false) { $storage = []; $cuisines=[]; if ($multi_data == true) { foreach ($data as $item) { if( $item->restaurant_model == 'subscription' && isset($item->restaurant_sub)){ $item['self_delivery_system'] = (int) $item->restaurant_sub->self_delivery; } $item['restaurant_status'] = (int) $item->status; if ($item->cuisine) { foreach($item->cuisine as $cuisine){ $cuisines[]=$cuisine; } } if ($item->opening_time) { $item['available_time_starts'] = $item->opening_time->format('H:i'); unset($item['opening_time']); } if ($item->closeing_time) { $item['available_time_ends'] = $item->closeing_time->format('H:i'); unset($item['closeing_time']); } $ratings = RestaurantLogic::calculate_restaurant_rating($item['rating']); unset($item['rating']); $item['avg_rating'] = $ratings['rating']; $item['rating_count '] = $ratings['total']; unset($item['campaigns']); unset($item['pivot']); array_push($storage, $item); } $data = $storage; } else { if( $data->restaurant_model == 'subscription' && isset($data->restaurant_sub)){ $data['self_delivery_system'] = (int) $data->restaurant_sub->self_delivery; } $data['restaurant_status'] = (int) $data->status; if ($data->opening_time) { $data['available_time_starts'] = $data->opening_time->format('H:i'); unset($data['opening_time']); } if ($data->closeing_time) { $data['available_time_ends'] = $data->closeing_time->format('H:i'); unset($data['closeing_time']); } if ($data->cuisine) { foreach($data->cuisine as $cuisine){ $cuisines[]=$cuisine; } } $ratings = RestaurantLogic::calculate_restaurant_rating($data['rating']); unset($data['rating']); $data['avg_rating'] = $ratings['rating']; $data['rating_count '] = $ratings['total']; unset($data['campaigns']); unset($data['pivot']); } return $data; } public static function wishlist_data_formatting($data, $multi_data = false) { $foods = []; $restaurants = []; if ($multi_data == true) { foreach ($data as $item) { if ($item->food) { $foods[] = self::product_data_formatting($item->food, false, false, app()->getLocale()); } if ($item->restaurant) { $restaurants[] = self::restaurant_data_formatting($item->restaurant); } } } else { if ($data->food) { $foods[] = self::product_data_formatting($data->food, false, false, app()->getLocale()); } if ($data->restaurant) { $restaurants[] = self::restaurant_data_formatting($data->restaurant); } } return ['food' => $foods, 'restaurant' => $restaurants]; } public static function order_data_formatting($data, $multi_data = false) { $storage = []; if ($multi_data) { foreach ($data as $item) { if (isset($item['restaurant'])) { $item['restaurant_name'] = $item['restaurant']['name']; $item['restaurant_address'] = $item['restaurant']['address']; $item['restaurant_phone'] = $item['restaurant']['phone']; $item['restaurant_lat'] = $item['restaurant']['latitude']; $item['restaurant_lng'] = $item['restaurant']['longitude']; $item['restaurant_logo'] = $item['restaurant']['logo']; $item['restaurant_delivery_time'] = $item['restaurant']['delivery_time']; $item['vendor_id'] = $item['restaurant']['vendor_id']; $item['chat_permission'] = $item['restaurant']['restaurant_sub']['chat'] ?? 0; $item['restaurant_model'] = $item['restaurant']['restaurant_model']; unset($item['restaurant']); } else { $item['restaurant_name'] = null; $item['restaurant_address'] = null; $item['restaurant_phone'] = null; $item['restaurant_lat'] = null; $item['restaurant_lng'] = null; $item['restaurant_logo'] = null; $item['restaurant_delivery_time'] = null; $item['restaurant_model'] = null; $item['chat_permission'] = null; } $item['food_campaign'] = 0; foreach ($item->details as $d) { if ($d->item_campaign_id != null) { $item['food_campaign'] = 1; } } $item['delivery_address'] = $item->delivery_address ? json_decode($item->delivery_address, true) : null; $item['details_count'] = (int)$item->details->count(); unset($item['details']); array_push($storage, $item); } $data = $storage; } else { if (isset($data['restaurant'])) { $data['restaurant_name'] = $data['restaurant']['name']; $data['restaurant_address'] = $data['restaurant']['address']; $data['restaurant_phone'] = $data['restaurant']['phone']; $data['restaurant_lat'] = $data['restaurant']['latitude']; $data['restaurant_lng'] = $data['restaurant']['longitude']; $data['restaurant_logo'] = $data['restaurant']['logo']; $data['restaurant_delivery_time'] = $data['restaurant']['delivery_time']; $data['vendor_id'] = $data['restaurant']['vendor_id']; $data['chat_permission'] = $data['restaurant']['restaurant_sub']['chat'] ?? 0; $data['restaurant_model'] = $data['restaurant']['restaurant_model']; unset($data['restaurant']); } else { $data['restaurant_name'] = null; $data['restaurant_address'] = null; $data['restaurant_phone'] = null; $data['restaurant_lat'] = null; $data['restaurant_lng'] = null; $data['restaurant_logo'] = null; $data['restaurant_delivery_time'] = null; $data['chat_permission'] = null; $data['restaurant_model'] = null; } $data['food_campaign'] = 0; foreach ($data->details as $d) { if ($d->item_campaign_id != null) { $data['food_campaign'] = 1; } } $data['delivery_address'] = $data->delivery_address ? json_decode($data->delivery_address, true) : null; $data['details_count'] = (int)$data->details->count(); unset($data['details']); } return $data; } public static function order_details_data_formatting($data) { $storage = []; foreach ($data as $item) { $item['add_ons'] = json_decode($item['add_ons']); $item['variation'] = json_decode($item['variation']); $item['food_details'] = json_decode($item['food_details'], true); array_push($storage, $item); } $data = $storage; return $data; } public static function deliverymen_list_formatting($data) { $storage = []; foreach ($data as $item) { $storage[] = [ 'id' => $item['id'], 'name' => $item['f_name'] . ' ' . $item['l_name'], 'image' => $item['image'], 'lat' => $item->last_location ? $item->last_location->latitude : false, 'lng' => $item->last_location ? $item->last_location->longitude : false, 'location' => $item->last_location ? $item->last_location->location : '', ]; } $data = $storage; return $data; } public static function address_data_formatting($data) { foreach ($data as $key=>$item) { $point = new Point($item->latitude, $item->longitude); $data[$key]['zone_ids'] = array_column(Zone::contains('coordinates', $point)->latest()->get(['id'])->toArray(), 'id');; } return $data; } public static function deliverymen_data_formatting($data) { $storage = []; foreach ($data as $item) { $item['avg_rating'] = (float)(count($item->rating) ? (float)$item->rating[0]->average : 0); $item['rating_count'] = (int)(count($item->rating) ? $item->rating[0]->rating_count : 0); $item['lat'] = $item->last_location ? $item->last_location->latitude : null; $item['lng'] = $item->last_location ? $item->last_location->longitude : null; $item['location'] = $item->last_location ? $item->last_location->location : null; if ($item['rating']) { unset($item['rating']); } if ($item['last_location']) { unset($item['last_location']); } $storage[] = $item; } $data = $storage; return $data; } public static function get_business_settings($name, $json_decode = true) { $config = null; $paymentmethod = BusinessSetting::where('key', $name)->first(); if ($paymentmethod) { $config = $json_decode ? json_decode($paymentmethod->value, true) : $paymentmethod->value; } return $config; } public static function currency_code() { return BusinessSetting::where(['key' => 'currency'])->first()->value; } public static function currency_symbol() { $currency_symbol = Currency::where(['currency_code' => Helpers::currency_code()])->first()->currency_symbol; return $currency_symbol; } public static function format_currency($value) { $currency_symbol_position = BusinessSetting::where(['key' => 'currency_symbol_position'])->first()->value; return $currency_symbol_position == 'right' ? number_format($value, config('round_up_to_digit')) . ' ' . self::currency_symbol() : self::currency_symbol() . ' ' . number_format($value, config('round_up_to_digit')); } public static function send_push_notif_to_device($fcm_token, $data, $web_push_link = null) { $key = BusinessSetting::where(['key' => 'push_notification_key'])->first()->value; $url = "https://fcm.googleapis.com/fcm/send"; $header = array( "authorization: key=" . $key . "", "content-type: application/json" ); if(isset($data['conversation_id'])){ $conversation_id = $data['conversation_id']; }else{ $conversation_id = ''; } if(isset($data['sender_type'])){ $sender_type = $data['sender_type']; }else{ $sender_type = ''; } if(isset($data['order_type'])){ $order_type = $data['order_type']; }else{ $order_type = ''; } $click_action = ""; if($web_push_link){ $click_action = ', "click_action": "'.$web_push_link.'"'; } $postdata = '{ "to" : "' . $fcm_token . '", "mutable_content": true, "data" : { "title":"' . $data['title'] . '", "body" : "' . $data['description'] . '", "image" : "' . $data['image'] . '", "order_id":"' . $data['order_id'] . '", "type":"' . $data['type'] . '", "conversation_id":"' . $conversation_id . '", "sender_type":"' . $sender_type . '", "order_type":"' . $order_type . '", "is_read": 0 }, "notification" : { "title" :"' . $data['title'] . '", "body" : "' . $data['description'] . '", "image" : "' . $data['image'] . '", "order_id":"' . $data['order_id'] . '", "title_loc_key":"' . $data['order_id'] . '", "body_loc_key":"' . $data['type'] . '", "type":"' . $data['type'] . '", "is_read": 0, "icon" : "new", "sound": "notification.wav", "android_channel_id": "stackfood" '.$click_action.' } }'; $ch = curl_init(); $timeout = 120; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // Get URL content $result = curl_exec($ch); // close handle to release resources curl_close($ch); return $result; } public static function send_push_notif_to_topic($data, $topic, $type, $web_push_link = null) { // info([$data, $topic, $type, $web_push_link]); $key = BusinessSetting::where(['key' => 'push_notification_key'])->first()->value; $url = "https://fcm.googleapis.com/fcm/send"; $header = array( "authorization: key=" . $key . "", "content-type: application/json" ); if(isset($data['order_type'])){ $order_type = $data['order_type']; }else{ $order_type = ''; } $click_action = ""; if($web_push_link){ $click_action = ', "click_action": "'.$web_push_link.'"'; } if (isset($data['order_id'])) { $postdata = '{ "to" : "/topics/' . $topic . '", "mutable_content": true, "data" : { "title":"' . $data['title'] . '", "body" : "' . $data['description'] . '", "image" : "' . $data['image'] . '", "order_id":"' . $data['order_id'] . '", "order_type":"' . $order_type . '", "is_read": 0, "type":"' . $type . '" }, "notification" : { "title":"' . $data['title'] . '", "body" : "' . $data['description'] . '", "image" : "' . $data['image'] . '", "order_id":"' . $data['order_id'] . '", "title_loc_key":"' . $data['order_id'] . '", "body_loc_key":"' . $type . '", "type":"' . $type . '", "is_read": 0, "icon" : "new", "sound": "notification.wav", "android_channel_id": "stackfood" '.$click_action.' } }'; } else { $postdata = '{ "to" : "/topics/' . $topic . '", "mutable_content": true, "data" : { "title":"' . $data['title'] . '", "body" : "' . $data['description'] . '", "image" : "' . $data['image'] . '", "is_read": 0, "type":"' . $type . '", }, "notification" : { "title":"' . $data['title'] . '", "body" : "' . $data['description'] . '", "image" : "' . $data['image'] . '", "body_loc_key":"' . $type . '", "type":"' . $type . '", "is_read": 0, "icon" : "new", "sound": "notification.wav", "android_channel_id": "stackfood" '.$click_action.' } }'; } $ch = curl_init(); $timeout = 120; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // Get URL content $result = curl_exec($ch); // close handle to release resources curl_close($ch); return $result; } public static function rating_count($food_id, $rating) { return Review::where(['food_id' => $food_id, 'rating' => $rating])->count(); } public static function dm_rating_count($deliveryman_id, $rating) { return DMReview::where(['delivery_man_id' => $deliveryman_id, 'rating' => $rating])->count(); } public static function tax_calculate($food, $price) { if ($food['tax_type'] == 'percent') { $price_tax = ($price / 100) * $food['tax']; } else { $price_tax = $food['tax']; } return $price_tax; } public static function discount_calculate($product, $price) { if ($product['restaurant_discount']) { $price_discount = ($price / 100) * $product['restaurant_discount']; } else if ($product['discount_type'] == 'percent') { $price_discount = ($price / 100) * $product['discount']; } else { $price_discount = $product['discount']; } return $price_discount; } public static function get_product_discount($product) { $restaurant_discount = self::get_restaurant_discount($product->restaurant); if ($restaurant_discount) { $discount = $restaurant_discount['discount'] . ' %'; } else if ($product['discount_type'] == 'percent') { $discount = $product['discount'] . ' %'; } else { $discount = self::format_currency($product['discount']); } return $discount; } public static function product_discount_calculate($product, $price, $restaurant) { $restaurant_discount = self::get_restaurant_discount($restaurant); if (isset($restaurant_discount)) { $price_discount = ($price / 100) * $restaurant_discount['discount']; } else if ($product['discount_type'] == 'percent') { $price_discount = ($price / 100) * $product['discount']; } else { $price_discount = $product['discount']; } return $price_discount; } public static function get_price_range($product, $discount = false) { $lowest_price = $product->price; // $highest_price = $product->price; // foreach(json_decode($product->variations,true) as $variation){ // if(isset($variation["price"])){ // foreach (json_decode($product->variations) as $key => $variation) { // if ($lowest_price > $variation->price) { // $lowest_price = round($variation->price, 2); // } // if ($highest_price < $variation->price) { // $highest_price = round($variation->price, 2); // } // } // break; // } // else{ // foreach ($variation['values'] as $value){ // $value['optionPrice']; // } // } // } if ($discount) { $lowest_price -= self::product_discount_calculate($product, $lowest_price, $product->restaurant); // $highest_price -= self::product_discount_calculate($product, $highest_price, $product->restaurant); } $lowest_price = self::format_currency($lowest_price); // $highest_price = self::format_currency($highest_price); // if ($lowest_price == $highest_price) { // return $lowest_price; // } // return $lowest_price . ' - ' . $highest_price; return $lowest_price; } public static function get_restaurant_discount($restaurant) { //dd($restaurant); if ($restaurant->discount) { if (date('Y-m-d', strtotime($restaurant->discount->start_date)) <= now()->format('Y-m-d') && date('Y-m-d', strtotime($restaurant->discount->end_date)) >= now()->format('Y-m-d') && date('H:i', strtotime($restaurant->discount->start_time)) <= now()->format('H:i') && date('H:i', strtotime($restaurant->discount->end_time)) >= now()->format('H:i')) { return [ 'discount' => $restaurant->discount->discount, 'min_purchase' => $restaurant->discount->min_purchase, 'max_discount' => $restaurant->discount->max_discount ]; } } return null; } public static function max_earning() { $data = Order::where(['order_status' => 'delivered'])->select('id', 'created_at', 'order_amount') ->get() ->groupBy(function ($date) { return Carbon::parse($date->created_at)->format('m'); }); $max = 0; foreach ($data as $month) { $count = 0; foreach ($month as $order) { $count += $order['order_amount']; } if ($count > $max) { $max = $count; } } return $max; } public static function max_orders() { $data = Order::select('id', 'created_at') ->get() ->groupBy(function ($date) { return Carbon::parse($date->created_at)->format('m'); }); $max = 0; foreach ($data as $month) { $count = 0; foreach ($month as $order) { $count += 1; } if ($count > $max) { $max = $count; } } return $max; } public static function order_status_update_message($status) { if ($status == 'pending') { $data = BusinessSetting::where('key', 'order_pending_message')->first()->value; } elseif ($status == 'confirmed') { $data = BusinessSetting::where('key', 'order_confirmation_msg')->first()->value; } elseif ($status == 'processing') { $data = BusinessSetting::where('key', 'order_processing_message')->first()->value; } elseif ($status == 'picked_up') { $data = BusinessSetting::where('key', 'out_for_delivery_message')->first()->value; } elseif ($status == 'handover') { $data = BusinessSetting::where('key', 'order_handover_message')->first()->value; } elseif ($status == 'delivered') { $data = BusinessSetting::where('key', 'order_delivered_message')->first()->value; } elseif ($status == 'delivery_boy_delivered') { $data = BusinessSetting::where('key', 'delivery_boy_delivered_message')->first()->value; } elseif ($status == 'accepted') { $data = BusinessSetting::where('key', 'delivery_boy_assign_message')->first()->value; } elseif ($status == 'canceled') { $data = BusinessSetting::where('key', 'order_cancled_message')->first()->value; } elseif ($status == 'refunded') { $data = BusinessSetting::where('key', 'order_refunded_message')->first()->value; } elseif ($status == 'refund_request_canceled') { $data = BusinessSetting::where('key', 'refund_cancel_message')->first()->value; } else { $data = '{"status":"0","message":""}'; } $res = json_decode($data, true); if ($res['status'] == 0) { return 0; } return $res['message']; } public static function send_order_notification($order) { $order= Order::where('id',$order->id)->with('zone:id,deliveryman_wise_topic','restaurant:id,restaurant_model,self_delivery_system,vendor_id','restaurant.restaurant_sub','customer:id,cm_firebase_token,email','restaurant.vendor:id,firebase_token','delivery_man:id,fcm_token')->first(); try { $status = ($order->order_status == 'delivered' && $order->delivery_man) ? 'delivery_boy_delivered' : $order->order_status; if($order->order_status=='confirmed' && $order->payment_method != 'cash_on_delivery' && $order->restaurant->restaurant_model == 'subscription' && isset($order->restaurant->restaurant_sub)){ if ($order->restaurant->restaurant_sub->max_order != "unlimited" && $order->restaurant->restaurant_sub->max_order > 0 ) { $order->restaurant->restaurant_sub()->decrement('max_order' , 1); } } if($order->subscription_id == null && ($order->payment_method == 'cash_on_delivery' && $order->order_status == 'pending' )||($order->payment_method != 'cash_on_delivery' && $order->order_status == 'confirmed' )){ $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'type' => 'new_order_admin', ]; self::send_push_notif_to_topic($data, 'admin_message', 'order_request', url('/').'/admin/order/list/all'); } $value = self::order_status_update_message($status); if ($value && $order->customer) { $data = [ 'title' => translate('messages.order_push_title'), 'description' => $value, 'order_id' => $order->id, 'image' => '', 'type' => 'order_status', ]; self::send_push_notif_to_device($order->customer->cm_firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'user_id' => $order->user_id, 'created_at' => now(), 'updated_at' => now() ]); } if($order->customer && $order->order_status == 'refund_request_canceled'){ $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.Your_refund_request_has_been_canceled'), 'order_id' => $order->id, 'image' => '', 'type' => 'order_status', ]; self::send_push_notif_to_device($order->customer->cm_firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'user_id' => $order->user_id, 'created_at' => now(), 'updated_at' => now() ]); } if ($status == 'picked_up') { $data = [ 'title' => translate('messages.order_push_title'), 'description' => $value, 'order_id' => $order->id, 'image' => '', 'type' => 'order_status', ]; self::send_push_notif_to_device($order->restaurant->vendor->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->restaurant->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); } if ($order->order_type == 'delivery' && !$order->scheduled && $order->order_status == 'pending' && $order->payment_method == 'cash_on_delivery' && config('order_confirmation_model') == 'deliveryman' && $order->order_type != 'take_away') { // if ($order->restaurant->self_delivery_system) if (($order->restaurant->restaurant_model == 'commission' && $order->restaurant->self_delivery_system) || ($order->restaurant->restaurant_model == 'subscription' && isset($order->restaurant->restaurant_sub) && $order->restaurant->restaurant_sub->self_delivery) ) { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'type' => 'new_order', ]; self::send_push_notif_to_device($order->restaurant->vendor->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->restaurant->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); $web_push_link = url('/').'/restaurant-panel/order/list/all'; self::send_push_notif_to_topic($data, "restaurant_panel_{$order->restaurant_id}_message", 'new_order', $web_push_link); } else { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', ]; if($order->zone){ if($order->vehicle_id){ $topic = 'delivery_man_'.$order->zone_id.'_'.$order->vehicle_id; self::send_push_notif_to_topic($data, $topic, 'order_request'); } self::send_push_notif_to_topic($data, $order->zone->deliveryman_wise_topic, 'order_request'); } } } if ($order->order_type == 'delivery' && !$order->scheduled && $order->order_status == 'pending' && $order->payment_method == 'cash_on_delivery' && config('order_confirmation_model') == 'restaurant') { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'type' => 'new_order', ]; self::send_push_notif_to_device($order->restaurant->vendor->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->restaurant->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); $web_push_link = url('/').'/restaurant-panel/order/list/all'; self::send_push_notif_to_topic($data, "restaurant_panel_{$order->restaurant_id}_message", 'new_order', $web_push_link); } if (!$order->scheduled && (($order->order_type == 'take_away' && $order->order_status == 'pending') || ($order->payment_method != 'cash_on_delivery' && $order->order_status == 'confirmed'))) { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'type' => 'new_order', ]; self::send_push_notif_to_device($order->restaurant->vendor->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->restaurant->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); $web_push_link = url('/').'/restaurant-panel/order/list/all'; self::send_push_notif_to_topic($data, "restaurant_panel_{$order->restaurant->id}_message", 'new_order', $web_push_link); } if ($order->order_status == 'confirmed' && $order->order_type != 'take_away' && config('order_confirmation_model') == 'deliveryman' && $order->payment_method == 'cash_on_delivery') { if ($order->restaurant->restaurant_model == 'commission' && $order->restaurant->self_delivery_system || ($order->restaurant->restaurant_model == 'subscription' && isset($order->restaurant->restaurant_sub) && $order->restaurant->restaurant_sub->self_delivery) ) { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', ]; self::send_push_notif_to_topic($data, "restaurant_dm_" . $order->restaurant_id, 'new_order'); } else { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'type' => 'new_order', ]; self::send_push_notif_to_device($order->restaurant->vendor->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->restaurant->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); $web_push_link = url('/').'/restaurant-panel/order/list/all'; self::send_push_notif_to_topic($data, "restaurant_panel_{$order->restaurant_id}_message", 'new_order', $web_push_link); } } if ($order->order_type == 'delivery' && !$order->scheduled && $order->order_status == 'confirmed' && ($order->payment_method != 'cash_on_delivery' || config('order_confirmation_model') == 'restaurant')) { $data = [ 'title' => translate('messages.order_push_title'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', ]; if (($order->restaurant->restaurant_model == 'commission' && $order->restaurant->self_delivery_system) || ($order->restaurant->restaurant_model == 'subscription' && isset($order->restaurant->restaurant_sub) && $order->restaurant->restaurant_sub->self_delivery) ) { self::send_push_notif_to_topic($data, "restaurant_dm_" . $order->restaurant_id, 'order_request'); } else { if($order->zone){ if($order->vehicle_id){ $topic = 'delivery_man_'.$order->zone_id.'_'.$order->vehicle_id; self::send_push_notif_to_topic($data, $topic, 'order_request'); } self::send_push_notif_to_topic($data, $order->zone->deliveryman_wise_topic, 'order_request'); } } } if (in_array($order->order_status, ['processing', 'handover']) && $order->delivery_man) { $data = [ 'title' => translate('messages.order_push_title'), 'description' => $order->order_status == 'processing' ? translate('messages.Proceed_for_cooking') : translate('messages.ready_for_delivery'), 'order_id' => $order->id, 'image' => '', 'type' => 'order_status' ]; self::send_push_notif_to_device($order->delivery_man->fcm_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'delivery_man_id' => $order->delivery_man->id, 'created_at' => now(), 'updated_at' => now() ]); } try { if ($order->order_status == 'confirmed' && $order->payment_method != 'cash_on_delivery' && config('mail.status')) { Mail::to($order->customer->email)->send(new OrderPlaced($order->id)); } if($order->order_status == 'refund_request_canceled' && config('mail.status')){ Mail::to($order->customer->email)->send(new RefundRejected($order->id)); } } catch (\Exception $ex) { info($ex); } return true; } catch (\Exception $e) { info($e); } return false; } public static function day_part() { $part = ""; $morning_start = date("h:i:s", strtotime("5:00:00")); $afternoon_start = date("h:i:s", strtotime("12:01:00")); $evening_start = date("h:i:s", strtotime("17:01:00")); $evening_end = date("h:i:s", strtotime("21:00:00")); if (time() >= $morning_start && time() < $afternoon_start) { $part = "morning"; } elseif (time() >= $afternoon_start && time() < $evening_start) { $part = "afternoon"; } elseif (time() >= $evening_start && time() <= $evening_end) { $part = "evening"; } else { $part = "night"; } return $part; } public static function env_update($key, $value) { $path = base_path('.env'); if (file_exists($path)) { file_put_contents($path, str_replace( $key . '=' . env($key), $key . '=' . $value, file_get_contents($path) )); } } public static function env_key_replace($key_from, $key_to, $value) { $path = base_path('.env'); if (file_exists($path)) { file_put_contents($path, str_replace( $key_from . '=' . env($key_from), $key_to . '=' . $value, file_get_contents($path) )); } } public static function remove_dir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir . "/" . $object) == "dir") Helpers::remove_dir($dir . "/" . $object); else unlink($dir . "/" . $object); } } reset($objects); rmdir($dir); } } public static function get_restaurant_id() { if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user()->restaurant->id; } return auth('vendor')->user()->restaurants[0]->id; } public static function get_vendor_id() { if (auth('vendor')->check()) { return auth('vendor')->id(); } else if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user()->vendor_id; } return 0; } public static function get_vendor_data() { if (auth('vendor')->check()) { return auth('vendor')->user(); } else if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user()->vendor; } return 0; } public static function get_loggedin_user() { if (auth('vendor')->check()) { return auth('vendor')->user(); } else if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user(); } return 0; } public static function get_restaurant_data() { if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user()->restaurant; } return auth('vendor')->user()->restaurants[0]; } public static function upload(string $dir, string $format, $image = null) { if ($image != null) { $imageName = \Carbon\Carbon::now()->toDateString() . "-" . uniqid() . "." . $format; if (!Storage::disk('public')->exists($dir)) { Storage::disk('public')->makeDirectory($dir); } Storage::disk('public')->put($dir . $imageName, file_get_contents($image)); return $imageName; } // else { // $imageName = 'def.png'; // } //return $imageName; } public static function update(string $dir, $old_image, string $format, $image = null) { if ($image == null) { return $old_image; } if (Storage::disk('public')->exists($dir . $old_image)) { Storage::disk('public')->delete($dir . $old_image); } $imageName = Helpers::upload($dir, $format, $image); return $imageName; } public static function format_coordiantes($coordinates) { $data = []; foreach ($coordinates as $coord) { $data[] = (object)['lat' => $coord->getlat(), 'lng' => $coord->getlng()]; } return $data; } public static function module_permission_check($mod_name) { if (!auth('admin')->user()->role) { return false; } if ($mod_name == 'zone' && auth('admin')->user()->zone_id) { return false; } $permission = auth('admin')->user()->role->modules; if (isset($permission) && in_array($mod_name, (array)json_decode($permission)) == true) { return true; } if (auth('admin')->user()->role_id == 1) { return true; } return false; } public static function employee_module_permission_check($mod_name) { if (auth('vendor')->check()) { if ($mod_name == 'reviews' ) { return auth('vendor')->user()->restaurants[0]->reviews_section ; } else if ($mod_name == 'deliveryman') { return auth('vendor')->user()->restaurants[0]->self_delivery_system; } else if ($mod_name == 'pos') { return auth('vendor')->user()->restaurants[0]->pos_system; } return true; } else if (auth('vendor_employee')->check()) { $permission = auth('vendor_employee')->user()->role->modules; if (isset($permission) && in_array($mod_name, (array)json_decode($permission)) == true) { if ($mod_name == 'reviews') { return auth('vendor_employee')->user()->restaurant->reviews_section; } else if ($mod_name == 'deliveryman') { return auth('vendor_employee')->user()->restaurant->self_delivery_system; } else if ($mod_name == 'pos') { return auth('vendor_employee')->user()->restaurant->pos_system; } return true; } } return false; } public static function calculate_addon_price($addons, $add_on_qtys) { $add_ons_cost = 0; $data = []; if ($addons) { foreach ($addons as $key2 => $addon) { if ($add_on_qtys == null) { $add_on_qty = 1; } else { $add_on_qty = $add_on_qtys[$key2]; } $data[] = ['id' => $addon->id, 'name' => $addon->name, 'price' => $addon->price, 'quantity' => $add_on_qty]; $add_ons_cost += $addon['price'] * $add_on_qty; } return ['addons' => $data, 'total_add_on_price' => $add_ons_cost]; } return null; } public static function get_settings($name) { $config = null; $data = BusinessSetting::where(['key' => $name])->first(); if (isset($data)) { $config = json_decode($data['value'], true); if (is_null($config)) { $config = $data['value']; } } return $config; } public static function setEnvironmentValue($envKey, $envValue) { $envFile = app()->environmentFilePath(); $str = file_get_contents($envFile); $oldValue = env($envKey); if (strpos($str, $envKey) !== false) { $str = str_replace("{$envKey}={$oldValue}", "{$envKey}={$envValue}", $str); } else { $str .= "{$envKey}={$envValue}\n"; } $fp = fopen($envFile, 'w'); fwrite($fp, $str); fclose($fp); return $envValue; } // public static function requestSender() // { // $client = new \GuzzleHttp\Client(); // $response = $client->get(route(base64_decode('YWN0aXZhdGlvbi1jaGVjaw=='))); // $data = json_decode($response->getBody()->getContents(), true); // return $data; // } public static function requestSender() { $class = new LaravelchkController(); $response = $class->actch(); return json_decode($response->getContent(), true); } public static function insert_business_settings_key($key, $value = null) { $data = BusinessSetting::where('key', $key)->first(); if (!$data) { DB::table('business_settings')->updateOrInsert(['key' => $key], [ 'value' => $value, 'created_at' => now(), 'updated_at' => now(), ]); } return true; } public static function get_language_name($key) { $languages = array( "af" => "Afrikaans", "sq" => "Albanian - shqip", "am" => "Amharic - አማርኛ", "ar" => "Arabic - العربية", "an" => "Aragonese - aragonés", "hy" => "Armenian - հայերեն", "ast" => "Asturian - asturianu", "az" => "Azerbaijani - azərbaycan dili", "eu" => "Basque - euskara", "be" => "Belarusian - беларуская", "bn" => "Bengali - বাংলা", "bs" => "Bosnian - bosanski", "br" => "Breton - brezhoneg", "bg" => "Bulgarian - български", "ca" => "Catalan - català", "ckb" => "Central Kurdish - کوردی (دەستنوسی عەرەبی)", "zh" => "Chinese - 中文", "zh-HK" => "Chinese (Hong Kong) - 中文(香港)", "zh-CN" => "Chinese (Simplified) - 中文(简体)", "zh-TW" => "Chinese (Traditional) - 中文(繁體)", "co" => "Corsican", "hr" => "Croatian - hrvatski", "cs" => "Czech - čeština", "da" => "Danish - dansk", "nl" => "Dutch - Nederlands", "en" => "English", "en-AU" => "English (Australia)", "en-CA" => "English (Canada)", "en-IN" => "English (India)", "en-NZ" => "English (New Zealand)", "en-ZA" => "English (South Africa)", "en-GB" => "English (United Kingdom)", "en-US" => "English (United States)", "eo" => "Esperanto - esperanto", "et" => "Estonian - eesti", "fo" => "Faroese - føroyskt", "fil" => "Filipino", "fi" => "Finnish - suomi", "fr" => "French - français", "fr-CA" => "French (Canada) - français (Canada)", "fr-FR" => "French (France) - français (France)", "fr-CH" => "French (Switzerland) - français (Suisse)", "gl" => "Galician - galego", "ka" => "Georgian - ქართული", "de" => "German - Deutsch", "de-AT" => "German (Austria) - Deutsch (Österreich)", "de-DE" => "German (Germany) - Deutsch (Deutschland)", "de-LI" => "German (Liechtenstein) - Deutsch (Liechtenstein)", "de-CH" => "German (Switzerland) - Deutsch (Schweiz)", "el" => "Greek - Ελληνικά", "gn" => "Guarani", "gu" => "Gujarati - ગુજરાતી", "ha" => "Hausa", "haw" => "Hawaiian - ʻŌlelo Hawaiʻi", "he" => "Hebrew - עברית", "hi" => "Hindi - हिन्दी", "hu" => "Hungarian - magyar", "is" => "Icelandic - íslenska", "id" => "Indonesian - Indonesia", "ia" => "Interlingua", "ga" => "Irish - Gaeilge", "it" => "Italian - italiano", "it-IT" => "Italian (Italy) - italiano (Italia)", "it-CH" => "Italian (Switzerland) - italiano (Svizzera)", "ja" => "Japanese - 日本語", "kn" => "Kannada - ಕನ್ನಡ", "kk" => "Kazakh - қазақ тілі", "km" => "Khmer - ខ្មែរ", "ko" => "Korean - 한국어", "ku" => "Kurdish - Kurdî", "ky" => "Kyrgyz - кыргызча", "lo" => "Lao - ລາວ", "la" => "Latin", "lv" => "Latvian - latviešu", "ln" => "Lingala - lingála", "lt" => "Lithuanian - lietuvių", "mk" => "Macedonian - македонски", "ms" => "Malay - Bahasa Melayu", "ml" => "Malayalam - മലയാളം", "mt" => "Maltese - Malti", "mr" => "Marathi - मराठी", "mn" => "Mongolian - монгол", "ne" => "Nepali - नेपाली", "no" => "Norwegian - norsk", "nb" => "Norwegian Bokmål - norsk bokmål", "nn" => "Norwegian Nynorsk - nynorsk", "oc" => "Occitan", "or" => "Oriya - ଓଡ଼ିଆ", "om" => "Oromo - Oromoo", "ps" => "Pashto - پښتو", "fa" => "Persian - فارسی", "pl" => "Polish - polski", "pt" => "Portuguese - português", "pt-BR" => "Portuguese (Brazil) - português (Brasil)", "pt-PT" => "Portuguese (Portugal) - português (Portugal)", "pa" => "Punjabi - ਪੰਜਾਬੀ", "qu" => "Quechua", "ro" => "Romanian - română", "mo" => "Romanian (Moldova) - română (Moldova)", "rm" => "Romansh - rumantsch", "ru" => "Russian - русский", "gd" => "Scottish Gaelic", "sr" => "Serbian - српски", "sh" => "Serbo-Croatian - Srpskohrvatski", "sn" => "Shona - chiShona", "sd" => "Sindhi", "si" => "Sinhala - සිංහල", "sk" => "Slovak - slovenčina", "sl" => "Slovenian - slovenščina", "so" => "Somali - Soomaali", "st" => "Southern Sotho", "es" => "Spanish - español", "es-AR" => "Spanish (Argentina) - español (Argentina)", "es-419" => "Spanish (Latin America) - español (Latinoamérica)", "es-MX" => "Spanish (Mexico) - español (México)", "es-ES" => "Spanish (Spain) - español (España)", "es-US" => "Spanish (United States) - español (Estados Unidos)", "su" => "Sundanese", "sw" => "Swahili - Kiswahili", "sv" => "Swedish - svenska", "tg" => "Tajik - тоҷикӣ", "ta" => "Tamil - தமிழ்", "tt" => "Tatar", "te" => "Telugu - తెలుగు", "th" => "Thai - ไทย", "ti" => "Tigrinya - ትግርኛ", "to" => "Tongan - lea fakatonga", "tr" => "Turkish - Türkçe", "tk" => "Turkmen", "tw" => "Twi", "uk" => "Ukrainian - українська", "ur" => "Urdu - اردو", "ug" => "Uyghur", "uz" => "Uzbek - o‘zbek", "vi" => "Vietnamese - Tiếng Việt", "wa" => "Walloon - wa", "cy" => "Welsh - Cymraeg", "fy" => "Western Frisian", "xh" => "Xhosa", "yi" => "Yiddish", "yo" => "Yoruba - Èdè Yorùbá", "zu" => "Zulu - isiZulu", ); return array_key_exists($key, $languages) ? $languages[$key] : $key; } public static function get_view_keys() { $keys = BusinessSetting::whereIn('key', ['toggle_veg_non_veg', 'toggle_dm_registration', 'toggle_restaurant_registration'])->get(); $data = []; foreach ($keys as $key) { $data[$key->key] = (bool)$key->value; } return $data; } public static function default_lang() { if (strpos(url()->current(), '/api')) { $lang = App::getLocale(); } elseif ( strpos(url()->current(), '/admin') && session()->has('local')) { $lang = session('local'); }elseif (strpos(url()->current(), '/restaurant-panel') && session()->has('vendor_local')) { $lang = session('vendor_local'); } elseif (session()->has('landing_local')) { $lang = session('landing_local'); } elseif (session()->has('local')) { $lang = session('local'); } else { $data = Helpers::get_business_settings('language'); $code = 'en'; $direction = 'ltr'; foreach ($data as $ln) { if (is_array($ln) && array_key_exists('default', $ln) && $ln['default']) { $code = $ln['code']; if (array_key_exists('direction', $ln)) { $direction = $ln['direction']; } } } session()->put('local', $code); $lang = $code; } return $lang; } // public static function generate_referer_code($user) // { // $user_name = $user_name = explode('@',$user->email)[0]; // $user_id = $user->id; // //dd($user_id); // $uid_length = strlen($user->id); // if (strlen($user_name) > 10 - $uid_length) { // $user_name = substr($user_name, 0, 10 - $uid_length); // } else if (strlen($user_name) < 10 - $uid_length) { // $user_id = $user_id * pow(10, ((10 - $uid_length) - strlen($user_name))); // } // return $user_name . $user_id; // } public static function generate_referer_code() { $ref_code = strtoupper(Str::random(10)); if (self::referer_code_exists($ref_code)) { return self::generate_referer_code(); } return $ref_code; } public static function referer_code_exists($ref_code) { return User::where('ref_code', '=', $ref_code)->exists(); } public static function remove_invalid_charcaters($str) { return str_ireplace(['\'', '"', ',', ';', '<', '>', '?'], ' ', $str); } public static function set_time_log($user_id , $date, $online = null, $offline = null,$shift_id = null) { try { $time_log = TimeLog::where(['user_id'=>$user_id, 'date'=>$date])->first(); if($time_log && $time_log->online && $online) return true; if($offline && $time_log) { $time_log->offline = $offline; $time_log->working_hour = (strtotime($offline) - strtotime($time_log->online))/60; $time_log->shift_id = $shift_id; $time_log->save(); return true; } $time_log = new TimeLog; $time_log->date = $date; $time_log->user_id = $user_id; $time_log->offline = $offline; $time_log->online = $online; $time_log->shift_id = $shift_id; $time_log->save(); return true; } catch(\Exception $ex) { info($ex); } return false; } public static function push_notification_export_data($data){ $format = []; foreach($data as $key=>$item){ $format[] =[ '#'=>$key+1, translate('title')=>$item['title'], translate('description')=>$item['description'], translate('zone')=>$item->zone ? $item->zone->name : translate('messages.all_zones'), translate('tergat')=>$item['tergat'], translate('status')=>$item['status'] ]; } return $format; } public static function restaurant_withdraw_list_export($data){ $format = []; foreach($data as $key=>$wr){ if($wr->approved==0){ $status=translate('Pending'); }elseif($wr->approved==1){ $status= translate('Approved'); } else{ $status= translate('Denied'); } $format[] =[ 'Sl'=>$key+1, translate('amount')=>$wr['amount'], translate('restaurant')=>$wr->vendor?$wr->vendor->restaurants[0]->name:translate('messages.Restaurant deleted!'), translate('request_time')=>date('Y-m-d '.config('timeformat'),strtotime($wr->created_at)), translate('status')=>$status, ]; } return $format; } public static function vendor_employee_list_export($data){ $format = []; foreach($data as $key=>$e){ $format[] =[ 'Sl'=>$key+1, translate('name')=>$e['f_name'].' '.$e['l_name'] , translate('email')=>$e['email'], translate('phone')=>$e['phone'], translate('Role')=>$e->role?$e->role['name']:translate('messages.role_deleted'), ]; } return $format; } public static function dm_earning_list_export($data){ $format = []; foreach($data as $key=>$at){ $format[] =[ 'Sl'=>$key+1, translate('name')=>$at->delivery_man ? $at->delivery_man->f_name.' '.$at->delivery_man->l_name : translate('messages.deliveryman_deleted!') , translate('received_at')=>$at->created_at->format('Y-m-d '.config('timeformat')), translate('amount')=>$at['amount'], translate('method')=>$at['method'], translate('reference')=>$at['ref'], ]; } return $format; } public static function export_account_transaction($data){ $format = []; foreach($data as $key=>$at){ if($at->restaurant){ $received_from= $at->restaurant->name; } elseif($at->deliveryman){ $received_from= $at->deliveryman->f_name .' '. $at->deliveryman->l_name; } else { $received_from= translate('messages.not_found'); } $format[] =[ 'Sl'=>$key+1, translate('received_from')=> $received_from, translate('type')=>$at['from_type'], translate('received_at')=>$at->created_at->format('Y-m-d '.config('timeformat')), translate('amount')=>$at['amount'], translate('reference')=>$at['ref'], ]; } return $format; } public static function export_zones($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.zone').' '.translate('messages.id')=>$item['id'], translate('messages.name')=>$item['name'], translate('messages.restaurants')=> $item->restaurants->count(), translate('messages.deliveryman')=> $item->deliverymen->count(), translate('messages.status')=> $item['status'] ]; } return $data; } public static function export_restaurants($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.restaurant_name')=> $item['name'], translate('messages.owner_information') => $item->vendor->f_name.' '.$item->vendor->l_name, translate('messages.phone') => $item->vendor->phone, translate('messages.zone') => $item->zone->name, translate('messages.status') => $item['status'] ? translate('messages.active') : translate('messages.inactive'), ]; } return $data; } public static function export_subscription($collection){ $data = []; foreach($collection as $key=>$item){ $payment_status =translate('paid'); if ($item->payment_method == 'free_trial'){ $payment_status =translate('unpaid'); $Payment_type= translate('messages.free_trial') ; } elseif($item->payment_method == 'wallet'){ $Payment_type= translate('messages.Wallet payment'); } elseif($item->payment_method == 'manual_payment_admin'){ $Payment_type= translate('messages.Manual payment') ; } elseif($item->payment_method == 'manual_payment_by_restaurant'){ $Payment_type= translate('messages.Manual payment') ; }else{ $Payment_type= $item->payment_method ; } $data[] = [ 'SL'=>$key+1, translate('messages.transaction').' '.translate('messages.id') => $item->id, translate('Transaction Date')=> $item->created_at->format('d M Y'), translate('messages.restaurant_name') => $item->restaurant->name, translate('messages.Package_name') => $item->package->package_name, translate('messages.Pricing') => Helpers::format_currency($item->price) , translate('messages.Duration') => $item->validity . ' ' . translate('messages.days'), translate('messages.Payment Status') => $payment_status, translate('messages.Payment_type') => $Payment_type, ]; } return $data; } public static function export_restaurant_orders($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.order_id') => $item['id'], translate('messages.order_date') => $item['created_at'], translate('messages.customer_name') => isset($item->customer) ? $item->customer->f_name.' '.$item->customer->l_name : null, translate('messages.phone') => isset($item->customer) ? $item->customer->phone : null, translate('messages.total_amount') => $item['order_amount'].' '.Helpers::currency_symbol(), translate('messages.order_status') => $item['order_status'] ]; } return $data; } public static function export_d_man($collection){ $availability=''; foreach($collection as $key=>$dm){ if($dm->application_status == 'approved'){ if($dm->active){ $availability=translate('messages.online'); }else{ $availability=translate('messages.offline'); } } elseif($dm->application_status == 'denied'){ $availability=translate('messages.denied'); } else{ $availability=translate('messages.pending'); } $data[] = [ 'SL'=>$key+1, translate('messages.name') => $dm['f_name'].' '.$dm['l_name'], translate('messages.ratings') => count($dm->rating)>0?number_format($dm->rating[0]->average, 1, '.', ' '):0, translate('messages.contact') => $dm['phone'], translate('messages.zone') => isset($dm->zone) ? $dm->zone->name : translate('messages.zone').' '.translate('messages.deleted'), translate('messages.Total Orders') => $dm->orders ? count($dm->orders):0 , translate('messages.Currenty Assigned Orders') => $dm->current_orders , translate('messages.availability') => $availability , ]; } return $data; } public static function export_day_wise_report($collection){ $data = []; foreach($collection as $key=>$item){ $discount_by_admin = 0; if($item->order->discount_on_product_by == 'admin'){ $discount_by_admin = $item->order['restaurant_discount_amount']; }; $data[] = [ 'SL'=>$key+1, translate('messages.order_id') => $item['order_id'], translate('messages.restaurant')=>$item->order->restaurant?$item->order->restaurant->name:translate('messages.invalid'), translate('messages.customer_name')=>$item->order->customer?$item->order->customer['f_name'].' '.$item->order->customer['l_name']:translate('messages.invalid').' '.translate('messages.customer').' '.translate('messages.data'), translate('total_item_amount')=>\App\CentralLogics\Helpers::format_currency($item->order['order_amount'] - $item->order['dm_tips']-$item->order['delivery_charge'] - $item['tax'] + $item->order['coupon_discount_amount'] + $item->order['restaurant_discount_amount']), translate('item_discount')=>\App\CentralLogics\Helpers::format_currency($item->order->details->sum('discount_on_food')), translate('coupon_discount')=>\App\CentralLogics\Helpers::format_currency($item->order['coupon_discount_amount']), translate('discounted_amount')=>\App\CentralLogics\Helpers::format_currency($item->order['coupon_discount_amount'] + $item->order['restaurant_discount_amount']), translate('messages.tax')=>\App\CentralLogics\Helpers::format_currency($item->tax), translate('messages.delivery_charge')=>\App\CentralLogics\Helpers::format_currency($item['delivery_charge'] + $item['delivery_fee_comission']), translate('messages.total_order_amount') => \App\CentralLogics\Helpers::format_currency($item['order_amount']), translate('messages.admin_discount') => \App\CentralLogics\Helpers::format_currency($item['admin_expense']), translate('messages.restaurant_discount') => \App\CentralLogics\Helpers::format_currency($item->discount_amount_by_restaurant), translate('messages.admin_commission') => \App\CentralLogics\Helpers::format_currency($item->admin_commission + $item->admin_expense - $discount_by_admin ), translate('Comission on delivery fee') => \App\CentralLogics\Helpers::format_currency($item['delivery_fee_comission']), translate('admin_net_income') => \App\CentralLogics\Helpers::format_currency($item['admin_commission'] + $item->delivery_fee_comission), translate('restaurant_net_income') => \App\CentralLogics\Helpers::format_currency($item['restaurant_amount'] - $item['tax']), translate('messages.amount_received_by') => $item['received_by'], translate('messages.payment_method')=>translate(str_replace('_', ' ', $item->order['payment_method'])), translate('messages.payment_status') => $item->status ? translate("messages.refunded") : translate("messages.completed"), ]; } return $data; } public static function food_wise_report_export($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item['name'], translate('messages.restaurant') => $item->restaurant ? $item->restaurant->name : '', translate('messages.order') => $item->orders_count, translate('messages.price') => \App\CentralLogics\Helpers::format_currency($item->price), translate('messages.total_amount_sold') => \App\CentralLogics\Helpers::format_currency($item->orders_sum_price), translate('messages.total_discount_given') => \App\CentralLogics\Helpers::format_currency($item->orders_sum_discount_on_food), translate('messages.average_sale_value') => $item->orders_count>0? \App\CentralLogics\Helpers::format_currency(($item->orders_sum_price-$item->orders_sum_discount_on_food)/$item->orders_count):0 , translate('messages.average_ratings') => round($item->avg_rating,1), ]; } return $data; } public static function export_restaurant_food($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.name') => $item['name'], translate('messages.category') => $item->category, translate('messages.price') => $item['price'], translate('messages.status') => $item['status'] ]; } return $data; } public static function export_categories($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item['name'], translate('messages.priority') => ($item['priority'] == 1) ? 'medium' : ((1)? 'normal' : 'high'), translate('messages.status') => $item['status'] ]; } return $data; } public static function export_attributes($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item['name'], ]; } return $data; } public static function get_varient(array $product_variations, array $variations) { $result = []; $variation_price = 0; foreach($variations as $k=> $variation){ foreach($product_variations as $product_variation){ if( isset($variation['values']) && isset($product_variation['values']) && $product_variation['name'] == $variation['name'] ){ $result[$k] = $product_variation; $result[$k]['values'] = []; foreach($product_variation['values'] as $key=> $option){ if(in_array($option['label'], $variation['values']['label'])){ $result[$k]['values'][] = $option; $variation_price += $option['optionPrice']; } } } } } return ['price'=>$variation_price,'variations'=>$result]; } public Static function subscription_check() { $business_model= BusinessSetting::where('key', 'business_model')->first(); if(!$business_model) { Helpers::insert_business_settings_key('refund_active_status', '1'); Helpers::insert_business_settings_key('business_model', json_encode([ 'commission' => 1, 'subscription' => 0, ])); $business_model = [ 'commission' => 1, 'subscription' => 0, ]; } else{ $business_model = $business_model->value ? json_decode($business_model->value, true) : [ 'commission' => 1, 'subscription' => 0, ]; } if ($business_model['subscription'] == 1 ){ return true; } return false; } public Static function commission_check() { $business_model= BusinessSetting::where('key', 'business_model')->first(); if(!$business_model) { Helpers::insert_business_settings_key('business_model', json_encode([ 'commission' => 1, 'subscription' => 0, ])); $business_model = [ 'commission' => 1, 'subscription' => 0, ]; } else{ $business_model = $business_model->value ? json_decode($business_model->value, true) : [ 'commission' => 1, 'subscription' => 0, ]; } if ($business_model['commission'] == 1 ){ return true; } return false; } public static function check_subscription_validity() { $current_date = date('Y-m-d'); $check_subscription_validity_on= BusinessSetting::where('key', 'check_subscription_validity_on')->first(); if(!$check_subscription_validity_on){ Helpers::insert_business_settings_key('check_subscription_validity_on', date('Y-m-d')); } if($check_subscription_validity_on && $check_subscription_validity_on->value != $current_date){ Restaurant::whereHas('restaurant_subs',function ($query)use($current_date){ $query->where('status',1)->where('expiry_date', '<', $current_date); })->update(['status' => 0, 'pos_system'=>1, 'self_delivery_system'=>1, 'reviews_section'=>1, 'free_delivery'=>0, 'restaurant_model'=>'unsubscribed', ]); RestaurantSubscription::where('status',1)->where('expiry_date', '<', $current_date)->update([ 'status' => 0 ]); $check_subscription_validity_on->value=$current_date; $check_subscription_validity_on->save(); Helpers::create_subscription_order_logs(); } return false; } public static function subscription_plan_chosen($restaurant_id ,$package_id, $payment_method ,$discount,$reference=null ,$type=null){ $restaurant=Restaurant::findOrFail($restaurant_id); $package = SubscriptionPackage::findOrFail($package_id); $add_days=0; $add_orders=0; $total_food= $restaurant->foods()->withoutGlobalScope(\App\Scopes\RestaurantScope::class)->count(); if ($package->max_product != 'unlimited' && $total_food >= $package->max_product ){ return 'downgrade_error'; } try { $restaurant_subscription=$restaurant->restaurant_sub; if (isset($restaurant_subscription) && $type == 'renew') { $restaurant_subscription->total_package_renewed= $restaurant_subscription->total_package_renewed + 1; $day_left=$restaurant_subscription->expiry_date->format('Y-m-d'); if (Carbon::now()->subDays(1)->diffInDays($day_left, false) > 0) { $add_days= Carbon::now()->subDays(1)->diffInDays($day_left, false); } if ($restaurant_subscription->max_order != 'unlimited' && $restaurant_subscription->max_order > 0) { $add_orders=$restaurant_subscription->max_order; } } else{ RestaurantSubscription::where('restaurant_id',$restaurant->id)->update([ 'status' => 0, ]); $restaurant_subscription =new RestaurantSubscription(); $restaurant_subscription->total_package_renewed= 0; } $restaurant_subscription->package_id=$package->id; $restaurant_subscription->restaurant_id=$restaurant->id; if ($payment_method == 'free_trial' ) { $free_trial_period_data = BusinessSetting::where(['key' => 'free_trial_period'])->first(); if ($free_trial_period_data == false) { $values= [ 'data' => 7, 'status' => 1, ]; Helpers::insert_business_settings_key('free_trial_period', json_encode($values) ); } $free_trial_period_data = json_decode(BusinessSetting::where(['key' => 'free_trial_period'])->first()->value,true); $free_trial_period= $free_trial_period_data['data']; $restaurant_subscription->expiry_date= Carbon::now()->addDays($free_trial_period)->format('Y-m-d'); } else{ $restaurant_subscription->expiry_date= Carbon::now()->addDays($package->validity+$add_days)->format('Y-m-d'); } if($package->max_order != 'unlimited'){ $restaurant_subscription->max_order=$package->max_order + $add_orders; } else{ $restaurant_subscription->max_order=$package->max_order; } $restaurant_subscription->max_product=$package->max_product; $restaurant_subscription->pos=$package->pos; $restaurant_subscription->mobile_app=$package->mobile_app; $restaurant_subscription->chat=$package->chat; $restaurant_subscription->review=$package->review; $restaurant_subscription->self_delivery=$package->self_delivery; $restaurant->food_section= 1; $restaurant->pos_system= 1; if ($type == 'new_join') { $restaurant->status= 0; $restaurant_subscription->status= 0; }else{ $restaurant->status= 1; $restaurant_subscription->status= 1; } // For Restaurant Free Delivery if($restaurant->free_delivery == 1 && $package->self_delivery == 1){ $restaurant->free_delivery = 1 ; } else{ $restaurant->free_delivery = 0 ; $restaurant->coupon()->where('created_by','vendor')->where('coupon_type','free_delivery')->delete(); } $restaurant->reviews_section= 1; $restaurant->self_delivery_system= 1; $restaurant->restaurant_model= 'subscription'; $subscription_transaction= new SubscriptionTransaction(); $subscription_transaction->id= Str::uuid(); $subscription_transaction->package_id=$package->id; $subscription_transaction->restaurant_id=$restaurant->id; $subscription_transaction->price=$package->price; if ($payment_method == 'free_trial') { $subscription_transaction->validity= $free_trial_period; $subscription_transaction->paid_amount= 0; } else { $subscription_transaction->validity=$package->validity; $subscription_transaction->paid_amount= $package->price - (($package->price*$discount)/100); } $subscription_transaction->payment_method=$payment_method; $subscription_transaction->reference=$reference ?? null; $subscription_transaction->discount=$discount ?? 0; if( $payment_method == 'manual_payment_admin'){ $subscription_transaction->created_by= 'Admin'; } else{ $subscription_transaction->created_by= 'Restaurant'; } $subscription_transaction->package_details=[ 'pos'=>$package->pos, 'review'=>$package->review, 'self_delivery'=>$package->self_delivery, 'chat'=>$package->chat, 'mobile_app'=>$package->mobile_app, 'max_order'=>$package->max_order, 'max_product'=>$package->max_product, ]; DB::beginTransaction(); $restaurant->save(); $subscription_transaction->save(); $restaurant_subscription->save(); DB::commit(); } catch(\Exception $e){ DB::rollBack(); info(["line___{$e->getLine()}",$e->getMessage()]); return false; } return true; } public static function expenseCreate($amount,$type,$datetime,$order_id,$created_by,$restaurant_id=null,$description='',$delivery_man_id=null) { $expense = new Expense(); $expense->amount = $amount; $expense->type = $type; $expense->order_id = $order_id; $expense->created_by = $created_by; $expense->restaurant_id = $restaurant_id; $expense->delivery_man_id = $delivery_man_id; $expense->description = $description; $expense->created_at = $datetime; $expense->updated_at = $datetime; return $expense->save(); } public static function hex_to_rbg($color){ list($r, $g, $b) = sscanf($color, "#%02x%02x%02x"); $output = "$r, $g, $b"; return $output; } public static function increment_order_count($data){ $restaurant=$data; $rest_sub=$restaurant->restaurant_sub; if ( $restaurant->restaurant_model == 'subscription' && isset($rest_sub) && $rest_sub->max_order != "unlimited") { $rest_sub->increment('max_order', 1); } return true; } public static function react_activation_check($react_domain, $react_license_code){ $scheme = str_contains($react_domain, 'localhost')?'http://':'https://'; $url = empty(parse_url($react_domain)['scheme']) ? $scheme . ltrim($react_domain, '/') : $react_domain; $response = Http::post('https://store.6amtech.com/api/v1/customer/license-check', [ 'domain_name' => str_ireplace('www.', '', parse_url($url, PHP_URL_HOST)), 'license_code' => $react_license_code ]); return ($response->successful() && isset($response->json('content')['is_active']) && $response->json('content')['is_active']); } public static function activation_submit($purchase_key) { $post = [ 'purchase_key' => $purchase_key ]; $live = 'https://check.6amtech.com'; $ch = curl_init($live . '/api/v1/software-check'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $response = curl_exec($ch); curl_close($ch); $response_body = json_decode($response, true); try { if ($response_body['is_valid'] && $response_body['result']['item']['id'] == env('REACT_APP_KEY')) { $previous_active = json_decode(BusinessSetting::where('key', 'app_activation')->first()->value ?? '[]'); $found = 0; foreach ($previous_active as $key => $item) { if ($item->software_id == env('REACT_APP_KEY')) { $found = 1; } } if (!$found) { $previous_active[] = [ 'software_id' => env('REACT_APP_KEY'), 'is_active' => 1 ]; DB::table('business_settings')->updateOrInsert(['key' => 'app_activation'], [ 'value' => json_encode($previous_active) ]); } return true; } } catch (\Exception $exception) { info($exception->getMessage()); } return false; } public static function react_domain_status_check(){ $data = self::get_business_settings('react_setup'); if($data && isset($data['react_domain']) && isset($data['react_license_code'])){ if(isset($data['react_platform']) && $data['react_platform'] == 'codecanyon'){ $data['status'] = (int)self::activation_submit($data['react_license_code']); }elseif(!self::react_activation_check($data['react_domain'], $data['react_license_code'])){ $data['status']=0; }elseif($data['status'] != 1){ $data['status']=1; } DB::table('business_settings')->updateOrInsert(['key' => 'react_setup'], [ 'value' => json_encode($data) ]); } } public static function number_format_short( $n ) { if ($n < 900) { // 0 - 900 $n = $n; $suffix = ''; } else if ($n < 900000) { // 0.9k-850k $n = $n / 1000; $suffix = 'K'; } else if ($n < 900000000) { // 0.9m-850m $n = $n / 1000000; $suffix = 'M'; } else if ($n < 900000000000) { // 0.9b-850b $n = $n / 1000000000; $suffix = 'B'; } else { // 0.9t+ $n = $n / 1000000000000; $suffix = 'T'; } // if(!session()->has('currency_symbol_position')){ // $currency_symbol_position = BusinessSetting::where(['key' => 'currency_symbol_position'])->first()->value; // session()->put('currency_symbol_position',$currency_symbol_position); // } $currency_symbol_position = BusinessSetting::where(['key' => 'currency_symbol_position'])->first()->value; return $currency_symbol_position == 'right' ? number_format($n, config('round_up_to_digit')).$suffix . ' ' . self::currency_symbol() : self::currency_symbol() . ' ' . number_format($n, config('round_up_to_digit')).$suffix; } public static function gen_mpdf($view, $file_prefix, $file_postfix) { $mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/../../storage/tmp','default_font' => 'FreeSerif', 'mode' => 'utf-8', 'format' => [190, 250]]); /* $mpdf->AddPage('XL', '', '', '', '', 10, 10, 10, '10', '270', '');*/ $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; $mpdf_view = $view; $mpdf_view = $mpdf_view->render(); $mpdf->WriteHTML($mpdf_view); $mpdf->Output($file_prefix . $file_postfix . '.pdf', 'D'); } public static function export_expense_wise_report($collection){ $data = []; foreach($collection as $key=>$item){ if(isset($item->order->customer)){ $customer_name= $item->order->customer->f_name.' '.$item->order->customer->l_name; } $data[] = [ 'SL'=>$key+1, translate('messages.order_id') => $item['order_id'], translate('messages.expense_date') => $item['created_at']->format('Y/m/d ' . config('timeformat')), translate('messages.type') => str::title( str_replace('_', ' ', $item['type'])), translate('messages.customer_name') => $customer_name, translate('messages.amount') => $item['amount'], ]; } return $data; } public static function product_tax($price , $tax, $is_include=false){ $price_tax = ($price * $tax) / (100 + ($is_include?$tax:0)) ; return $price_tax; } public static function dm_wallet_transaction($delivery_man_id, $amount, $referance = null, $type = 'dm_admin_bonus') { if (!$dmwallet = DeliveryManWallet::firstOrNew(['delivery_man_id' => $delivery_man_id])) return false; $wallet_transaction = new WalletTransaction(); $wallet_transaction->transaction_id = Str::uuid(); $wallet_transaction->reference = $referance; $wallet_transaction->transaction_type = $type; $wallet_transaction->admin_bonus = $amount; $wallet_transaction->credit = $amount; $wallet_transaction->debit = 0; $wallet_transaction->balance = $dmwallet->total_earning + $amount; $wallet_transaction->created_at = now(); $wallet_transaction->updated_at = now(); $wallet_transaction->delivery_man_id = $delivery_man_id; try { DB::beginTransaction(); $wallet_transaction->save(); $dmwallet->total_earning = $dmwallet->total_earning + $amount; $dmwallet->save(); Helpers::expenseCreate($amount,$type,now(),$order_id=null,$created_by='admin',$restaurant_id=null,$description='',$delivery_man_id); DB::commit(); return true; } catch (Exception $ex) { DB::rollBack(); info(['dm_wallet_transaction_error', 'code' => $ex->getLine(), 'message' => $ex->getMessage()]); return false; } } public static function get_subscription_schedules($type, $startDate, $endDate, $days) { $arrayOfDate = []; $startDate = Carbon::parse($startDate); $endDate = Carbon::parse($endDate); $days = $type != 'daily' ? array_column($days, 'time', 'day') : $days; for ($date = $startDate; $date->lte($endDate); $date->addDay()) { if($type == 'weekly'){ if(isset($days[$date->weekday()])){ $arrayOfDate[] = $date->format('Y-m-d ').$days[$date->weekday()]; } }elseif($type == 'monthly'){ if(isset($days[$date->day])){ $arrayOfDate[] = $date->format('Y-m-d ').$days[$date->day]; } }else{ $arrayOfDate[] = $date->format('Y-m-d ').$days[0]['itme']; } } return $arrayOfDate; } public static function visitor_log($model,$user_id,$visitor_log_id,$order_count=false){ if( $model == 'restaurant' ){ $visitor_log_type = 'App\Models\Restaurant'; } else { $visitor_log_type = 'App\Models\Category'; } VisitorLog::updateOrInsert( ['visitor_log_type' => $visitor_log_type, 'user_id' => $user_id, 'visitor_log_id' => $visitor_log_id, ], [ 'visit_count' => $order_count == false ? DB::raw('visit_count + 1') : DB::raw('visit_count'), 'order_count' => $order_count == true ? DB::raw('order_count + 1') : DB::raw('order_count'), 'created_at' => now(), 'updated_at' => now(), ] ); return; } public static function getLanguageCode(string $country_code): string { $locales = array( 'en-English(default)', 'af-Afrikaans', 'sq-Albanian - shqip', 'am-Amharic - አማርኛ', 'ar-Arabic - العربية', 'an-Aragonese - aragonés', 'hy-Armenian - հայերեն', 'ast-Asturian - asturianu', 'az-Azerbaijani - azərbaycan dili', 'eu-Basque - euskara', 'be-Belarusian - беларуская', 'bn-Bengali - বাংলা', 'bs-Bosnian - bosanski', 'br-Breton - brezhoneg', 'bg-Bulgarian - български', 'ca-Catalan - català', 'ckb-Central Kurdish - کوردی (دەستنوسی عەرەبی)', 'zh-Chinese - 中文', 'zh-HK-Chinese (Hong Kong) - 中文(香港)', 'zh-CN-Chinese (Simplified) - 中文(简体)', 'zh-TW-Chinese (Traditional) - 中文(繁體)', 'co-Corsican', 'hr-Croatian - hrvatski', 'cs-Czech - čeština', 'da-Danish - dansk', 'nl-Dutch - Nederlands', 'en-AU-English (Australia)', 'en-CA-English (Canada)', 'en-IN-English (India)', 'en-NZ-English (New Zealand)', 'en-ZA-English (South Africa)', 'en-GB-English (United Kingdom)', 'en-US-English (United States)', 'eo-Esperanto - esperanto', 'et-Estonian - eesti', 'fo-Faroese - føroyskt', 'fil-Filipino', 'fi-Finnish - suomi', 'fr-French - français', 'fr-CA-French (Canada) - français (Canada)', 'fr-FR-French (France) - français (France)', 'fr-CH-French (Switzerland) - français (Suisse)', 'gl-Galician - galego', 'ka-Georgian - ქართული', 'de-German - Deutsch', 'de-AT-German (Austria) - Deutsch (Österreich)', 'de-DE-German (Germany) - Deutsch (Deutschland)', 'de-LI-German (Liechtenstein) - Deutsch (Liechtenstein) ', 'de-CH-German (Switzerland) - Deutsch (Schweiz)', 'el-Greek - Ελληνικά', 'gn-Guarani', 'gu-Gujarati - ગુજરાતી', 'ha-Hausa', 'haw-Hawaiian - ʻŌlelo Hawaiʻi', 'he-Hebrew - עברית', 'hi-Hindi - हिन्दी', 'hu-Hungarian - magyar', 'is-Icelandic - íslenska', 'id-Indonesian - Indonesia', 'ia-Interlingua', 'ga-Irish - Gaeilge', 'it-Italian - italiano', 'it-IT-Italian (Italy) - italiano (Italia)', 'it-CH-Italian (Switzerland) - italiano (Svizzera)', 'ja-Japanese - 日本語', 'kn-Kannada - ಕನ್ನಡ', 'kk-Kazakh - қазақ тілі', 'km-Khmer - ខ្មែរ', 'ko-Korean - 한국어', 'ku-Kurdish - Kurdî', 'ky-Kyrgyz - кыргызча', 'lo-Lao - ລາວ', 'la-Latin', 'lv-Latvian - latviešu', 'ln-Lingala - lingála', 'lt-Lithuanian - lietuvių', 'mk-Macedonian - македонски', 'ms-Malay - Bahasa Melayu', 'ml-Malayalam - മലയാളം', 'mt-Maltese - Malti', 'mr-Marathi - मराठी', 'mn-Mongolian - монгол', 'ne-Nepali - नेपाली', 'no-Norwegian - norsk', 'nb-Norwegian Bokmål - norsk bokmål', 'nn-Norwegian Nynorsk - nynorsk', 'oc-Occitan', 'or-Oriya - ଓଡ଼ିଆ', 'om-Oromo - Oromoo', 'ps-Pashto - پښتو', 'fa-Persian - فارسی', 'pl-Polish - polski', 'pt-Portuguese - português', 'pt-BR-Portuguese (Brazil) - português (Brasil)', 'pt-PT-Portuguese (Portugal) - português (Portugal)', 'pa-Punjabi - ਪੰਜਾਬੀ', 'qu-Quechua', 'ro-Romanian - română', 'mo-Romanian (Moldova) - română (Moldova)', 'rm-Romansh - rumantsch', 'ru-Russian - русский', 'gd-Scottish Gaelic', 'sr-Serbian - српски', 'sh-Serbo-Croatian - Srpskohrvatski', 'sn-Shona - chiShona', 'sd-Sindhi', 'si-Sinhala - සිංහල', 'sk-Slovak - slovenčina', 'sl-Slovenian - slovenščina', 'so-Somali - Soomaali', 'st-Southern Sotho', 'es-Spanish - español', 'es-AR-Spanish (Argentina) - español (Argentina)', 'es-419-Spanish (Latin America) - español (Latinoamérica) ', 'es-MX-Spanish (Mexico) - español (México)', 'es-ES-Spanish (Spain) - español (España)', 'es-US-Spanish (United States) - español (Estados Unidos) ', 'su-Sundanese', 'sw-Swahili - Kiswahili', 'sv-Swedish - svenska', 'tg-Tajik - тоҷикӣ', 'ta-Tamil - தமிழ்', 'tt-Tatar', 'te-Telugu - తెలుగు', 'th-Thai - ไทย', 'ti-Tigrinya - ትግርኛ', 'to-Tongan - lea fakatonga', 'tr-Turkish - Türkçe', 'tk-Turkmen', 'tw-Twi', 'uk-Ukrainian - українська', 'ur-Urdu - اردو', 'ug-Uyghur', 'uz-Uzbek - o‘zbek', 'vi-Vietnamese - Tiếng Việt', 'wa-Walloon - wa', 'cy-Welsh - Cymraeg', 'fy-Western Frisian', 'xh-Xhosa', 'yi-Yiddish', 'yo-Yoruba - Èdè Yorùbá', 'zu-Zulu - isiZulu', ); foreach ($locales as $locale) { $locale_region = explode('-',$locale); if ($country_code == $locale_region[0]) { return $locale_region[0]; } } return "en"; } public static function auto_translator($q, $sl, $tl) { $res = file_get_contents("https://translate.googleapis.com/translate_a/single?client=gtx&ie=UTF-8&oe=UTF-8&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&sl=" . $sl . "&tl=" . $tl . "&hl=hl&q=" . urlencode($q), $_SERVER['DOCUMENT_ROOT'] . "/transes.html"); $res = json_decode($res); return str_replace('_',' ',$res[0][0][0]); } public static function language_load() { if (\session()->has('language_settings')) { $language = \session('language_settings'); } else { $language = BusinessSetting::where('key', 'system_language')->first(); \session()->put('language_settings', $language); } return $language; } public static function vendor_language_load() { if (\session()->has('vendor_language_settings')) { $language = \session('vendor_language_settings'); } else { $language = BusinessSetting::where('key', 'system_language')->first(); \session()->put('vendor_language_settings', $language); } return $language; } public static function create_subscription_order_logs() { $order_schedule_day=now()->dayOfWeek; $o=Order::HasSubscriptionTodayGet()->with(['restaurant.schedule_today','subscription.schedule_today'])->whereHas('restaurant.schedules',function ($q)use($order_schedule_day){ $q->where('day',$order_schedule_day); }) ->get(); foreach($o as $order){ foreach($order->restaurant->schedule_today as $rest_sh){ if(Carbon::parse($rest_sh->opening_time) <= Carbon::parse($order->subscription->schedule_today->time) && Carbon::parse($rest_sh->closing_time) >= Carbon::parse($order->subscription->schedule_today->time) ){ OrderLogic::create_subscription_log($order->id); } } } return true; } public static function landing_language_load() { if (\session()->has('landing_language_settings')) { $language = \session('landing_language_settings'); } else { $language = BusinessSetting::where('key', 'system_language')->first(); \session()->put('landing_language_settings', $language); } return $language; } public static function apple_client_secret(){ // Set up the necessary variables $keyId = 'U7KA7F82UM'; $teamId = '7WSYLQ8Y87'; $clientId = 'com.sixamtech.sixamMartApp'; $privateKey = file_get_contents('AuthKey_U7KA7F82UM.p8'); // Should be a string containing the contents of the private key file. // Create the JWT header $header = [ 'alg' => 'ES256', 'kid' => $keyId, ]; // Create the JWT payload $payload = [ 'iss' => $teamId, 'iat' => time(), 'exp' => time() + 86400 * 180, // 180 days in seconds 'aud' => 'https://appleid.apple.com', 'sub' => $clientId, ]; // Encode the JWT header and payload $base64Header = base64_encode(json_encode($header)); $base64Payload = base64_encode(json_encode($payload)); // Create the signature using the private key and the SHA-256 algorithm $dataToSign = $base64Header . '.' . $base64Payload; $signature = ''; openssl_sign($dataToSign, $signature, $privateKey, 'sha256'); // Encode the signature $base64Signature = base64_encode($signature); // Create the Apple Client Secret key $clientSecret = $base64Header . '.' . $base64Payload . '.' . $base64Signature; // Output the key return $clientSecret; } }