Current File : /home/getxxhzo/app.genicards.com/app/Repositories/VcardRepository.php
<?php

namespace App\Repositories;

use App\Models\Analytic;
use App\Models\Appointment;
use App\Models\AppointmentDetail;
use App\Models\BusinessHour;
use App\Models\DynamicVcard;
use App\Models\Gallery;
use App\Models\PrivacyPolicy;
use App\Models\Product;
use App\Models\QrcodeEdit;
use App\Models\SocialIcon;
use App\Models\SocialLink;
use App\Models\Subscription;
use App\Models\TermCondition;
use App\Models\Testimonial;
use App\Models\User;
use App\Models\Vcard;
use App\Models\VcardSections;
use App\Models\VcardBlog;
use App\Models\VcardService;
use Carbon\Carbon;
use Carbon\CarbonPeriod;
use DB;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Crypt;
use Laracasts\Flash\Flash;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;

class VcardRepository extends BaseRepository
{
    /**
     * @var array
     */
    public $fieldSearchable = [
        'name',
    ];

    /**
     * {@inheritDoc}
     */
    public function getFieldsSearchable()
    {
        return $this->fieldSearchable;
    }

    /**
     * {@inheritDoc}
     */
    public function model()
    {
        return Vcard::class;
    }

    /**
     * @return mixed
     */
    public function store($input)
    {
        try {
            DB::beginTransaction();
            if (isset($input['url_alias'])) {
                $input['url_alias'] = str_replace(' ', '-', $input['url_alias']);
            }
            $subscription = getCurrentSubscription();
            if ($subscription->plan) {
                $input['template_id'] = $subscription->plan->templates->first()->id;
            }
            $vcard = Vcard::create($input);

            $input['vcard_id'] = $vcard->id;
            SocialLink::create($input);

            if (isset($input['profile_img']) && !empty($input['profile_img'])) {
                $vcard->newAddMedia($input['profile_img'])->toMediaCollection(
                    Vcard::PROFILE_PATH,
                    config('app.media_disc')
                );
            }
            if (isset($input['cover_img']) && !empty($input['cover_img'])) {
                $vcard->newAddMedia($input['cover_img'])->toMediaCollection(Vcard::COVER_PATH, config('app.media_disc'));
            }

            DB::commit();

            return $vcard;
        } catch (Exception $e) {
            DB::rollBack();

            throw $e;
        }
    }

    public function edit($vcard): array
    {
        $data['vcard'] = $vcard;

        $businessHours = $vcard->businessHours()->get();

        foreach ($businessHours as $hour) {
            $data['hours'][$hour->day_of_week] = [
                'start_time' => $hour->start_time,
                'end_time' => $hour->end_time,
            ];
        }

        $appointmentHours = $vcard->appointmentHours()->get()->groupBy('day_of_week');

        foreach ($appointmentHours as $day => $hours) {
            foreach ($hours as $hour) {
                $data['time'][$day][] = [
                    'start_time' => $hour->start_time,
                    'end_time' => $hour->end_time,
                ];
            }
        }

        $data['socialLink'] = SocialLink::with('icon')->whereVcardId($vcard->id)->first();
        $currentPlan = getCurrentSubscription();
        if ($currentPlan->plan) {
            $data['templates'] = getTemplateUrls($currentPlan->plan->templates);
        } else {
            $data['templates'] = getTemplateUrls();
        }

        $data['customQrCode'] = QrcodeEdit::whereTenantId(getLogInTenantId())->where('vcard_id', $vcard->id)->pluck('value', 'key')->toArray();

        return $data;
    }

    /**
     * @return Builder|Builder[]|Collection|Model|int
     */
    public function update($input, $vcard)
    {

        try {
            DB::beginTransaction();
            if (isset($input['url_alias'])) {
                $input['url_alias'] = str_replace(' ', '-', $input['url_alias']);
            }
            // if (isset($input['phone'])) {
            //     $input['phone'] = str_replace([' ', '-'], '', $input['phone']);
            // }
            if (isset($input['part']) && $input['part'] == 'templates') {
                $planTemplates = getCurrentSubscription()->plan->templates()->pluck('template_id')->toArray();
                if (!in_array($input['template_id'], $planTemplates)) {
                    $input['template_id'] = $planTemplates[array_rand($planTemplates)];
                }
                $input['share_btn'] = isset($input['share_btn']);
                $input['status'] = isset($input['status']);
            }
            if (isset($input['part']) && $input['part'] == 'advanced') {
                $input['password'] = isset($input['password']) ? Crypt::encrypt($input['password']) : '';
                $input['branding'] = isset($input['branding']);
            }

            if (isset($input['part']) && $input['part'] == 'basics') {
                $input['language_enable'] = isset($input['language_enable']) ? 1 : 0;
                $input['enable_enquiry_form'] = isset($input['enable_enquiry_form']) ? 1 : 0;
                $input['enable_affiliation'] = isset($input['enable_affiliation']) ? 1 : 0;
                $input['enable_contact'] = isset($input['enable_contact']) ? 1 : 0;
                $input['hide_stickybar'] = isset($input['hide_stickybar']) ? 1 : 0;
                $input['whatsapp_share'] = isset($input['whatsapp_share']) ? 1 : 0;
                $input['enable_download_qr_code'] = isset($input['enable_download_qr_code']) ? 1 : 0;
                $input['show_qr_code'] = isset($input['show_qr_code']) ? 1 : 0;
                if ($input['location_type'] == '0') {
                    $input['location_url'] = $input['location_url'];
                    $input['location_embed_tag'] = null;
                } else {
                    $input['location_embed_tag'] = $input['location_embed_tag'];
                    $input['location_url'] = null;
                }
                $input['cover_image_type'] = $input['cover_image_type'] ?? null;
            }
            $vcard->update($input);

            if (isset($input['part']) && $input['part'] == 'business-hours') {
                BusinessHour::whereVcardId($vcard->id)->delete();
                if (isset($input['days'])) {
                    foreach ($input['days'] as $day) {
                        BusinessHour::create([
                            'vcard_id' => $vcard->id,
                            'day_of_week' => $day,
                            'start_time' => $input['startTime'][$day],
                            'end_time' => $input['endTime'][$day],
                        ]);
                    }
                }
            }

            if (isset($input['part']) && $input['part'] == 'appointments') {
                if ($input['is_paid'] == 1) {
                    if (!getUserSettingValue('stripe_enable', getLogInUserId()) &&  !getUserSettingValue('flutterwave_enable', getLogInUserId()) && !getUserSettingValue('phonepe_enable', getLogInUserId()) && !getUserSettingValue('manually_payment', getLogInUserId()) && !getUserSettingValue('paytack_enable', getLogInUserId()) && !getUserSettingValue(
                        'paypal_enable',
                        getLogInUserId()
                    )) {
                        Flash::error(__('messages.placeholder.please_add_payment_credentials'));

                        return false;
                    }
                    if (!getUserSettingValue('currency_id', getLogInUserId())) {
                        Flash::error(__('messages.vcard.please_add_currency'));
                        return false;
                    }
                }


                Appointment::whereVcardId($vcard->id)->delete();
                if (isset($input['checked_week_days'])) {
                    foreach ($input['checked_week_days'] as $day) {
                        $this->saveSlots($input, $day, $vcard);
                    }
                }

                $appointmentDetails = AppointmentDetail::where('vcard_id', $vcard->id)->first();

                if (isset($input['is_paid'])) {
                    if (!empty($appointmentDetails)) {
                        $appointmentDetails->update([
                            'is_paid' => $input['is_paid'],
                            'price' => $input['price'],
                        ]);
                    } else {
                        AppointmentDetail::create([
                            'vcard_id' => $vcard->id,
                            'is_paid' => $input['is_paid'],
                            'price' => $input['price'],
                        ]);
                    }
                }
            }
            if (isset($input['part']) && $input['part'] == 'social-links') {
                $socialLink = SocialLink::whereVcardId($vcard->id)->first();

                if (isset($input['social_links'])) {
                    $iconExists = SocialIcon::where('social_link_id', $socialLink->id)->exists();
                    if ($iconExists) {
                        $socialIconIds = SocialIcon::where('social_link_id', $socialLink->id)->pluck('id')->toArray();
                        $hiddenSocialLinkIds = $input['social_link_id'] ?? [];

                        $removeSocialLinks = array_diff($socialIconIds, $hiddenSocialLinkIds);
                        $socialIcons = SocialIcon::where('social_link_id', $socialLink->id)->get();

                        foreach ($removeSocialLinks as $socialIconID) {
                            $socialIcon = SocialIcon::where('id', $socialIconID)->first();
                            $socialIcon->clearMediaCollection(SocialLink::SOCIAL_ICON);
                            $socialIcon->delete();
                        }
                        foreach ($input['social_links'] as $key => $link) {
                            $socialIconId = $input['social_link_id'][$key];
                            if (isset($input['social_links_image'][$key])) {
                                if (!empty($socialIconId)) {
                                    $socialIcon = SocialIcon::where('id', $socialIconId)->first();
                                    $socialIcon->newClearMediaCollection($input['social_links_image'], SocialLink::SOCIAL_ICON);
                                    $socialIcon->newAddMedia($input['social_links_image'][$key])
                                        ->toMediaCollection(SocialLink::SOCIAL_ICON, config('app.media_disc'));
                                } else {
                                    $socialIcon = SocialIcon::create([
                                        'link' => $link,
                                        'social_link_id' => $socialLink->id,
                                    ]);

                                    $socialIcon->newAddMedia($input['social_links_image'][$key])
                                        ->toMediaCollection(SocialLink::SOCIAL_ICON, config('app.media_disc'));
                                }
                            }
                            $socialIcon = SocialIcon::where('id', $socialIconId)->first();
                            if (!empty($socialIconId)) {
                                $socialIcon->update([
                                    'link' => $input['social_links'][$key],
                                ]);
                            }
                        }
                    } else {
                        if (isset($input['social_links'])) {
                            $socialLink = SocialLink::whereVcardId($vcard->id)->first();
                            foreach ($input['social_links'] as $key => $link) {

                                $socialIcon = SocialIcon::create([
                                    'link' => $link,
                                    'social_link_id' => $socialLink->id,
                                ]);

                                $socialIcon->newAddMedia($input['social_links_image'][$key])
                                    ->toMediaCollection(SocialLink::SOCIAL_ICON, config('app.media_disc'));
                            }
                        }
                    }
                } else {
                    $socialIcons = SocialIcon::where('social_link_id', $socialLink->id)->get();

                    foreach ($socialIcons as $socialIcon) {
                        $socialIcon->clearMediaCollection(SocialLink::SOCIAL_ICON);
                        $socialIcon->delete();
                    }
                }
                $socialLink->update($input);
            }
            if (isset($input['profile_img']) && !empty($input['profile_img'])) {
                $vcard->newClearMediaCollection($input['profile_img'], Vcard::PROFILE_PATH);
                $vcard->newAddMedia($input['profile_img'])->toMediaCollection(
                    Vcard::PROFILE_PATH,
                    config('app.media_disc')
                );
            }

            if (isset($input['cover_img']) && !empty($input['cover_img'])) {
                $vcard->newClearMediaCollection($input['cover_img'], Vcard::COVER_PATH);
                $vcard->newAddMedia($input['cover_img'])->toMediaCollection(Vcard::COVER_PATH, config('app.media_disc'));
            }

            if (isset($input['privacy_policy']) && !empty($input['privacy_policy'])) {
                $privacyPolicy = PrivacyPolicy::where('vcard_id', $vcard->id)->first();
                if ($privacyPolicy) {
                    $privacyPolicy->update($input);
                } else {
                    PrivacyPolicy::create([
                        'vcard_id' => $vcard->id,
                        'privacy_policy' => $input['privacy_policy'],
                    ]);
                }
            }

            if (isset($input['term_condition']) && !empty($input['term_condition'])) {
                $termCondition = TermCondition::where('vcard_id', $vcard->id)->first();
                if ($termCondition) {
                    $termCondition->update($input);
                } else {
                    TermCondition::create([
                        'vcard_id' => $vcard->id,
                        'term_condition' => $input['term_condition'],
                    ]);
                }
            }

            if (isset($input['part']) && $input['part'] == 'qrcode-customize') {
                $inputArr = Arr::except($input, ['_method', '_token', 'part']);
                $inputArr['applySetting'] = isset($inputArr['applySetting']) ? 1 : 0;
                $vcardId = $inputArr['vcard_id'];

                foreach ($inputArr as $key => $value) {
                    if ($value !== null) {
                        $qrCodeCustmize = QrcodeEdit::whereTenantId(getLogInTenantId())
                            ->where('key', $key)
                            ->where('vcard_id', $vcardId)
                            ->first();

                        if ($qrCodeCustmize) {
                            $qrCodeCustmize->update([
                                'value' => $value,
                            ]);
                        } else {
                            QrcodeEdit::create([
                                'tenant_id' => getLogInTenantId(),
                                'vcard_id' => $vcardId,
                                'key' => $key,
                                'value' => $value,
                            ]);
                        }
                    }
                }
            }

            if (isset($input['part']) && $input['part'] == 'manage-section') {
                VcardSections::updateOrcreate(
                    ['vcard_id' => $vcard->id],
                    [
                        'vcard_id' => $vcard->id,
                        'header' => 1,
                        'contact_list' => isset($input['contact_list']) ? 1 : 0,
                        'services' => isset($input['services']) ? 1 : 0,
                        'products' => isset($input['products']) ? 1 : 0,
                        'galleries' => isset($input['galleries']) ? 1 : 0,
                        'blogs' => isset($input['blogs']) ? 1 : 0,
                        'map' => isset($input['map']) ? 1 : 0,
                        'testimonials' => isset($input['testimonials']) ? 1 : 0,
                        'business_hours' => isset($input['business_hours']) ? 1 : 0,
                        'appointments' => isset($input['appointments']) ? 1 : 0,
                        'insta_embed' => isset($input['insta_embed']) ? 1 : 0,
                        'banner' => isset($input['banner']) ? 1 : 0,
                        'iframe' => isset($input['iframe']) ? 1 : 0,
                        'news_latter_popup' => isset($input['news_latter_popup']) ? 1 : 0,
                        'one_signal_notification' => isset($input['one_signal_notification']) ? 1 : 0,
                    ]
                );
            }
            if (isset($input['part']) && $input['part'] == 'dynamic_vcard') {
                DynamicVcard::updateOrcreate(
                    ['vcard_id' => $vcard->id],
                    [
                        'vcard_id' => $vcard->id,
                        'primary_color' => $input['primary_color'],
                        'back_color' => $input['back_color'],
                        'back_seconds_color' => $input['back_seconds_color'],
                        'button_text_color' => $input['button_text_color'],
                        'text_label_color' => $input['text_label_color'],
                        'text_description_color' => $input['text_description_color'],
                        'cards_back' => $input['cards_back'],
                        'social_icon_color' => $input['social_icon_color'],
                        'sticky_bar' => isset($input['sticky_bar']) ? $input['sticky_bar'] : 0,
                        'button_style' => $input['button_style'],
                    ]
                );
            }

            DB::commit();

            return $vcard;
        } catch (\Exception $e) {
            DB::rollBack();

            throw $e;
        }
    }

    public function checkTotalVcard(): bool
    {
        $makeVcard = false;
        $subscription = Subscription::where('tenant_id', getLogInTenantId())->where(
            'status',
            Subscription::ACTIVE
        )->first();

        if (!empty($subscription)) {
            $totalCards = Vcard::whereTenantId(getLogInTenantId())->count();
            $makeVcard = $subscription->no_of_vcards > $totalCards;
        }

        return $makeVcard;
    }

    public function saveSlots(
        $input,
        $day,
        $vcard
    ): bool {
        $startTimeArr = $input['startTimes'][$day] ?? [];
        $endTimeArr = $input['endTimes'][$day] ?? [];
        if (count($startTimeArr) != 0 && count($endTimeArr) != 0) {
            foreach (array_unique($startTimeArr) as $key => $startTime) {
                Appointment::create([
                    'vcard_id' => $vcard->id,
                    'day_of_week' => $day,
                    'start_time' => $startTime,
                    'end_time' => $endTimeArr[$key],
                ]);
            }
        }

        return true;
    }

    public function analyticsData(
        $input,
        $vcard
    ): array {
        $analytics = Analytic::where('vcard_id', $vcard->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['vcardID'] = $vcard->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('vcard_id', $input['vcardId']);
        $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')
            )->count();
            $data['weeklyLabels'][] = $date->format('d-m-y');
        }

        return $data;
    }

    public function dashboardChartData(
        $input
    ) {
        $startDate = isset($input['start_date']) ? Carbon::parse($input['start_date']) : '';
        $endDate = isset($input['end_date']) ? Carbon::parse($input['end_date']) : '';
        $data = [];


        $vcards = Vcard::where('tenant_id', getLogInTenantId())
            ->where('status', 1)
            ->get();

        $vcardIds = $vcards
            ->pluck('id')
            ->toArray();

        $period = CarbonPeriod::create($startDate, $endDate);

        foreach ($period as $date) {
            $data['weeklyLabels'][] = $date->format('d-m-y');
        }

        $colors = [
            'rgb(245, 158, 11',
            'rgb(77, 124, 15',
            'rgb(254, 199, 2',
            'rgb(80, 205, 137',
            'rgb(16, 158, 247',
            'rgb(241, 65, 108',
            'rgb(80, 205, 137',
            'rgb(245, 152, 28',
            'rgb(13, 148, 136',
            'rgb(59, 130, 246',
            'rgb(162, 28, 175',
            'rgb(190, 18, 60',
            'rgb(244, 63, 94',
            'rgb(30, 30, 45',
        ];

        $vcards = $vcards->keyBy('id');

        $analytics = Analytic::whereIn('vcard_id', $vcardIds);
        $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')])
            ->addSelect([\DB::raw('vcard_id')])
            ->whereBetween('created_at', [$startDate, $endDate])
            ->orderBy('created_at')
            ->get()
            ->groupBy('vcard_id');

        $period = CarbonPeriod::create($startDate, $endDate);
        foreach ($vcardIds as $key => $vcardId) {
            $color = $colors[ceil($key % count($colors))];
            $visitorArr = isset($visitor[$vcardId]) ? $visitor[$vcardId] : [];

            $data['data'][] = $this->getData($vcards[$vcardId], $period, $color, $visitorArr);
        }

        return $data;
    }

    public function getData(
        $vcard,
        $period,
        $color,
        $visitor = null
    ) {
        // $period = CarbonPeriod::create($startDate, $endDate);
        $data = [];
        $data['backgroundColor'] = $color . ')';
        $data['label'] = $vcard->name;
        $data['data'] = $this->getVisitor($period, $vcard->id, $visitor);
        $data['lineTension'] = 0.5;
        $data['radius'] = 4;
        $data['borderColor'] = $color . ', 0.7)';

        return $data;
    }

    public function getVisitor(
        $period,
        $vcardId,
        $visitor
    ) {
        $data = [];
        foreach ($period as $date) {
            try {
                if ($visitor instanceof Collection) {
                    $count = $visitor->where('day', $date->format('d'))->where(
                        'month',
                        $date->format('m')
                    )->count();
                    $data[] = $count;
                } else {
                    if (empty($visitor)) {
                        $data[] = 0;
                    } else {
                        if ($visitor instanceof Analytic) {
                            $count = ($visitor->day == $date->format('d') && $visitor->month == $date->format('m')) ? 1 : 0;
                            $data[] = $count;
                        }
                    }
                }
            } catch (\Exception $exception) {
            }
        }

        return $data;
    }

    public function getDuplicateVcard(
        $vcard,
        $userId = null
    ) {
        if (!$vcard) {
            throw new Exception(__('messages.flash.vcard_null'));
        }
        $newVcard = $vcard->replicate();
        if ($newVcard['tenant_id'] != getLogInTenantId()) {
            $user = User::findOrFail($userId);
            $tanentId = $user->tenant_id;
            $newVcard['tenant_id'] = $tanentId;
        } else {
            $tanentId = $vcard->tenant_id;
        }
        $baseAlias = preg_replace('/[0-9]+/', '', $newVcard->url_alias);
        $matchAlias = Vcard::where('url_alias', 'LIKE', '%' . $newVcard->url_alias . '%')->get();
        $lastCharArr = [];
        foreach ($matchAlias as $alias) {
            $aliasLastCharCheck = str_replace($newVcard->url_alias, '', $alias->url_alias);
            $lastCharArr[] = $aliasLastCharCheck;
        }
        $maxChar = max($lastCharArr);
        $maxChar++;
        $newVcard->url_alias = $newVcard->url_alias . $maxChar;
        $newVcard->save();

        $newVcard->addMediaFromUrl($vcard->profile_url)->toMediaCollection(
            Vcard::PROFILE_PATH,
            config('app.media_disc')
        );

        $newVcard->addMediaFromUrl($vcard->cover_url)->toMediaCollection(
            Vcard::COVER_PATH,
            config('app.media_disc')
        );

        $newVcardSocial = $vcard->socialLink->replicate();
        $newVcardSocial->vcard_id = $newVcard->id;
        $newVcardSocial->save();

        foreach ($vcard->services as $newVcardServices) {
            $newVcardServices = $newVcardServices->replicate();
            $newVcardServices->vcard_id = $newVcard->id;
            $newVcardServices->save();

            $newVcardServices->addMediaFromUrl($newVcardServices->service_icon)->toMediaCollection(
                VcardService::SERVICES_PATH,
                config('app.media_disc')
            );
        }

        foreach ($vcard->products as $newVcardProducts) {
            $newVcardProducts = $newVcardProducts->replicate();
            $newVcardProducts->vcard_id = $newVcard->id;
            $newVcardProducts->save();

            $newVcardProducts->addMediaFromUrl($newVcardProducts->product_icon)->toMediaCollection(
                Product::PRODUCT_PATH,
                config('app.media_disc')
            );
        }
        foreach ($vcard->testimonials as $newVcardTestimonial) {
            $newVcardTestimonial = $newVcardTestimonial->replicate();
            $newVcardTestimonial->vcard_id = $newVcard->id;
            $newVcardTestimonial->save();

            $newVcardTestimonial->addMediaFromUrl($newVcardTestimonial->image_url)->toMediaCollection(
                Testimonial::TESTIMONIAL_PATH,
                config('app.media_disc')
            );
        }
        foreach ($vcard->gallery as $newVcardGallery) {
            $newVcardGallery = $newVcardGallery->replicate();
            $newVcardGallery->vcard_id = $newVcard->id;
            $newVcardGallery->save();

            $newVcardGallery->addMediaFromUrl($newVcardGallery->gallery_image)->toMediaCollection(
                Gallery::GALLERY_PATH,
                config('app.media_disc')
            );
        }
        foreach ($vcard->blogs as $newVcardBlogs) {
            $newVcardBlogs = $newVcardBlogs->replicate();
            $newVcardBlogs->vcard_id = $newVcard->id;
            $newVcardBlogs->save();

            $newVcardBlogs->addMediaFromUrl($newVcardBlogs->blog_icon)->toMediaCollection(
                VcardBlog::BLOG_PATH,
                config('app.media_disc')
            );
        }
        foreach ($vcard->businessHours as $newVcardBusinessHours) {
            $newVcardBusinessHours = $newVcardBusinessHours->replicate();
            $newVcardBusinessHours->vcard_id = $newVcard->id;
            $newVcardBusinessHours->save();
        }
        foreach ($vcard->appointmentHours as $newVcardAppointmentHours) {
            $newVcardAppointmentHours = $newVcardAppointmentHours->replicate();
            $newVcardAppointmentHours->vcard_id = $newVcard->id;
            $newVcardAppointmentHours->save();
        }
        foreach ($vcard->customeLink as $newVcardCustomLink) {
            $newVcardCustomLink = $newVcardCustomLink->replicate();
            $newVcardCustomLink->vcard_id = $newVcard->id;
            $newVcardCustomLink->save();
        }
        foreach ($vcard->iframes as $newVcardIframes) {
            $newVcardIframes = $newVcardIframes->replicate();
            $newVcardIframes->vcard_id = $newVcard->id;
            $newVcardIframes->save();
        }
        foreach ($vcard->InstagramEmbed as $newVcardInstagramEmbed) {
            $newVcardInstagramEmbed = $newVcardInstagramEmbed->replicate();
            $newVcardInstagramEmbed->vcard_id = $newVcard->id;
            $newVcardInstagramEmbed->save();
        }

        foreach ($vcard->banners as $banner) {
            $newVcardBanner = $banner->replicate();
            $newVcardBanner->vcard_id = $newVcard->id;
            $newVcardBanner->save();
        }

        foreach ($vcard->Qrcode as $Qrcode) {
            $newVcardQrcode = $Qrcode->replicate();
            $newVcardQrcode->vcard_id = $newVcard->id;
            $newVcardQrcode->tenant_id = $tanentId;
            $newVcardQrcode->save();
        }

        if (isset($vcard->privacy_policy)) {
            $newVcardPrivacyPolicy = $vcard->privacy_policy->replicate();
            $newVcardPrivacyPolicy->vcard_id = $newVcard->id;
            $newVcardPrivacyPolicy->save();
        }

        if (isset($vcard->term_condition)) {
            $newVcardTermCondition = $vcard->term_condition->replicate();
            $newVcardTermCondition->vcard_id = $newVcard->id;
            $newVcardTermCondition->save();
        }
    }
}