{% include '@Application/inc/central_header.html.twig' %}
<meta name="robots" content="noindex, nofollow">
{% set isConsultant= session[UserConstants.IS_CONSULTANT] is defined? session[UserConstants.IS_CONSULTANT]:0 %}
{% set BUDDYBEE_ADMIN_LEVEL= session[UserConstants.BUDDYBEE_ADMIN_LEVEL] is defined? session[UserConstants.BUDDYBEE_ADMIN_LEVEL]:0 %}
<link rel="stylesheet"
href="{{ absolute_url(path('dashboard')) }}buddybee_assets/css/imgProgress.css?version={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}">
<style>
/*.swiper-slide {*/
/* pointer-events: auto;*/
/*}*/
/*.swiper-slide-prev,*/
/*.swiper-slide-next {*/
/* pointer-events: auto; !* optional if you want them clickable *!*/
/*}*/
/*.swiper-slide-active {*/
/* z-index: 2; !* keep top slide visible *!*/
/*}*/
/*.swiper-wrapper {*/
/* overflow: visible; !* important: allows slide shadows/clicks outside container *!*/
/*}*/
.select-center {
text-align-last: center;
text-align: center;
}
.send-button:hover,
.send-button:focus,
.send-button:active {
background-color: #2673B8;
color: white;
outline: none;
box-shadow: none;
}
.modal div[class*="col-md"], .modal div[class*="col-lg"], .modal div[class*="col-xs"], .modal div[class*="col-sm"] {
margin-bottom: 0px;
}
.d-flex {
display: flex;
}
#selectEntityModal {
box-shadow: 0px 6px 18px rgb(0 0 0 / 9%);
*/ border-radius: 12px;
}
#selectEntityModal .modal-body {
padding: 0 1rem;
}
#selectEntityModal p {
margin-bottom: .5rem;
}
/* Style for selected option in selectize */
.selectize-input {
padding: 10px;
font-size: 1rem;
color: #333;
border: none;
}
#selectEntityModal .selectize-input.items {
border: 1px solid #d0d0d0;
padding: 8px 8px;
display: inline-block;
width: 100%;
overflow: hidden;
position: relative;
z-index: 1;
box-sizing: border-box;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .1);
border-radius: 3px;
}
#selectEntityModalForm {
/*max-width: 500px;*/
background-color: #ffffff;
/*margin: 40px auto;*/
padding: 40px;
box-shadow: 0px 6px 18px rgb(0 0 0 / 9%);
/*border-radius: 12px;*/
}
#selectEntityModalForm .form-header {
gap: 5px;
text-align: center;
font-size: .9em;
}
#selectEntityModalForm .form-header .stepIndicator {
position: relative;
flex: 1;
padding-bottom: 30px;
}
#selectEntityModalForm .form-header .stepIndicator.active {
font-weight: 600;
}
#selectEntityModalForm .form-header .stepIndicator.finish {
font-weight: 600;
color: #009688;
}
#selectEntityModalForm .form-header .stepIndicator::before {
content: "";
position: absolute;
left: 50%;
bottom: 0;
transform: translateX(-50%);
z-index: 9;
width: 20px;
height: 20px;
background-color: #d5efed;
border-radius: 50%;
border: 3px solid #ecf5f4;
}
#selectEntityModalForm .form-header .stepIndicator.active::before {
background-color: #a7ede8;
border: 3px solid #d5f9f6;
}
#selectEntityModalForm .form-header .stepIndicator.finish::before {
background-color: #009688;
border: 3px solid #b7e1dd;
}
#selectEntityModalForm .form-header .stepIndicator::after {
content: "";
position: absolute;
left: 50%;
bottom: 8px;
width: 100%;
height: 3px;
background-color: #f3f3f3;
}
#selectEntityModalForm .form-header .stepIndicator.active::after {
background-color: #a7ede8;
}
#selectEntityModalForm .form-header .stepIndicator.finish::after {
background-color: #009688;
}
#selectEntityModalForm .form-header .stepIndicator:last-child:after {
display: none;
}
#selectEntityModalForm input {
padding: 15px 20px;
width: 100%;
font-size: 1em;
border: 1px solid #e3e3e3;
border-radius: 5px;
}
#selectEntityModalForm input:focus {
border: 1px solid #009688;
outline: 0;
}
#selectEntityModalForm input.invalid {
border: 1px solid #ffaba5;
}
#selectEntityModalForm .step {
display: none;
}
#selectEntityModalForm .form-footer {
overflow: auto;
gap: 20px;
}
#selectEntityModalForm .form-footer button {
background-color: #1d5b9e;
border: 1px solid #1d5b9e;
color: #ffffff;
border: none;
padding: 13px 30px;
font-size: 1em;
cursor: pointer;
border-radius: 5px;
flex: 1;
margin-top: 5px;
}
#selectEntityModalForm .form-footer button:hover {
opacity: 0.8;
}
#selectEntityModalForm .form-footer #promptInfo_prevBtn {
background-color: #fff;
color: #009688;
}
.box-selector {
padding: 10px 4px;
cursor: pointer;
}
.box-selector .inside {
padding: 5px;
background: white;
border-radius: 5px;
-webkit-box-shadow: 10px 10px 48px -24px rgba(14, 26, 87, 1);
-moz-box-shadow: 10px 10px 48px -24px rgba(14, 26, 87, 1);
box-shadow: 10px 10px 48px -24px rgba(14, 26, 87, 1);
}
.box-selector .inside input {
cursor: pointer
}
.box-selector .inside textarea {
text-align: center;
cursor: pointer;
width: 100%;
border: none;
resize: none;
font-size: 14px;
color: #1d5b9e;
font-weight: bold;
}
.box-selector.sch_selector_mon .inside,
.box-selector.sch_selector_day .inside
/*.box-selector.sch_selector_time .inside*/
{
padding: 10px 5px;
}
.box-selector.sch_selector_time .inside {
padding: 4px 5px;
}
.step .view_if_has_schedules {
display: none;
}
.box-selector.active:not(.man_sch_selector) .inside {
border: 2px solid #1d5b9e;
-webkit-box-shadow: 10px 10px 24px -3px rgba(29, 91, 158, 1);
-moz-box-shadow: 10px 10px 24px -3px rgba(29, 91, 158, 1);
box-shadow: 10px 10px 24px -3px rgba(29, 91, 158, 1);
}
.box-selector.active.man_sch_selector .inside {
border: 2px solid #1d5b9e;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.box-selector.sch_selector_mon.active .inside,
.box-selector.sch_selector_day.active .inside,
.box-selector.sch_selector_time.active .inside {
border: 2px solid #1d5b9e;
-webkit-box-shadow: 4px 7px 24px -3px rgba(29, 91, 158, 1);
-moz-box-shadow: 10px 10px 24px -3px rgba(29, 91, 158, 1);
box-shadow: 4px 7px 24px -3px rgba(29, 91, 158, 1);
}
.box-selector .img {
margin-left: 5px;
}
.box-selector .title {
text-align: center;
font-size: 13px;
margin-top: auto;
margin-bottom: auto;
}
.box-selector.paymentMethodSelectorBtn .title {
text-align: center;
margin-bottom: 1px;
font-size: 14px;
}
.box-selector .sub-title {
font-size: 12px;
color: grey;
}
.qr-card {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: min(350px, calc(100vw - 32px));
margin-top: 10px;
border-radius: 12px;
z-index: 1000;
padding: 10px;
}
.qr-card .card {
border: none;
background: transparent;
text-align: center;
}
.qr-card img {
width: 100%;
margin: 10px auto;
display: block;
}
.hidden {
display: none;
}
/* Flexbox for card container to display them side by side */
.employee-card-container {
display: flex;
justify-content: left; /* Center the cards horizontally */
gap: 20px; /* Add space between the cards */
flex-wrap: wrap;
margin-top: 20px;
}
.employee-card {
padding: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 10px;
max-width: 320px;
width: 100%;
text-align: center;
display: inline-block;
}
.form-group {
margin-bottom: 10px;
}
/* Style for the entire form */
.form-group {
margin-bottom: 1.5rem;
}
/* Style for the labels */
.form-group label {
font-size: .8rem;
font-weight: 300;
color: #333;
margin-bottom: 0.1rem;
display: block;
}
/* Style for the input fields */
.form-control {
width: 100%;
max-width: 100%;
padding: 0px;
font-size: 1rem;
border-radius: 5px;
box-sizing: border-box;
}
/* Hover effect for input fields */
.form-control:hover {
border-color: #0056b3;
}
/* Focus effect for input fields */
.form-control:focus {
border-color: #0056b3;
outline: none;
}
/* Dropdown list customization */
.selectize-dropdown {
border-radius: 5px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);
font-size: 1rem;
max-height: 200px;
}
/* Style for selectize items */
.selectize-dropdown .option {
padding: 10px;
font-size: 1rem;
color: #333;
}
/* Hover effect for selectize items */
.selectize-dropdown .option:hover {
background-color: #0056b3;
color: white;
}
/* Style for the "Add Employee" and "Close" buttons */
.btn-primary, .btn-secondary {
padding: 10px 20px;
font-size: 1rem;
border: none;
border-radius: 5px;
cursor: pointer;
}
/* Style for the primary button */
.btn-primary {
color: white;
}
/* Hover effect for primary button */
.btn-primary:hover {
background-color: #0056b3;
}
/* Style for the secondary button */
.btn-secondary {
background-color: #6c757d;
color: white;
}
/* Hover effect for secondary button */
.btn-secondary:hover {
background-color: #5a6268;
}
#selectEntityModal .routineTable {
text-align: left;
vertical-align: middle;
}
#selectEntityModal .routineTable .icon-delete {
color: darkred;
font-weight: bold;
}
#selectEntityModal .routineTable .icon-delete .fa {
padding: 10px;
border-radius: 39px;
border: 1px solid #eddcdc;
width: 34px;
height: 34px;
text-align: center;
}
#selectEntityModal .routineTable .icon-check {
color: green;
font-weight: bold;
}
#selectEntityModal .routineTable .icon-check .fa {
opacity: 0.1;
}
#selectEntityModal .routineTable .icon-check.isChecked .fa {
opacity: 1;
}
#selectEntityModal .routineTable .icon-check .fa {
padding: 10px;
border-radius: 39px;
border: 1px solid #eddcdc;
width: 34px;
height: 34px;
text-align: center;
}
#selectEntityModal .routineTable {
text-align: left;
vertical-align: middle;
}
#selectEntityModal .routineTable .icon-delete {
color: darkred;
font-weight: bold;
}
#selectEntityModal .routineTable .icon-delete .fa {
padding: 10px;
border-radius: 39px;
border: 1px solid #eddcdc;
width: 34px;
height: 34px;
text-align: center;
}
#selectEntityModal .routineTable .icon-check {
color: green;
font-weight: bold;
}
#selectEntityModal .routineTable .icon-check .fa {
opacity: 0.1;
}
#selectEntityModal .routineTable .icon-check.isChecked .fa {
opacity: 1;
}
#selectEntityModal .routineTable .icon-check .fa {
padding: 10px;
border-radius: 39px;
border: 1px solid #eddcdc;
width: 34px;
height: 34px;
text-align: center;
}
@media (min-width: 1400px) {
.dashboard-main .container {
max-width: 1400px;
}
}
.upcoming_session_image_view {
height: 60px;
width: 60px;
border-radius: 50%;
background-size: cover !important;
background-position: center !important;
}
.badge.transaction_completed {
color: #7AE677;
background-color: #D9FFD8;
padding: .7rem;
}
.badge.transaction_canceled {
color: #ED4C5C;
background-color: #FFE3E2;
padding: .7rem;
}
.badge.transaction_pending {
color: #373A37;
background-color: #F2F2F2;
padding: .7rem;
}
.small_info .progress {
height: 1rem;
border-radius: 0.5rem;
}
.small_info .row {
margin-top: 19px;
margin-bottom: 20px;
}
.small_info .progress_holder {
margin-top: auto;
margin-bottom: auto;
padding: 0px;
}
.small_info .value_type {
margin-bottom: 0px;
font-size: 18px;
color: #373A37;
font-weight: normal;
}
.small_info .percent_value {
text-align: right;
margin-bottom: 0px;
font-size: 18px;
color: #373A37;
font-weight: normal;
}
.small_info .percent_holder {
margin-top: auto;
margin-bottom: auto;
padding-left: 0px;
}
.small_info .value_type_holder {
margin-top: auto;
margin-bottom: auto;
}
.small_info .progress .progress-bar {
background: #92E3A9;
}
.dashboard-main .card {
margin-bottom: 13px;
}
.accordion-button:focus {
z-index: 3;
/* border-color: #86b7fe; */
outline: 0;
box-shadow: none;
}
.accordion-button:not(.collapsed) {
/*color: #0c63e4;*/
background-color: white;
/*box-shadow: inset 0 -1px 0 rgb(0 0 0 / 13%);*/
}
.dial {
border: 0px;
width: 0px;
font-size: 36px !important;
color: white;
}
.rounded_border_card {
border-radius: 1rem;;
}
.status_card {
border-radius: 1rem;;
}
.status_card .card-body {
padding-bottom: 0;
}
.status_card .card-title {
color: #4B4B4B;
font-size: 20px;
font-weight: 400;
font-family: 'Poppins';
}
.status_card .status_value {
color: #4B4B4B;
font-size: 60px;
font-weight: normal;
font-family: 'Poppins';
}
.status_card .col-md-7, .status_card .col-md-5, .status_card .col-md-6 {
margin-top: auto;
margin-bottom: auto;
/*padding: 0;*/
}
.status_card .col-md-5 {
padding-left: 0px;
}
.status_card .status_value_trend {
float: right;
font-size: 14px;
font-weight: 400;
padding: 8px;
border-radius: 1em;
}
.status_value_trend.negative {
background-color: #FFE4E4;
color: #F07777;
}
.status_value_trend.positive {
background-color: #C6F1F7;
color: #137DC3;
}
.student_list_card {
/*border-radius: 1rem;;*/
}
.student_list_card .card {
/*border-radius: 1rem;;*/
border: none;;
}
.student_list_card .card-body {
padding: 8px;
border-radius: 13px;
}
.student_list_card .card-title {
color: #4B4B4B;
font-size: 20px;
font-weight: 400;
font-family: 'Poppins';
}
.student_list_card .time {
color: #818181;
font-size: 16px;
font-weight: bold;
font-family: 'Roboto', sans-serif;
padding-left: 4px;
}
.student_list_card .col-md-7,
.student_list_card .col-md-5,
.student_list_card .col-md-6,
.student_list_card .col-md-9,
.student_list_card .col-md-1,
.student_list_card .col-md-2,
.student_list_card .col-md-3 {
margin-top: auto;
margin-bottom: auto;
/*padding: 0;*/
}
.student_list_card .col-md-5,
.student_list_card .col-md-1 {
padding-left: 0px;
}
.student_list_card img {
width: 100%;
border-radius: 50%;
}
.student_list_card .student_name {
font-size: 18px;
font-weight: bold;
color: #4B4B4B;
font-family: 'Poppins';
margin-bottom: 0px;
}
.student_list_card .student_interest {
font-size: 16px;
font-weight: 400;
color: #BCC7D8;
margin-bottom: 0px;;
}
.student_list_card .more {
font-size: 16px;
font-weight: 400;
color: #333333;
margin-bottom: 0px;;
padding-right: 8px;
}
.table > :not(caption) > * > * {
padding: 1rem 1rem;
}
.more {
font-size: 16px;
font-weight: 400;
color: #333333;
margin-bottom: 0px;;
padding-right: 8px;
}
.custom-icon-btn {
background-color: #3498db;
color: white;
border: none;
border-radius: 15px;
text-align: center;
font-size: 16px;
font-weight: 500;
}
</style>
<style>
/* ── Nordic My Companies ─────────────────────────────────────────────────── */
:root {
--n-cream: #F7F5F0;
--n-dark: #1A1D2E;
--n-amber: #C07D2A;
--n-muted: #6B7280;
/* Override global blue palette so style.css rules inherit Nordic tokens */
--global-background-color: #ffffff;
--primary-color: #1A1D2E;
--swiper-theme-color: #C07D2A;
}
body { background: var(--n-cream) !important; }
.role-company-page.section { background: var(--n-cream); padding: 48px 0 80px; }
/* Page heading */
.section-head-area { text-align: center; margin-bottom: 32px; }
.section-title,
.role-company-page .section-title,
.role-company-page h1.section-title {
font-family: 'Montserrat', sans-serif !important;
font-size: clamp(1.6rem,3vw,2.2rem) !important;
font-weight: 700 !important;
color: var(--n-dark) !important;
background: none !important;
-webkit-background-clip: unset !important;
-webkit-text-fill-color: var(--n-dark) !important;
background-clip: unset !important;
margin: 0;
}
/* Tabs */
.tab-box { display: flex !important; align-items: center; gap: 4px; border-bottom: 2px solid rgba(26,29,46,.1); margin-bottom: 32px; padding-bottom: 0; overflow-x: auto; scrollbar-width: none; }
.tab-box::-webkit-scrollbar { display: none; }
.tab-btn.tab-btn-style { background: transparent !important; border: none !important; border-bottom: 3px solid transparent !important; margin-bottom: -2px; padding: 10px 18px; font-family: 'DM Sans', sans-serif; font-size: .875rem; font-weight: 600; color: var(--n-muted) !important; border-radius: 0 !important; cursor: pointer; transition: color .2s, border-color .2s; white-space: nowrap; box-shadow: none !important; }
.tab-btn.tab-btn-style.active, .tab-btn.tab-btn-style:hover { color: var(--n-dark) !important; border-bottom-color: var(--n-amber) !important; }
.tab-box .line { display: none; }
/* Company Swiper cards — !important needed: style.css hardcodes rgba(230,248,250,1) blue */
.role-company-page .tab-container .content-box .content .card {
background: #fff !important;
border: 1.5px solid rgba(26,29,46,.08) !important;
border-radius: 14px !important;
box-shadow: 0 4px 24px rgba(26,29,46,.08) !important;
padding: 20px !important;
text-align: center;
transition: box-shadow .2s, transform .2s;
}
.role-company-page .tab-container .content-box .content .card:hover {
box-shadow: 0 8px 32px rgba(26,29,46,.14) !important;
transform: translateY(-2px);
}
/* Active slide: amber border instead of blue */
.swiper-slide.swiper-slide-active .card {
border: 2px solid var(--n-amber) !important;
background-image: none !important; /* remove the old overlay.svg */
}
.swiper-slide .card img { width: 64px; height: 64px; border-radius: 10px; object-fit: contain; margin: 0 auto 12px; display: block; }
.swiper-slide .card h2 { font-family: 'Montserrat', sans-serif; font-size: 1rem; font-weight: 700; color: var(--n-dark) !important; margin: 0 0 8px; }
.swiper-slide .card .role { display: inline-block; font-size: .72rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--n-amber); background: rgba(192,125,42,.1); padding: 3px 10px; border-radius: 20px; }
/* Action buttons — !important: style.css has high-specificity blue rules for these */
.buttons { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 28px; }
.app-btn.button {
display: inline-flex !important; align-items: center !important; gap: 8px;
padding: 11px 24px !important; border-radius: 8px !important;
background: transparent !important;
color: var(--n-dark) !important;
border: 1.5px solid rgba(26,29,46,.25) !important;
font-family: 'DM Sans',sans-serif !important; font-size: .9rem; font-weight: 600;
cursor: pointer; transition: border-color .2s, color .2s; text-decoration: none;
}
.app-btn.button:hover { border-color: var(--n-amber) !important; color: var(--n-amber) !important; }
.app-btn.button i { color: var(--n-dark) !important; }
.app-btn.button:hover i { color: var(--n-amber) !important; }
.create-btn.button {
display: inline-flex !important; align-items: center !important; gap: 8px;
padding: 11px 24px !important; border-radius: 8px !important;
background: var(--n-dark) !important; color: #fff !important;
border: 1.5px solid transparent !important;
font-family: 'DM Sans',sans-serif !important; font-size: .9rem; font-weight: 600 !important;
cursor: pointer; transition: background .2s, transform .15s; text-decoration: none !important;
}
.create-btn.button:hover { background: var(--n-amber) !important; color: #fff !important; transform: translateY(-1px); text-decoration: none !important; }
/* Swiper nav */
.swiper-button-prev::after, .swiper-button-next::after { color: var(--n-amber) !important; }
.swiper-pagination-bullet-active { background: var(--n-amber) !important; }
/* Action links bar (Join / Link / Delete) — override old absolute+blue style */
.role-company-page .tab-container .content-box .content .links {
position: relative !important;
top: auto !important;
display: flex !important;
justify-content: center !important;
align-items: stretch !important;
max-width: 560px !important;
width: 100% !important;
margin: 24px auto 0 !important;
border: 1.5px solid rgba(26,29,46,.12) !important;
border-radius: 10px !important;
background: #fff !important;
overflow: hidden;
flex-wrap: nowrap !important;
}
.role-company-page .tab-container .content-box .content .links .link {
display: flex !important;
align-items: center !important;
justify-content: center !important;
gap: 7px;
flex: 1 1 0;
padding: 11px 14px !important;
font-family: 'DM Sans', sans-serif;
font-size: .82rem;
font-weight: 600;
color: var(--n-muted) !important;
cursor: pointer;
border-right: 1px solid rgba(26,29,46,.08) !important;
transition: color .15s, background .15s;
white-space: nowrap;
}
.role-company-page .tab-container .content-box .content .links .link:last-child { border-right: none !important; }
.role-company-page .tab-container .content-box .content .links .link:hover { color: var(--n-amber) !important; background: rgba(192,125,42,.05); }
.role-company-page .tab-container .content-box .content .links .link.active { color: var(--n-dark) !important; }
.role-company-page .tab-container .content-box .content .links .link i { font-size: 14px !important; color: var(--n-amber); padding: 0 !important; }
/* Onboarding employee cards */
.employee-card { background: #fff; border-radius: 14px; box-shadow: 0 4px 24px rgba(26,29,46,.08); border: 1px solid rgba(26,29,46,.06); padding: 28px; }
.employee-card h5 { font-family: 'Montserrat', sans-serif; font-weight: 700; color: var(--n-dark); }
.employee-card .form-group label { font-size: .78rem; font-weight: 600; color: var(--n-muted); text-transform: uppercase; letter-spacing: .08em; }
.employee-card .form-control, .employee-card select.form-control { border: 1.5px solid rgba(26,29,46,.12); border-radius: 8px; padding: 10px 14px; font-family: 'DM Sans', sans-serif; color: var(--n-dark); }
.employee-card .form-control:focus { border-color: var(--n-amber); box-shadow: 0 0 0 3px rgba(192,125,42,.1); outline: none; }
/* Buttons inside page */
.global-button, .send-button { background: var(--n-dark) !important; color: #fff !important; border: none !important; border-radius: 8px !important; padding: 10px 24px !important; font-family: 'DM Sans', sans-serif !important; font-weight: 600 !important; cursor: pointer; transition: background .2s; }
.global-button:hover, .send-button:hover, .global-button:focus, .send-button:focus { background: var(--n-amber) !important; color: #fff !important; box-shadow: none !important; }
.global-outline-button.extra-btn { background: transparent !important; color: var(--n-dark) !important; border: 2px solid rgba(26,29,46,.25) !important; border-radius: 8px !important; padding: 9px 20px !important; font-family: 'DM Sans', sans-serif; font-weight: 600; cursor: pointer; }
.global-outline-button.extra-btn:hover { border-color: var(--n-amber) !important; color: var(--n-amber) !important; }
/* QR card */
.qr-card .card { background: #fff; border-radius: 14px; box-shadow: 0 8px 32px rgba(26,29,46,.12); border: 1px solid rgba(26,29,46,.06); }
/* ── Responsive ──────────────────────────────────────────────────────────── */
@media (max-width: 768px) {
.role-company-page.section { padding: 32px 0 60px; }
.employee-card-container { justify-content: center; }
.employee-card { max-width: 100%; width: 100%; }
}
@media (max-width: 480px) {
.tab-box { gap: 0; }
.tab-btn.tab-btn-style { padding: 8px 12px; font-size: .8rem; }
.employee-card-container { flex-direction: column; align-items: stretch; gap: 16px; }
.buttons { flex-direction: column; }
.app-btn.button, .create-btn.button { width: 100%; justify-content: center; }
}
</style>
<section class="role-company-page section">
<div class="container">
<div class="row">
<div class="col-md-12 d-flex justify-content-center align-items-center">
<div class="section-head-area">
<h1 class="section-title">Your Role & Company List</h1>
</div>
</div>
</div>
<div class="row d-flex justify-content-center align-items-center">
<div class="tab-container">
<div class="tab-box overflow-x-auto">
<button class="tab-btn tab-btn-style active " id="role-tab-1">Your Company</button>
<button class="tab-btn tab-btn-style " id="role-tab-2">Your Role</button>
<button class="tab-btn tab-btn-style " id="role-tab-3">Your Dashboard</button>
<button class="tab-btn tab-btn-style " id="add-employee-btn">Onboarding</button>
<button class="tab-btn tab-btn-style " id="role-tab-4">Shared Company</button>
<button class="tab-btn tab-btn-style " id="role-tab-5">Applied Company</button>
<div class="line"></div>
</div>
<div class="content-box">
{# 1st div: your company #}
<div class="content active" style="cursor:pointer;">
<div class="swiper-container">
<div class="swiper-wrapper"></div>
{# <div id="selected-counter" class="selected-counter">0 out of 5 Selected</div> #}
{# three buttons #}
<div class="links">
<div class="link">
<i class='fa fa-user-plus'></i><span>Join this Account</span>
</div>
<div class="link active">
<i class='fa fa-link'></i><span>Link Accounts</span>
</div>
<div class="link active">
<i class='fa fa-trash'></i><span>Delete Account</span>
</div>
</div>
<div class="swiper-pagination"></div>
<div class="buttons">
<button class="app-btn button"><i class="fa-regular fa-user"></i>Apply for Employment
</button>
<a class="create-btn button" href="{{ url('create_company') }}">
<i class="fa-regular fa-building"></i> Create a Company
</a>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
{# <div id="selected-counter" class="selected-counter">0 out of 5 Selected</div> #}
</div>
{# 2nd div: your role #}
<div class="content">
{# role #}
</div>
{# 3rd div: your dashboard #}
<div class="content">
{# dashboard #}
</div>
{# 4th div: add employee #}
<div class="content">
<div class="employee-card-container hidden" id="employee-card-container">
{# employee card form #}
<div class="employee-card fade show" id="employee-form-wrapper">
<div class="" id="employee-card">
<h5 class='text-center mb-3'>By Generating QR/Link</h5>
<form id="employee-form ">
{# user type #}
<div class="form-group">
<select id="employee-type" name="qrEmpType"
class="form-control p-2 select-center">
<option value="">Select User Type</option>
<option value="1">Admin</option>
<option value="2">User</option>
<option value="3">Manager</option>
</select>
</div>
{# select company #}
<div class="form-group">
<select id="company-name-qr" class="form-control">
<option value="">Select Company</option>
</select>
</div>
{# select employee email #}
<div class="form-group mt-3">
<select name="sys_user" class="form-control entityEmp " id="email">
<option value="">Select Employee</option>
</select>
</div>
<button type="button" class="global-button fs-6" id="qr-code-button">Generate
</button>
</form>
</div>
</div>
{# end employee card form #}
<div class="employee-card fade show " id="self-qr-form-wrapper">
<div id="self-qr-card">
<h5 class='text-center mb-3'>Generate QR for Yourself</h5>
<form id="self-qr-form">
<div class="form-group ">
<label>Your Email</label>
<input style='' type="email" id="self-email-input"
class="form-control email-input" placeholder="Enter your email">
</div>
<button type="button" class="global-button fs-6 mt-3" id="generate-self-qr-btn">
Generate QR
</button>
</form>
</div>
</div>
{# qr card #}
<div class="qr-card" id="qr-code-container" style="display: none; margin-top: 100px">
<div class="card" style=''>
<button type="button"
class="position-absolute top-0 end-0 m-2 p-0 border-0 bg-transparent"
aria-label="Close">
<i class="fa-solid fa-circle-xmark fs-4" id="cl-qr-card"></i>
</button>
<div class="card-body mt-4">
<h3 class="text-capitalize" id="qr-company-name"></h3>
<img id="qr-image" src="" alt="QR Code" class="img-fluid ">
<p id="message" class="mt-2 text-success fs-5 text-center d-none"></p>
<button type="button" class=" send-button mt-2 mx-2 fs-6" id="send-qr-button">
Send Qr
</button>
{# working #}
<button type="button" class="global-outline-button extra-btn mt-2"
id="copy-link-button">
<i class="fas fa-copy" id="close-qr-card"></i></button>
<!-- Send QR Loader -->
<div id="send-loader" class="mt-3 d-none text-center">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div>
</div>
{# qr card end #}
</div>
</div>
{# 5th div: shared company #}
<div class="content">
{# shared company #}
</div>
{# 6th div: applied company #}
<div class="content">
{# applied company #}
</div>
</div>
</div>
</div>
</div>
</section>
<script>
document.addEventListener("DOMContentLoaded", function () {
const accessList = {{ app.session.get('userAccessList', [])|json_encode|raw() }};
console.log(accessList);
let qruserAccessList = [];
function populateCompanyDropdown(selectId) {
const selectElement = document.getElementById(selectId);
qruserAccessList = accessList.map(company => ({
companyName: company.companyName,
appId: company.appId,
companyId: company.companyId,
userType: company.userType
}));
selectElement.innerHTML = '<option value="">Select Company</option>';
accessList.forEach(function (company) {
const option = document.createElement("option");
option.value = company.companyName;
option.textContent = company.companyName;
selectElement.appendChild(option);
});
if ($(selectElement)[0].selectize) {
$(selectElement)[0].selectize.destroy();
}
$(selectElement).selectize({
create: false,
sortField: 'text'
});
}
populateCompanyDropdown("company-name-qr");
// generate qr code
document.getElementById("qr-code-button").addEventListener("click", function () {
var selectedCompany = document.getElementById("company-name-qr").value;
var qrCompanyName = document.getElementById("qr-company-name");
var userEmail = document.getElementById("email")
var qrImage = document.getElementById("qr-image");
var qrCodeContainer = document.getElementById("qr-code-container");
var selectedCompanyData = qruserAccessList.find(company => company.companyName === selectedCompany);
var appId = selectedCompanyData.appId;
var companyId = selectedCompanyData.companyId;
var userType = selectedCompanyData.userType;
var baseUrl = "{{ url('employee_add_by_qr') }}";
var connector = baseUrl.includes("?") ? "&" : "?";
var finalUrl = baseUrl + connector + "company=" + encodeURIComponent(selectedCompany) + "&appid=" + encodeURIComponent(appId) + "&companyId=" + encodeURIComponent(companyId) + "&userType=" + encodeURIComponent(userType) + "&CompanyQr=1";
if (selectedCompany) {
qrCompanyName.textContent = selectedCompany;
$.get("{{ path('generate_qr_div') }}?url=" + encodeURIComponent(finalUrl), function (data) {
$('#qr-image').attr('src', data.html);
$('#qr-code-container').show();
}, "json");
} else {
alert("Please select a company to generate the QR code.");
}
});
document.getElementById("cl-qr-card").addEventListener("click", function (event) {
event.stopPropagation();
document.getElementById("qr-code-container").style.display = "none";
});
document.getElementById("copy-link-button").addEventListener("click", function (event) {
event.stopPropagation();
var selectedCompany = document.getElementById("company-name-qr").value;
var selectedCompanyData = qruserAccessList.find(company => company.companyName === selectedCompany);
var appId = selectedCompanyData.appId;
var companyId = selectedCompanyData.companyId;
var userType = selectedCompanyData.userType;
var baseUrl = "{{ url('employee_add_by_qr') }}";
var connector = baseUrl.includes("?") ? "&" : "?";
var finalUrl = baseUrl + connector + "company=" + encodeURIComponent(selectedCompany) +
"&appid=" + encodeURIComponent(appId) +
"&companyId=" + encodeURIComponent(companyId) +
"&userType=" + encodeURIComponent(userType);
navigator.clipboard.writeText(finalUrl).then(() => {
var qrContainer = document.getElementById("qr-code-container");
var copyMessage = document.getElementById("copy-message");
const qrImage = document.getElementById("qr-image");
if (!copyMessage) {
copyMessage = document.createElement("p");
copyMessage.id = "copy-message";
copyMessage.style.color = "green";
copyMessage.style.marginTop = "0px";
copyMessage.style.fontWeight = "bold";
copyMessage.style.fontSize = "16px";
copyMessage.style.textAlign = "center";
qrImage.insertAdjacentElement("afterend", copyMessage);
//qrContainer.appendChild(copyMessage);
}
copyMessage.textContent = "Link copied to clipboard!";
// remove 'Link copied to clipboard!' after 5 seconds
setTimeout(() => {
copyMessage.remove();
copyMessage = null;
}, 5000);
}).catch(err => {
console.error("Failed to copy: ", err);
});
});
document.getElementById("send-qr-button").addEventListener("click", function () {
var selectedEmployee = document.getElementById("email").value;
var selectedCompany = document.getElementById("company-name-qr").value;
var selectedCompanyData = qruserAccessList.find(company => company.companyName === selectedCompany);
var appId = selectedCompanyData.appId;
var qrImage = document.getElementById("qr-image");
var loader = document.getElementById("send-loader"); // loader variable
if (!selectedEmployee || !selectedCompany) {
alert("Please select both an employee and a company.");
return;
}
// Show loader
loader.classList.remove("d-none");
var formData = new FormData();
formData.append('company', selectedCompany);
formData.append('email', selectedEmployee);
formData.append('qr_image', dataURItoBlob(qrImage.src));
formData.append('appid', appId);
fetch("{{ path('employee_add_by_qr') }}", {
method: "POST",
body: formData
}).then(response => response.json())
.then(data => {
// Hide loader
loader.classList.add("d-none");
if (data.status === 'success') {
window.location.href = "{{ path('central_landing') }}";
alert('QR Code for employee uploaded successfully!');
} else {
alert('Error: ' + data.message);
}
}).catch(error => {
console.error("Error uploading QR Code:", error);
});
});
function dataURItoBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var arrayBuffer = new ArrayBuffer(byteString.length);
var uintArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteString.length; i++) {
uintArray[i] = byteString.charCodeAt(i);
}
return new Blob([uintArray], {type: 'image/png'});
}
document.getElementById("generate-self-qr-btn").addEventListener("click", function () {
const emailInput = document.getElementById("self-email-input").value.trim();
const qrCompanyName = document.getElementById("qr-company-name");
const qrImage = document.getElementById("qr-image");
const qrCodeContainer = document.getElementById("qr-code-container");
if (!emailInput) {
alert("Please enter your email to generate the QR code.");
return;
}
$.get("{{ path('employee_onboard_by_qr_api') }}", {email: emailInput}, function (response) {
if (response.status === 'success') {
const userData = response.data;
const payloadUrl = "{{ url('employee_onboard_by_qr_api') }}?email=" + encodeURIComponent(userData.email) +
"&applicantId=" + encodeURIComponent(userData.id);
$.get("{{ path('generate_qr_div') }}", {url: payloadUrl}, function (qrRes) {
$('#qr-company-name').text(userData.email);
$('#qr-image').attr('src', qrRes.html);
$('#qr-code-container').show();
}, 'json');
} else {
alert(response.message || "User not found.");
}
}, "json");
});
$('.entityEmp').selectize({
placeholder: 'Enter Email',
multiple: false,
valueField: 'value',
labelField: 'text',
searchField: ['text'],
preload: 'focus',
load: function (query, callback) {
$.ajax({
url: "https://ourhoneybee.eu/select_data_ajax_public",
type: 'POST',
dataType: 'json',
data: {
query: query,
entity_group: 1,
tableName: "entity_applicant_details",
valueField: "email",
textField: "rendered_text",
renderTextFormat: "__email__",
andOrConditions: [
{type: "like", field: "email", value: query},
{type: "like", field: "firstname", value: query},
],
},
success: function (res) {
if (res && res.data && Array.isArray(res.data)) {
callback(res.data);
} else {
callback([]);
}
},
error: function () {
callback([]);
}
});
},
});
$("#send-qr-button").click(function () {
var selectedEmployee = $(".entityEmp").val();
var selectedCompany = $("#company-name-qr").val();
if (!selectedEmployee || !selectedCompany) {
alert("Please select both an employee and a company.");
return;
}
$.ajax({
url: '/central_landing',
type: "POST",
data: {
employee_id: selectedEmployee,
company_name: selectedCompany
},
success: function (response) {
if (response.status === 'success') {
const messageBox = document.getElementById('message');
messageBox.textContent = 'Sent email successfully';
messageBox.classList.remove('d-none'); // Show message
// Hide after 5 seconds
setTimeout(() => {
messageBox.classList.add('d-none');
}, 5000);
window.location.href = "{{ path('central_landing') }}";
alert(response.company_name);
} else {
alert("Unexpected response from server.");
}
},
error: function (error) {
alert("Error sending data!");
}
});
});
});
</script>
{# {% include '@Application/footer/central_footer_backup.html.twig' %} #}
{% include '@HoneybeeWeb/footer/central_footer.html.twig' %}
<link rel="stylesheet" type="text/css"
href="{{ absolute_url(path('dashboard')) }}buddybee_assets/DataTables/datatables.min.css"/>
<script type="text/javascript"
src="{{ absolute_url(path('dashboard')) }}condensed_assets/pagination/pagination.js?version={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}"></script>
<script type="text/javascript"
src="{{ absolute_url(path('dashboard')) }}buddybee_assets/DataTables/datatables.min.js?version={{ constant('ApplicationBundle\\Constants\\GeneralConstant::ENTITY_APP_VERSION') }}"></script>
<script type="text/javascript" src="{{ absolute_url(path('dashboard')) }}buddybee_assets/js/jquery.countTo.js"></script>
<script type="text/javascript"
src="{{ absolute_url(path('dashboard')) }}buddybee_assets/js/jquery.knob.min.js"></script>
<script>
// open and close qr code
document.getElementById('qr-code-button').addEventListener('click', function () {
// showing qr card
document.getElementById('qr-code-container').style.display = 'block';
// hide form
document.getElementById('employee-form-wrapper').style.display = 'none';
})
document.getElementById('cl-qr-card').addEventListener('click', function () {
// hide qr card
document.getElementById('qr-code-container').style.display = 'none';
// showing the form again
document.getElementById('employee-form-wrapper').style.display = 'block';
})
var selectEntityModal = {};
var currentTabSelectEntityModal = 0;
var accessList = [];
{% if app.session.get('userAccessList','') !='' %}
accessList ={{ app.session.get('userAccessList','')|json_encode|raw() }}
{% endif %}
function getUserCompanyList(userGetType) {
userGetType = userGetType || '_LOCAL_';
var pika_ind_id = "_NA_";
$('#selectEntityModal .cg_holder').empty();
var userTypeTextObject = {
1: 'Admin',
2: 'User',
3: 'Vendor',
4: 'Customer',
5: 'Management User',
6: 'Group Owner',
7: 'GLobal User',
8: 'Applicant',
9: 'Collaborator',
}
var placeholderCount=6;
if (userGetType === '_LOCAL_') {
$.ajax({
url: BaseURL + "get_users_by_query?queryStr=" + $('#tempUsername').val(),
type: 'POST',
dataType: 'json',
data: {},
error: function () {
// callback();
},
success: function (res) {
if (res.success === true) {
if (res.data.length === 1) {
var dt = res.data[0];
$('#gocId').val(dt['gocId']);
$('#username').val(dt['loginUserName']);
$('#loginform').submit();
} else {
for (var jj = 0; jj < res.data.length; jj++) {
var dt = res.data[jj];
var ggStr = ' <div class="box-selector cg_selector cg_' + dt['appId'] + '" style="cursor:pointer;"' + ' col-md-12 col-sm-12"' +
' data-id="' + dt['gocId'] + '"' +
' data-goc-id="' + dt['gocId'] + '"' +
' data-user-name="' + dt['loginUserName'] + '"' +
' data-gen-class="cg_selector">' +
'<div class="inside" style="display: flex;">' +
'<div class="img" style="' +
"background:url('" + dt['companyLogoUrl'] + "');" +
'height: 50px;width: 40%;background-position: left;background-size: contain;background-repeat: no-repeat;display: inline-block;">' +
'</div>' +
'<h6 class="title" style="height: 2rem; width: 60%;text-align: left;">' + dt['companyName'] +
' <p class="sub-title">' + userTypeTextObject[dt['userType']] + '</p></h6>' +
'</div>' +
'</div>';
$('#selectEntityModal .cg_holder').append(ggStr);
}
$('#selectEntityModal').modal('show');
}
}
}
});
}
if (userGetType == '_CENTRAL_') {
{
for (var jj = 0; jj < accessList.length; jj++) {
var dt = accessList[jj];
var ggStr = ' <div class="swiper-slide cg_selector cg_' + dt['appId'] + '" style="cursor:pointer;"' +
' data-id="' + dt['appId'] + '"' +
' data-app-id="' + dt['appId'] + '"' +
' data-goc-id="0"' +
// ' data-user-name="' + dt['loginUserName'] + '" ' +
' data-gen-class="cg_selector" ' +
' data-auth-str="' + dt['authenticationStr'] + '" ' +
' data-server-url="' + dt['serverUrl'] + '" ' +
' data-cs-token="{{ app.session.get('csToken','') }}" ' +
'>' +
' <div class="card">' +
// round circle
//'<input type="checkbox" id="check">' +
'<img src="{{ constant('ApplicationBundle\\Constants\\GeneralConstant::HONEYBEE_CENTRAL_SERVER') }}' + dt['companyLogoUrl'] + '" alt=" Logo">' +
'<h2>' + dt['companyName'] + '</h2>' +
' <div class="role">' + userTypeTextObject[dt['userType']] + '</div>' +
// '<p>Lorem ipsum dolor sit amet ect tur. Blandit donec tortor et et quisq. Lorem ipsum dolor sit amet ect tur. Blandit donec tortor et et quisq. Lorem ipsum ...</p> ' +
// '<a href="#"><i class='bx bx-user-plus'></i>Add Employee</a> ' +
'</div> ' +
'</div>'
$('.swiper-wrapper').append(ggStr);
placeholderCount--;
}
}
for (var jj = 0; jj < placeholderCount; jj++) {
var dt = accessList[jj];
var ggStr = ' <div class="swiper-slide cg_skip cg_0" style="cursor:pointer;"' +
' data-id="0' +
' data-app-id="0"' +
' data-goc-id="0"' +
// ' data-user-name="' + dt['loginUserName'] + '" ' +
' data-gen-class="cg_selector" ' +
' data-auth-str="" ' +
' data-server-url="" ' +
' data-cs-token="" ' +
'>' +
' <div class="card">' +
// round circle
//'<input type="checkbox" id="check">' +
'<img src="{{ constant('ApplicationBundle\\Constants\\GeneralConstant::HONEYBEE_CENTRAL_SERVER') }}/images/company_2.png" alt=" Logo">' +
'<h2><i class="fa fa-plus"></i>Add a Company</h2>' +
' <div class="role">Add or join a company</div>' +
'</div> ' +
'</div>'
$('.swiper-wrapper').append(ggStr);
}
// swipper issue solved for company clicking issue
// var mySwiper = new Swiper('.swiper-container', {
// loop: true,
// speed: 400,
// effect: "coverflow",
// centeredSlides: true,
// slidesPerView: 3,
// mousewheel: true,
// allowTouchMove: false, // drag/swipe disabled
// coverflowEffect: {
// rotate: 0,
// stretch: 20,
// depth: 200,
// modifier: 2,
// slideShadows: false,
// },
// pagination: {
// el: ".swiper-pagination",
// clickable: true,
// },
// navigation: {
// nextEl: ".swiper-button-next",
// prevEl: ".swiper-button-prev",
// },
// });
var role_company_page = new Swiper(".role-company-page .content .swiper-container",
{
loop: true,
speed: 400,
effect: "coverflow",
centeredSlides: true,
slidesPerView: 1,
mousewheel: true,
grabCursor: true,
coverflowEffect: {
rotate: 0,
stretch: 20,
depth: 200,
modifier: 2,
slideShadows: false,
},
breakpoints: {
640: { slidesPerView: 2 },
1024: { slidesPerView: 3 },
},
pagination: {
el: ".swiper-pagination",
clickable: true,
},
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
}
);
// var role_company_page = new Swiper(".role-company-page .content .swiper-container",
// {
// loop: true,
// speed: 400,
// effect: "coverflow",
// centeredSlides: true,
// slidesPerView: 3,
// mousewheel: true,
// grabCursor: true,
// coverflowEffect: {
// rotate: 0,
// stretch: 20,
// depth: 200,
// modifier: 2,
// slideShadows: false,
// },
//
// pagination: {
// el: ".swiper-pagination",
// clickable: true,
//
// },
// navigation: {
// nextEl: ".swiper-button-next",
// prevEl: ".swiper-button-prev",
// },
//
// }
// );
// var mySwiper=role_company_page;
// Stable click for center slide
// document.querySelector('.swiper-container').addEventListener('click', function () {
// var activeSlide = mySwiper.slides[mySwiper.activeIndex];
// var serverUrl = activeSlide.getAttribute('data-server-url');
// var authStr = activeSlide.getAttribute('data-auth-str');
// var appId = activeSlide.getAttribute('data-app-id');
// var csToken = activeSlide.getAttribute('data-cs-token');
//
// if (serverUrl) {
// window.location.href =
// serverUrl +
// '?authStr=' + authStr +
// '&appId=' + appId +
// '&csToken=' + csToken;
// }
// });
}
}
jQuery(document).ready(function () {
getUserCompanyList('_CENTRAL_')
$(document).on('click', '.box-selector', function () {
$('.' + $(this).data('genClass')).removeClass('active')
$(this).addClass('active')
});
$(document).on('click', '.cg_selector', function () {
if (typeof $(this).data('authStr') !== 'undefined') {
let serverUrl = $(this).data('serverUrl').replace(/\/$/, ''); // avoid trailing slash
window.location.href = serverUrl + '/switch_app?spd=' + $(this).data('authStr') + '&csToken=' + $(this).data('csToken');
//previous line window.location.href = $(this).data('serverUrl') + '/switch_app?spd=' + $(this).data('authStr') + '&csToken=' + $(this).data('csToken');
} else {
$('#gocId').val($(this).data('gocId'));
$('#username').val($(this).data('userName'));
$('#loginform').submit();
}
});
$(document).on('click', '.cg_skip', function () {
window.location.href = '{{ url('create_company') }}';
//previous line window.location.href = $(this).data('serverUrl') + '/switch_app?spd=' + $(this).data('authStr') + '&csToken=' + $(this).data('csToken');
});
// $(document).on('click', '.applicant_action_selector', function () {
// window.location.href = $(this).data('url')
// });
});
</script>