upgraded for new changes

This commit is contained in:
Inshal 2024-10-27 02:51:48 +05:00
parent 76e6f914a7
commit fe495ebd89
41 changed files with 452 additions and 260 deletions

View File

@ -9,6 +9,9 @@ use Exception;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use GuzzleHttp\HandlerStack;
use Kevinrob\GuzzleCache\CacheMiddleware;
use Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;
class Calendly class Calendly
{ {
@ -117,6 +120,24 @@ class Calendly
return false; return false;
} }
} }
public function getUserSlug()
{
// 1. Call the /users/me API to get user information
$client = new Client();
try {
$response = $client->request('GET', 'https://api.calendly.com/users/me', [
'headers' => [
'Authorization' => 'Bearer ' . $this->accessToken(),
'Content-Type' => 'application/json',
]
]);
$data = json_decode($response->getBody(), true);
return $userUri = $data['resource']['slug'];
} catch (\Exception $e) {
return false;
}
}
public function eventTypes() public function eventTypes()
{ {
// 1. Call the /users/me API to get user information // 1. Call the /users/me API to get user information
@ -145,7 +166,89 @@ class Calendly
$setting->save(); $setting->save();
} }
function getAvailableDates($even_type_url, $month, $tz = "UTC") function mapTimezone($tz){
$timezone_maping = [
"PST"=> "America/Los_Angeles",
"EST"=> "America/New_York",
"CST"=> "America/Chicago",
"MST"=> "America/Denver",
"PST"=> "America/Los_Angeles",
"AST"=> "America/Halifax",
];
return data_get($timezone_maping, $tz, $tz);
}
function getAvailableDates($even_type_url, $month, $tz = "UTC"){
$user_slug = $this->getUserSlug();
//https://calendly.com/api/booking/event_types/lookup?event_type_slug=15-minute&profile_slug=vini-peptidewebmd
//https://api.calendly.com/event_types/527074d7-c194-419a-9575-60de51220a8e/calendar/range?timezone=America/Chicago&diagnostics=false&range_start=2024-10-01&range_end=2024-10-31&scheduling_link_uuid=cmm8-rtf-7q6
//https://calendly.com/api/booking/event_types/527074d7-c194-419a-9575-60de51220a8e/calendar/range?timezone=Asia%2FKarachi&diagnostics=false&range_start=2024-10-26&range_end=2024-10-31&scheduling_link_uuid=cmm8-rtf-7q6
// $user_slug = explode('/', $userUri)[4];
$client = new Client();
$response = $client->request('GET', $even_type_url, [
'headers' => [
'Authorization' => 'Bearer ' . $this->accessToken(),
'Content-Type' => 'application/json',
],
// 'query' => $queryParams
]);
$event = json_decode($response->getBody(), true);
$web_event = json_decode($this->makeRequest("https://calendly.com/api/booking/event_types/lookup?event_type_slug={$event['resource']['slug']}&profile_slug={$user_slug}"),true);
// var_Dump("https://calendly.com/api/booking/event_types/lookup?event_type_slug={$event['resource']['slug']}&profile_slug={$user_slug}");
$event_slug = data_get($web_event,"uuid");
// $eventDetails = json_decode($this->makeRequest($eventDetailsUrl));
// $eventDetailsUrl = "https://calendly.com/api/booking/event_types/lookup?event_type_slug=$event_type&profile_slug=$owner_id";
$current_month = Carbon::now()->month;
$current_date = Carbon::now()->day;
$timezone = $this->mapTimezone($tz);
// if ($month == $current_month && $current_date > 15) {}
$date = Carbon::createFromDate(Carbon::now()->year, $month, 1);
// $start_date = Carbon::now()->startOfMonth()->tz("UTC");
$start_date = $date->startOfMonth()->format('Y-m-d');
$end_date = $date->endOfMonth()->format('Y-m-d');
$uid = data_get($web_event,"scheduling_link.uid");
$url = "https://calendly.com/api/booking/event_types/{$event_slug}/calendar/range?timezone=$timezone&diagnostics=false&range_start=$start_date&range_end=$end_date&scheduling_link_uuid={$uid}";
$response = $client->request('GET', $url, [
'headers' => [
'Authorization' => 'Bearer ' . $this->accessToken(),
'Content-Type' => 'application/json',
],
]);
$eventDetails = json_decode($this->makeRequest($url),true);
$availableSlots = [];
foreach ($eventDetails['days'] as $_event) {
if($_event['status'] == 'available') {
$slots = [
// 'date' => $event['date'],
];
foreach ($_event['spots'] as $slot) {
if($slot['status'] == 'available'){
$slotDateTime = Carbon::parse($slot['start_time'])->tz($timezone);
$slot['formatted_datetime'] = $slotDateTime->format('Y-m-d g:i:00');
$slot['scheduling_url'] = "https://calendly.com/$user_slug/{$event['resource']['slug']}/{$slot['start_time']}";
}
$slots[] = $slot;
}
$availableSlots[$_event['date']] = $slots;
}
}
// var_dump($eventDetails);
return $availableSlots;
}
function getAvailableDatesOld($even_type_url, $month, $tz = "UTC")
{
$cacheKey = $even_type_url . $month . $tz;
return Cache::remember($cacheKey, now()->addMinutes(2), function () use ($even_type_url, $month, $tz) {
return $this->getAvailableDates2($even_type_url, $month, $tz);
});
}
function getAvailableDates2($even_type_url, $month, $tz = "UTC")
{ {
try { try {
@ -161,7 +264,6 @@ class Calendly
$start_time = $date->startOfDay()->format('Y-m-d\T24:00:00.000000\Z'); $start_time = $date->startOfDay()->format('Y-m-d\T24:00:00.000000\Z');
$end_time = $date->addDays(7)->endOfDay()->format('Y-m-d\T24:00:00.000000\Z'); $end_time = $date->addDays(7)->endOfDay()->format('Y-m-d\T24:00:00.000000\Z');
$client = new Client(); $client = new Client();
try { try {
@ -172,6 +274,7 @@ class Calendly
'start_time' => $start_time, 'start_time' => $start_time,
'end_time' => $end_time 'end_time' => $end_time
]; ];
// dd($queryParams);
$str = "event_type=" . urlencode($queryParams['event_type']) . "&" . "start_time=" . urlencode($queryParams['start_time']) . "&" . "end_time=" . urlencode($queryParams['end_time']); $str = "event_type=" . urlencode($queryParams['event_type']) . "&" . "start_time=" . urlencode($queryParams['start_time']) . "&" . "end_time=" . urlencode($queryParams['end_time']);
$eventTypeUrl = $eventTypeUrl . "?" . ($str); $eventTypeUrl = $eventTypeUrl . "?" . ($str);
// Send the request to Calendly // Send the request to Calendly
@ -252,12 +355,15 @@ class Calendly
function getCrfToken($url) function getCrfToken($url)
{ {
try {
$response = $this->makeRequest($url); $response = $this->makeRequest($url);
// var_dump($response);
//<meta name="csrf-token" content="mTW6eNk5xiDTzby7yHl_iVTO1_pi-CXZ2U9MYPcXGJGMpksW4iGLJniNxs-T4xrmYlLbXFaLuU8FZ75cuorz8w" />
preg_match('/<meta name="csrf-token" content="(.*?)" \/>/', $response, $matches); preg_match('/<meta name="csrf-token" content="(.*?)" \/>/', $response, $matches);
return $matches[1]; return $matches[1];
} catch (Exception $e) {
$response = $this->makeRequest($url);
preg_match('/<meta name="csrf-token" content="(.*?)" \/>/', $response, $matches);
return $matches[1];
}
} }
function getEventDetails($url) function getEventDetails($url)
@ -284,14 +390,16 @@ class Calendly
$bookingDate = $url_parts[5]; $bookingDate = $url_parts[5];
$event_type = $url_parts[4]; $event_type = $url_parts[4];
$owner_id = $url_parts[3]; $owner_id = $url_parts[3];
$eventDetailsUrl = "https://calendly.com/api/booking/profiles/$owner_id/event_types/$event_type"; $eventDetailsUrl = "https://calendly.com/api/booking/event_types/lookup?event_type_slug=$event_type&profile_slug=$owner_id";
$eventDetails = json_decode($this->makeRequest($eventDetailsUrl)); $eventDetails = json_decode($this->makeRequest($eventDetailsUrl));
// var_dump($eventDetails); // var_dump($eventDetails);
$crfToken = $this->getCrfToken($url); $crfToken = $this->getCrfToken($url);
$timezone = $this->mapTimezone($timezone);
$eventUuid = $eventDetails->uuid; // $eventUuid = $eventDetails->uuid;
$link_uuid = $eventDetails->scheduling_link->uid; $eventUuid = data_get($eventDetails, 'eventDetails.uid');
$custom_fields_id = $eventDetails->custom_fields[0]->id; $link_uuid = data_get($eventDetails, 'scheduling_link.uid');
// $custom_fields_id = $eventDetails->custom_fields[0]->id;
$custom_fields_id = data_get($eventDetails, 'custom_fields.0.id');
$booking_request_id = urlencode($this->generateRandomString(36) . "|$bookingDate|$eventUuid|$name"); $booking_request_id = urlencode($this->generateRandomString(36) . "|$bookingDate|$eventUuid|$name");
//convert to php array //convert to php array
$bookingData = [ $bookingData = [
@ -305,14 +413,14 @@ class Calendly
"booking_flow" => "v3", "booking_flow" => "v3",
"seconds_to_convert" => 200 "seconds_to_convert" => 200
], ],
"embed" => [], "embed" => (object)[],
"event" => [ "event" => [
"start_time" => $bookingDate, "start_time" => $bookingDate,
"location_configuration" => [ "location_configuration" => data_get($eventDetails,"location_configurations.0",[
"location" => "", "location" => "",
"phone_number" => "", "phone_number" => "",
"additional_info" => "" "additional_info" => ""
], ]),
"guests" => [] "guests" => []
], ],
"event_fields" => [ "event_fields" => [
@ -333,7 +441,7 @@ class Calendly
"full_name" => $name, "full_name" => $name,
"email" => $email "email" => $email
], ],
"payment_token" => [], "payment_token" => (object)[],
"tracking" => [ "tracking" => [
"fingerprint" => $this->generateRandomString(32) "fingerprint" => $this->generateRandomString(32)
], ],

View File

@ -1769,7 +1769,6 @@ class PatientController extends Controller
$categorySave->category_name = $category_name[$key]; $categorySave->category_name = $category_name[$key];
$categorySave->save(); $categorySave->save();
} }
ProductCategory::create([ ProductCategory::create([
'product_id' => $product_id, 'product_id' => $product_id,
'category_id' => $cat_id 'category_id' => $cat_id

View File

@ -43,5 +43,13 @@ class SendAppointmentBookedEmail implements ShouldQueue
$message->to($patient->email, $patient->first_name) $message->to($patient->email, $patient->first_name)
->subject('Appointment Booked.'); ->subject('Appointment Booked.');
}); });
Mail::send('emails.appointmentBooked', [
'patient' => $patient,
'appointment' => $appointment,
'setting' => $setting
], function ($message) use ($patient) {
$message->to(ENV('ADMIN_EMAIL'), $patient->first_name)
->subject('Appointment Booked.');
});
} }
} }

View File

@ -28,5 +28,9 @@ class SendPaymentProcessedEmail implements ShouldQueue
$message->to($patient->email, $patient->first_name) $message->to($patient->email, $patient->first_name)
->subject('Payment Processed Successfully.'); ->subject('Payment Processed Successfully.');
}); });
Mail::send('emails.process-payment', [], function ($message) {
$message->to(ENV('ADMIN_EMAIL'), "Awais")
->subject('Payment Processed Successfully.');
});
} }
} }

View File

@ -12,6 +12,7 @@
"agence104/livekit-server-sdk": "^1.2", "agence104/livekit-server-sdk": "^1.2",
"fakerphp/faker": "^1.23", "fakerphp/faker": "^1.23",
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"kevinrob/guzzle-cache-middleware": "^5.1",
"laravel/framework": "^10.10", "laravel/framework": "^10.10",
"laravel/sanctum": "^3.2", "laravel/sanctum": "^3.2",
"laravel/tinker": "^2.8", "laravel/tinker": "^2.8",

87
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "ef6cab73e6119be26c66ac2906eef800", "content-hash": "1302f567ac93a1fe133298b2a9441d06",
"packages": [ "packages": [
{ {
"name": "agence104/livekit-server-sdk", "name": "agence104/livekit-server-sdk",
@ -1397,6 +1397,91 @@
], ],
"time": "2023-12-03T19:50:20+00:00" "time": "2023-12-03T19:50:20+00:00"
}, },
{
"name": "kevinrob/guzzle-cache-middleware",
"version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/Kevinrob/guzzle-cache-middleware.git",
"reference": "6bd64dbbe5155107d84a0f67140a8822a709c6d0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Kevinrob/guzzle-cache-middleware/zipball/6bd64dbbe5155107d84a0f67140a8822a709c6d0",
"reference": "6bd64dbbe5155107d84a0f67140a8822a709c6d0",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^6.0 || ^7.0",
"guzzlehttp/promises": "^1.4 || ^2.0",
"guzzlehttp/psr7": "^1.7.0 || ^2.0.0",
"php": ">=7.2.0"
},
"require-dev": {
"cache/array-adapter": "^0.4 || ^0.5 || ^1.0",
"cache/simple-cache-bridge": "^0.1 || ^1.0",
"doctrine/cache": "^1.10",
"illuminate/cache": "^5.0",
"league/flysystem": "^2.5",
"phpunit/phpunit": "^8.5.15 || ^9.5",
"psr/cache": "^1.0",
"symfony/cache": "^4.4 || ^5.0",
"symfony/phpunit-bridge": "^4.4 || ^5.0"
},
"suggest": {
"doctrine/cache": "This library has a lot of ready-to-use cache storage (to be used with Kevinrob\\GuzzleCache\\Storage\\DoctrineCacheStorage). Use only versions >=1.4.0 < 2.0.0",
"guzzlehttp/guzzle": "For using this library. It was created for Guzzle6 (but you can use it with any PSR-7 HTTP client).",
"laravel/framework": "To be used with Kevinrob\\GuzzleCache\\Storage\\LaravelCacheStorage",
"league/flysystem": "To be used with Kevinrob\\GuzzleCache\\Storage\\FlysystemStorage",
"psr/cache": "To be used with Kevinrob\\GuzzleCache\\Storage\\Psr6CacheStorage",
"psr/simple-cache": "To be used with Kevinrob\\GuzzleCache\\Storage\\Psr16CacheStorage"
},
"type": "library",
"autoload": {
"psr-4": {
"Kevinrob\\GuzzleCache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kevin Robatel",
"email": "kevinrob2@gmail.com",
"homepage": "https://github.com/Kevinrob"
}
],
"description": "A HTTP/1.1 Cache for Guzzle 6. It's a simple Middleware to be added in the HandlerStack. (RFC 7234)",
"homepage": "https://github.com/Kevinrob/guzzle-cache-middleware",
"keywords": [
"Etag",
"Flysystem",
"Guzzle",
"cache",
"cache-control",
"doctrine",
"expiration",
"guzzle6",
"handler",
"http",
"http 1.1",
"middleware",
"performance",
"php",
"promise",
"psr6",
"psr7",
"rfc7234",
"validation"
],
"support": {
"issues": "https://github.com/Kevinrob/guzzle-cache-middleware/issues",
"source": "https://github.com/Kevinrob/guzzle-cache-middleware/tree/v5.1.0"
},
"time": "2023-11-09T06:53:45+00:00"
},
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v10.48.12", "version": "v10.48.12",

BIN
public/product/test.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
public/product/testTest.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because one or more lines are too long

View File

@ -65,14 +65,14 @@ const handleNavScroll = evt => {
<VImg :src="seetingPlanLogo" width="150" height="50" class="logo-img" /> <VImg :src="seetingPlanLogo" width="150" height="50" class="logo-img" />
</h1> </h1>
</RouterLink> </RouterLink>
<RouterLink to="/" v-if="currentUser == 'patient'" <a href="https://purityselect.com/" v-if="currentUser == 'patient'"
class="app-logo d-flex align-center gap-x-3 app-title-wrapper"> class="app-logo d-flex align-center gap-x-3 app-title-wrapper">
<!-- <div class="d-flex " /> --> <!-- <div class="d-flex " /> -->
<h1 class="leading-normal text-primary" style="margin-right: 27px;"> <h1 class="leading-normal text-primary" style="margin-right: 27px;">
<VImg :src="seetingPlanLogo" width="150" height="50" class="logo-img" /> <VImg :src="seetingPlanLogo" width="150" height="50" class="logo-img" />
</h1> </h1>
</RouterLink> </a>
</slot> </slot>
</div> </div>
<slot name="before-nav-items"> <slot name="before-nav-items">

View File

@ -146,6 +146,7 @@ const logout = () => {
localStorage.removeItem("selectedSidebarMenu"); localStorage.removeItem("selectedSidebarMenu");
localStorage.removeItem("plan_name"); localStorage.removeItem("plan_name");
localStorage.removeItem("plan_price"); localStorage.removeItem("plan_price");
localStorage.removeItem("getCalendlyAvailableTImes");
if (currentUser.value == "agent") { if (currentUser.value == "agent") {
router.push("/provider/login"); router.push("/provider/login");
} else { } else {

View File

@ -1,14 +1,21 @@
<script setup> <script setup>
import axios from '@axios'; import axios from '@axios';
const seetingFooterText = ref(); const seetingFooterText = ref();
const constact = () => {
// window.open('/terms-and-conditions', '_blank');
window.open('https://purityselect.com/contact/')
};
const gotoTermsCondition = () => { const gotoTermsCondition = () => {
window.open('/terms-and-conditions', '_blank'); // window.open('/terms-and-conditions', '_blank');
window.open('https://purityselect.com/terms-and-condition/')
}; };
const gotoPrivacyPolicy = () => { const gotoPrivacyPolicy = () => {
window.open('/privacy-policy', '_blank'); // window.open('/privacy-policy', '_blank');
window.open('https://purityselect.com/privacy-policy/')
}; };
const gotoRefundPolicy = () => { const gotoRefundPolicy = () => {
window.open('/refund-policy', '_blank'); // window.open('/refund-policy', '_blank');
window.open('https://purityselect.com/refund-and-return-policy/')
}; };
onMounted(async () => { onMounted(async () => {
@ -25,7 +32,7 @@ onMounted(async () => {
</span> </span>
<!-- 👉 Footer: right content --> <!-- 👉 Footer: right content -->
<div class="d-flex align-center"> <div class="d-flex align-center">
<a type="button" class="mr-3 ">Contact Us</a> <a type="button" class="mr-3 " @click="constact()">Contact Us</a>
<a type="button" class="mr-3 " @click="gotoTermsCondition()">Terms & Conditions</a> <a type="button" class="mr-3 " @click="gotoTermsCondition()">Terms & Conditions</a>
<a type="button" class="mr-3 " @click="gotoPrivacyPolicy()">Privacy Policy</a> <a type="button" class="mr-3 " @click="gotoPrivacyPolicy()">Privacy Policy</a>
<a type="button" class="" @click="gotoRefundPolicy()">Refund Policy</a> <a type="button" class="" @click="gotoRefundPolicy()">Refund Policy</a>

View File

@ -16,7 +16,7 @@ const props = defineProps({
<v-spacer></v-spacer> <v-spacer></v-spacer>
<!-- Links on the right --> <!-- Links on the right -->
<v-btn text color="white" href="#">Live Chat</v-btn> <!-- <v-btn text color="black" href="#">Live Chat</v-btn> -->
<v-btn text color="white" href="https://purityselect.com/contact/" target="_blank">Contact Us</v-btn> <v-btn text color="white" href="https://purityselect.com/contact/" target="_blank">Contact Us</v-btn>
</v-app-bar> </v-app-bar>

View File

@ -606,11 +606,11 @@ const backFun = () => {
} }
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.bg-white bg-change-bk .current-plan { .bg-white bg-change-bk .current-plan {
@ -647,11 +647,11 @@ const backFun = () => {
</style> </style>
<style lang="scss"> <style lang="scss">
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.total-font { .total-font {

View File

@ -260,7 +260,11 @@ const getMonthName = (monthNumber, year = new Date().getFullYear()) => {
const getFormattedDatetimes = (date) => { const getFormattedDatetimes = (date) => {
// Ensure the date is in the format "YYYY-MM-DD" // Ensure the date is in the format "YYYY-MM-DD"
const formattedDate = date.replace(/\//g, '-'); const formattedDate = date.replace(/\//g, '-');
let obj = store.getters.getCalendlyAvailableTImes let obj = [];
if(!store.getters.getCalendlyAvailableTImes)
obj = JSON.parse(localStorage.getItem('getCalendlyAvailableTImes'))
else
obj = store.getters.getCalendlyAvailableTImes
console.log('//////formattedDate',formattedDate,obj) console.log('//////formattedDate',formattedDate,obj)
// Check if the date exists in the object // Check if the date exists in the object
if (obj.hasOwnProperty(formattedDate)) { if (obj.hasOwnProperty(formattedDate)) {
@ -488,6 +492,7 @@ const scheduleEvent = async () => {
timeSlotString: timeSlotString.value, timeSlotString: timeSlotString.value,
url:getSchedulingUrl(store.getters.getCalendlyAvailableTImes,calanderFormatedDate.value,isTimeSlot.value), url:getSchedulingUrl(store.getters.getCalendlyAvailableTImes,calanderFormatedDate.value,isTimeSlot.value),
} }
console.log('>>>apptData',apptData)
// await openSchedulingURL(apptData.appointment_date, apptData.appointment_time); // await openSchedulingURL(apptData.appointment_date, apptData.appointment_time);
localStorage.setItem('patient_appointment_details', JSON.stringify(apptData)) localStorage.setItem('patient_appointment_details', JSON.stringify(apptData))
console.log(JSON.parse(localStorage.getItem('patient_appointment_details'))) console.log(JSON.parse(localStorage.getItem('patient_appointment_details')))
@ -648,7 +653,7 @@ const backFun = () => {
</script> </script>
<template> <template>
<StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> <!-- <StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> -->
<VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="primary"> <VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;"> <VCardText class="" style="color: white !important;">
<div class="demo-space-x"> <div class="demo-space-x">
@ -931,11 +936,11 @@ const backFun = () => {
} }
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.bg-white bg-change-bk .current-plan { .bg-white bg-change-bk .current-plan {
@ -971,11 +976,11 @@ const backFun = () => {
</style> </style>
<style lang="scss"> <style lang="scss">
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.total-font { .total-font {

View File

@ -258,7 +258,6 @@ const validatePayment = async () => {
if (isValid) { if (isValid) {
await saveOrderInfo() await saveOrderInfo()
await processPayment() await processPayment()
// await updatePatientAddress() // await updatePatientAddress()
// if (prescreptionRequired.value) // if (prescreptionRequired.value)
if (!store.getters.getErrorMessage) { if (!store.getters.getErrorMessage) {
@ -269,7 +268,6 @@ const validatePayment = async () => {
}, 5000) }, 5000)
} }
} }
// else // else
// router.replace(route.query.to && route.query.to != '/checkout' ? String(route.query.to) : '/thankyou') // router.replace(route.query.to && route.query.to != '/checkout' ? String(route.query.to) : '/thankyou')
} }
@ -447,7 +445,7 @@ const backFun = () => {
</script> </script>
<template> <template>
<StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> <!-- <StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> -->
<VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="yellow-theme-button"> <VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="yellow-theme-button">
<VCardText class="" style="color: white !important;"> <VCardText class="" style="color: white !important;">
<div class="demo-space-x"> <div class="demo-space-x">
@ -603,7 +601,6 @@ const backFun = () => {
<v-card> <v-card>
<v-card-text> <v-card-text>
<div class="mt-2 mb-2"> <div class="mt-2 mb-2">
<h4>We've Found a Match from your Address.</h4>
<small>Select the correct address that match your current <small>Select the correct address that match your current
address</small> address</small>
</div> </div>
@ -666,11 +663,11 @@ const backFun = () => {
} }
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.bg-white bg-change-bk .current-plan { .bg-white bg-change-bk .current-plan {
@ -706,11 +703,11 @@ const backFun = () => {
</style> </style>
<style lang="scss"> <style lang="scss">
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.total-font { .total-font {

View File

@ -8,7 +8,7 @@ const router = useRouter()
const route = useRoute() const route = useRoute()
const cartEncoded = ref( const cartEncoded = ref(
{ {
"gender": "male", "gender": "Male",
"doctor_visit": "89.00", "doctor_visit": "89.00",
"products": [ "products": [
{ {

View File

@ -763,17 +763,17 @@ const formatDate = (date) => {
to="/queue" to="/queue"
target="_blank" target="_blank"
> >
<VBtn <!-- <VBtn
style="border-radius: 20px" style="border-radius: 20px"
block block
class="mt-3 text-white" class="mt-3 text-white"
color="rgb(var(--v-theme-yellow-theme-button))" color="rgb(var(--v-theme-yellow-theme-button))"
> >
Go to Meeting Go to Meeting
</VBtn> </VBtn> -->
</RouterLink> </RouterLink>
<span v-else> <span v-else>
<VBtn <!-- <VBtn
block block
style="border-radius: 20px" style="border-radius: 20px"
class="mt-3 text-white" class="mt-3 text-white"
@ -781,7 +781,7 @@ const formatDate = (date) => {
disabled disabled
> >
Go to Meeting Go to Meeting
</VBtn> </VBtn> -->
</span> </span>
</VCardText> </VCardText>
</div> </div>

View File

@ -689,7 +689,7 @@ const formatTotalCurrency = (amount) => {
}}</span> }}</span>
</div> </div>
<span v-if="isMeeting"> <span v-if="isMeeting">
<RouterLink to="/queue" target="_blank"> <!-- <RouterLink to="/queue" target="_blank">
<VBtn <VBtn
style="border-radius: 20px; color: #fff" style="border-radius: 20px; color: #fff"
block block
@ -698,17 +698,17 @@ const formatTotalCurrency = (amount) => {
> >
Go to Meeting Go to Meeting
</VBtn> </VBtn>
</RouterLink> </RouterLink> -->
</span> </span>
<span v-else> <span v-else>
<VBtn <!-- <VBtn
block block
style="border-radius: 20px; color: #fff" style="border-radius: 20px; color: #fff"
class="mt-3" class="mt-3"
color="rgb(var(--v-theme-yellow-theme-button))" color="rgb(var(--v-theme-yellow-theme-button))"
disabled disabled
>Go to Meeting >Go to Meeting
</VBtn> </VBtn> -->
</span> </span>
</div> </div>
</VCardText> </VCardText>

View File

@ -220,7 +220,7 @@ const convertUtcDateTimeToLocal = (utcDate, utcTime, type) => {
<VSpacer /> <VSpacer />
<div class="d-flex flex-column text-sm-end gap-2"> <div class="d-flex flex-column text-sm-end gap-2">
<div class="order-sm-0 order-1 pt-0 mt-3"> <!-- <div class="order-sm-0 order-1 pt-0 mt-3">
<RouterLink v-if="isMeetingEnable" to="/queue" target="_blank"> <RouterLink v-if="isMeetingEnable" to="/queue" target="_blank">
<VBtn color="primary" class="me-2"> <VBtn color="primary" class="me-2">
Go to Meeting Go to Meeting
@ -230,7 +230,7 @@ const convertUtcDateTimeToLocal = (utcDate, utcTime, type) => {
<VBtn class="" color="primary" disabled>Go to Meeting <VBtn class="" color="primary" disabled>Go to Meeting
</VBtn> </VBtn>
</span> </span>
</div> </div> -->
<!-- <span class="mt-auto order-sm-1 order-0">Card expires at {{ card.expiry }}</span> --> <!-- <span class="mt-auto order-sm-1 order-0">Card expires at {{ card.expiry }}</span> -->
</div> </div>

View File

@ -927,7 +927,7 @@ const formatTotalCurrency = (amount) => {
</v-list> </v-list>
</div> </div>
</v-card-text> </v-card-text>
<v-card-text> <!-- <v-card-text>
<RouterLink <RouterLink
to="/queue" to="/queue"
target="_blank" target="_blank"
@ -952,7 +952,7 @@ const formatTotalCurrency = (amount) => {
>Go to Meeting >Go to Meeting
</VBtn> </VBtn>
</span> </span>
</v-card-text> </v-card-text> -->
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>

View File

@ -207,7 +207,7 @@ const changeEmailSignUp = () => {
</script> </script>
<template> <template>
<StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> <!-- <StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> -->
<VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="primary"> <VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;"> <VCardText class="" style="color: white !important;">
@ -371,11 +371,11 @@ const changeEmailSignUp = () => {
} }
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.bg-white bg-change-bk .current-plan { .bg-white bg-change-bk .current-plan {

View File

@ -17,6 +17,7 @@ import {
import { onBeforeMount, onMounted, onUnmounted } from 'vue'; import { onBeforeMount, onMounted, onUnmounted } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import { VDateInput } from 'vuetify/lib/labs/components.mjs';
const store = useStore() const store = useStore()
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
@ -374,7 +375,7 @@ const isUserAuthenticate = () => {
</script> </script>
<template> <template>
<StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> <!-- <StartOverPupup :showPopup="store.getters.getShowStartOverPupup"></StartOverPupup> -->
<!-- <HeaderTopBar></HeaderTopBar> --> <!-- <HeaderTopBar></HeaderTopBar> -->
<VContainer fluid :class="isMobile ? '' : 'container-padding'"> <VContainer fluid :class="isMobile ? '' : 'container-padding'">
<VRow style="min-height: 65px;"><CustomNav :logo='seetingPlanLogo'></CustomNav></VRow> <VRow style="min-height: 65px;"><CustomNav :logo='seetingPlanLogo'></CustomNav></VRow>
@ -453,8 +454,19 @@ const isUserAuthenticate = () => {
placeholder="i.e. (000) 000-0000" @input="formatPhoneNumber" max="14" density="comfortable" /> placeholder="i.e. (000) 000-0000" @input="formatPhoneNumber" max="14" density="comfortable" />
</VCol> </VCol>
<VCol cols="12" md="4"> <VCol cols="12" md="4">
<VTextField v-model="dob" :max="getCurrentDate()" label="Date of Birth" placeholder="Date of Birth" <!-- <v-date-input v-model="dob" :max="getCurrentDate()" label="Date of Birth" placeholder="Date of Birth"
type="date" :rules="[requiredDate]" :error-messages="errors.dob" density="comfortable" /> :rules="[requiredDate]" :error-messages="errors.dob" density="comfortable" prepend-icon=""
variant="solo"></v-date-input> -->
<v-date-input
v-model="dob"
:max="getCurrentDate()"
:rules="[requiredDate]" :error-messages="errors.dob"
label="Date of Birth"
placeholder="Date of Birth"
prepend-icon=""
variant="outlined"
density="comfortable"
></v-date-input>
</VCol> </VCol>
</VRow> </VRow>
@ -489,7 +501,7 @@ const isUserAuthenticate = () => {
<h4>Personal Information</h4> <h4>Personal Information</h4>
</VCol> </VCol>
<VCol cols="12" md="4"> <VCol cols="12" md="4">
<VTextField v-model="dob" :max="getCurrentDate()" label="Date of Birth" placeholder="Date of Birth" <VDateInput v-model="dob" :max="getCurrentDate()" label="Date of Birth" placeholder="Date of Birth"
type="date" :rules="[requiredDate]" :error-messages="errors.dob" /> type="date" :rules="[requiredDate]" :error-messages="errors.dob" />
</VCol> </VCol>
<VCol cols="12" md="4"> <VCol cols="12" md="4">
@ -518,7 +530,7 @@ const isUserAuthenticate = () => {
<VCheckbox v-model="termAndCondtiton" :error-messages="errors.termAndCondtiton" <VCheckbox v-model="termAndCondtiton" :error-messages="errors.termAndCondtiton"
:rules="[requiredValidator]" label="I agree to the Terms and Conditions" /> :rules="[requiredValidator]" label="I agree to the Terms and Conditions" />
<VCheckbox v-model="receviceSMs" :error-messages="errors.receviceSMs" :rules="[requiredValidator]" <VCheckbox v-model="receviceSMs" :error-messages="errors.receviceSMs" :rules="[requiredValidator]"
label="I agree to receive via SMS news and special offers" /> label="I agree to receive SMS and Email Notifications." />
<!-- <VCheckbox v-model="isPolicy" :error-messages="errors.isPolicy" :rules="[requiredValidator]" <!-- <VCheckbox v-model="isPolicy" :error-messages="errors.isPolicy" :rules="[requiredValidator]"
label="I agree to the Privacy Policy" /> --> label="I agree to the Privacy Policy" /> -->
<!-- <VCheckbox v-model="isPolicy" :rules="[requiredValidator]" :error-messages="errors.isPolicy"> <!-- <VCheckbox v-model="isPolicy" :rules="[requiredValidator]" :error-messages="errors.isPolicy">
@ -661,11 +673,11 @@ const isUserAuthenticate = () => {
} }
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.bg-white bg-change-bk .current-plan { .bg-white bg-change-bk .current-plan {
@ -710,11 +722,11 @@ const isUserAuthenticate = () => {
@import "@vendor/css/pages/help-center-front-page.css"; @import "@vendor/css/pages/help-center-front-page.css";
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.total-font { .total-font {

View File

@ -38,6 +38,12 @@ const access_token = localStorage.getItem("access_token");
const appointmentDetails = JSON.parse( const appointmentDetails = JSON.parse(
localStorage.getItem("patient_appointment_details") localStorage.getItem("patient_appointment_details")
); );
const timezoneMap = {
'EST': 'America/New_York',
'PST': 'America/Los_Angeles',
'CST': 'America/Chicago',
'MST': 'America/Denver'
};
onBeforeMount(async () => { onBeforeMount(async () => {
store.dispatch("updateIsLoading", true); store.dispatch("updateIsLoading", true);
store.dispatch("updateCurrentPage", "review-appointment"); store.dispatch("updateCurrentPage", "review-appointment");
@ -82,15 +88,30 @@ onBeforeMount(async () => {
dob.value = `${parts[1]}-${parts[2]}-${parts[0]}`; dob.value = `${parts[1]}-${parts[2]}-${parts[0]}`;
const appointment_date = new Date(appointmentDetails.appointment_date); const appointment_date = new Date(appointmentDetails.appointment_date);
const formattedDate = new Intl.DateTimeFormat("en-US", { // const formattedDate = new Intl.DateTimeFormat("en-US", {
year: "numeric", // year: "numeric",
month: "long", // month: "long",
day: "numeric", // day: "numeric",
}).format(appointment_date); // }).format(appointment_date);
console.log("formattedDate", formattedDate); // console.log("formattedDate", formattedDate);
scheduleDate.value = formattedDate; scheduleDate.value = formatDate(appointmentDetails.appointment_date);
console.log('formatWithTimeZone',formatDate(appointmentDetails.appointment_date))
store.dispatch("updateIsLoading", false); store.dispatch("updateIsLoading", false);
}); });
const formatDate = (dateStr) => {
const months = [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
// Split the input date string by the hyphen
const [year, month, day] = dateStr.split("-");
// Convert month from "10" to "October" (month - 1 as months array is 0-based)
const formattedDate = `${months[parseInt(month) - 1]} ${parseInt(day)}, ${year}`;
return formattedDate;
};
onMounted(async () => { onMounted(async () => {
let setting = await axios.post("/api/settings", {}); let setting = await axios.post("/api/settings", {});
console.log(setting.data); console.log(setting.data);
@ -170,9 +191,9 @@ const confirmFun = async () => {
</script> </script>
<template> <template>
<StartOverPupup <!-- <StartOverPupup
:showPopup="store.getters.getShowStartOverPupup" :showPopup="store.getters.getShowStartOverPupup"
></StartOverPupup> ></StartOverPupup> -->
<VDialog <VDialog
v-model="store.getters.getIsLoading" v-model="store.getters.getIsLoading"
width="110" width="110"
@ -262,8 +283,7 @@ const confirmFun = async () => {
</p> </p>
<p class="mb-0"> <p class="mb-0">
We will email you telehealth instructions. This is We will email you the telehealth instructions shortly. Please confirm your appointment by clicking the button below.
your appointment to confirm it.
</p> </p>
</div> </div>
</div> </div>
@ -338,11 +358,11 @@ const confirmFun = async () => {
@use "@core/scss/template/pages/page-auth.scss"; @use "@core/scss/template/pages/page-auth.scss";
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.total-font { .total-font {
@ -392,11 +412,11 @@ const confirmFun = async () => {
} }
.bg-custom { .bg-custom {
background: #efefed; background: #f5fafd;
} }
.bg-custom-color { .bg-custom-color {
background: #d8ebf6; background: #D8EBF6;
} }
.bg-white bg-change-bk .current-plan { .bg-white bg-change-bk .current-plan {

View File

@ -445,7 +445,6 @@ const backFun = () => {
<v-card> <v-card>
<v-card-text> <v-card-text>
<div class="mt-2 mb-2"> <div class="mt-2 mb-2">
<h4>We've Found a Match from your Address.</h4>
<small>Select the correct address that match your current <small>Select the correct address that match your current
address</small> address</small>
</div> </div>

View File

@ -33,8 +33,8 @@ const theme = {
'perfect-scrollbar-thumb': '#DBDADE', 'perfect-scrollbar-thumb': '#DBDADE',
'skin-bordered-background': '#fff', 'skin-bordered-background': '#fff',
'skin-bordered-surface': '#fff', 'skin-bordered-surface': '#fff',
'yellow': '#d8ebf6', 'yellow': '#D8EBF6',
'yellow-theme-button': '#635dff', 'yellow-theme-button': '#635DFF',
'footer': '#212121' 'footer': '#212121'
}, },
variables: { variables: {

View File

@ -1046,6 +1046,7 @@ export default createStore({
.then((response) => { .then((response) => {
commit("setLoading", false); commit("setLoading", false);
commit("setRedirectTo", "review-appointment"); commit("setRedirectTo", "review-appointment");
localStorage.setItem('getCalendlyAvailableTImes',JSON.stringify(response.data.slots))
commit("setCalendlyAvailableTImes", response.data.slots); commit("setCalendlyAvailableTImes", response.data.slots);
}) })
.catch((error) => { .catch((error) => {

View File

@ -108,7 +108,7 @@ const illustrationJohn = computed(() => global.name.value === 'dark' ? illustrat
</div> </div>
</div> </div>
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">Go to Meeting</VBtn> <!-- <VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">Go to Meeting</VBtn> -->
<!-- 👉 Person Actions --> <!-- 👉 Person Actions -->
</div> </div>

View File

@ -8,14 +8,24 @@ const date = ref()
const initialize = () => { const initialize = () => {
date.value = new Date().getFullYear(); date.value = new Date().getFullYear();
} }
const constact = () => {
// window.open('/terms-and-conditions', '_blank');
window.open('https://purityselect.com/contact/')
};
const gotoTermsCondition = () => { const gotoTermsCondition = () => {
router.push('/terms-and-conditions'); // window.open('/terms-and-conditions', '_blank');
window.open('https://purityselect.com/terms-and-condition/')
}; };
const gotoPrivacyPolicy = () => { const gotoPrivacyPolicy = () => {
router.push('/privacy-policy'); // window.open('/privacy-policy', '_blank');
window.open('https://purityselect.com/privacy-policy/')
}; };
const gotoRefundPolicy = () => { const gotoRefundPolicy = () => {
router.push('/refund-policy'); // window.open('/refund-policy', '_blank');
window.open('https://purityselect.com/refund-and-return-policy/')
}; };
</script> </script>
<template> <template>
@ -107,7 +117,7 @@ const gotoRefundPolicy = () => {
<!-- <span>Message and data rates may apply</span> --> <!-- <span>Message and data rates may apply</span> -->
</div> </div>
<div class="contact-icons"> <div class="contact-icons">
<a href="#">Contact Us</a> <a @click="constact()">Contact Us</a>
</div> </div>
<div class="contact-icons"> <div class="contact-icons">
<a type="button" @click="gotoTermsCondition()">Terms & Conditions</a> <a type="button" @click="gotoTermsCondition()">Terms & Conditions</a>

View File

@ -123,7 +123,7 @@ const isAgentCall = () => {
</div> </div>
</div> </div>
<RouterLink v-if="!isDisableMeeting" to="/queue"> <!-- <RouterLink v-if="!isDisableMeeting" to="/queue">
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))"> <VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">
Go to Meeting Test{{ callEnd }} Go to Meeting Test{{ callEnd }}
</VBtn> </VBtn>
@ -132,7 +132,7 @@ const isAgentCall = () => {
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))" disabled>Go to <VBtn class="mt-3" color="rgb(var(--v-theme-yellow))" disabled>Go to
Meeting Disabled Meeting Disabled
</VBtn> </VBtn>
</span> </span> -->
<!-- <RouterLink to="/meeting"> <!-- <RouterLink to="/meeting">
<VBtn class="mt-3" color="error" :disabled="isDisableMeeting">Go to Meeting <VBtn class="mt-3" color="error" :disabled="isDisableMeeting">Go to Meeting
</VBtn> </VBtn>

View File

@ -216,7 +216,7 @@ const togglePanel = (index) => {
<VBtn class="mt-3" color="error">Go to Meeting <VBtn class="mt-3" color="error">Go to Meeting
</VBtn> </VBtn>
</RouterLink> --> </RouterLink> -->
<RouterLink v-if="isMeetingEnable" to="/queue" target="_blank"> <!-- <RouterLink v-if="isMeetingEnable" to="/queue" target="_blank">
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))"> <VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">
Go to Meeting Go to Meeting
</VBtn> </VBtn>
@ -224,7 +224,7 @@ const togglePanel = (index) => {
<span v-else> <span v-else>
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))" disabled>Go to Meeting <VBtn class="mt-3" color="rgb(var(--v-theme-yellow))" disabled>Go to Meeting
</VBtn> </VBtn>
</span> </span> -->
</div> </div>

View File

@ -1,4 +1,5 @@
<script setup> <script setup>
import questionries from '@/views/pages/questionere/combine-questins';
import axios from '@axios'; import axios from '@axios';
import avatar1 from '@images/avatars/avatar-1.png'; import avatar1 from '@images/avatars/avatar-1.png';
const profileDetail = ref(); const profileDetail = ref();
@ -173,148 +174,7 @@ const getPatientMedicalHistory = async () => {
// } // }
// }; // };
const questions = ref([ const questions = ref(questionries);
{
question_key: 'why_interested_hrt',
question: "What aspects of hormone replacement therapy (HRT) intrigue you?",
type: "text",
},
{
question_key: 'goal_loss_weight',
question: "Is your objective with the program to achieve weight loss?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'what_biological_sex',
question: "What is your assigned sex at birth?",
type: "radio",
options: ["Male", "Female"],
},
{
question_key: '3_years_physical_test',
question: "Have you undergone a comprehensive physical examination by a medical professional within the past three years, which included assessments of vital signs such as weight, blood pressure, and heart rate?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'medical_problems',
question: "Did you experience any medical issues? If so, could you please elaborate?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'have_prostate_cancer',
question: "Have you ever received a diagnosis of prostate cancer?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'what_height',
question: "How tall are you?",
type: "dropdown",
options: ["5 ft 1 in",
"5 ft 2 in",
"5 ft 3 in",
"5 ft 4 in",
"5 ft 5 in",
"5 ft 6 in",
"5 ft 7 in",
"5 ft 8 in",
],
},
{
question_key: 'whight',
question: "What is your weight?",
type: "text",
},
// {
// question_key: 'birthdate',
// question: "When were you born?",
// type: "date",
// sub_title: 'To proceed with medication, kindly input your accurate date of birth using the format mm/dd/yyyy.'
// },
{
question_key: 'past_harmone_treatments',
question: "Have you been prescribed any hormone treatments currently or in the past?",
type: "radio",
options: ["thyroid_medication", "testosterone_treatment", "estrogen_blocker", "hgh", "ipamoreline", "colomipheine", "hcg", "other", "none"],
},
{
question_key: 'take_medications',
question: "Are you currently using or have you used any over-the-counter or prescription medications, excluding hormone treatments? (Please note that your responses will be cross-checked against prescription and insurance records. Failure to disclose current prescriptions and/or medical conditions may result in disapproval for your safety.)",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'have_medications_allegies',
question: "Do you have any allergies to medications?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'plan_children',
question: "Do you intend to have children at some point in the future?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'partner_pregnant',
question: "Is your partner currently pregnant or breastfeeding?",
type: "radio",
options: ["Yes", "No", "not applicab_e"],
},
{
question_key: 'experience_ed',
question: "Are you currently experiencing any erectile dysfunction (ED) issues?",
type: "radio",
options: ["never", "almost_never", "occasionally", "almost_always", "always"],
},
{
question_key: 'thyroid_disorders',
question: "Have you ever been diagnosed with thyroid disorders such as hypothyroidism (underactive thyroid), hyperthyroidism (overactive thyroid), Hashimoto's Disease, or Graves' Disease?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'family_history',
question: "Does your family have a history of any of the following disorders?",
type: "radio",
options: ["drug_alcohol", "cancer", "heart_disease", "thyroid_disease", "low_testosterone",
"none"],
},
{
question_key: 'patient_concent',
question: "Please read and accept",
linktext: "Patient Content",
type: "signalCheckbox",
},
{
question_key: 'appointment_cancel',
question: "Please read and accept",
linktext: "Appointment Cancel",
type: "signalCheckbox",
},
{
question_key: 'medicare_disclaimer',
question: "Please read and accept",
linktext: "Medicare Disclaimer",
type: "signalCheckbox",
},
{
question_key: 'telehealth_concent',
question: "Please read and accept",
linktext: "Telehealth Concent",
type: "signalCheckbox",
},
{
question_key: 'secondary_contact',
question: "Please read and accept",
linktext: "Secondary Contact Disclosure(optional)",
type: "signalCheckbox",
},
]);
const getCurrentDate = () => { const getCurrentDate = () => {
const today = new Date(); const today = new Date();

View File

@ -0,0 +1,74 @@
import allergyasthma from './allergy-asthma-form.js';
import antiaging from './anti-aging-form.js';
import cardiology from './cardiology-form.js';
import dermatology from './dermatology-form.js';
import dnarepair from './dna-repair-form.js';
import doctorintakerequest from './doctor-intake-request-form.js';
import sleepquality from './sleep-quality.js';
import hairgrowth from './hair-growth-form.js';
import medicalhistory from './medical-history-form.js';
import musclegrowth from './muscle-growth-form.js';
import neurology from './neurology-form.js';
import oncology from './oncology-form.js';
import sexualwellness from './sexual-wellness-form.js';
import urology from './urology-form.js';
import weightloss from './weight-loss-form.js';
import guthealth from './gut-health-form.js';
import anxiety from './anxiety-form.js';
import injuryrepair from './injury-repair-form.js';
import menopause from './menopause-form.js';
function questionsMapping(data){
const step = data.steps
const schema = data.schema
const questions = []
for(let pageNo in step){
const page = step[pageNo]
let questionHeading = ""
// let question = page.elements[2]
for(let i = 0; i < page.elements.length; i++){
const element = schema[page.elements[i]]
if(!element)
continue;
if(element.type == "static" ) {
questionHeading += element.content+" "
continue;
}
let questionObj = {
pageNo: pageNo,
label: i < 3 ? questionHeading: "",
question: i < 3 ? questionHeading: "",
// subHeading: schema[subHeading].content,
key: page.elements[i],
question_key: page.elements[i],
type: 'exact_match'
}
questions.push(questionObj)
}
}
return questions
}
export default [
...questionsMapping(cardiology),
...questionsMapping(oncology),
...questionsMapping(dermatology),
...questionsMapping(medicalhistory),
...questionsMapping(urology),
...questionsMapping(doctorintakerequest),
...questionsMapping(allergyasthma),
...questionsMapping(weightloss),
...questionsMapping(musclegrowth),
...questionsMapping(sexualwellness),
...questionsMapping(hairgrowth),
...questionsMapping(antiaging),
...questionsMapping(dnarepair),
...questionsMapping(sleepquality),
...questionsMapping(guthealth),
...questionsMapping(anxiety),
...questionsMapping(injuryrepair),
...questionsMapping(menopause),
]
console.log(JSON.stringify(questionsExport))

View File

@ -322,8 +322,8 @@
<div class="content"> <div class="content">
<!-- START CENTERED WHITE CONTAINER --> <!-- START CENTERED WHITE CONTAINER -->
<span class="preheader">This is preheader text. Some clients will show this text as a <span class="preheader">This is just a friendly reminder that you have an upcoming virtual appointment
preview.</span> scheduled for.</span>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main"> <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main">
<!-- START MAIN CONTENT AREA --> <!-- START MAIN CONTENT AREA -->
@ -337,7 +337,7 @@
{{ $appointment->timezone }} {{ $appointment->timezone }}
</p> </p>
<p>To ensure a smooth visit, please log into your {{$setting->domain_name}} account at least 10 minutes prior to your appointment time.</p> <p>To ensure a smooth visit, please log into your {{$setting->domain_name}} account at least 10 minutes prior to your appointment time.</p>
<p> You can access your account via our <a href="https://app.youngerlivingnow.com/login">{{$setting->domain_name}}</a>.</p> <p> You can access your account via our <a href="{{config('app.url')}}">{{$setting->domain_name}}</a>.</p>
<P>Please have the following ready for your appointment:</P> <P>Please have the following ready for your appointment:</P>
<div>✔️ A quiet, private space to ensure privacy</div> <div>✔️ A quiet, private space to ensure privacy</div>
<div>✔️ A list of any new symptoms or health updates since your last visit</div> <div>✔️ A list of any new symptoms or health updates since your last visit</div>

View File

@ -349,7 +349,7 @@
<p>By confirming your email, you'll gain full access to all the features and benefits of our platform.</p> <p>By confirming your email, you'll gain full access to all the features and benefits of our platform.</p>
<p>If you didn't create an account with us, please disregard this email.</p> <p>If you didn't create an account with us, please disregard this email.</p>
Thank you, Thank you,
<p>HGH Team</p> <p>{{config('app.name')}} Team</p>
</td> </td>
</tr> </tr>
@ -361,7 +361,7 @@
<table role="presentation" border="0" cellpadding="0" cellspacing="0"> <table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr> <tr>
<td class="content-block powered-by"> <td class="content-block powered-by">
© Copyright 2024, HGH. All Rights Reserved. </a> © Copyright 2024, {{config('app.name')}}. All Rights Reserved. </a>
</td> </td>
</tr> </tr>
</table> </table>

View File

@ -342,7 +342,7 @@
<table role="presentation" border="0" cellpadding="0" cellspacing="0"> <table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr> <tr>
<td class="content-block powered-by"> <td class="content-block powered-by">
© Copyright 2024, {{$setting->footer_text}} </a> © Copyright 2024 {{config('app.name')}} , {{$setting->footer_text}} </a>
</td> </td>
</tr> </tr>
</table> </table>

View File

@ -266,6 +266,7 @@
.btn table { .btn table {
max-width: 100% !important; max-width: 100% !important;
width: 100% !important; width: 100% !important;
} }
.btn a { .btn a {
@ -362,7 +363,7 @@
<table role="presentation" border="0" cellpadding="0" cellspacing="0"> <table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr> <tr>
<td class="content-block powered-by"> <td class="content-block powered-by">
© Copyright 2024, {{$setting->footer_text}} </a> © Copyright 2024 {{config('app.name')}}, {{$setting->footer_text}} </a>
</td> </td>
</tr> </tr>
</table> </table>

View File

@ -322,8 +322,8 @@
<div class="content"> <div class="content">
<!-- START CENTERED WHITE CONTAINER --> <!-- START CENTERED WHITE CONTAINER -->
<span class="preheader">This is preheader text. Some clients will show this text as a <!-- <span class="preheader">This is preheader text. Some clients will show this text as a
preview.</span> preview.</span> -->
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main"> <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main">
<!-- START MAIN CONTENT AREA --> <!-- START MAIN CONTENT AREA -->

View File

@ -164,7 +164,7 @@
<tr> <tr>
<td style="padding-right: 0px;padding-left: 0px;" align="center"> <td style="padding-right: 0px;padding-left: 0px;" align="center">
<img align="center" border="0" src="{{ url('assets/email-template/registration/logo.png') }}" alt="" title="{{config('app.name')}} logo" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: inline-block !important;border: none;height: 100px;float: none;width: 100px;max-width: 290px;" width="290" class="v-src-width v-src-max-width" /> <img align="center" border="0" src="{{ url('assets/logo/logo-peptied-web.webp') }}" alt="" title="{{config('app.name')}} logo" style="outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;clear: both;display: inline-block !important;border: none;float: none;max-width: 290px;" class="v-src-width v-src-max-width" />
</td> </td>
</tr> </tr>
@ -265,7 +265,7 @@
<td class="v-container-padding-padding" style="overflow-wrap:break-word;word-break:break-word;padding:10px 40px 40px;font-family:arial,helvetica,sans-serif;" align="left"> <td class="v-container-padding-padding" style="overflow-wrap:break-word;word-break:break-word;padding:10px 40px 40px;font-family:arial,helvetica,sans-serif;" align="left">
<div style="font-family: Quicksand; font-size: 14px; line-height: 140%; text-align: justify; word-wrap: break-word;"> <div style="font-family: Quicksand; font-size: 14px; line-height: 140%; text-align: justify; word-wrap: break-word;">
<p style="line-height: 140%;">Dear abc </p> <p style="line-height: 140%;">Dear {{ $patient->first_name }} {{ $patient->last_name }}, </p>
<p style="line-height: 140%;"> </p> <p style="line-height: 140%;"> </p>
<p style="line-height: 140%;">Welcome to {{config('app.name')}} We're delighted to have you join our community dedicated to health and wellness through {{config('app.name')}} therapy.<br /><br /></p> <p style="line-height: 140%;">Welcome to {{config('app.name')}} We're delighted to have you join our community dedicated to health and wellness through {{config('app.name')}} therapy.<br /><br /></p>
<p style="line-height: 140%;">Thank you for registering your account with us. This email confirms that your account has been successfully created. You're now part of a vibrant community where you'll find valuable resources and support for your health journey.<br /><br /></p> <p style="line-height: 140%;">Thank you for registering your account with us. This email confirms that your account has been successfully created. You're now part of a vibrant community where you'll find valuable resources and support for your health journey.<br /><br /></p>
@ -308,7 +308,7 @@
<td class="v-container-padding-padding" style="overflow-wrap:break-word;word-break:break-word;padding:30px;font-family:arial,helvetica,sans-serif;" align="left"> <td class="v-container-padding-padding" style="overflow-wrap:break-word;word-break:break-word;padding:30px;font-family:arial,helvetica,sans-serif;" align="left">
<div style="font-family: Quicksand; font-size: 14px; line-height: 140%; text-align: justify; word-wrap: break-word;"> <div style="font-family: Quicksand; font-size: 14px; line-height: 140%; text-align: justify; word-wrap: break-word;">
<p style="line-height: 140%;">We're excited to accompany you on your journey toward better health and vitality. If you have any questions about your account or how to get started with {{config('app.name')}} therapy, please feel free to contact us at <a rel="noopener" href="{{config('app.url')}}" target="_blank">support@{{config('app.name')}}.com</a>.</p> <p style="line-height: 140%;">We're excited to accompany you on your journey toward better health and vitality. If you have any questions about your account or how to get started with {{config('app.name')}} therapy, please feel free to contact us at <a rel="noopener" href="{{config('app.url')}}" target="_blank">support@purityselect.com</a>.</p>
<p style="line-height: 140%;"><br /><br />Thank you for choosing {{config('app.name')}} . Here's to your health and well-being!</p> <p style="line-height: 140%;"><br /><br />Thank you for choosing {{config('app.name')}} . Here's to your health and well-being!</p>
<p style="line-height: 140%;"> </p> <p style="line-height: 140%;"> </p>
<p style="line-height: 140%;">Best regards,</p> <p style="line-height: 140%;">Best regards,</p>

View File

@ -327,8 +327,8 @@
<div class="content"> <div class="content">
<!-- START CENTERED WHITE CONTAINER --> <!-- START CENTERED WHITE CONTAINER -->
<span class="preheader">This is preheader text. Some clients will show this text as a <!-- <span class="preheader">This is preheader text. Some clients will show this text as a
preview.</span> preview.</span> -->
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main"> <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main">
<!-- START MAIN CONTENT AREA --> <!-- START MAIN CONTENT AREA -->
@ -342,7 +342,7 @@
<p>Date: {{ $appointment->appointment_date }}</p> <p>Date: {{ $appointment->appointment_date }}</p>
<p>Time: {{ $appointment->appointment_time }}</p> <p>Time: {{ $appointment->appointment_time }}</p>
{{-- <p>Meeting Link: [Include Meeting Link ]</p> --}} {{-- <p>Meeting Link: [Include Meeting Link ]</p> --}}
<p>Click on the meeting link provided above or login to your HGH portal and join the <p>Click on the meeting link provided above or login to your {{config('app.name')}} portal and join the
meeting.</p> meeting.</p>
<p>Ensure your audio and video settings are configured correctly.</p> <p>Ensure your audio and video settings are configured correctly.</p>
<p>Agenda:</p> <p>Agenda:</p>
@ -374,7 +374,7 @@
<table role="presentation" border="0" cellpadding="0" cellspacing="0"> <table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr> <tr>
<td class="content-block powered-by"> <td class="content-block powered-by">
© Copyright 2024, HGH. All Rights Reserved. </a> © Copyright 2024, {{config('app.name')}}. All Rights Reserved. </a>
</td> </td>
</tr> </tr>
</table> </table>

View File

@ -373,14 +373,14 @@
<p style="line-height: 140%; text-align: justify;"> <p style="line-height: 140%; text-align: justify;">
<span <span
style="font-family: Quicksand; line-height: 19.6px;">To style="font-family: Quicksand; line-height: 19.6px;">To
ensure a smooth visit, please log into your HGH ensure a smooth visit, please log into your {{config('app.name')}}
account at least 10 minutes prior to your account at least 10 minutes prior to your
appointment time.</span><br /><br /></p> appointment time.</span><br /><br /></p>
<p style="line-height: 140%; text-align: justify;"> <p style="line-height: 140%; text-align: justify;">
<span <span
style="font-family: Quicksand; line-height: 19.6px;">You style="font-family: Quicksand; line-height: 19.6px;">You
can access your account via our HGH platform: <a can access your account via our {{config('app.name')}} platform: <a
rel="noreferrer" target="_new">HGH rel="noreferrer" target="_new">{{config('app.name')}}
Login</a>.</span><br /><br /></p> Login</a>.</span><br /><br /></p>
<p style="line-height: 140%; text-align: justify;"> <p style="line-height: 140%; text-align: justify;">
<span <span
@ -414,7 +414,7 @@
<p style="line-height: 140%; text-align: justify;"> <p style="line-height: 140%; text-align: justify;">
<span <span
style="font-family: Quicksand; line-height: 19.6px;">Sincerely,</span><br /><span style="font-family: Quicksand; line-height: 19.6px;">Sincerely,</span><br /><span
style="font-family: Quicksand; line-height: 19.6px;">HGH style="font-family: Quicksand; line-height: 19.6px;">{{config('app.name')}}
Team.</span></p> Team.</span></p>
</div> </div>