uawdijnntqw1x1x1
IP : 216.73.216.93
Hostname : panel.codeskitter.com
Kernel : Linux panel.codeskitter.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
Disable Function : apache_child_terminate, apache_note, apache_setenv, define_syslog_variables, dl, link, opcache_get_status, openlog, pcntl_exec, pcntl_fork, pcntl_setpriority, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid
OS : Linux
PATH:
/
home
/
users
/
unlimited
/
www
/
admin.priyotama.com
/
app
/
CentralLogics
/
helpers.php
/
/
<?php namespace App\CentralLogics; use App\Models\VendorEmployee; use DateTime; use App\Models\Tag; use App\Models\Item; use App\Models\User; use App\Models\Zone; use App\Models\AddOn; use App\Models\Order; use App\Models\Store; use App\Library\Payer; use App\Models\Module; use App\Models\Review; use App\Models\Allergy; use App\Models\Expense; use App\Traits\Payment; use App\Mail\PlaceOrder; use App\Models\CashBack; use App\Models\Category; use App\Models\Currency; use App\Models\DMReview; use App\Library\Receiver; use App\Models\Nutrition; use App\Models\DataSetting; use App\Models\GenericName; use App\Models\StoreWallet; use App\Models\Translation; use Illuminate\Support\Str; use mysql_xdevapi\Exception; use PayPal\Api\Transaction; use App\Models\ItemCampaign; use App\Models\FlashSaleItem; use Illuminate\Support\Carbon; use App\Models\BusinessSetting; use App\Models\UserNotification; use App\CentralLogics\StoreLogic; use App\Models\StoreSubscription; use Illuminate\Support\Facades\DB; use App\Mail\OrderVerificationMail; use App\Models\NotificationMessage; use App\Models\NotificationSetting; use App\Models\SubscriptionPackage; use App\Traits\PaymentGatewayTrait; use Illuminate\Support\Facades\App; use App\Mail\SubscriptionSuccessful; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Mail; use App\Models\ExternalConfiguration; use Illuminate\Support\Facades\Cache; use App\Mail\SubscriptionRenewOrShift; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Schema; use App\Library\Payment as PaymentInfo; use App\Models\PriorityList; use App\Models\SubscriptionTransaction; use Illuminate\Support\Facades\Storage; use App\Models\StoreNotificationSetting; use Modules\Rental\Traits\TripLogicTrait; use App\Traits\NotificationDataSetUpTrait; use Illuminate\Database\Eloquent\Collection; use MatanYadaev\EloquentSpatial\Objects\Point; use App\Models\SubscriptionBillingAndRefundHistory; use Modules\Rental\Emails\ProviderSubscriptionSuccessful; use Modules\Rental\Emails\ProviderSubscriptionRenewOrShift; use Laravelpkg\Laravelchk\Http\Controllers\LaravelchkController; use Modules\Rental\Entities\Vehicle; class Helpers { use PaymentGatewayTrait , NotificationDataSetUpTrait; public static function error_processor($validator) { $err_keeper = []; foreach ($validator->errors()->getMessages() as $index => $error) { array_push($err_keeper, ['code' => $index, 'message' => translate($error[0])]); } return $err_keeper; } 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, $variation) { $match = json_decode($variation, true)[0]; $result = ['price' => 0, 'stock' => 0]; foreach (json_decode($product['variations'], true) as $property => $value) { if ($value['type'] == $match['type']) { $result = ['price' => $value['price'], 'stock' => $value['stock'] ?? 0]; } } return $result; } public static function pos_variation_price($product, $variation) { $match = json_decode($variation, true); $result = ['price' => 0, 'stock' => 0]; foreach (json_decode($product['variations'], true) as $property => $value) { if ($value['type'] == $match['type']) { $result = ['price' => $value['price'], 'stock' => $value['stock'] ?? 0]; } } return $result; } public static function address_data_formatting($data) { foreach ($data as $key=>$item) { $data[$key]['zone_ids'] = array_column(Zone::query()->whereContains('coordinates', new Point($item->latitude, $item->longitude, POINT_SRID))->latest()->get(['id'])->toArray(), 'id'); } return $data; } public static function cart_product_data_formatting($data, $selected_variation, $selected_addons, $selected_addon_quantity,$trans = false, $local = 'en') { $variations = []; $categories = []; $category_ids = gettype($data['category_ids']) == 'array' ? $data['category_ids'] : json_decode($data['category_ids'],true); foreach ($category_ids as $value) { $category_name = Category::where('id',$value['id'])->pluck('name'); $categories[] = ['id' => (string)$value['id'], 'position' => $value['position'], 'name'=>data_get($category_name,'0','NA')]; } $data['category_ids'] = $categories; $attributes = gettype($data['attributes']) == 'array' ? $data['attributes'] : json_decode($data['attributes'],true); $data['attributes'] = $attributes; $choice_options = gettype($data['choice_options']) == 'array' ? $data['choice_options'] : json_decode($data['choice_options'],true); $data['choice_options'] = $choice_options; $add_ons = gettype($data['add_ons']) == 'array' ? $data['add_ons'] : json_decode($data['add_ons'],true); $data_addons = self::addon_data_formatting(AddOn::whereIn('id', $add_ons)->active()->get(), true, $trans, $local); $selected_data = array_combine($selected_addons, $selected_addon_quantity); foreach ($data_addons as $addon) { $addon_id = $addon['id']; if (in_array($addon_id, $selected_addons)) { $addon['isChecked'] = true; $addon['quantity'] = $selected_data[$addon_id]; } else { $addon['isChecked'] = false; $addon['quantity'] = 0; } } $data['addons'] = $data_addons; $data_variations = gettype($data['variations']) == 'array' ? $data['variations'] : json_decode($data['variations'],true); foreach ($data_variations as $var) { array_push($variations, [ 'type' => $var['type'], 'price' => (float)$var['price'], 'stock' => (int)($var['stock'] ?? 0) ]); } 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'] = $variations; $data_variation = $data['food_variations']?(gettype($data['food_variations']) == 'array' ? $data['food_variations'] : json_decode($data['food_variations'],true)):[]; if($data->module->module_type == 'food'){ foreach ($selected_variation as $selected_item) { foreach ($data_variation as &$all_item) { if ($selected_item["name"] === $all_item["name"]) { foreach ($all_item["values"] as &$value) { if (in_array($value["label"], $selected_item["values"]["label"])) { $value["isSelected"] = true; }else{ $value["isSelected"] = false; } } } } } } $data['food_variations'] = $data_variation; $data['store_name'] = $data->store->name; $data['is_campaign'] = $data->store?->campaigns_count>0?1:0; $data['module_type'] = $data->module->module_type; $data['zone_id'] = $data->store->zone_id; $running_flash_sale = FlashSaleItem::Active()->whereHas('flashSale', function ($query) { $query->Active()->Running(); }) ->where(['item_id' => $data['id']])->first(); $data['flash_sale'] =(int) (($running_flash_sale) ? 1 :0); $data['stock'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->available_stock : $data['stock']; $discount_data= self::product_discount_calculate($data, $data['price'], $data->store , true); $data['discount'] = $discount_data['discount_percentage']; $data['discount_type'] = $discount_data['original_discount_type']; $data['store_discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? 0 : (self::get_store_discount($data->store) ? $data->store?->discount->discount : 0); $data['schedule_order'] = $data->store->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['min_delivery_time'] = (int) explode('-',$data->store->delivery_time)[0] ?? 0; $data['max_delivery_time'] = (int) explode('-',$data->store->delivery_time)[1] ?? 0; $data['common_condition_id'] = (int) $data->pharmacy_item_details?->common_condition_id ?? 0; $data['brand_id'] = (int) $data->ecommerce_item_details?->brand_id ?? 0; $data['is_basic'] = (int) $data->pharmacy_item_details?->is_basic ?? 0; $data['is_prescription_required'] = (int) $data->pharmacy_item_details?->is_prescription_required ?? 0; $data['halal_tag_status'] = (int) $data->store->storeConfig?->halal_tag_status??0; $data['nutritions_name']= $data?->nutritions ? Nutrition::whereIn('id',$data?->nutritions->pluck('id') )->pluck('nutrition') : null; $data['allergies_name']= $data?->allergies ?Allergy::whereIn('id',$data?->allergies->pluck('id') )->pluck('allergy') : null; $data['generic_name']= $data?->generic ? GenericName::whereIn('id',$data?->generic->pluck('id') )->pluck('generic_name'): null ; unset($data['nutritions']); unset($data['allergies']); unset($data['generic']); unset($data['pharmacy_item_details']); unset($data['store']); unset($data['rating']); return $data; } public static function productListDataFormatting($data) { return collect($data)->map(function ($item) { $discount = self::product_discount_calculate($item, $item->price, $item->store, true); $module_type =$item->store?->module_type; $has_variant=$module_type=='food' ? $item->food_variations : $item->variations; $has_variant= is_string($has_variant) ? json_decode($has_variant, true) : $has_variant; $has_variant = is_array($has_variant) ? count($has_variant) : 0; return [ 'id' => (int) $item->id, 'name' => $item->title ?? $item->name, 'image_full_url' => $item->image_full_url, 'price' => $item->price, 'veg' => $item->veg, 'unit_type' => $item->unit_type, 'recommended' => $item->recommended, 'organic' => $item->organic, 'is_halal' => (int) $item->is_halal??0, 'stock' => (int) $item->stock??0, 'maximum_cart_quantity' => (int) $item->maximum_cart_quantity??0, 'discount' => $discount['discount_percentage'], 'discount_type' => $discount['original_discount_type'], 'rating_count' => (int) ($item->rating ? array_sum(json_decode($item->rating, true)) : 0), 'avg_rating' => (float) ($item->avg_rating ?? 0), 'has_variant' => (int) $has_variant, 'available_time_starts' => ($item->start_time instanceof \Carbon\Carbon) ? $item->start_time->format('H:i') : ($item->available_time_starts ?? null), 'available_time_ends' => ($item->end_time instanceof \Carbon\Carbon) ? $item->end_time->format('H:i') : ($item->available_time_ends ?? null), 'halal_tag_status' => (int) $item->store->storeConfig?->halal_tag_status??0, 'store_name' => $item->store?->name, 'store_id' => $item->store?->id, 'module_type' => $module_type, 'halal_tag_status' => (int) ($item->store->storeConfig->halal_tag_status ?? 0), 'free_delivery' => $item->store?->free_delivery, ]; })->toArray(); } public static function product_data_formatting($data, $multi_data = false, $trans = false, $local = 'en' , $temp_product=false) { $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) { $category_name = Category::where('id',$value->id)->pluck('name'); $categories[] = ['id' => (string)$value->id, 'position' => $value->position, 'name'=>data_get($category_name,'0','NA')]; } $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::whereIn('id', json_decode($item['add_ons'], true))->active()->get(), true, $trans, $local); foreach (json_decode($item['variations'], true)?? [] as $var) { array_push($variations, [ 'type' => $var['type'], 'price' => (float)$var['price'], 'stock' => (int)($var['stock'] ?? 0) ]); } $item['variations'] = $variations; $item['food_variations'] = $item['food_variations']?json_decode($item['food_variations'], true):''; $item['module_type'] = $item->module->module_type; $item['store_name'] = $item->store?->name; $item['is_campaign'] = $item->store?->campaigns_count>0?1:0; $item['zone_id'] = $item->store?->zone_id; $running_flash_sale = FlashSaleItem::Active()->whereHas('flashSale', function ($query) { $query->Active()->Running(); }) ->where(['item_id' => $item['id']])->first(); $item['flash_sale'] =(int) ((($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? 1 :0)); $item['stock'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->available_stock : $item['stock']; $discount_data= self::product_discount_calculate($item, $item['price'], $item->store , true); $item['discount'] = $discount_data['discount_percentage']; $item['discount_type'] = $discount_data['original_discount_type']; $item['store_discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? 0 : (self::get_store_discount($item->store) ? $item->store?->discount->discount : 0); $item['schedule_order'] = $item->store?->schedule_order; $item['delivery_time'] = $item->store?->delivery_time; $item['free_delivery'] = $item->store?->free_delivery; $item['tax'] = 0; $item['unit'] = $item->unit; $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); $item['recommended'] =(int) $item->recommended; $item['min_delivery_time'] = (int) explode('-',$item?->store?->delivery_time)[0] ?? 0; $item['max_delivery_time'] = (int) explode('-',$item?->store?->delivery_time)[1] ?? 0; $item['common_condition_id'] = (int) $item->pharmacy_item_details?->common_condition_id ?? 0; $item['brand_id'] = (int) $item->ecommerce_item_details?->brand_id ?? 0; $item['is_basic'] = (int) $item->pharmacy_item_details?->is_basic ?? 0; $item['is_prescription_required'] = (int) $item->pharmacy_item_details?->is_prescription_required ?? 0; $item['halal_tag_status'] = (int) $item->store->storeConfig?->halal_tag_status??0; $item->store['self_delivery_system'] = (int) $item->store->sub_self_delivery; $item['nutritions_name']= $item?->nutritions ? Nutrition::whereIn('id',$item?->nutritions->pluck('id') )->pluck('nutrition') : null; $item['allergies_name']= $item?->allergies ?Allergy::whereIn('id',$item?->allergies->pluck('id') )->pluck('allergy') : null; $item['generic_name']= $item?->generic ? GenericName::whereIn('id',$item?->generic->pluck('id') )->pluck('generic_name'): null ; $item['tax_data'] = $item?->taxVats ?$item?->taxVats()->pluck('tax_id')->toArray(): [] ; $item['tax_data']= \Modules\TaxModule\Entities\Tax::whereIn('id', $item['tax_data'])->get(['id', 'name', 'tax_rate']); unset($item['taxVats']); unset($item['nutritions']); unset($item['allergies']); unset($item['generic']); unset($item['pharmacy_item_details']); unset($item['store']); unset($item['rating']); array_push($storage, $item); } $data = $storage; } else { $variations = []; $categories = []; foreach (json_decode($data['category_ids']) as $value) { $category_name = Category::where('id',$value->id)->pluck('name'); $categories[] = ['id' => (string)$value->id, 'position' => $value->position, 'name'=>data_get($category_name,'0','NA')]; } $data['category_ids'] = $categories; $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); foreach (json_decode($data['variations'], true) as $var) { array_push($variations, [ 'type' => $var['type'], 'price' => (float)$var['price'], 'stock' => (int)($var['stock'] ?? 0) ]); } 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'] = $variations; $data['food_variations'] = $data['food_variations']?json_decode($data['food_variations'], true):''; $data['store_name'] = $data->store->name; $data['is_campaign'] = $data->store?->campaigns_count>0?1:0; $data['module_type'] = $data->module->module_type; $data['zone_id'] = $data->store->zone_id; $running_flash_sale = FlashSaleItem::Active()->whereHas('flashSale', function ($query) { $query->Active()->Running(); }) ->where(['item_id' => $data['id']])->first(); $data['flash_sale'] =(int) (($running_flash_sale) ? 1 :0); $data['stock'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->available_stock : $data['stock']; // $data['discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->discount : $data['discount']; // $data['discount_type'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->discount_type : $data['discount_type']; $discount_data= self::product_discount_calculate($data, $data['price'], $data->store , true); $data['discount'] = $discount_data['discount_percentage']; $data['discount_type'] = $discount_data['original_discount_type']; $data['store_discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? 0 : (self::get_store_discount($data->store) ? $data->store?->discount->discount : 0); $data['schedule_order'] = $data->store->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['min_delivery_time'] = (int) explode('-',$data->store->delivery_time)[0] ?? 0; $data['max_delivery_time'] = (int) explode('-',$data->store->delivery_time)[1] ?? 0; $data['common_condition_id'] = (int) $data->pharmacy_item_details?->common_condition_id ?? 0; $data['brand_id'] = (int) $data->ecommerce_item_details?->brand_id ?? 0; $data['is_basic'] = (int) $data->pharmacy_item_details?->is_basic ?? 0; $data['is_prescription_required'] = (int) $data->pharmacy_item_details?->is_prescription_required ?? 0; $data['halal_tag_status'] = (int) $data->store->storeConfig?->halal_tag_status??0; $data['nutritions_name']= $data?->nutritions ? Nutrition::whereIn('id',$data?->nutritions->pluck('id') )->pluck('nutrition') : null; $data['allergies_name']= $data?->allergies ?Allergy::whereIn('id',$data?->allergies->pluck('id') )->pluck('allergy') : null; $data['generic_name']= $data?->generic ? GenericName::whereIn('id',$data?->generic->pluck('id') )->pluck('generic_name'): null ; if($temp_product == true){ $data['tags']=Tag::whereIn('id',json_decode($data?->tag_ids) )->get(['tag','id']); $data['nutritions_data']=Nutrition::whereIn('id',json_decode($data?->nutrition_ids) )->get(['nutrition','id']); $data['allergies_data']=Allergy::whereIn('id',json_decode($data?->allergy_ids) )->get(['allergy','id']); $data['generic_name_data']=GenericName::whereIn('id',json_decode($data?->generic_ids) )->get(['generic_name','id']); } $data->store['self_delivery_system'] = (int) $data->store->sub_self_delivery; $data['tax_data'] = $data?->taxVats ?$data?->taxVats()->pluck('tax_id')->toArray(): [] ; $data['tax_data']= \Modules\TaxModule\Entities\Tax::whereIn('id', $data['tax_data'])->get(['id', 'name', 'tax_rate']); unset($data['taxVats']); unset($data['pharmacy_item_details']); unset($data['store']); unset($data['rating']); unset($data['nutritions']); unset($data['allergies']); unset($data['generic']); } return $data; } public static function product_data_formatting_translate($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'], true))->active()->get(), true, $trans, $local); foreach (json_decode($item['variations'], true) as $var) { array_push($variations, [ 'type' => $var['type'], 'price' => (float)$var['price'], 'stock' => (int)($var['stock'] ?? 0) ]); } $item['variations'] = $variations; $item['food_variations'] = $item['food_variations']?json_decode($item['food_variations'], true):''; $item['module_type'] = $item->module->module_type; $item['store_name'] = $item->store->name; $item['zone_id'] = $item->store->zone_id; $running_flash_sale = FlashSaleItem::Active()->whereHas('flashSale', function ($query) { $query->Active()->Running(); }) ->where(['item_id' => $item['id']])->first(); $item['flash_sale'] =(int) (($running_flash_sale) ? 1 :0); $item['stock'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->available_stock : $item['stock']; $item['discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->discount : $item['discount']; $item['discount_type'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->discount_type : $item['discount_type']; $item['store_discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? 0 : (self::get_store_discount($item->store) ? $item->store?->discount->discount : 0); $item['schedule_order'] = $item->store->schedule_order; $item['tax'] = 0; $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); $item['recommended'] =(int) $item->recommended; $item['common_condition_id'] = (int) $item->pharmacy_item_details?->common_condition_id ?? 0; $item['brand_id'] = (int) $item->ecommerce_item_details?->brand_id ?? 0; $item['is_basic'] = (int) $item->pharmacy_item_details?->is_basic ?? 0; $item['is_prescription_required'] = (int) $item->pharmacy_item_details?->is_prescription_required ?? 0; $item['halal_tag_status'] = (int) $item->store->storeConfig?->halal_tag_status??0; if ($trans) { $item['translations'][] = [ 'translationable_type' => 'App\Models\Item', 'translationable_id' => $item->id, 'locale' => 'en', 'key' => 'name', 'value' => $item->name ]; $item['translations'][] = [ 'translationable_type' => 'App\Models\Item', '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']); } $item['nutritions_name']= $item?->nutritions ? Nutrition::whereIn('id',$item?->nutritions->pluck('id') )->pluck('nutrition') : null; $item['allergies_name']= $item?->allergies ?Allergy::whereIn('id',$item?->allergies->pluck('id') )->pluck('allergy') : null; $item['generic_name']= $item?->generic ? GenericName::whereIn('id',$item?->generic->pluck('id') )->pluck('generic_name'): null ; $item['tax_ids']= $item?->taxVats ?$item?->taxVats()->pluck('tax_id')->toArray(): [] ; unset($item['taxVats']); unset($item['nutritions']); unset($item['allergies']); unset($item['generic']); unset($item['ecommerce_item_details']); unset($item['pharmacy_item_details']); unset($item['store']); 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['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); foreach (json_decode($data['variations'], true) as $var) { array_push($variations, [ 'type' => $var['type'], 'price' => (float)$var['price'], 'stock' => (int)($var['stock'] ?? 0) ]); } 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'] = $variations; $data['food_variations'] = $data['food_variations']?json_decode($data['food_variations'], true):''; $data['store_name'] = $data->store->name; $data['module_type'] = $data->module->module_type; $data['zone_id'] = $data->store->zone_id; $running_flash_sale = FlashSaleItem::Active()->whereHas('flashSale', function ($query) { $query->Active()->Running(); }) ->where(['item_id' => $data['id']])->first(); $data['flash_sale'] =(int) (($running_flash_sale) ? 1 :0); $data['stock'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->available_stock : $data['stock']; $data['discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->discount : $data['discount']; $data['discount_type'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? $running_flash_sale->discount_type : $data['discount_type']; $data['store_discount'] = ($running_flash_sale && ($running_flash_sale->available_stock > 0)) ? 0 : (self::get_store_discount($data->store) ? $data->store?->discount->discount : 0); $data['schedule_order'] = $data->store->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['common_condition_id'] = (int) $data->pharmacy_item_details?->common_condition_id ?? 0; $data['brand_id'] = (int) $data->ecommerce_item_details?->brand_id ?? 0; $data['is_basic'] = (int) $data->pharmacy_item_details?->is_basic ?? 0; $data['is_prescription_required'] = (int) $data->pharmacy_item_details?->is_prescription_required ?? 0; $data['halal_tag_status'] = (int) $data->store->storeConfig?->halal_tag_status??0; if ($trans) { $data['translations'][] = [ 'translationable_type' => 'App\Models\Item', 'translationable_id' => $data->id, 'locale' => 'en', 'key' => 'name', 'value' => $data->name ]; $data['translations'][] = [ 'translationable_type' => 'App\Models\Item', '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']; } } } } $data['nutritions_name']= $data?->nutritions ? Nutrition::whereIn('id',$data?->nutritions->pluck('id') )->pluck('nutrition') : null; $data['allergies_name']= $data?->allergies ?Allergy::whereIn('id',$data?->allergies->pluck('id') )->pluck('allergy') : null; $data['generic_name']= $data?->generic ? GenericName::whereIn('id',$data?->generic->pluck('id') )->pluck('generic_name'): null ; $data['tax_ids']= $data?->taxVats ?$data?->taxVats()->pluck('tax_id')->toArray(): [] ; unset($data['taxVats']); if (!$trans) { unset($data['translations']); } unset($data['nutritions']); unset($data['allergies']); unset($data['generic']); unset($data['ecommerce_item_details']); unset($data['pharmacy_item_details']); unset($data['store']); 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) { $item['tax_ids']= $item?->taxVats ?$item?->taxVats()->pluck('tax_id')->toArray(): [] ; unset($item['taxVats']); $storage[] = $item; } $data = $storage; } else if (isset($data)) { $item['tax_ids']= $data?->taxVats ?$data?->taxVats()->pluck('tax_id')->toArray(): [] ; unset($item['taxVats']); } 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']); } $storage[] = $item; } $data = $storage; } else if (isset($data)) { if (count($data->translations) > 0) { $data->name = $data->translations[0]['value']; } if (!$trans) { unset($data['translations']); } } return $data; } public static function parcel_category_data_formatting($data, $multi_data = false) { $storage = []; if ($multi_data == true) { foreach ($data as $item) { // if (count($item['translations']) > 0) { // $translate = array_column($item['translations']->toArray(), 'value', 'key'); // $item['name'] = $translate['name']; // $item['description'] = $translate['description']; // unset($item['translations']); // } array_push($storage, $item); } $data = $storage; } else { // if (count($data['translations']) > 0) { // $translate = array_column($data['translations']->toArray(), 'value', 'key'); // $data['title'] = $translate['title']; // $data['description'] = $translate['description']; // unset($data['translations']); // } } 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']); } 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']); } } return $data; } public static function store_data_formatting($data, $multi_data = false) { $storage = []; if ($multi_data == true) { foreach ($data as $item) { $item->load('storeConfig'); $ratings = StoreLogic::calculate_store_rating($item['rating']); $item['ratings'] = $item?->rating ?? []; unset($item['rating']); $item['avg_rating'] = $ratings['rating']; $item['rating_count'] = $ratings['total']; $item['positive_rating'] = $ratings['positive_rating']; $item['total_items'] = $item['items_count']; $item['total_campaigns'] = $item['campaigns_count']; $item['is_recommended'] = false; $item['halal_tag_status'] = (bool) $item?->storeConfig?->halal_tag_status; $extra_packaging_data = \App\Models\BusinessSetting::where('key', 'extra_packaging_data')->first()?->value ?? ''; $extra_packaging_data =json_decode($extra_packaging_data , true); $item['extra_packaging_status'] = (bool) (!empty($extra_packaging_data) && data_get($extra_packaging_data,$item->module->module_type)=='1')?$item?->storeConfig?->extra_packaging_status:false; $item['extra_packaging_amount'] = (float) (!empty($extra_packaging_data) && (data_get($extra_packaging_data,$item->module->module_type)=='1') && ($item?->storeConfig?->extra_packaging_status == '1'))?$item?->storeConfig?->extra_packaging_amount:0; if($item->storeConfig && $item->storeConfig->is_recommended_deleted == 0 ){ $item['is_recommended'] = $item->storeConfig->is_recommended; } $item['self_delivery_system'] = (int) $item->sub_self_delivery; $item['current_opening_time'] = self::getNextOpeningTime($item['schedules']) ?? 'closed'; unset($item['items_count']); unset($item['campaigns_count']); unset($item['storeConfig']); unset($item['campaigns']); unset($item['pivot']); array_push($storage, $item); } $data = $storage; } else { $data->load('storeConfig'); $data['is_recommended'] = false; $data['minimum_stock_for_warning'] = (int) $data?->storeConfig?->minimum_stock_for_warning ?? 0; $data['halal_tag_status'] = (bool) $data?->storeConfig?->halal_tag_status; $extra_packaging_data = \App\Models\BusinessSetting::where('key', 'extra_packaging_data')->first()?->value ?? ''; $extra_packaging_data =json_decode($extra_packaging_data , true); $data['extra_packaging_status'] = (bool) (!empty($extra_packaging_data) && data_get($extra_packaging_data ,$data?->module?->module_type))?$data?->storeConfig?->extra_packaging_status:false; $data['extra_packaging_amount'] = (float) (!empty($extra_packaging_data) && (data_get($extra_packaging_data ,$data?->module?->module_type)) && ($data?->storeConfig?->extra_packaging_status == '1'))?$data?->storeConfig?->extra_packaging_amount:0; if($data->storeConfig && $data->storeConfig->is_recommended_deleted == 0 ){ $data['is_recommended'] = $data->storeConfig->is_recommended; } $data['self_delivery_system'] = (int) $data->sub_self_delivery; $ratings = StoreLogic::calculate_store_rating($data['rating']); $data['ratings'] = $data?->rating ?? []; unset($data['rating']); $data['avg_rating'] = $ratings['rating']; $data['rating_count'] = $ratings['total']; $data['positive_rating'] = $ratings['positive_rating']; $data['total_items'] = $data['items_count']; $data['total_campaigns'] = $data['campaigns_count']; $data['current_opening_time'] = self::getNextOpeningTime($data['schedules']) ?? 'closed'; unset($data['items_count']); unset($data['campaigns_count']); unset($data['campaigns']); unset($data['storeConfig']); unset($data['pivot']); } return $data; } public static function wishlist_data_formatting($data, $multi_data = false) { $items = []; $stores = []; if ($multi_data == true) { foreach ($data as $temp) { if ($temp->item) { $items[] = self::product_data_formatting($temp->item, false, false, app()->getLocale()); } if ($temp->store) { $stores[] = self::store_data_formatting($temp->store); } } } else { if ($data->item) { $items[] = self::product_data_formatting($data->item, false, false, app()->getLocale()); } if ($data->store) { $stores[] = self::store_data_formatting($data->store); } } return ['item' => $items, 'store' => $stores]; } public static function order_data_formatting($data, $multi_data = false) { $storage = []; if ($multi_data) { foreach ($data as $item) { if (isset($item['store'])) { $item['store_name'] = $item['store']['name']; $item['store_address'] = $item['store']['address']; $item['store_phone'] = $item['store']['phone']; $item['store_lat'] = $item['store']['latitude']; $item['store_lng'] = $item['store']['longitude']; $item['store_logo'] = $item['store']['logo']; $item['store_logo_full_url'] = $item['store']['logo_full_url']; $item['min_delivery_time'] = (int) explode('-',$item['store']['delivery_time'])[0] ?? 0; $item['max_delivery_time'] = (int) explode('-',$item['store']['delivery_time'])[1] ?? 0; $item['vendor_id'] = $item['store']['vendor_id']; $item['chat_permission'] = $item['store']['chat_permission']?? 0; $item['review_permission'] = $item['store']['review_permission'] ?? 0; $item['store_business_model'] = $item['store']['store_business_model']; unset($item['store']); } else { $item['store_name'] = null; $item['store_address'] = null; $item['store_phone'] = null; $item['store_lat'] = null; $item['store_lng'] = null; $item['store_logo'] = null; $item['store_logo_full_url'] = null; $item['min_delivery_time'] = null; $item['max_delivery_time'] = null; $item['vendor_id'] = null; $item['chat_permission'] = null; $item['review_permission'] = null; $item['store_business_model'] = null; } $item['item_campaign'] = 0; foreach ($item->details as $d) { if ($d->item_campaign_id != null) { $item['item_campaign'] = 1; } } $item['delivery_address'] = $item->delivery_address ? json_decode($item->delivery_address, true) : null; $item['details_count'] = (int)$item->details->count(); $item['min_delivery_time'] = $item->store ? (int)explode('-',$item->store?->delivery_time)[0] ?? 0:0; $item['max_delivery_time'] = $item->store ? (int)explode('-',$item->store?->delivery_time)[1] ?? 0:0; unset($item['details']); array_push($storage, $item); } $data = $storage; } else { if (isset($data['store'])) { $data['store_name'] = $data['store']['name']; $data['store_address'] = $data['store']['address']; $data['store_phone'] = $data['store']['phone']; $data['store_lat'] = $data['store']['latitude']; $data['store_lng'] = $data['store']['longitude']; $data['store_logo'] = $data['store']['logo']; $data['store_logo_full_url'] = $data['store']['logo_full_url']; $data['min_delivery_time'] = $data['store']?(int) explode('-',$data['store']['delivery_time'])[0] ?? 0:0; $data['max_delivery_time'] = $data['store']?(int) explode('-',$data['store']['delivery_time'])[1] ?? 0:0; $data['vendor_id'] = $data['store']['vendor_id']; $data['chat_permission'] = $data['store']['chat_permission']?? 0; $data['review_permission'] = $data['store']['review_permission'] ?? 0; $data['store_business_model'] = $data['store']['store_business_model']; unset($data['store']); } else { $data['store_name'] = null; $data['store_address'] = null; $data['store_phone'] = null; $data['store_lat'] = null; $data['store_lng'] = null; $data['store_logo'] = null; $data['store_logo_full_url'] = null; $data['min_delivery_time'] = null; $data['max_delivery_time'] = null; $item['vendor_id'] = null; $item['chat_permission'] = null; $item['review_permission'] = null; $item['store_business_model'] = null; } $data['item_campaign'] = 0; foreach ($data->details as $d) { if ($d->item_campaign_id != null) { $data['item_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'], true); $item['item_details'] = json_decode($item['item_details'], true); if ($item['item_id']){ $product = \App\Models\Item::where(['id' => $item['item_details']['id']])->first(); $item['image_full_url'] = $product?->image_full_url; $item['images_full_url'] = $product->images_full_url; }else{ $product = \App\Models\ItemCampaign::where(['id' => $item['item_details']['id']])->first(); $item['image_full_url'] = $product?->image_full_url; $item['images_full_url'] = []; } array_push($storage, $item); } $data = $storage; return $data; } public static function deliverymen_list_formatting($data) { $storage = []; foreach ($data as $item) { $storage_type = 'public'; if ($item->storage && count($item->storage) > 0) { foreach ($item->storage as $value) { if ($value['key'] == 'image') { $storage_type = $value['value']; } } } $storage[] = [ 'id' => $item['id'], 'name' => $item['f_name'] . ' ' . $item['l_name'], 'image' => $item['image'], 'assigned_order_count' => $item['assigned_order_count'], '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 : '', 'storage' => $storage_type, 'image_link' => $item['image_full_url'], 'image_full_url' => $item['image_full_url'], ]; } $data = $storage; 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) // { // $config = null; // $settings = Cache::rememberForever("business_settings_all_data", function () { // return BusinessSetting::all(); // }); // $data = $settings?->firstWhere('key', $name); // if (isset($data)) { // $config = json_decode($data['value'], true); // if (is_null($config)) { // $config = $data['value']; // } // } // return $config; // } public static function get_business_settings($key, $json_decode = true,$relations = []) { try { static $allSettings = null; $configKey = $key . '_conf'; if (Config::has($configKey)) { $data = Config::get($configKey); } else { if (is_null($allSettings)) { $allSettings = Cache::rememberForever('business_settings_all_data', function () { return BusinessSetting::select('key', 'value')->get(); }); } $data = $allSettings->firstWhere('key', $key); if ($data && !empty($relations)) { $data->loadMissing($relations); } Config::set($configKey, $data); } if (!isset($data['value'])) { return null; } $value = $data['value']; if ($json_decode && is_string($value)) { $decoded = json_decode($value, true); return is_null($decoded) ? $value : $decoded; } return $value; } catch (\Throwable $th) { return null; } } public static function getPriorityList($name,$type, $relations = [],$json_decode=false) { try { static $allSettings = null; $configKey = $name.'_'.$type . '_conf'; if (Config::has($configKey)) { $data = Config::get($configKey); } else { if (is_null($allSettings)) { $allSettings = Cache::rememberForever('priority_settings_all_data', function () { return PriorityList::select('name', 'value','type')->get(); }); } $data = $allSettings->where('name', $name)->where('type', $type)->first(); if ($data && !empty($relations)) { $data->loadMissing($relations); } Config::set($configKey, $data); } if (!isset($data['value'])) { return null; } $value = $data['value']; if ($json_decode && is_string($value)) { $decoded = json_decode($value, true); return is_null($decoded) ? $value : $decoded; } return $value; } catch (\Throwable $th) { return null; } } public static function get_business_data($name) { $config = null; $businessData = BusinessSetting::where('key', $name)->first(); if ($businessData) { $config = $businessData->value; } return $config; } public static function get_external_data($name) { $config = null; $paymentmethod = ExternalConfiguration::where('key', $name)->first(); if ($paymentmethod) { $config = $paymentmethod?->value; } return $config; } public static function currency_code() { if (!config('currency') ){ $currency = BusinessSetting::where(['key' => 'currency'])->first()?->value; Config::set('currency', $currency ); } else{ $currency = config('currency'); } return $currency; } public static function currency_symbol() { if (!config('currency_symbol') ){ $currency_symbol = Currency::where(['currency_code' => Helpers::currency_code()])->first()?->currency_symbol; Config::set('currency_symbol', $currency_symbol ); } else{ $currency_symbol =config('currency_symbol'); } return $currency_symbol ; } public static function format_currency($value) { if (!config('currency_symbol_position') ){ $currency_symbol_position = BusinessSetting::where(['key' => 'currency_symbol_position'])->first()?->value; Config::set('currency_symbol_position', $currency_symbol_position ); } else{ $currency_symbol_position =config('currency_symbol_position'); } 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 sendNotificationToHttp(array|null $data) { $config = self::get_business_settings('push_notification_service_file_content'); $key = (array)$config; if(data_get($key,'project_id')){ $url = 'https://fcm.googleapis.com/v1/projects/'.$key['project_id'].'/messages:send'; $headers = [ 'Authorization' => 'Bearer ' . self::getAccessToken($key), 'Content-Type' => 'application/json', ]; try { Http::withHeaders($headers)->post($url, $data); }catch (\Exception $exception){ return false; } } return false; } public static function getAccessToken($key) { $jwtToken = [ 'iss' => $key['client_email'], 'scope' => 'https://www.googleapis.com/auth/firebase.messaging', 'aud' => 'https://oauth2.googleapis.com/token', 'exp' => time() + 3600, 'iat' => time(), ]; $jwtHeader = base64_encode(json_encode(['alg' => 'RS256', 'typ' => 'JWT'])); $jwtPayload = base64_encode(json_encode($jwtToken)); $unsignedJwt = $jwtHeader . '.' . $jwtPayload; openssl_sign($unsignedJwt, $signature, $key['private_key'], OPENSSL_ALGO_SHA256); $jwt = $unsignedJwt . '.' . base64_encode($signature); $response = Http::asForm()->post('https://oauth2.googleapis.com/token', [ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'assertion' => $jwt, ]); return $response->json('access_token'); } public static function send_push_notif_to_device($fcm_token, $data, $web_push_link = null) { $conversation_id = $data['conversation_id'] ?? ''; $sender_type = $data['sender_type'] ?? ''; $module_id = $data['module_id'] ?? ''; $order_id = $data['order_id'] ?? ''; $trip_id = $data['trip_id'] ?? ''; $order_type = $data['order_type'] ?? ''; $data_id = $data['data_id'] ?? ''; $status = $data['status'] ?? ''; $advertisement_id = $data['advertisement_id'] ?? ''; $postData = [ 'message' => [ "token" => $fcm_token, "data" => [ "title" => (string)$data['title'], "body" => (string)$data['description'], "image" => (string)$data['image'], "order_id" => (string)$order_id, "trip_id" => (string)$trip_id, "status" => (string)$status, "type" => (string)$data['type'], "data_id" => (string)$data_id, "advertisement_id" => (string)$advertisement_id, "conversation_id" => (string)$conversation_id, "module_id" => (string)$module_id, "sender_type" => (string)$sender_type, "order_type" => (string)$order_type, "click_action" => $web_push_link?(string)$web_push_link:'', "sound" => "notification.wav", ], "notification" => [ 'title' => (string)$data['title'], 'body' => (string)$data['description'], "image" => (string)$data['image'], ], "android" => [ "notification" => [ "channelId" => '6ammart', ] ], "apns" => [ "payload" => [ "aps" => [ "sound" => "notification.wav" ] ] ] ] ]; return self::sendNotificationToHttp($postData); } public static function send_push_notif_to_topic($data, $topic, $type,$web_push_link = null) { if(isset($data['module_id'])){ $module_id = $data['module_id']; }else{ $module_id = ''; } if(isset($data['order_type'])){ $order_type = $data['order_type']; }else{ $order_type = ''; } if(isset($data['zone_id'])){ $zone_id = $data['zone_id']; }else{ $zone_id = ''; } // $click_action = ""; // if($web_push_link){ // $click_action = ', // "click_action": "'.$web_push_link.'"'; // } if (isset($data['order_id'])) { $postData = [ 'message' => [ "topic" => $topic, "data" => [ "title" => (string)$data['title'], "body" => (string)$data['description'], "order_id" => (string)$data['order_id'], "order_type" => (string)$order_type, "type" => (string)$type, "image" => (string)$data['image'], "module_id" => (string)$module_id, "zone_id" => (string)$zone_id, "title_loc_key" => (string)$data['order_id'], "body_loc_key" => (string)$type, "click_action" => $web_push_link?(string)$web_push_link:'', "sound" => "notification.wav", ], "notification" => [ "title" => (string)$data['title'], "body" => (string)$data['description'], "image" => (string)$data['image'], ], "android" => [ "notification" => [ "channelId" => '6ammart', ] ], "apns" => [ "payload" => [ "aps" => [ "sound" => "notification.wav" ] ] ] ] ]; } else { $postData = [ 'message' => [ "topic" => $topic, "data" => [ "title" => (string)$data['title'], "body" => (string)$data['description'], "type" => (string)$type, "image" => (string)$data['image'], "body_loc_key" => (string)$type, "click_action" => $web_push_link?(string)$web_push_link:'', "sound" => "notification.wav", ], "notification" => [ "title" => (string)$data['title'], "body" => (string)$data['description'], "image" => (string)$data['image'], ], "android" => [ "notification" => [ "channelId" => '6ammart', ] ], "apns" => [ "payload" => [ "aps" => [ "sound" => "notification.wav" ] ] ] ] ]; } return self::sendNotificationToHttp($postData); } public static function rating_count($item_id, $rating) { return Review::where(['item_id' => $item_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($item, $price) { if ($item['tax_type'] == 'percent') { $price_tax = ($price / 100) * $item['tax']; } else { $price_tax = $item['tax']; } return $price_tax; } public static function discount_calculate($product, $price) { if ($product['store_discount']) { $price_discount = ($price / 100) * $product['store_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) { $store_discount = self::get_store_discount($product->store); if ($store_discount) { $discount = $store_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, $store , $check_store_discount = true) { $discount_percentage=0; $store_discount_percentage=0; $store_discount= null; $running_flash_sale = FlashSaleItem::Active()->whereHas('flashSale', function ($query) { $query->Active()->Running(); }) ->where(['item_id' => $product->id])->first(); if($running_flash_sale){ $discount_percentage=$running_flash_sale['discount']; if ($running_flash_sale['discount_type'] == 'percent') { $price_discount = ($price / 100) * $running_flash_sale['discount']; } else { $price_discount = $running_flash_sale['discount']; } return [ 'discount_type'=>'flash_sale', 'discount_amount'=> $price_discount, 'admin_discount_amount'=> ($price_discount*$running_flash_sale->flashSale->admin_discount_percentage)/100, 'vendor_discount_amount'=> ($price_discount*$running_flash_sale->flashSale->vendor_discount_percentage)/100, 'discount_percentage'=> $discount_percentage ?? 0, 'original_discount_type'=>$running_flash_sale['discount_type'], ]; } $store_price_discount=0; if($check_store_discount){ $store_discount = self::get_store_discount($store); if (isset($store_discount)) { $store_price_discount = ($price / 100) * $store_discount['discount']; $store_discount_percentage = $store_discount['discount']; } } $discount_percentage = $product['discount']; if ($product['discount_type'] == 'percent') { $price_discount = ($price / 100) * $product['discount']; } else { $price_discount = $product['discount']; } $discount_percentage=isset($store_discount) && $price_discount == $store_price_discount?$store_discount_percentage:$discount_percentage??0; $price_discount = max($store_price_discount,$price_discount); $discount_type=isset($store_discount) && $price_discount == $store_price_discount?'store_discount':'product_discount'; return [ 'discount_type'=>$discount_type, 'discount_amount'=> $price_discount, 'discount_percentage'=> $discount_type == 'store_discount'? $store_discount['discount'] :$product['discount'], 'original_discount_type'=> $discount_type == 'store_discount'? 'percent': $product['discount_type'], ]; } public static function get_price_range($product, $discount = false) { $lowest_price = $product->price; $highest_price = $product->price; if ($product->variations && is_array(json_decode($product['variations'], true))) { 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); } } } if ($discount) { $lowest_price -= self::product_discount_calculate($product, $lowest_price, $product->store)['discount_amount']; $highest_price -= self::product_discount_calculate($product, $highest_price, $product->store)['discount_amount']; } $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; } public static function get_food_price_range($product, $discount = false) { $lowest_price = $product->price; if ($discount) { $lowest_price -= self::product_discount_calculate($product, $lowest_price, $product->store)['discount_amount']; } $lowest_price = self::format_currency($lowest_price); return $lowest_price; } public static function get_store_discount($store) { if ($store?->discount) { if (date('Y-m-d', strtotime($store->discount->start_date)) <= now()->format('Y-m-d') && date('Y-m-d', strtotime($store->discount->end_date)) >= now()->format('Y-m-d') && date('H:i', strtotime($store->discount->start_time)) <= now()->format('H:i') && date('H:i', strtotime($store->discount->end_time)) >= now()->format('H:i')) { return [ 'discount' => $store->discount->discount, 'min_purchase' => $store->discount->min_purchase, 'max_discount' => $store->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,$module_type, $lang='en') { if ($status == 'pending') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_pending_message')->first(); } elseif ($status == 'confirmed') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_confirmation_msg')->first(); } elseif ($status == 'processing') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_processing_message')->first(); } elseif ($status == 'picked_up') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'out_for_delivery_message')->first(); } elseif ($status == 'handover') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_handover_message')->first(); } elseif ($status == 'delivered') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_delivered_message')->first(); } elseif ($status == 'delivery_boy_delivered') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'delivery_boy_delivered_message')->first(); } elseif ($status == 'accepted') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'delivery_boy_assign_message')->first(); } elseif ($status == 'canceled') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_cancled_message')->first(); } elseif ($status == 'refunded') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'order_refunded_message')->first(); } elseif ($status == 'refund_request_canceled') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'refund_request_canceled')->first(); } elseif ($status == 'offline_verified') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'offline_order_accept_message')->first(); } elseif ($status == 'offline_denied') { $data = NotificationMessage::with(['translations'=>function($query)use($lang){ $query->where('locale', $lang); }])->where('module_type',$module_type)->where('key', 'offline_order_deny_message')->first(); } else { $data = ["status"=>"0","message"=>"",'translations'=>[]]; } if($data){ if ($data['status'] == 0) { return 0; } return count($data->translations) > 0 ? $data->translations[0]->value : $data['message']; }else{ return false; } } public static function send_order_notification($order) { $push_notification_status = self::getNotificationStatusData('store','store_order_notification','push_notification_status', $order?->store?->id); try { if((in_array($order->payment_method, ['cash_on_delivery', 'offline_payment']) && $order->order_status == 'pending' ) || (!in_array($order->payment_method, ['cash_on_delivery', 'offline_payment']) && $order->order_status == 'confirmed' )){ $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'zone_id' => $order->zone_id, 'type' => 'new_order', ]; self::send_push_notif_to_topic($data, 'admin_message', 'order_request', url('/').'/admin/order/list/all'); } $status = ($order->order_status == 'delivered' && $order->delivery_man) ? 'delivery_boy_delivered' : $order->order_status; if($order->is_guest){ $customer_details = json_decode($order['delivery_address'],true); $value = self::order_status_update_message($status,$order->module->module_type,'en'); $value = self::text_variable_data_format(value:$value,store_name:$order->store?->name,order_id:$order->id,user_name:"{$customer_details['contact_person_name']}",delivery_man_name:"{$order->delivery_man?->f_name} {$order->delivery_man?->l_name}"); $user_fcm = $order->guest->fcm_token; }else{ $value = self::order_status_update_message($status,$order->module->module_type,$order->customer? $order->customer->current_language_key:'en'); $value = self::text_variable_data_format(value:$value,store_name:$order->store?->name,order_id:$order->id,user_name:"{$order->customer?->f_name} {$order->customer?->l_name}",delivery_man_name:"{$order->delivery_man?->f_name} {$order->delivery_man?->l_name}"); $user_fcm = $order?->customer?->cm_firebase_token; } if (self::getNotificationStatusData('customer','customer_order_notification','push_notification_status') && $value && $user_fcm) { $data = [ 'title' => translate('Order_Notification'), 'description' => $value, 'order_id' => $order->id, 'image' => '', 'type' => 'order_status', ]; self::send_push_notif_to_device($user_fcm, $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('Order_Notification'), 'description' => $value, 'order_id' => $order->id, 'image' => '', 'type' => 'order_status', ]; if($order->store && $order->store->vendor && $push_notification_status){ self::send_push_notif_to_device($order->store->vendor->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->store->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); self::sendStoreEmployeeNotification($order, $data); } } if ($order->order_type == 'delivery' && !$order->scheduled && $status == 'pending' && $order->payment_method == 'cash_on_delivery' && config('order_confirmation_model') == 'deliveryman') { if ($order->store->sub_self_delivery && $push_notification_status) { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'image' => '', 'type' => 'new_order', ]; if($order->store && $order->store->vendor && $push_notification_status){ self::send_push_notif_to_device($order->store->vendor->firebase_token, $data); $web_push_link = url('/').'/vendor-panel/order/list/all'; self::send_push_notif_to_topic($data, "store_panel_{$order->store_id}_message", 'new_order', $web_push_link); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->store->vendor_id, // 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'created_at' => now(), 'updated_at' => now() ]); self::sendStoreEmployeeNotification($order, $data); } } else { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'image' => '', ]; if($order->zone && self::getNotificationStatusData('deliveryman','deliveryman_order_notification','push_notification_status')){ if($order->dm_vehicle_id){ $topic = 'delivery_man_'.$order->zone_id.'_'.$order->dm_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'); } } // self::send_push_notif_to_topic($data, 'admin_message', 'order_request', url('/').'/admin/order/list/all'); } if ($order->order_type == 'parcel' && in_array($order->order_status, ['pending', 'confirmed'])) { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => 'parcel_order', 'image' => '', ]; if($order->zone && self::getNotificationStatusData('deliveryman','deliveryman_order_notification','push_notification_status')){ if($order->dm_vehicle_id){ $topic = 'delivery_man_'.$order->zone_id.'_'.$order->dm_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'); } // self::send_push_notif_to_topic($data, 'admin_message', 'order_request'); } if ($order->order_type == 'delivery' && !$order->scheduled && $order->order_status == 'pending' && $order->payment_method == 'cash_on_delivery' && config('order_confirmation_model') == 'store') { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'image' => '', 'type' => 'new_order', ]; if($order->store && $order->store->vendor && $push_notification_status){ self::send_push_notif_to_device($order->store->vendor->firebase_token, $data); $web_push_link = url('/').'/vendor-panel/order/list/all'; self::send_push_notif_to_topic($data, "store_panel_{$order->store_id}_message", 'new_order', $web_push_link); // self::send_push_notif_to_topic($data, 'admin_message', 'order_request'); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->store->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); self::sendStoreEmployeeNotification($order, $data); } } 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('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'image' => '', 'type' => 'new_order', ]; if($order->store && $order->store->vendor && $push_notification_status){ self::send_push_notif_to_device($order->store->vendor->firebase_token, $data); $web_push_link = url('/').'/vendor-panel/order/list/all'; self::send_push_notif_to_topic($data, "store_panel_{$order->store_id}_message", 'new_order', $web_push_link); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->store->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); self::sendStoreEmployeeNotification($order, $data); } } if ($order->order_status == 'confirmed' && $order->order_type != 'take_away' && config('order_confirmation_model') == 'deliveryman' && $order->payment_method == 'cash_on_delivery') { if ($order->store->sub_self_delivery && $push_notification_status) { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'image' => '', ]; self::send_push_notif_to_topic($data, "restaurant_dm_" . $order->store_id, 'new_order',null); } else { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'image' => '', 'type' => 'new_order', ]; if($order->store && $order->store->vendor && $push_notification_status){ self::send_push_notif_to_device($order->store->vendor->firebase_token, $data); $web_push_link = url('/').'/vendor-panel/order/list/all'; self::send_push_notif_to_topic($data, "store_panel_{$order->store_id}_message", 'new_order', $web_push_link); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $order->store->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); self::sendStoreEmployeeNotification($order, $data); } } } if ($order->order_type == 'delivery' && !$order->scheduled && $order->order_status == 'confirmed' && ($order->payment_method != 'cash_on_delivery' || config('order_confirmation_model') == 'store')) { $data = [ 'title' => translate('Order_Notification'), 'description' => translate('messages.new_order_push_description'), 'order_id' => $order->id, 'module_id' => $order->module_id, 'order_type' => $order->order_type, 'image' => '', ]; if ($order->store->sub_self_delivery && $push_notification_status) { self::send_push_notif_to_topic($data, "restaurant_dm_" . $order->store_id, 'order_request',null); } else {if($order->zone && self::getNotificationStatusData('deliveryman','deliveryman_order_notification','push_notification_status')){ if($order->dm_vehicle_id){ $topic = 'delivery_man_'.$order->zone_id.'_'.$order->dm_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 && self::getNotificationStatusData('deliveryman','deliveryman_order_notification','push_notification_status')) { $data = [ 'title' => translate('Order_Notification'), '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') && Helpers::get_mail_status('place_order_mail_status_user') == '1' && $order->is_guest == 0 && Helpers::getNotificationStatusData('customer','customer_order_notification','mail_status')) { Mail::to($order->customer->email)->send(new PlaceOrder($order->id)); } $order_verification_mail_status = Helpers::get_mail_status('order_verification_mail_status_user'); if ($order->order_status == 'pending' && config('order_delivery_verification') == 1 && config('mail.status') && $order_verification_mail_status == '1' && $order->is_guest == 0 && Helpers::getNotificationStatusData('customer','customer_delivery_verification','mail_status')) { Mail::to($order->customer->email)->send(new OrderVerificationMail($order->otp,$order->customer->f_name)); } } catch (\Exception $ex) { info($ex->getMessage()); } return true; } catch (\Exception $e) { info($e->getMessage()); } 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_store_id() { if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user()->store->id; } return auth('vendor')->user()->stores[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_store_data() { if (auth('vendor_employee')->check()) { return auth('vendor_employee')->user()->store; } return auth('vendor')->user()->stores[0]; } public static function getDisk() { $config=\App\CentralLogics\Helpers::get_business_settings('local_storage'); return isset($config)?($config==0?'s3':'public'):'public'; } public static function upload(string $dir, string $format, $image = null) { try { if ($image != null) { $imageName = \Carbon\Carbon::now()->toDateString() . "-" . uniqid() . "." . $format; if (!Storage::disk(self::getDisk())->exists($dir)) { Storage::disk(self::getDisk())->makeDirectory($dir); } Storage::disk(self::getDisk())->putFileAs($dir, $image, $imageName); } else { $imageName = 'def.png'; } } catch (\Exception $e) { } return $imageName; } public static function update(string $dir, $old_image, string $format, $image = null) { if ($image == null) { return $old_image; } try { if (Storage::disk(self::getDisk())->exists($dir . $old_image)) { Storage::disk(self::getDisk())->delete($dir . $old_image); } } catch (\Exception $e) { } $imageName = Helpers::upload($dir, $format, $image); return $imageName; } public static function check_and_delete(string $dir, $old_image) { try { if (Storage::disk('public')->exists($dir . $old_image)) { Storage::disk('public')->delete($dir . $old_image); } if (Storage::disk('s3')->exists($dir . $old_image)) { Storage::disk('s3')->delete($dir . $old_image); } } catch (\Exception $e) { } return true; } public static function format_coordiantes($coordinates) { $data = []; foreach ($coordinates as $coord) { $data[] = (object)['lat' => $coord[1], 'lng' => $coord[0]]; } 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()->stores[0]->reviews_section; } else if ($mod_name == 'deliveryman' || $mod_name == 'deliveryman_list') { return auth('vendor')->user()->stores[0]->self_delivery_system; } else if ($mod_name == 'pos') { return auth('vendor')->user()->stores[0]->pos_system; } else if ($mod_name == 'addon') { return config('module.' . auth('vendor')->user()->stores[0]->module->module_type)['add_on']; } 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()->store->reviews_section; } else if ($mod_name == 'deliveryman'|| $mod_name == 'deliveryman_list') { return auth('vendor_employee')->user()->store->self_delivery_system; } else if ($mod_name == 'pos') { return auth('vendor_employee')->user()->store->pos_system; } else if ($mod_name == 'addon') { return config('module.' . auth('vendor_employee')->user()->store->module->module_type)['add_on']; } 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,'category_id'=>$addon->addon_category_id]; $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() { $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) { Helpers::businessUpdateOrInsert(['key' => $key], [ 'value' => $value, 'created_at' => now(), 'updated_at' => now(), ]); } return true; } public static function insert_data_settings_key($key,$type, $value = null) { $data = DataSetting::where('key', $key)->where('type', $type)->first(); if (!$data) { DataSetting::updateOrCreate(['key' => $key,'type' => $type ], [ '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_store_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 ( request()->is('admin*') && auth('admin')?->check() && session()->has('local')) { $lang = session('local'); }elseif (request()->is('vendor-panel/*') && (auth('vendor_employee')?->check() || auth('vendor')?->check()) && 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 system_default_language() { $languages = json_decode(\App\Models\BusinessSetting::where('key', 'system_language')->first()?->value); $lang = 'en'; foreach ($languages as $key => $language) { if($language->default){ $lang = $language->code; } } return $lang; } public static function system_default_direction() { $languages = json_decode(\App\Models\BusinessSetting::where('key', 'system_language')->first()?->value); $lang = 'en'; foreach ($languages as $key => $language) { if($language->default){ $lang = $language->direction; } } return $lang; } //Mail Config Check public static function remove_invalid_charcaters($str) { return str_ireplace(['\'', '"', ';', '<', '>'], ' ', $str); } //Generate referer code 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 generate_reset_password_code() { $code = strtoupper(Str::random(15)); if (self::reset_password_code_exists($code)) { return self::generate_reset_password_code(); } return $code; } public static function reset_password_code_exists($code) { return DB::table('password_resets')->where('token', '=', $code)->exists(); } 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 = session()->get('currency_symbol_position'); 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 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 export_store_withdraw($collection){ $data = []; $status = ['pending','approved','denied']; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.amount') => $item->amount, translate('messages.store') => isset($item->vendor) ? $item->vendor->stores[0]->name : '', translate('messages.request_time') => date('Y-m-d '.config('timeformat'),strtotime($item->created_at)), translate('messages.status') => isset($status[$item->approved])?translate("messages.".$status[$item->approved]):"", ]; } return $data; } public static function export_account_transaction($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.collect_from') => $item->store ? $item->store?->name : ($item->deliveryman ? $item->deliveryman->f_name . ' ' . $item->deliveryman->l_name : translate('messages.not_found')), translate('messages.type') => $item->from_type, translate('messages.received_at') => $item->created_at->format('Y-m-d '.config('timeformat')), translate('messages.amount') => $item->amount, translate('messages.reference') => $item->ref, ]; } return $data; } public static function export_dm_earning($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.name') => isset($item->delivery_man) ? $item->delivery_man->f_name.' '.$item->delivery_man->l_name : translate('messages.not_found'), translate('messages.received_at') => $item->created_at->format('Y-m-d '.config('timeformat')), translate('messages.amount') => $item->amount, translate('messages.method') => $item->method, translate('messages.reference') => $item->ref, ]; } return $data; } public static function export_items($foods,$module_type){ $storage = []; foreach($foods as $item) { $category_id = 0; $sub_category_id = 0; foreach(json_decode($item->category_ids, true) as $key=>$category) { if($key==0) { $category_id = $category['id']; } else if($key==1) { $sub_category_id = $category['id']; } } $storage[] = [ 'Id'=>$item->id, 'Name'=>$item->name, 'Description'=>$item->description, 'Image'=>$item->image, 'Images'=>$item->images, 'CategoryId'=>$category_id, 'SubCategoryId'=>$sub_category_id, 'UnitId'=>$item->unit_id, 'Stock'=>$item->stock, 'Price'=>$item->price, 'Discount'=>$item->discount, 'DiscountType'=>$item->discount_type, 'AvailableTimeStarts'=>$item->available_time_starts, 'AvailableTimeEnds'=>$item->available_time_ends, 'Variations'=>$module_type == 'food'?$item->food_variations:$item->variations, 'AddOns'=>str_replace(['"','[',']'],'',$item->add_ons), 'Attributes'=>str_replace(['"','[',']'],'',$item->attributes), 'StoreId'=>$item->store_id, 'ModuleId'=>$item->module_id, 'Status'=>$item->status == 1 ? 'active' : 'inactive', 'Veg'=>$item->veg == 1 ? 'yes' : 'no', 'Recommended'=>$item->recommended == 1 ? 'yes' : 'no', ]; } return $storage; } public static function export_store_item($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item['name'], translate('messages.type') => $item->category?$item->category->name:'', translate('messages.price') => $item['price'], translate('messages.status') => $item['status'], ]; } return $data; } public static function export_stores($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'id'=>$item->id, 'ownerId'=>$item->vendor->id, 'ownerFirstName'=>$item->vendor->f_name, 'ownerLastName'=>$item->vendor->l_name, 'storeName'=>$item->name, 'phone'=>$item->vendor->phone, 'email'=>$item->vendor->email, 'logo'=>$item->logo, 'CoverPhoto'=>$item->cover_photo, 'latitude'=>$item->latitude, 'longitude'=>$item->longitude, 'Address'=>$item->address ?? null, 'zone_id'=>$item->zone_id, 'module_id'=>$item->module_id, 'MinimumOrderAmount'=>$item->minimum_order, 'Comission'=>$item->comission ?? 0, 'Tax'=>$item->tax ?? 0, 'DeliveryTime'=>$item->delivery_time ?? '20-30', 'MinimumDeliveryFee'=>$item->minimum_shipping_charge ?? 0, 'PerKmDeliveryFee'=>$item->per_km_shipping_charge ?? 0, 'MaximumDeliveryFee'=>$item->maximum_shipping_charge ?? 0, 'ScheduleOrder'=> $item->schedule_order == 1 ? 'yes' : 'no', 'Status'=> $item->status == 1 ? 'active' : 'inactive', 'SelfDeliverySystem'=> $item->self_delivery_system == 1 ? 'active' : 'inactive', 'Veg'=> $item->veg == 1 ? 'yes' : 'no', 'NonVeg'=> $item->non_veg == 1 ? 'yes' : 'no', 'FreeDelivery'=> $item->free_delivery == 1 ? 'yes' : 'no', 'TakeAway'=> $item->take_away == 1 ? 'yes' : 'no', 'Delivery'=> $item->delivery == 1 ? 'yes' : 'no', 'ReviewsSection'=> $item->reviews_section == 1 ? 'active' : 'inactive', 'PosSystem'=> $item->pos_system == 1 ? 'active' : 'inactive', 'storeOpen'=> $item->active == 1 ? 'yes' : 'no', 'FeaturedStore'=> $item->featured == 1 ? 'yes' : 'no', ]; } return $data; } public static function export_units($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.unit') => $item['unit'], ]; } return $data; } public static function export_customers($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item->f_name.' '.$item->l_name, translate('messages.phone') => $item['phone'], translate('messages.email') => $item['email'], translate('messages.total_order') => $item['order_count'], translate('messages.status') => $item['status'], ]; } return $data; } public static function export_day_wise_report($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.order_id') => $item['order_id'], translate('messages.store')=>$item->order->store?$item->order->store->name:translate('messages.invalid'), translate('messages.customer_name')=>$item->order->customer?$item->order->customer['f_name'].' '.$item->order->customer['l_name']:translate('messages.invalid_customer_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['store_discount_amount']), translate('item_discount')=>\App\CentralLogics\Helpers::format_currency($item->order->details->sum('discount_on_item')), 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['store_discount_amount']), translate('messages.tax')=>\App\CentralLogics\Helpers::format_currency($item->order['total_tax_amount']), translate('messages.delivery_charge')=>\App\CentralLogics\Helpers::format_currency($item['delivery_charge']), 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.store_discount') => \App\CentralLogics\Helpers::format_currency($item->order['store_discount_amount']), translate('messages.admin_commission') => \App\CentralLogics\Helpers::format_currency(($item->admin_commission + $item->admin_expense) - $item->delivery_fee_comission), 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']), translate('store_net_income') => \App\CentralLogics\Helpers::format_currency($item['store_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 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'], // 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 export_item_wise_report($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item['name'], translate('messages.module') =>$item->module ? $item->module->module_name : '', translate('messages.store') => $item->store ? $item->store?->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_item), translate('messages.average_sale_value') => $item->orders_count>0? \App\CentralLogics\Helpers::format_currency(($item->orders_sum_price-$item->orders_sum_discount_on_item)/$item->orders_count):0 , translate('messages.average_ratings') => round($item->avg_rating,1), ]; } return $data; } public static function export_stock_wise_report($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item['name'], translate('messages.store') => $item->store?$item->store?->name : '', translate('messages.zone') => ($item->store && $item->store?->zone) ? $item->store?->zone->name:'', translate('messages.stock') => $item['stock'], ]; } return $data; } public static function export_delivery_men($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.name') => $item->f_name.' '.$item->l_name, translate('messages.phone') => $item['phone'], translate('messages.zone') => $item->zone?$item->zone->name:'', translate('messages.total_order') => $item['order_count'], translate('messages.currently_assigned_orders') => (int) $item['current_orders'], translate('messages.status') => $item['status'], ]; } return $data; } 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 expenseCreate($amount,$type,$datetime,$created_by,$order_id=null,$store_id=null,$description='',$delivery_man_id=null,$user_id=null) { $expense = new Expense(); $expense->amount = $amount; $expense->type = $type; $expense->order_id = $order_id; $expense->created_by = $created_by; $expense->store_id = $store_id; $expense->delivery_man_id = $delivery_man_id; $expense->user_id = $user_id; $expense->description = $description; $expense->created_at = now(); $expense->updated_at = now(); return $expense->save(); } public static function get_varient(array $product_variations, $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 get_edit_varient(array $product_variations, $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 $option) { foreach ($variation['values'] as $selected) { if (isset($selected['label']) && $option['label'] === $selected['label']) { $result[$k]['values'][] = $option; $variation_price += $option['optionPrice']; break; } } } } } } return ['price' => $variation_price, 'variations' => $result]; } public static function food_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 gen_mpdf($view, $file_prefix, $file_postfix) { $mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/../../storage/tmp','default_font' => 'Inter', '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 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 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 pagination_limit() { $pagination_limit = BusinessSetting::where('key', 'pagination_limit')->first(); if ($pagination_limit != null) { return $pagination_limit->value; } else { return 25; } } 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 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 product_tax($price , $tax, $is_include=false){ $price_tax = ($price * $tax) / (100 + ($is_include?$tax:0)) ; return $price_tax; } 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; } public static function error_formater($key, $mesage, $errors = []) { $errors[] = ['code' => $key, 'message' => $mesage]; return $errors; } public static function Export_generator($datas) { foreach ($datas as $data) { yield $data; } return true; } public static function export_addons($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'Id'=>$item->id, 'Name'=>$item->name, 'Price'=>$item->price, 'StoreId'=>$item->store_id, 'Status'=>$item->status == 1 ? 'active' : 'inactive' ]; } return $data; } public static function export_categories($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'Id'=>$item->id, 'Name'=>$item->name, 'Image'=>$item->image, 'ParentId'=>$item->parent_id, 'Position'=>$item->position, 'Priority'=>$item->priority, 'Status'=>$item->status == 1 ? 'active' : 'inactive', ]; } return $data; } public static function get_mail_status($name) { $status = BusinessSetting::where('key', $name)->first()?->value ?? 0; return $status; } public static function text_variable_data_format($value,$user_name=null,$store_name=null,$delivery_man_name=null,$transaction_id=null,$order_id=null,$add_id= null) { $data = $value; if ($value) { if($user_name){ $data = str_replace("{userName}", $user_name, $data); } if($store_name){ $data = str_replace("{storeName}", $store_name, $data); $data = str_replace("{providerName}", $store_name, $data); } if($delivery_man_name){ $data = str_replace("{deliveryManName}", $delivery_man_name, $data); } if($transaction_id){ $data = str_replace("{transactionId}", $transaction_id, $data); } if($order_id){ $data = str_replace("{orderId}", $order_id, $data); $data = str_replace("{tripId}", $order_id, $data); } if($add_id){ $data = str_replace("{advertisementId}", $add_id, $data); } } return $data; } public static function get_login_url($type){ $data=DataSetting::whereIn('key',['store_employee_login_url','store_login_url','admin_employee_login_url','admin_login_url' ])->pluck('key','value')->toArray(); return array_search($type,$data); } 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 ]; Helpers::businessUpdateOrInsert(['key' => 'app_activation'], [ 'value' => json_encode($previous_active) ]); } return true; } } catch (\Exception $exception) { info($exception->getMessage()); $previous_active[] = [ 'software_id' => env('REACT_APP_KEY'), 'is_active' => 1 ]; Helpers::businessUpdateOrInsert(['key' => 'app_activation'], [ 'value' => json_encode($previous_active) ]); return true; } 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; } Helpers::businessUpdateOrInsert(['key' => 'react_setup'], [ 'value' => json_encode($data) ]); } } public static function export_order_transaction_report($collection){ $data = []; foreach($collection as $key=>$item){ $data[] = [ 'SL'=>$key+1, translate('messages.id') => $item['id'], translate('messages.vendor_id') => $item['vendor_id'], translate('messages.delivery_man_id') => $item['delivery_man_id'], translate('messages.order_id') => $item['order_id'], translate('messages.order_amount') => $item['order_amount'], translate('messages.store_amount') => $item['store_amount']-$item['tax'], translate('messages.admin_commission') => $item['admin_commission'], translate('messages.received_by') => $item['received_by'], translate('messages.status') => $item['status'], translate('messages.created_at') => $item['created_at'], translate('messages.updated_at') => $item['updated_at'], translate('messages.delivery_charge') => $item['delivery_charge'], translate('messages.original_delivery_charge') => $item['original_delivery_charge'], translate('messages.tax') => $item['tax'], translate('messages.zone_id') => $item['zone_id'], translate('messages.module_id') => $item['module_id'], translate('messages.parcel_catgory_id') => $item['parcel_catgory_id'], translate('messages.dm_tips') => $item['dm_tips'], translate('messages.delivery_fee_comission') => $item['delivery_fee_comission'], translate('messages.admin_expense') => $item['admin_expense'], translate('messages.store_expense') => $item['store_expense'], translate('messages.discount_amount_by_store') => $item['discount_amount_by_store'], ]; } return $data; } public static function get_zones_name($zones){ if(is_array($zones)){ $data = Zone::whereIn('id',$zones)->pluck('name')->toArray(); }else{ $data = Zone::where('id',$zones)->pluck('name')->toArray(); } $data = implode(', ', $data); return $data; } public static function get_stores_name($stores){ if(is_array($stores)){ $data = Store::whereIn('id',$stores)->pluck('name')->toArray(); }else{ $data = Store::where('id',$stores)->pluck('name')->toArray(); } $data = implode(', ', $data); return $data; } public static function get_category_name($id){ $id=Json_decode($id,true); $id=data_get($id,'0.id','NA'); return Category::where('id',$id)->first()?->name; } public static function get_sub_category_name($id){ $id=Json_decode($id,true); $id=data_get($id,'1.id','NA'); return Category::where('id',$id)->first()?->name; } public static function get_attributes($choice_options){ try{ $data=[]; foreach((array)json_decode($choice_options) as $key => $choice){ $data[$choice->title] =$choice->options; } return str_ireplace(['\'', '"', '{','}', '[',']', ';', '<', '>', '?'], ' ',json_encode($data)); } catch (\Exception $ex) { info(["line___{$ex->getLine()}",$ex->getMessage()]); return 0; } } public static function get_module_name($id){ return Module::where('id',$id)->first()?->module_name; } public static function get_food_variations($variations){ try{ $data=[]; $data2=[]; foreach((array)json_decode($variations,true) as $key => $choice){ foreach($choice['values'] as $k => $v){ $data2[$k] = $v['label']; // if(!next($choice['values'] )) { // $data2[$k] = $v['label'].";"; // } } $data[$choice['name']] = $data2; } return str_ireplace(['\'', '"', '{','}', '[',']', '<', '>', '?'], ' ',json_encode($data)); } catch (\Exception $ex) { info(["line___{$ex->getLine()}",$ex->getMessage()]); return 0; } } public static function get_customer_name($id){ $user = User::where('id',$id)->first(); return $user->f_name.' '.$user->l_name; } public static function get_addon_data($id){ try{ $data=[]; $addon= AddOn::whereIn('id',json_decode($id, true))->get(['name','price'])->toArray(); foreach($addon as $key => $value){ $data[$key]= $value['name'] .' - ' .\App\CentralLogics\Helpers::format_currency($value['price']); } return str_ireplace(['\'', '"', '{','}', '[',']', '<', '>', '?'], ' ',json_encode($data, JSON_UNESCAPED_UNICODE)); } catch (\Exception $ex) { info(["line___{$ex->getLine()}",$ex->getMessage()]); return 0; } } public static function add_or_update_translations($request, $key_data,$name_field ,$model_name, $data_id,$data_value , $model_class = false){ try{ if($model_class === true){ $model= $model_name; }else{ $model = 'App\\Models\\'.$model_name; } $default_lang = str_replace('_', '-', app()->getLocale()); foreach ($request->lang as $index => $key) { if ($default_lang == $key && !($request->{$name_field}[$index])) { if ($key != 'default') { Translation::updateorcreate( [ 'translationable_type' => $model, 'translationable_id' => $data_id, 'locale' => $key, 'key' => $key_data ], ['value' => $data_value] ); } } else { if ($request->{$name_field}[$index] && $key != 'default') { Translation::updateorcreate( [ 'translationable_type' => $model, 'translationable_id' => $data_id, 'locale' => $key, 'key' => $key_data ], ['value' => $request->{$name_field}[$index]] ); } } } return true; } catch(\Exception $e){ info(["line___{$e->getLine()}",$e->getMessage()]); return false; } } public static function offline_payment_formater($user_data){ $userInputs = []; $user_inputes= json_decode($user_data->payment_info, true); $method_name= $user_inputes['method_name']; $method_id= $user_inputes['method_id']; foreach ($user_inputes as $key => $value) { if(!in_array($key,['method_name','method_id'])){ $userInput = [ 'user_input' => $key, 'user_data' => $value, ]; $userInputs[] = $userInput; } } $data = [ 'status' => $user_data->status, 'method_id' => $method_id, 'method_name' => $method_name, 'customer_note' => $user_data->customer_note, 'admin_note' => $user_data->note, ]; $result = [ 'input' => $userInputs, 'data' => $data, 'method_fields' =>json_decode($user_data->method_fields ,true), ]; return $result; } public static function time_date_format($data){ $time=config('timeformat') ?? 'H:i'; return Carbon::parse($data)->locale(app()->getLocale())->translatedFormat('d M Y ' . $time); } public static function date_format($data){ return Carbon::parse($data)->locale(app()->getLocale())->translatedFormat('d M Y'); } public static function time_format($data){ $time=config('timeformat') ?? 'H:i'; return Carbon::parse($data)->locale(app()->getLocale())->translatedFormat($time); } public static function get_full_url($path,$data,$type,$placeholder = null){ $place_holders = [ 'default' => asset('public/assets/admin/img/100x100/2.jpg'), 'business' => asset('public/assets/admin/img/160x160/img2.jpg'), 'contact_us_image' => asset('public/assets/admin/img/160x160/img2.jpg'), 'profile' => asset('public/assets/admin/img/160x160/img2.jpg'), 'product' => asset('public/assets/admin/img/160x160/img2.jpg'), 'order' => asset('public/assets/admin/img/160x160/img2.jpg'), 'refund' => asset('public/assets/admin/img/160x160/img2.jpg'), 'delivery-man' => asset('public/assets/admin/img/160x160/img2.jpg'), 'admin' => asset('public/assets/admin/img/160x160/img1.jpg'), 'conversation' => asset('public/assets/admin/img/160x160/img1.jpg'), 'banner' => asset('public/assets/admin/img/900x400/img1.jpg'), 'campaign' => asset('public/assets/admin/img/900x400/img1.jpg'), 'notification' => asset('public/assets/admin/img/900x400/img1.jpg'), 'category' => asset('public/assets/admin/img/100x100/2.jpg'), 'store' => asset('public/assets/admin/img/160x160/img1.jpg'), 'vendor' => asset('public/assets/admin/img/160x160/img1.jpg'), 'brand' => asset('public/assets/admin/img/100x100/2.jpg'), 'upload_image' => asset('public/assets/admin/img/upload-img.png'), 'store/cover' => asset('public/assets/admin/img/100x100/2.jpg'), 'upload_image_4' => asset('/public/assets/admin/img/upload-4.png'), 'promotional_banner' => asset('public/assets/admin/img/100x100/2.jpg'), 'admin_feature' => asset('public/assets/admin/img/100x100/2.jpg'), 'aspect_1' => asset('/public/assets/admin/img/aspect-1.png'), 'special_criteria' => asset('public/assets/admin/img/100x100/2.jpg'), 'download_user_app_image' => asset('public/assets/admin/img/100x100/2.jpg'), 'reviewer_image' => asset('public/assets/admin/img/100x100/2.jpg'), 'fixed_header_image' => asset('/public/assets/admin/img/aspect-1.png'), 'header_icon' => asset('/public/assets/admin/img/aspect-1.png'), 'available_zone_image' => asset('public/assets/admin/img/100x100/2.jpg'), 'why_choose' => asset('/public/assets/admin/img/aspect-1.png'), 'header_banner' => asset('/public/assets/admin/img/aspect-1.png'), 'reviewer_company_image' => asset('public/assets/admin/img/100x100/2.jpg'), 'module' => asset('public/assets/admin/img/100x100/2.jpg'), 'parcel_category' => asset('/public/assets/admin/img/400x400/img2.jpg'), 'favicon' => asset('/public/assets/admin/img/favicon.png'), 'seller' => asset('public/assets/back-end/img/160x160/img1.jpg'), 'upload_placeholder' => asset('/public/assets/admin/img/upload-placeholder.png'), 'payment_modules/gateway_image' => asset('/public/assets/admin/img/payment/placeholder.png'), 'email_template' => asset('/public/assets/admin/img/blank1.png'), ]; try { if ($data && $type == 's3' && Storage::disk('s3')->exists($path .'/'. $data)) { return Storage::disk('s3')->url($path .'/'. $data); // $awsUrl = config('filesystems.disks.s3.url'); // $awsBucket = config('filesystems.disks.s3.bucket'); // return rtrim($awsUrl, '/') . '/' . ltrim($awsBucket . '/' . $path . '/' . $data, '/'); } } catch (\Exception $e){ } if ($data && Storage::disk('public')->exists($path .'/'. $data)) { return asset('storage/app/public') . '/' . $path . '/' . $data; } if (request()->is('api/*')) { return null; } if(isset($placeholder) && array_key_exists($placeholder, $place_holders)){ return $place_holders[$placeholder]; }elseif(array_key_exists($path, $place_holders)){ return $place_holders[$path]; }else{ return $place_holders['default']; } return 'def.png'; } public static function create_storage($model,$data_id){ $config=self::get_business_settings('local_storage'); $value = isset($config)?($config==0?'s3':'public'):'public'; return DB::table('storages')->updateOrInsert(['data_type' => $model,'data_id' => $data_id], [ 'value' => $value, 'created_at' => now(), 'updated_at' => now(), ]); } public static function getCalculatedCashBackAmount($amount,$customer_id,$type=null){ $data=[ 'calculated_amount'=> (float) 0, 'cashback_amount'=>0, 'cashback_type'=>'', 'min_purchase'=>0, 'max_discount'=>0, 'id'=>0, ]; try { $percent_bonus = CashBack::active()->when($type, function($query){ $query->rental(); }) ->where('cashback_type', 'percentage') ->Running() ->where('min_purchase', '<=', $amount) ->where(function($query) use ($customer_id) { $query->whereJsonContains('customer_id', [ (string) $customer_id])->orWhereJsonContains('customer_id', ['all']); }) ->when(is_numeric($customer_id), function($q) use ($customer_id){ $q->where('same_user_limit', '>', function($query) use ($customer_id) { $query->select(DB::raw('COUNT(*)')) ->from('cash_back_histories') ->where('user_id', $customer_id) ->whereColumn('cash_back_id', 'cash_backs.id'); }); }) ->orderBy('cashback_amount', 'desc') ->first(); $amount_bonus = CashBack::active()->where('cashback_type','amount')->when($type, function($query){ $query->rental(); }) ->Running() ->where(function($query)use($customer_id){ $query->whereJsonContains('customer_id', [(string)$customer_id])->orWhereJsonContains('customer_id', ['all']); }) ->where('min_purchase','<=',$amount ) ->when(is_numeric($customer_id), function($q) use ($customer_id){ $q->where('same_user_limit', '>', function($query) use ($customer_id) { $query->select(DB::raw('COUNT(*)')) ->from('cash_back_histories') ->where('user_id', $customer_id) ->whereColumn('cash_back_id', 'cash_backs.id'); }); }) ->orderBy('cashback_amount','desc')->first(); if($percent_bonus && ($amount >=$percent_bonus->min_purchase)){ $p_bonus = ($amount * $percent_bonus->cashback_amount)/100; $p_bonus = $p_bonus > $percent_bonus->max_discount ? $percent_bonus->max_discount : $p_bonus; $p_bonus = round($p_bonus,config('round_up_to_digit')); }else{ $p_bonus = 0; } if($amount_bonus && ($amount >=$amount_bonus->min_purchase)){ $a_bonus = $amount_bonus?$amount_bonus->cashback_amount: 0; $a_bonus = round($a_bonus,config('round_up_to_digit')); }else{ $a_bonus = 0; } $cashback_amount = max([$p_bonus,$a_bonus]); if($p_bonus == $cashback_amount){ $data=[ 'calculated_amount'=> (float)$cashback_amount, 'cashback_amount'=>$percent_bonus?->cashback_amount ?? 0, 'cashback_type'=>$percent_bonus?->cashback_type ?? '', 'min_purchase'=>$percent_bonus?->min_purchase ?? 0, 'max_discount'=>$percent_bonus?->max_discount ?? 0, 'id'=>$percent_bonus?->id, ]; } elseif($a_bonus == $cashback_amount){ $data=[ 'calculated_amount'=> (float)$cashback_amount, 'cashback_amount'=>$amount_bonus?->cashback_amount ?? 0, 'cashback_type'=>$amount_bonus?->cashback_type ?? '', 'min_purchase'=>$amount_bonus?->min_purchase ?? 0, 'max_discount'=>$amount_bonus?->max_discount ?? 0, 'id'=>$amount_bonus?->id, ]; } return $data ; } catch (\Exception $exception) { info([$exception->getFile(),$exception->getLine(),$exception->getMessage()]); return $data ; } } public static function getCusromerFirstOrderDiscount($order_count, $user_creation_date,$refby, $price = null){ $data=[ 'is_valid' => false, 'discount_amount' => 0, 'discount_amount_type' => '', 'validity' => '', 'calculated_amount' => 0, ]; if($order_count > 0 || !$refby){ return $data?? []; } $settings = array_column(BusinessSetting::whereIn('key',['new_customer_discount_status','new_customer_discount_amount','new_customer_discount_amount_type','new_customer_discount_amount_validity','new_customer_discount_validity_type',])->get()->toArray(), 'value', 'key'); $validity_value = data_get($settings,'new_customer_discount_amount_validity'); $validity_unit = data_get($settings,'new_customer_discount_validity_type'); if($validity_unit == 'day'){ $validity_end_date = (new DateTime($user_creation_date))->modify("+$validity_value day"); } elseif($validity_unit == 'month'){ $validity_end_date = (new DateTime($user_creation_date))->modify("+$validity_value month"); } elseif($validity_unit == 'year'){ $validity_end_date = (new DateTime($user_creation_date))->modify("+$validity_value year"); } else{ $validity_end_date = (new DateTime($user_creation_date))->modify("-1 day"); } $is_valid=false; $current_date = new DateTime(); if($validity_end_date >= $current_date){ $is_valid=true; } if($order_count == 0 && $is_valid && data_get($settings,'new_customer_discount_status' ) == 1 && data_get($settings,'new_customer_discount_amount' ) > 0 ){ $calculated_amount=0; if(data_get($settings,'new_customer_discount_amount_type') == 'percentage' && isset($price)){ $calculated_amount= ($price / 100) * data_get($settings,'new_customer_discount_amount'); } else{ $calculated_amount=data_get($settings,'new_customer_discount_amount'); } $data=[ 'is_valid' => $is_valid, 'discount_amount' => data_get($settings,'new_customer_discount_amount'), 'discount_amount_type' => data_get($settings,'new_customer_discount_amount_type'), 'validity' => data_get($settings,'new_customer_discount_amount_validity') .' '. translate(Str::plural((data_get($settings,'new_customer_discount_validity_type') ?? 'day'),data_get($settings,'new_customer_discount_amount_validity'))), 'calculated_amount' => round($calculated_amount,config('round_up_to_digit')), ]; } return $data?? []; } public static function send_push_notif_for_demo_reset($data, $topic, $type,) { $postData = [ 'message' => [ "topic" => $topic, "data" => [ "title" => (string)$data['title'], "body" => (string)$data['description'], "type" => (string)$type, "image" => (string)$data['image'], "body_loc_key" => (string)$type, ] ] ]; return self::sendNotificationToHttp($postData); } public static function subscriptionConditionsCheck($store_id ,$package_id,){ $store=Store::findOrFail($store_id); $package = SubscriptionPackage::withoutGlobalScope('translate')->find($package_id); if($store->module_type == 'rental'){ $total_food= $store->vehicles()->count(); } else{ $total_food= $store->items()->withoutGlobalScope(\App\Scopes\StoreScope::class)->count(); } if ($package->max_product != 'unlimited' && $total_food >= $package->max_product ){ return ['disable_item_count' => $total_food - $package->max_product]; } return null; } public static function subscription_plan_chosen($store_id ,$package_id, $payment_method ,$discount = 0,$pending_bill =0,$reference=null ,$type=null){ $store=Store::find($store_id); $package = SubscriptionPackage::withoutGlobalScope('translate')->find($package_id); $add_days=0; $add_orders=0; try { $store_subscription=$store->store_sub; $store_old_subscription=$store->store_sub_update_application; if (isset($store_subscription) && $type == 'renew') { $store_subscription->total_package_renewed= $store_subscription->total_package_renewed + 1; $day_left=$store_subscription->expiry_date_parsed->format('Y-m-d'); if (Carbon::now()->diffInDays($day_left, false) > 0 && $store_subscription->is_canceled != 1) { $add_days= Carbon::now()->subDays(1)->diffInDays($day_left, false); } if ($store_subscription->max_order != 'unlimited' && $store_subscription->max_order > 0) { $add_orders=$store_subscription->max_order; } } elseif($store_old_subscription && $store_old_subscription->package_id == $package->id && $type == 'renew' ){ $store_subscription=$store_old_subscription; $store_subscription->total_package_renewed= $store_subscription->total_package_renewed + 1; } else{ self::calculateSubscriptionRefundAmount($store); StoreSubscription::where('store_id',$store->id)->update([ 'status' => 0, ]); $store_subscription =new StoreSubscription(); $store_subscription->total_package_renewed= 0; } $store_subscription->is_trial= 0; $store_subscription->renewed_at=now(); $store_subscription->package_id=$package->id; $store_subscription->store_id=$store->id; if ($payment_method == 'free_trial' ) { $free_trial_period= BusinessSetting::where(['key' => 'subscription_free_trial_days'])->first()?->value ?? 1; $store_subscription->expiry_date= Carbon::now()->addDays($free_trial_period)->format('Y-m-d'); $store_subscription->validity= $free_trial_period; } else{ $store_subscription->expiry_date= Carbon::now()->addDays($package->validity+$add_days)->format('Y-m-d'); $store_subscription->validity=$package->validity+$add_days; } if($package->max_order != 'unlimited'){ $store_subscription->max_order=$package->max_order + $add_orders; } else{ $store_subscription->max_order=$package->max_order; } $store_subscription->max_product=$package->max_product; $store_subscription->pos=$package->pos; $store_subscription->mobile_app=$package->mobile_app; $store_subscription->chat=$package->chat; $store_subscription->review=$package->review; $store_subscription->self_delivery=$package->self_delivery; $store_subscription->is_canceled=0; $store_subscription->canceled_by='none'; $store->item_section= 1; $store->pos_system= 1; if ($type == 'new_join' && $store->vendor?->status == 0 ) { $store->status= 0; $store_subscription->status= 0; }else{ $store->status= 1; $store_subscription->status= 1; } // For Store Free Delivery if($store->free_delivery == 1 && $package->self_delivery == 1){ $store->free_delivery = 1 ; } else{ $store->free_delivery = 0 ; $store->coupon()->where('created_by','vendor')->where('coupon_type','free_delivery')->delete(); } $store->package_id= $package->id; $store->reviews_section= 1; $store->self_delivery_system= 1; $store->store_business_model= 'subscription'; $subscription_transaction= new SubscriptionTransaction(); $subscription_transaction->package_id=$package->id; $subscription_transaction->store_id=$store->id; $subscription_transaction->price=$package->price; $subscription_transaction->validity=$package->validity; $subscription_transaction->paid_amount= $package->price - (($package->price*$discount)/100) + $pending_bill; $subscription_transaction->payment_status = 'success'; $subscription_transaction->created_by= in_array($payment_method,['wallet_payment_by_admin','manual_payment_by_admin' ,'plan_shift_by_admin'] )?'Admin': 'Store'; if ($payment_method == 'free_trial') { $subscription_transaction->validity= $free_trial_period; $subscription_transaction->paid_amount= 0; $subscription_transaction->is_trial= 1; $store_subscription->is_trial= 1; } elseif($payment_method == 'pay_now'){ $subscription_transaction->payment_status ='on_hold'; $subscription_transaction->transaction_status = 0; $store_subscription->status= 0; } $subscription_transaction->payment_method=$payment_method; $subscription_transaction->reference=$reference ?? null; $subscription_transaction->discount=$discount ?? 0; if(in_array($type ,['renew','free_trial'])){ $subscription_transaction->plan_type=$type; } elseif(StoreSubscription::where('store_id',$store->id)->where('is_trial',0)->count() > 0 || $reference == 'plan_shift_by_admin'){ $subscription_transaction->plan_type='new_plan'; } $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(); $store->save(); $subscription_transaction->save(); $store_subscription->save(); DB::commit(); $subscription_transaction->store_subscription_id= $store_subscription->id; $subscription_transaction->save(); SubscriptionBillingAndRefundHistory::where(['store_id'=>$store->id, 'transaction_type'=>'pending_bill', 'is_success' =>0])->update([ 'is_success'=> 1, 'reference'=> 'payment_via_'.$payment_method.' _transaction_id_'.$subscription_transaction->id ]); if($reference == 'plan_shift_by_admin'){ $billing= new SubscriptionBillingAndRefundHistory(); $billing->store_id= $store->id; $billing->subscription_id= $store_subscription->id; $billing->package_id= $store_subscription->package_id; $billing->transaction_type= 'pending_bill'; $billing->is_success= 0; $billing->amount= $package->price; $billing->save(); } } catch(\Exception $e){ DB::rollBack(); info(["line___{$e->getLine()}",$e->getMessage()]); return false; } if(data_get(self::subscriptionConditionsCheck(store_id:$store->id,package_id:$package->id) , 'disable_item_count') > 0){ $disable_item_count=data_get(Helpers::subscriptionConditionsCheck(store_id:$store->id,package_id:$package->id) , 'disable_item_count'); $store->item_section= 0; $store->save(); if($store->module_type == 'rental'){ Vehicle::where('provider_id',$store->id)->oldest()->take($disable_item_count)->update([ 'status' => 0 ]); } else{ Item::where('store_id',$store->id)->oldest()->take($disable_item_count)->update([ 'status' => 0 ]); } } if(!(in_array($payment_method,['manual_payment_by_admin','plan_shift_by_admin']) && $store_old_subscription == null )){ self::subscriptionNotifications($store,$type,$subscription_transaction); } return $subscription_transaction->id; } public static function subscriptionNotifications($store,$type ,$subscription_transaction ){ try { if($type == 'renew'){ $push_notification_status= $store->module->module_type !== 'rental' ? self::getNotificationStatusData('store','store_subscription_renew','push_notification_status',$store->id): self::getRentalNotificationStatusData('provider','provider_subscription_renew','push_notification_status',$store->id); $title=translate('subscription_renewed'); $des=translate('Your_subscription_successfully_renewed'); } elseif($type != 'renew'){ $des=translate('Your_subscription_successfully_shifted'); $title=translate('subscription_shifted'); $push_notification_status= $store->module->module_type !== 'rental' ? self::getNotificationStatusData('store','store_subscription_shift','push_notification_status',$store->id) : self::getRentalNotificationStatusData('provider','provider_subscription_shift','push_notification_status',$store->id); } if($push_notification_status && $store?->vendor?->firebase_token){ $data = [ 'title' => $title ?? '', 'description' => $des ?? '', 'order_id' => '', 'image' => '', 'type' => 'subscription', 'order_status' => '', ]; self::send_push_notif_to_device($store?->vendor?->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $store?->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); } if($store->module->module_type !== 'rental' && config('mail.status') ){ if (self::get_mail_status('subscription_renew_mail_status_store') == '1' && $type == 'renew' && self::getNotificationStatusData('store','store_subscription_renew','mail_status',$store->id)) { Mail::to($store->email)->send(new SubscriptionRenewOrShift($type,$store->name)); } if ( self::get_mail_status('subscription_shift_mail_status_store') == '1' && $type != 'renew' && self::getNotificationStatusData('store','store_subscription_shift','mail_status',$store->id)) { Mail::to($store->email)->send(new SubscriptionRenewOrShift($type,$store->name)); } if ( self::get_mail_status('subscription_successful_mail_status_store') == '1' && self::getNotificationStatusData('store','store_subscription_success','mail_status',$store->id) ) { $url=route('subscription_invoice',['id' => base64_encode($subscription_transaction->id)]); Mail::to($store->email)->send(new SubscriptionSuccessful($store->name,$url)); } }elseif($store->module->module_type == 'rental' && config('mail.status')){ if (self::get_mail_status('rental_subscription_renew_mail_status_provider') == '1' && $type == 'renew' && self::getRentalNotificationStatusData('provider','provider_subscription_renew','mail_status',$store->id)) { Mail::to($store->email)->send(new ProviderSubscriptionRenewOrShift($type,$store->name)); } if ( self::get_mail_status('rental_subscription_shift_mail_status_provider') == '1' && $type != 'renew' && self::getRentalNotificationStatusData('provider','provider_subscription_shift','mail_status',$store->id)) { Mail::to($store->email)->send(new ProviderSubscriptionRenewOrShift($type,$store->name)); } if(self::get_mail_status('rental_subscription_successful_mail_status_provider') == '1' && self::getRentalNotificationStatusData('provider','provider_subscription_success','mail_status',$store->id)){ $url=route('subscription_invoice',['id' => base64_encode($subscription_transaction->id)]); Mail::to($store->email)->send(new ProviderSubscriptionSuccessful($store->name,$url)); } } if((($store->module->module_type == 'rental' && self::getNotificationStatusData('store','store_subscription_success','push_notification_status',$store->id))|| ($store->module->module_type !== 'rental' && self::getRentalNotificationStatusData('provider','provider_subscription_success','mail_status',$store->id) )) && $store?->vendor?->firebase_token){ $data = [ 'title' => translate('subscription_successful'), 'description' => translate('You_are_successfully_subscribed'), 'order_id' => '', 'image' => '', 'type' => 'subscription', 'order_status' => '', ]; self::send_push_notif_to_device($store?->vendor?->firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'vendor_id' => $store?->vendor_id, 'created_at' => now(), 'updated_at' => now() ]); } } catch (\Exception $ex) { info($ex->getMessage()); } return true; } public static function subscriptionPayment($store_id,$package_id,$payment_gateway,$url,$pending_bill=0,$type='payment',$payment_platform='web'){ $store = Store::where('id',$store_id)->first(); $package = SubscriptionPackage::where('id',$package_id)->first(); $type == null ? 'payment' :$type ; $payer = new Payer( $store->name , $store->email, $store->phone, '' ); $store_logo= BusinessSetting::where(['key' => 'logo'])->first(); $additional_data = [ 'business_name' => BusinessSetting::where(['key'=>'business_name'])->first()?->value, 'business_logo' => \App\CentralLogics\Helpers::get_full_url('business',$store_logo?->value,$store_logo?->storage[0]?->value ?? 'public') ]; $payment_info = new PaymentInfo( success_hook: 'sub_success', failure_hook: 'sub_fail', currency_code: Helpers::currency_code(), payment_method: $payment_gateway, payment_platform: $payment_platform, payer_id: $store->id, receiver_id: $package->id, additional_data: $additional_data, payment_amount: $package->price + $pending_bill, external_redirect_link: $url, attribute: 'store_subscription_'.$type, attribute_id: $package->id, ); $receiver_info = new Receiver('Admin','example.png'); $redirect_link = Payment::generate_link($payer, $payment_info, $receiver_info); return $redirect_link; } public Static function subscription_check() { $subscription_business_model= BusinessSetting::where(['key'=>'subscription_business_model'])->first()?->value ?? null; if($subscription_business_model == null ){ Helpers::insert_business_settings_key('subscription_business_model', '1'); $subscription_business_model= BusinessSetting::where(['key'=>'subscription_business_model'])->first()?->value ?? null; } return $subscription_business_model ?? 1; } public Static function commission_check() { $commission_business_model= BusinessSetting::where(['key'=>'commission_business_model'])->first()?->value ?? null; if($commission_business_model == null ){ Helpers::insert_business_settings_key('commission_business_model', '1'); $commission_business_model= BusinessSetting::where(['key'=>'commission_business_model'])->first()?->value ?? null; } return $commission_business_model ?? 1; } public static function calculateSubscriptionRefundAmount($store,$return_data=null){ $store_subscription=$store->store_sub; if($store_subscription && $store_subscription?->is_canceled === 0 && $store_subscription?->is_trial === 0 ){ $day_left=$store_subscription->expiry_date_parsed->format('Y-m-d'); if (Carbon::now()->diffInDays($day_left, false) > 0) { $add_days= Carbon::now()->diffInDays($day_left, false); $validity=$store_subscription?->validity; $subscription_usage_max_time=BusinessSetting::where('key', 'subscription_usage_max_time')->first()?->value ?? 50 ; $subscription_usage_max_time= ($validity * $subscription_usage_max_time) /100 ; if(($validity - $add_days) < $subscription_usage_max_time ){ $per_day= $store->store_sub_trans->price / $store->store_sub_trans->validity; $back_amount= $per_day * $add_days; if($return_data == true){ return ['back_amount' => $back_amount, 'days'=> $add_days]; } $vendorWallet = StoreWallet::firstOrNew( ['vendor_id' => $store->vendor_id] ); $vendorWallet->total_earning = $vendorWallet->total_earning+$back_amount; $vendorWallet->save(); $refund=new SubscriptionBillingAndRefundHistory(); $refund->store_id= $store->id; $refund->subscription_id= $store_subscription->id; $refund->package_id= $store_subscription->package_id; $refund->transaction_type= 'refund'; $refund->is_success= 1; $refund->amount= $back_amount; $refund->reference= 'validity_left_'.$add_days ; $refund->save(); } } } return true; } public static function increment_order_count($store){ $store_sub=$store->store_sub; if ( $store->store_business_model == 'subscription' && isset($store_sub) && $store_sub->max_order != "unlimited") { $store_sub->increment('max_order', 1); } return true; } public static function getDefaultPaymentMethods() { if (!Schema::hasTable('addon_settings')) { return []; } $digital_payment=\App\CentralLogics\Helpers::get_business_settings('digital_payment'); if($digital_payment && $digital_payment['status']==0){ return []; } $methods = DB::table('addon_settings')->where('is_active',1)->whereIn('settings_type', ['payment_config'])->whereIn('key_name', ['ssl_commerz','paypal','stripe','razor_pay','senang_pay','paytabs','paystack','paymob_accept','paytm','flutterwave','liqpay','bkash','mercadopago'])->get(); $env = env('APP_ENV') == 'live' ? 'live' : 'test'; $credentials = $env . '_values'; $data = []; foreach ($methods as $method) { $credentialsData = json_decode($method->$credentials); $additional_data = json_decode($method->additional_data); if ($credentialsData->status == 1) { $data[] = [ 'gateway' => $method->key_name, 'gateway_title' => $additional_data?->gateway_title, 'gateway_image' => $additional_data?->gateway_image, 'storage' => $additional_data?->storage ?? 'public' ]; } } return $data; } public static function getNotificationStatusData($user_type,$key, $notification_type, $store_id = null){ $data = NotificationSetting::where('type',$user_type)->where('key',$key)->select($notification_type)->first(); $data = $data?->{$notification_type} === 'active' ? 1 : 0; if( $store_id && $user_type == 'store' && $data === 1 ){ $data = self::getStoreNotificationStatusData(store_id:$store_id,key:$key ,notification_type: $notification_type); $data = $data?->{$notification_type} === 'active' ? 1 : 0; } return $data; } public static function getRentalNotificationStatusData($user_type,$key,$notification_type, $store_id= null){ $data= NotificationSetting::where(['type'=>$user_type,'module_type' => 'rental','key'=>$key ])->select($notification_type)->first(); $data= $data?->{$notification_type} === 'active' ? 1 : 0; if($store_id && $user_type == 'provider' && $data === 1){ $data= self::getRentalStoreNotificationStatusData(store_id:$store_id,key:$key ,notification_type: $notification_type); $data= $data?->{$notification_type} === 'active' ? 1 : 0; } return $data; } public static function getNotificationStatusDataAdmin($user_type,$key){ $data= NotificationSetting::where(['type'=>$user_type,'key'=>$key])->select(['mail_status','push_notification_status','sms_status'])->first(); return $data ?? null ; } public static function notificationDataSetup(){ $data=self::getAdminNotificationSetupData(); $data = NotificationSetting::upsert($data,['key','type'],['title','mail_status','sms_status','push_notification_status','sub_title']); return true; } public static function storeNotificationDataSetup($id){ $data=self::getStoreNotificationSetupData($id); $data = StoreNotificationSetting::upsert($data,['key','store_id'],['title','mail_status','sms_status','push_notification_status','sub_title']); return true; } public static function storeRentalNotificationDataSetup($id){ $data=self::getRentalStoreNotificationSetupData($id); $data = StoreNotificationSetting::upsert($data,['key','store_id','module_type'],['title','mail_status','sms_status','push_notification_status','sub_title']); return true; } public static function updateAdminNotificationSetupDataSetup(){ self::updateAdminNotificationSetupData(); return true; } public static function addNewAdminNotificationSetupDataSetup(){ self::addNewAdminNotificationSetupData(); return true; } public static function getRentalAdminNotificationSetupDatasetup(){ self::getRentalAdminNotificationSetupData(); return true; } public static function getStoreNotificationStatusData($store_id,$key,$notification_type){ $data = StoreNotificationSetting::where('store_id',$store_id)->where('key',$key)->select($notification_type)->first(); if(!$data){ self::storeNotificationDataSetup($store_id); $data = StoreNotificationSetting::where('store_id',$store_id)->where('key',$key)->select($notification_type)->first(); } return $data ?? null ; } public static function getRentalStoreNotificationStatusData($store_id,$key,$notification_type){ $data= StoreNotificationSetting::where('store_id',$store_id)->where('key',$key)->select($notification_type)->first(); if(!$data){ self::storeRentalNotificationDataSetup($store_id); $data= StoreNotificationSetting::where('store_id',$store_id)->where('key',$key)->select($notification_type)->first(); } return $data ?? null ; } public static function add_fund_push_notification($user_id){ $customer_push_notification_status=self::getNotificationStatusData('customer','customer_add_fund_to_wallet','push_notification_status' ); $user= User::where('id',$user_id)->first(); if ($customer_push_notification_status && $user?->cm_firebase_token) { $data = [ 'title' => translate('messages.Fund_added'), 'description' => translate('messages.Fund_added_to_your_wallet'), 'order_id' => '', 'image' => '', 'type' => 'add_fund', 'order_status' =>'', ]; self::send_push_notif_to_device($user?->cm_firebase_token, $data); DB::table('user_notifications')->insert([ 'data' => json_encode($data), 'user_id' => $user_id, 'created_at' => now(), 'updated_at' => now() ]); } return true; } public static function getActivePaymentGateways(){ if (!Schema::hasTable('addon_settings')) { return []; } $digital_payment=\App\CentralLogics\Helpers::get_business_settings('digital_payment'); if($digital_payment && $digital_payment['status']==0){ return []; } $published_status = 0; $payment_published_status = config('get_payment_publish_status'); if (isset($payment_published_status[0]['is_published'])) { $published_status = $payment_published_status[0]['is_published']; } if($published_status == 1){ $methods = DB::table('addon_settings')->where('is_active',1)->where('settings_type', 'payment_config')->get(); $env = env('APP_ENV') == 'live' ? 'live' : 'test'; $credentials = $env . '_values'; } else{ $methods = DB::table('addon_settings')->where('is_active',1)->whereIn('settings_type', ['payment_config'])->whereIn('key_name', ['ssl_commerz','paypal','stripe','razor_pay','senang_pay','paytabs','paystack','paymob_accept','paytm','flutterwave','liqpay','bkash','mercadopago'])->get(); $env = env('APP_ENV') == 'live' ? 'live' : 'test'; $credentials = $env . '_values'; } $data = []; foreach ($methods as $method) { $credentialsData = json_decode($method->$credentials); $additional_data = json_decode($method->additional_data); if ($credentialsData?->status == 1) { $data[] = [ 'gateway' => $method->key_name, 'gateway_title' => $additional_data?->gateway_title, 'gateway_image' => $additional_data?->gateway_image, 'gateway_image_full_url' => Helpers::get_full_url('payment_modules/gateway_image',$additional_data?->gateway_image,$additional_data?->storage ?? 'public') ]; } } return $data; } public static function checkCurrency($data , $type= null){ $digital_payment=self::get_business_settings('digital_payment'); if($digital_payment && $digital_payment['status']==1){ if($type === null){ if(is_array(self::getActivePaymentGateways())){ foreach(self::getActivePaymentGateways() as $payment_gateway){ if(!empty(self::getPaymentGatewaySupportedCurrencies($payment_gateway['gateway'])) && !array_key_exists($data,self::getPaymentGatewaySupportedCurrencies($payment_gateway['gateway'])) ){ return $payment_gateway['gateway']; } } } } elseif($type == 'payment_gateway'){ $currency= BusinessSetting::where('key','currency')->first()?->value; if(!empty(self::getPaymentGatewaySupportedCurrencies($data)) && !array_key_exists($currency,self::getPaymentGatewaySupportedCurrencies($data)) ){ return $data; } } } return true; } public static function updateStorageTable($dataType, $dataId, $image) { $value = Helpers::getDisk(); DB::table('storages')->updateOrInsert([ 'data_type' => $dataType, 'data_id' => $dataId, 'key' => 'image', ], [ 'value' => $value, 'created_at' => now(), 'updated_at' => now(), ]); } public static function getNextOpeningTime($schedule) { $currentTime =now()->format('H:i'); if ($schedule) { foreach($schedule as $entry) { if ($entry['day'] == now()->format('w')) { if ($currentTime >= $entry['opening_time'] && $currentTime <= $entry['closing_time']) { return $entry['opening_time']; } elseif($currentTime < $entry['opening_time']){ return $entry['opening_time']; } } } } return 'closed'; } public static function checkExternalConfiguration($externalBaseUrl, $externalTokem, $martToken) { $activationMode = ExternalConfiguration::where('key', 'activation_mode')->first()?->value; $driveMondBaseUrl = ExternalConfiguration::where('key', 'drivemond_base_url')->first()?->value; $driveMondToken = ExternalConfiguration::where('key', 'drivemond_token')->first()?->value; $systemSelfToken = ExternalConfiguration::where('key', 'system_self_token')->first()?->value; return $activationMode == 1 && $driveMondBaseUrl == $externalBaseUrl && $driveMondToken == $externalTokem && $systemSelfToken == $martToken; } public static function checkSelfExternalConfiguration() { $activationMode = ExternalConfiguration::where('key', 'activation_mode')->first()?->value; $driveMondBaseUrl = ExternalConfiguration::where('key', 'drivemond_base_url')->first()?->value; $driveMondToken = ExternalConfiguration::where('key', 'drivemond_token')->first()?->value; $systemSelfToken = ExternalConfiguration::where('key', 'system_self_token')->first()?->value; return $activationMode == 1 && $driveMondBaseUrl != null && $driveMondToken != null && $systemSelfToken != null; } public static function businessUpdateOrInsert($key, $value) { $businessSetting = BusinessSetting::where(['key' => $key['key']])->first(); if ($businessSetting) { $businessSetting->value = $value['value']; $businessSetting->save(); } else { $businessSetting = new BusinessSetting(); $businessSetting->key = $key['key']; $businessSetting->value = $value['value']; $businessSetting->save(); } } public static function businessInsert($data) { $businessSetting = BusinessSetting::where(['key' => $data['key']])->first(); if ($businessSetting) { $businessSetting->value = $data['value']; $businessSetting->updated_at = now(); $businessSetting->save(); } else { $businessSetting = new BusinessSetting(); $businessSetting->key = $data['key']; $businessSetting->value = $data['value']; $businessSetting->updated_at = now(); $businessSetting->save(); } } public static function dataUpdateOrInsert($key, $value) { $businessSetting = DataSetting::where(['key' => $key['key'],'type' => $key['type']])->first(); if ($businessSetting) { $businessSetting->value = $value['value']; $businessSetting->save(); } else { $businessSetting = new DataSetting(); $businessSetting->key = $key['key']; $businessSetting->type = $key['type']; $businessSetting->value = $value['value']; $businessSetting->save(); } } public static function getSettingsDataFromConfig($settings,$relations=[]) { try { if (!config($settings.'_conf')){ $data = BusinessSetting::where('key',$settings)->with($relations)->first(); Config::set($settings.'_conf', $data); } else{ $data = config($settings.'_conf'); } return $data; } catch (\Throwable $th) { return null; } } public static function disableStoreForOrderCancellation() { if( addon_published_status('Rental') && self::get_business_settings('order_cancelation_rate_limit_status') && self::get_business_settings('order_cancelation_rate_block_limit') > 0){ $stores = Store::where('status',1) ->wherehas('module',function($query){ $query->where('module_type','rental'); }) ->withoutGlobalScopes()->select('id')->withCount([ 'orders as total_orders', 'orders as canceled_orders' => function ($query) { $query->where('order_status', 'canceled'); } ])->get()->filter(function ($store) { if ($store->canceled_orders > 0) { $cancellationRate = ($store->canceled_orders / $store->total_orders) * 100; $store['cancellation_rate']= $cancellationRate; return $cancellationRate >= self::get_business_settings('order_cancelation_rate_block_limit'); } return false; }); $storeIds = $stores->pluck('id'); Store::whereIn('id', $storeIds)->update(['status' => 0]); } return true; } public static function preparePaginatedResponse($pagination, $limit, $offset, $key = 'data', $extraData = []): array { $response = [ 'total_size' => (int) $pagination->total(), 'limit' => (int) $limit, 'offset' => (int) $offset, $key => $pagination->items(), ]; return array_merge($response, $extraData); } public static function sendTripPaymentNotificationCustomerMain($trip) { if($trip->is_guest){ $user_fcm = $trip?->guest?->fcm_token; }else{ $user_fcm = $trip?->customer?->cm_firebase_token; } $value = $trip->payment_status == 'paid' ? translate('Your transaction has been completed'):translate('Your payment has not been received yet'); if (Helpers::getRentalNotificationStatusData('customer','customer_trip_notification','push_notification_status') && $value && $user_fcm) { $data = [ 'title' => translate('Trip_Notification_payment'), 'description' => $value, 'order_id' => $trip->id, 'module_id' => $trip->module_id, 'order_type' => 'trip', 'image' => '', 'type' => 'trip_status', 'zone_id' => $trip->zone_id, ]; self::send_push_notif_to_device($user_fcm, $data); UserNotification::create([ 'data' => json_encode($data), 'user_id' => $trip->user_id, 'order_type' => 'trip', ]); } return true; } public static function createTransactionForTrip($trip, $received_by = false, $status = null) { if (is_dir('Modules/Rental') && file_exists('Modules/Rental/Services/TripTransactionService.php')) { try { $serviceClass = 'Modules\Rental\Services\TripTransactionService'; if (class_exists($serviceClass)) { return (new $serviceClass)->createTransaction($trip, $received_by, $status); } } catch (\Exception $e) { info(['error_creating_trip_transaction', $e->getMessage()]); } } return null; } public static function deleteCacheData($prefix) { $cacheKeys = DB::table('cache') ->where('key', 'like', "%" . $prefix . "%") ->pluck('key'); $appName = env('APP_NAME').'_cache'; $remove_prefix = strtolower(str_replace('=', '', $appName)); $sanitizedKeys = $cacheKeys->map(function ($key) use ($remove_prefix) { $key = str_replace($remove_prefix, '', $key); return $key; }); foreach ($sanitizedKeys as $key) { Cache::forget($key); } } public static function minDiscountCheck($productPrice, $discount) { $discountApplied = min($productPrice, $discount); $finalPrice = max(0, $productPrice - $discountApplied); return ['final_price' => $finalPrice, 'discount_applied' => $discountApplied]; } public static function checkAdminDiscount($price, $discount, $max_discount, $min_purchase, $item_wise_price = null) { if ($price > 0 && $discount > 0) { $discount = ($price * $discount) / 100; $discount = $discount > $max_discount ? $max_discount : $discount; $discount = $price >= $min_purchase ? $discount : 0; } if ($discount > 0 && $item_wise_price > 0) { $discount = ($item_wise_price / $price) * $discount; } return $discount ?? 0; } public static function getFinalCalculatedTax($details_data, $additionalCharges, $totalDiscount, $price, $storeId, $storeData = true) { $addonIds = []; $products=[]; $tempList = []; $taxData = []; $productDiscountTotal = 0; $addonDiscountTotal = 0; $totalAfterOwnDiscounts = 0; if (addon_published_status('TaxModule')) { foreach ($details_data as $item) { $item_id = $item['item_id'] ?? $item['item_campaign_id']; $itemWiseDiscount = $item['discount_type'] === 'product_discount' ? $item['discount_on_item'] * $item['quantity'] : $item['discount_on_item']; $productDiscountTotal += $itemWiseDiscount; $itemTotal = $item['price'] * $item['quantity']; $itemFinal = $itemTotal - $itemWiseDiscount; $tempList[] = [ 'type' => 'product', 'id' => $item_id, 'original_price' => $item['price'], 'quantity' => $item['quantity'], 'category_id' => $item['category_id'], 'discount' => $item['discount_on_item'], 'discount_type' => $item['discount_type'], 'base_final' => $itemFinal, 'is_campaign_item' => $item['item_campaign_id'] ? true : false, ]; $totalAfterOwnDiscounts += $itemFinal; // --- Addons $addons = json_decode($item['add_ons'], true) ?? []; $addonDiscount = $item['addon_discount'] ?? 0; $addonTotalPrice = $item['total_add_on_price'] ?? 1; // Avoid division by zero $addonDiscountTotal += $addonDiscount; foreach ($addons as $addon) { $addonPrice = $addon['price'] * $addon['quantity']; $discountPart = $addonDiscount * ($addonPrice / $addonTotalPrice); $addonFinal = $addonPrice - $discountPart; $tempList[] = [ 'type' => 'addon', 'addon_id' => $addon['id'], 'item_id' => $item_id, 'quantity' => $addon['quantity'], 'category_id' => $addon['category_id'] ?? null, 'original_price' => $addon['price'], 'base_final' => $addonFinal, 'total_addon_addon_price' => $addonTotalPrice, 'total_addon_discount' => $addonDiscount, ]; $totalAfterOwnDiscounts += $addonFinal; } } $otherDiscounts = $totalDiscount - ($productDiscountTotal + $addonDiscountTotal); foreach ($tempList as $entry) { $share = ($entry['base_final'] / $totalAfterOwnDiscounts) * $otherDiscounts; $finalPrice = $entry['base_final'] - $share; if ($entry['type'] === 'product') { $products[] = [ 'id' => $entry['id'], 'original_price' => $entry['original_price'], 'quantity' => $entry['quantity'], 'category_id' => $entry['category_id'], 'discount' => $entry['discount'], 'discount_type' => $entry['discount_type'], 'after_discount_final_price' => $finalPrice, 'is_campaign_item' => $entry['is_campaign_item'], ]; } else { $addonIds[] = [ 'addon_id' => $entry['addon_id'], 'item_id' => $entry['item_id'], 'quantity' => $entry['quantity'], 'category_id' => $entry['category_id'], 'original_price' => $entry['original_price'], 'after_discount_final_price' => $finalPrice, 'total_addon_addon_price' => $entry['total_addon_addon_price'], 'total_addon_discount' => $entry['total_addon_discount'], ]; } } $taxData = \Modules\TaxModule\Services\CalculateTaxService::getCalculatedTax( amount: $price, productIds: $products, taxPayer: 'vendor', storeData: $storeData, additionalCharges: $additionalCharges, addonIds: $addonIds, orderId: null, storeId: $storeId ); $tax_amount = $taxData['totalTaxamount']; $tax_included = $taxData['include']; $tax_status = $tax_included ? 'included' : 'excluded'; foreach ($taxData['productWiseData'] ?? [] as $key => $item) { $taxMap[$key] = $item; } } return [ 'tax_amount' => $tax_amount ?? 0, 'tax_included' => $tax_included ?? null, 'tax_status' => $tax_status ?? 'excluded', 'taxMap' => $taxMap ?? [], 'taxType'=> data_get($taxData,'taxType'), 'taxData' => $taxData ?? [], ]; } public static function sendStoreEmployeeNotification($order, $data) { $employees = VendorEmployee::where('store_id', $order->store->id)->get(); foreach ($employees as $employee) { self::send_push_notif_to_device($employee->firebase_token, $data); } } public static function getTaxSystemType($getTaxVatList = true,$tax_payer='vendor'){ if (addon_published_status('TaxModule')) { $SystemTaxVat = \Modules\TaxModule\Entities\SystemTaxSetup::where('is_active', 1) ->where('tax_payer', $tax_payer)->where('is_default', 1)->first(); if(!$SystemTaxVat){ return [ 'productWiseTax' => false ,'categoryWiseTax'=> false, 'taxVats' => []]; } if($getTaxVatList){ $taxVats = \Modules\TaxModule\Entities\Tax::where('is_active', 1)->where('is_default', 1)->get(['id', 'name', 'tax_rate']); } if ($SystemTaxVat?->tax_type == 'product_wise') { $productWiseTax = true; } elseif ($SystemTaxVat?->tax_type == 'category_wise') { $categoryWiseTax = true; } } return [ 'productWiseTax' => $productWiseTax?? false ,'categoryWiseTax'=> $categoryWiseTax?? false, 'taxVats' => $taxVats ?? []]; } }
/home/users/unlimited/www/admin.priyotama.com/app/CentralLogics/helpers.php