File "WhatsappStoreRepository.php"
Full path: /home/smartkey/skey_in/app/Repositories/WhatsappStoreRepository.php
File size: 11.41 KiB (11680 bytes)
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Repositories;
use Exception;
use Carbon\Carbon;
use App\Models\User;
use App\Models\Analytic;
use Carbon\CarbonPeriod;
use App\Models\WhatsappStore;
use App\Models\ProductCategory;
use App\Models\WpStoreTemplate;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use App\Models\WhatsappStoreProduct;
use App\Repositories\BaseRepository;
use Illuminate\Database\Eloquent\Collection;
use Database\Seeders\WhatsAppStoreTemplatesSeeder;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
class WhatsappStoreRepository extends BaseRepository
{
public $fieldSearchable = [
'store_name',
];
/**
* {@inheritDoc}
*/
public function getFieldsSearchable()
{
return $this->fieldSearchable;
}
public function model()
{
return WhatsappStore::class;
}
public function store($input)
{
$input['url_alias'] = str_replace(' ', '-', strtolower($input['store_name']));
$input['template_id'] = WpStoreTemplate::first()->id;
$input['news_letter_popup'] = $input['news_letter_popup'] ?? 0;
$input['business_hours'] = $input['business_hours'] ?? 0;
$input['hide_stickybar'] = $input['hide_stickybar'] ?? 0;
$input['enable_download_qr_code'] = isset($input['enable_download_qr_code']) ? 1 : 0;
$input['slider_video_banner'] = $input['slider_video_banner'] ?? null;
$input['enable_business_directory'] = isset($input['enable_business_directory']) ? 1 : 0;
$input['discount'] = !empty($input['discount']) ? $input['discount'] : null;
$whatsappStore = WhatsappStore::create($input);
if (getLogInUser()->organisation_id) {
$whatsappStore->assignedUser()->syncWithoutDetaching([getLogInUserId()]);
} elseif (isset($input['user_ids'])) {
$whatsappStore->assignedUser()->sync($input['user_ids']);
}
if (isset($input['logo']) && !empty($input['logo'])) {
$whatsappStore->newAddMedia($input['logo'])->toMediaCollection(
WhatsappStore::LOGO,
config('app.media_disc')
);
}
if (isset($input['cover_img']) && !empty($input['cover_img'])) {
$whatsappStore->newAddMedia($input['cover_img'])->toMediaCollection(WhatsappStore::COVER_IMAGE, config('app.media_disc'));
}
return $whatsappStore;
}
public function update($whatsappStore, $input)
{
try {
DB::beginTransaction();
$input['news_letter_popup'] = $input['news_letter_popup'] ?? 0;
$input['business_hours'] = $input['business_hours'] ?? 0;
$input['hide_stickybar'] = $input['hide_stickybar'] ?? 0;
$input['enable_download_qr_code'] = isset($input['enable_download_qr_code']) ? 1 : 0;
$input['enable_business_directory'] = isset($input['enable_business_directory']) ? 1 : 0;
$input['discount'] = !empty($input['discount']) ? $input['discount'] : null;
$whatsappStore->update($input);
if (isset($input['part']) && $input['part'] == 'basics' && getLogInUser()->is_organisation == 1 && empty(getLogInUser()->organisation_id)) {
$whatsappStore->assignedUser()->sync($input['user_ids'] ?? []);
}
if (isset($input['logo']) && !empty($input['logo'])) {
$tempLogoMedia = $whatsappStore->newAddMedia($input['logo'])->toMediaCollection(
WhatsappStore::LOGO,
config('app.media_disc')
);
$whatsappStore->media()
->where('id', '!=', $tempLogoMedia->id)
->where('collection_name', WhatsappStore::LOGO)
->delete();
}
if (isset($input['cover_img']) && !empty($input['cover_img'])) {
$tempCoverMedia = $whatsappStore->newAddMedia($input['cover_img'])->toMediaCollection(
WhatsappStore::COVER_IMAGE,
config('app.media_disc')
);
$whatsappStore->media()
->where('id', '!=', $tempCoverMedia->id)
->where('collection_name', WhatsappStore::COVER_IMAGE)
->delete();
}
DB::commit();
return $whatsappStore;
} catch (\Exception $e) {
DB::rollback();
throw $e;
}
}
public function analyticsData(
$input,
$whatsappStore
): array {
$analytics = Analytic::where('whatsapp_store_id', $whatsappStore->id)->get();
if ($analytics->count() > 0) {
$DataCount = $analytics->count();
$percentage = 100 / $DataCount;
$browser = $analytics->groupBy('browser');
$data = [];
foreach ($browser as $key => $item) {
$browser_record[$key]['count'] = $item->count();
$browser_record[$key]['per'] = $item->count() * $percentage;
}
$browser_data = collect($browser_record)->sortBy('count')->reverse()->toArray();
$data['browser'] = $browser_data;
$device = $analytics->groupBy('device');
foreach ($device as $key => $item) {
$device_record[$key]['count'] = $item->count();
$device_record[$key]['per'] = $item->count() * $percentage;
}
$device_data = collect($device_record)->sortBy('count')->reverse()->toArray();
$data['device'] = $device_data;
$country = $analytics->groupBy('country');
foreach ($country as $key => $item) {
$country_record[$key]['count'] = $item->count();
$country_record[$key]['per'] = $item->count() * $percentage;
}
$country_data = collect($country_record)->sortBy('count')->reverse()->toArray();
$data['country'] = $country_data;
$operating_system = $analytics->groupBy('operating_system');
foreach ($operating_system as $key => $item) {
$operating_record[$key]['count'] = $item->count();
$operating_record[$key]['per'] = $item->count() * $percentage;
}
$operating_data = collect($operating_record)->sortBy('count')->reverse()->toArray();
$data['operating_system'] = $operating_data;
$language = $analytics->groupBy('language');
foreach ($language as $key => $item) {
$language_record[$key]['count'] = $item->count();
$language_record[$key]['per'] = $item->count() * $percentage;
}
$language_data = collect($language_record)->sortBy('count')->reverse()->toArray();
$data['language'] = $language_data;
$data['whatsappStoreID'] = $whatsappStore->id;
return $data;
}
$data['noRecord'] = __('messages.common.no_data_available');
return $data;
}
public function chartData(
$input
): array {
$startDate = isset($input['start_date']) ? Carbon::parse($input['start_date']) : '';
$endDate = isset($input['end_date']) ? Carbon::parse($input['end_date']) : '';
$data = [];
$analytics = Analytic::where('whatsapp_store_id', $input['whatsappStoreID']);
$visitor = $analytics->addSelect([DB::raw('DAY(created_at) as day,created_at')])
->addSelect([DB::raw('Month(created_at) as month,created_at')])
->addSelect([DB::raw('YEAR(created_at) as year,created_at')])
->orderBy('created_at')
->get();
$period = CarbonPeriod::create($startDate, $endDate);
foreach ($period as $date) {
$data['totalVisitorCount'][] = $visitor->where('day', $date->format('d'))->where(
'month',
$date->format('m')
)->where('year', $date->format('Y'))->count();
$data['weeklyLabels'][] = $date->format('d-m-y');
}
return $data;
}
public function getDuplicateVcard(
$whatsappStore,
$userId = null
) {
if (!$whatsappStore) {
throw new Exception(__('messages.flash.whatsapp_store_null'));
}
$newWhatsappStore = $whatsappStore->replicate();
if ($newWhatsappStore['tenant_id'] != getLogInTenantId()) {
$user = User::findOrFail($userId);
$tanentId = $user->tenant_id;
$newWhatsappStore['tenant_id'] = $tanentId;
} else {
$tanentId = $whatsappStore->tenant_id;
}
$baseAlias = preg_replace('/[0-9]+/', '', $newWhatsappStore->url_alias);
$matchAlias = WhatsappStore::where('url_alias', 'LIKE', '%' . $newWhatsappStore->url_alias . '%')->get();
$lastCharArr = [];
foreach ($matchAlias as $alias) {
$aliasLastCharCheck = str_replace($newWhatsappStore->url_alias, '', $alias->url_alias);
$lastCharArr[] = $aliasLastCharCheck;
}
$maxChar = max($lastCharArr);
$maxChar++;
$newWhatsappStore->url_alias = $newWhatsappStore->url_alias . $maxChar;
$newWhatsappStore->save();
if ($whatsappStore->logo_url) {
try {
$newWhatsappStore->addMediaFromUrl($whatsappStore->logo_url)->toMediaCollection(
WhatsappStore::LOGO,
config('app.media_disc')
);
} catch (Exception $e) {
Log::error($e->getMessage());
}
}
if ($whatsappStore->cover_url) {
try {
$newWhatsappStore->addMediaFromUrl($whatsappStore->cover_url)->toMediaCollection(
WhatsappStore::COVER_IMAGE,
config('app.media_disc')
);
} catch (Exception $e) {
Log::error($e->getMessage());
}
}
$categoryIdMap = [];
foreach ($whatsappStore->categories as $category) {
$newCategory = $category->replicate();
$newCategory->whatsapp_store_id = $newWhatsappStore->id;
$newCategory->tenant_id = $tanentId;
$newCategory->save();
$categoryIdMap[$category->id] = $newCategory->id;
if ($category->image_url) {
try {
$newCategory->addMediaFromUrl($category->image_url)->toMediaCollection(
ProductCategory::IMAGE,
config('app.media_disc')
);
} catch (Exception $e) {
Log::error($e->getMessage());
}
}
}
foreach ($whatsappStore->products as $product) {
$newProduct = $product->replicate();
$newProduct->whatsapp_store_id = $newWhatsappStore->id;
$newProduct->tenant_id = $tanentId;
$newProduct->category_id = $categoryIdMap[$product->category_id];
$newProduct->save();
foreach ($product->images_url as $imageUrl) {
if ($imageUrl) {
try {
$newProduct->addMediaFromUrl($imageUrl)->toMediaCollection(
WhatsappStoreProduct::PRODUCT_IMAGES,
config('app.media_disc')
);
} catch (Exception $e) {
Log::error($e->getMessage());
}
}
}
}
}
}