student dashboard responsive updated

This commit is contained in:
Selvi 2026-09-29 20:26:13 +05:30
parent 3105a89408
commit cead33cbfc
6 changed files with 471 additions and 75 deletions

View File

@ -552,6 +552,20 @@
color: #144d4d; color: #144d4d;
} }
/* Footer */
.portal-footer-area {
height: 60px;
background: #ffffff;
border-top: 1px solid rgba(31, 143, 143, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 40px;
font-size: 0.9rem;
color: #718096;
font-weight: 600;
}
/* Responsive Design overrides */ /* Responsive Design overrides */
@media (max-width: 991px) { @media (max-width: 991px) {
.portal-layout-wrapper { .portal-layout-wrapper {
@ -603,10 +617,18 @@
margin: 0; margin: 0;
width: auto; width: auto;
} }
.portal-footer-area {
height: auto;
flex-direction: column;
justify-content: center;
gap: 8px;
padding: 16px 20px;
text-align: center;
}
} }
@media (max-width: 575px) { @media (max-width: 575px) {
.portal-header { .portal-header {
padding: 0 12px; padding: 0 12px !important;
height: 60px; height: 60px;
} }
.portal-logo-area span { .portal-logo-area span {
@ -783,7 +805,7 @@
<div class="premium-card"> <div class="premium-card">
<h5 class="font-weight-bold mb-3 text-dark"> <h5 class="font-weight-bold mb-3 text-dark">
<i class="fa fa-calendar text-primary mr-2"/>Scheduled Exams <i class="fa fa-calendar text-primary mr-2 me-2"/>Scheduled Exams
</h5> </h5>
<t t-if="not exams"> <t t-if="not exams">
<div class="alert alert-info border-0 shadow-sm" style="background: #e6f7f7; color: #144d4d; border-radius: 12px;"> <div class="alert alert-info border-0 shadow-sm" style="background: #e6f7f7; color: #144d4d; border-radius: 12px;">
@ -821,10 +843,10 @@
</div> </div>
<!-- Bottom Footer Area --> <!-- Bottom Footer Area -->
<div style="height: 60px; background: #ffffff; border-top: 1px solid rgba(31, 143, 143, 0.1); display: flex; align-items: center; justify-content: space-between; padding: 0 40px; font-size: 0.9rem; color: #718096; font-weight: 600;"> <div class="portal-footer-area">
<span>© 2026 Metatron EduPortal. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span> <span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div> </div>
</t> </t>
</template> </template>
@ -917,7 +939,7 @@
<div class="premium-card"> <div class="premium-card">
<h5 class="font-weight-bold mb-3 text-dark"> <h5 class="font-weight-bold mb-3 text-dark">
<i class="fa fa-trophy text-primary mr-2"/>Published Results <i class="fa fa-trophy text-primary mr-2 me-2"/>Published Results
</h5> </h5>
<t t-if="not results"> <t t-if="not results">
<div class="alert alert-info border-0 shadow-sm" style="background: #e6f7f7; color: #144d4d; border-radius: 12px;"> <div class="alert alert-info border-0 shadow-sm" style="background: #e6f7f7; color: #144d4d; border-radius: 12px;">
@ -961,10 +983,10 @@
</div> </div>
<!-- Bottom Footer Area --> <!-- Bottom Footer Area -->
<div style="height: 60px; background: #ffffff; border-top: 1px solid rgba(31, 143, 143, 0.1); display: flex; align-items: center; justify-content: space-between; padding: 0 40px; font-size: 0.9rem; color: #718096; font-weight: 600;"> <div class="portal-footer-area">
<span>© 2026 Metatron EduPortal. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span> <span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div> </div>
</t> </t>
</template> </template>
@ -1143,10 +1165,10 @@
</div> </div>
<!-- Bottom Footer Area --> <!-- Bottom Footer Area -->
<div style="height: 60px; background: #ffffff; border-top: 1px solid rgba(31, 143, 143, 0.1); display: flex; align-items: center; justify-content: space-between; padding: 0 40px; font-size: 0.9rem; color: #718096; font-weight: 600;"> <div class="portal-footer-area">
<span>© 2026 Metatron EduPortal. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span> <span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div> </div>
</t> </t>
</template> </template>
</odoo> </odoo>

View File

@ -243,6 +243,87 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
/* Footer */
.portal-footer-area {
height: 60px;
background: #ffffff;
border-top: 1px solid rgba(31, 143, 143, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 40px;
font-size: 0.9rem;
color: #718096;
font-weight: 600;
}
/* Responsive */
@media (max-width: 991px) {
.portal-layout-wrapper {
flex-direction: column;
}
.portal-sidebar {
width: 100% !important;
border-right: none !important;
border-bottom: 1px solid rgba(31, 143, 143, 0.1);
padding: 16px 20px;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 8px;
position: static !important;
max-height: none !important;
}
.sidebar-link {
padding: 10px 16px;
}
.portal-content-area {
padding: 24px !important;
height: auto !important;
min-height: auto !important;
overflow: visible !important;
}
}
@media (max-width: 767px) {
.portal-header {
padding: 0 20px;
}
.portal-sidebar {
padding: 12px 8px;
gap: 4px;
}
.sidebar-link {
padding: 8px 12px;
font-size: 0.85rem;
gap: 8px;
}
.sidebar-link span {
display: none;
}
.sidebar-link i {
font-size: 1.3rem;
margin: 0;
width: auto;
}
.portal-footer-area {
height: auto;
flex-direction: column;
justify-content: center;
gap: 8px;
padding: 16px 20px;
text-align: center;
}
}
@media (max-width: 575px) {
.portal-header {
padding: 0 12px !important;
height: 60px;
}
.portal-logo-area span {
display: none;
}
}
</style> </style>
<!-- Header --> <!-- Header -->
@ -300,6 +381,12 @@
<t t-out="0"/> <t t-out="0"/>
</div> </div>
</div> </div>
<!-- Bottom Footer Area -->
<div class="portal-footer-area">
<span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div>
</t> </t>
</template> </template>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<!-- Payment Success Template --> <!-- Payment Success Template -->
<template id="portal_payment_success" name="Payment Success"> <template id="portal_payment_success" name="Payment Success">
@ -71,7 +71,7 @@
<div class="d-flex justify-content-center gap-3"> <div class="d-flex justify-content-center gap-3">
<t t-if="transaction.payment_id"> <t t-if="transaction.payment_id">
<a t-attf-href="/my/education/finance/receipt/{{ transaction.payment_id.id }}" class="btn text-white font-weight-bold px-4 py-2" style="background: #1f8f8f; border-radius: 10px;"> <a t-attf-href="/my/education/finance/receipt/{{ transaction.payment_id.id }}" class="btn text-white font-weight-bold px-4 py-2" style="background: #1f8f8f; border-radius: 10px;">
<i class="fa fa-download mr-2"/> Download PDF Receipt <i class="fa fa-download mr-2 me-2"/> Download PDF Receipt
</a> </a>
</t> </t>
<a href="/my/education/finance" class="btn btn-outline-secondary font-weight-bold px-4 py-2" style="border-radius: 10px;"> <a href="/my/education/finance" class="btn btn-outline-secondary font-weight-bold px-4 py-2" style="border-radius: 10px;">
@ -122,12 +122,12 @@
<p class="text-muted mb-3"><t t-esc="transaction.error_message or 'The payment process was cancelled or verification failed.'" me=""/></p> <p class="text-muted mb-3"><t t-esc="transaction.error_message or 'The payment process was cancelled or verification failed.'" me=""/></p>
<div class="alert alert-warning text-left mb-4" style="border-radius: 10px; font-size: 0.9rem;"> <div class="alert alert-warning text-left mb-4" style="border-radius: 10px; font-size: 0.9rem;">
<i class="fa fa-info-circle mr-1"/> Don't worry! No funds were deducted for incomplete ledger entries. You can safely retry. <i class="fa fa-info-circle mr-1 me-1"/> Don't worry! No funds were deducted for incomplete ledger entries. You can safely retry.
</div> </div>
<div class="d-flex justify-content-center gap-3"> <div class="d-flex justify-content-center gap-3">
<a href="/my/education/finance" class="btn btn-danger font-weight-bold px-4 py-2" style="border-radius: 10px;"> <a href="/my/education/finance" class="btn btn-danger font-weight-bold px-4 py-2" style="border-radius: 10px;">
<i class="fa fa-refresh mr-2"/> Retry Payment <i class="fa fa-refresh mr-2 me-2"/> Retry Payment
</a> </a>
<a href="/my/education/dashboard" class="btn btn-outline-secondary font-weight-bold px-4 py-2" style="border-radius: 10px;"> <a href="/my/education/dashboard" class="btn btn-outline-secondary font-weight-bold px-4 py-2" style="border-radius: 10px;">
Dashboard Dashboard
@ -159,10 +159,10 @@
<div class="history-card"> <div class="history-card">
<div class="d-flex align-items-center justify-content-between mb-4"> <div class="d-flex align-items-center justify-content-between mb-4">
<h4 class="font-weight-bold mb-0" style="color: #144d4d;"> <h4 class="font-weight-bold mb-0" style="color: #144d4d;">
<i class="fa fa-history text-primary mr-2"/> Online Payment History <i class="fa fa-history text-primary mr-2 me-2"/> Online Payment History
</h4> </h4>
<a href="/my/education/finance" class="btn btn-sm btn-outline-primary font-weight-bold" style="border-radius: 8px;"> <a href="/my/education/finance" class="btn btn-sm btn-outline-primary font-weight-bold" style="border-radius: 8px;">
<i class="fa fa-arrow-left mr-1"/> Back to Dues <i class="fa fa-arrow-left mr-1 me-1"/> Back to Dues
</a> </a>
</div> </div>

View File

@ -841,7 +841,7 @@
} }
@media (max-width: 575px) { @media (max-width: 575px) {
.portal-header { .portal-header {
padding: 0 12px; padding: 0 12px !important;
height: 60px; height: 60px;
} }
.portal-logo-area span { .portal-logo-area span {
@ -863,6 +863,11 @@
display: none; display: none;
} }
} }
@media (max-width: 424px) {
.card-deco-dots {
display: none !important;
}
}
</style> </style>
<!-- Top Header --> <!-- Top Header -->
@ -889,10 +894,10 @@
<i class="fa fa-angle-down"/> <i class="fa fa-angle-down"/>
</div> </div>
<div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;"> <div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;">
<a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted"/> My Profile</a> <a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted me-2"/> My Profile</a>
<a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted"/> Dashboard</a> <a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted me-2"/> Dashboard</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2"/> Logout</a> <a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2 me-2"/> Logout</a>
</div> </div>
</div> </div>
</div> </div>
@ -1075,7 +1080,7 @@
<div class="premium-card"> <div class="premium-card">
<div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3"> <div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3">
<h5 class="font-weight-bold text-dark mb-0"> <h5 class="font-weight-bold text-dark mb-0">
<i class="fa fa-mortar-board text-primary mr-2"/>Academic Summary <i class="fa fa-mortar-board text-primary mr-2 me-2"/> Academic Summary
</h5> </h5>
<a href="/my/education/profile" class="header-link-action">View Details &gt;</a> <a href="/my/education/profile" class="header-link-action">View Details &gt;</a>
</div> </div>
@ -1123,7 +1128,7 @@
<div class="premium-card"> <div class="premium-card">
<div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3 flex-wrap gap-2"> <div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3 flex-wrap gap-2">
<h5 class="font-weight-bold text-dark mb-0 text-truncate" style="min-width: 0; flex: 1;"> <h5 class="font-weight-bold text-dark mb-0 text-truncate" style="min-width: 0; flex: 1;">
<i class="fa fa-credit-card text-success mr-2"/>Finance Overview <i class="fa fa-credit-card text-success mr-2 me-2"/> Finance Overview
</h5> </h5>
<a href="/my/education/finance" class="header-link-action text-nowrap">View All Transactions</a> <a href="/my/education/finance" class="header-link-action text-nowrap">View All Transactions</a>
</div> </div>
@ -1165,7 +1170,7 @@
<div class="premium-card" style="height: calc(100% - 16px);"> <div class="premium-card" style="height: calc(100% - 16px);">
<div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3 flex-wrap gap-2"> <div class="d-flex align-items-center justify-content-between border-bottom pb-2 mb-3 flex-wrap gap-2">
<h5 class="font-weight-bold text-dark mb-0 text-truncate" style="min-width: 0; flex: 1;"> <h5 class="font-weight-bold text-dark mb-0 text-truncate" style="min-width: 0; flex: 1;">
<i class="fa fa-calendar-check-o text-warning mr-2"/>Upcoming <i class="fa fa-calendar-check-o text-warning me-2 mr-2"/> Upcoming
</h5> </h5>
<a href="#" class="header-link-action text-nowrap">View Calendar</a> <a href="#" class="header-link-action text-nowrap">View Calendar</a>
</div> </div>
@ -1179,7 +1184,7 @@
<div class="event-month"><t t-esc="exam.start_date.strftime('%b')"/></div> <div class="event-month"><t t-esc="exam.start_date.strftime('%b')"/></div>
</div> </div>
<div class="event-info"> <div class="event-info">
<div class="event-title"><i class="fa fa-graduation-cap mr-1 text-primary"/> <t t-esc="exam.name"/></div> <div class="event-title"><i class="fa fa-graduation-cap mr-1 text-primary me-1"/> <t t-esc="exam.name"/></div>
<div class="event-desc"><t t-esc="exam.code"/> - <t t-esc="exam.exam_type_id.name"/></div> <div class="event-desc"><t t-esc="exam.code"/> - <t t-esc="exam.exam_type_id.name"/></div>
</div> </div>
</div> </div>
@ -1452,7 +1457,7 @@
font-size: 0.9rem; font-size: 0.9rem;
} }
.card-deco-dots { .card-deco-dots {
position: absolute; display: none;position: absolute;
top: 20px; top: 20px;
right: 24px; right: 24px;
color: #d1f1f1; color: #d1f1f1;
@ -1712,7 +1717,7 @@
} }
@media (max-width: 575px) { @media (max-width: 575px) {
.portal-header { .portal-header {
padding: 0 12px; padding: 0 12px !important;
height: 60px; height: 60px;
} }
.portal-logo-area span { .portal-logo-area span {
@ -1757,10 +1762,10 @@
<i class="fa fa-angle-down"/> <i class="fa fa-angle-down"/>
</div> </div>
<div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;"> <div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;">
<a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted"/> My Profile</a> <a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted me-2"/> My Profile</a>
<a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted"/> Dashboard</a> <a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted me-2"/> Dashboard</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2"/> Logout</a> <a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2 me-2"/> Logout</a>
</div> </div>
</div> </div>
</div> </div>
@ -2481,10 +2486,10 @@
<i class="fa fa-angle-down"/> <i class="fa fa-angle-down"/>
</div> </div>
<div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;"> <div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;">
<a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted"/> My Profile</a> <a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted me-2"/> My Profile</a>
<a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted"/> Dashboard</a> <a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted me-2"/> Dashboard</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2"/> Logout</a> <a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2 me-2"/> Logout</a>
</div> </div>
</div> </div>
</div> </div>
@ -2564,7 +2569,7 @@
<!-- Overview Summary Section --> <!-- Overview Summary Section -->
<div class="premium-card"> <div class="premium-card">
<h5 class="font-weight-bold mb-3 text-dark"> <h5 class="font-weight-bold mb-3 text-dark">
<i class="fa fa-credit-card text-primary mr-2"/>Financial Statement Summary <i class="fa fa-credit-card text-primary mr-2 me-2"/> Financial Statement Summary
</h5> </h5>
<div class="row g-3"> <div class="row g-3">
<div class="col-md-4"> <div class="col-md-4">
@ -2605,12 +2610,12 @@
<div class="d-flex align-items-center justify-content-between border-bottom pb-3 mb-3"> <div class="d-flex align-items-center justify-content-between border-bottom pb-3 mb-3">
<div> <div>
<h5 class="font-weight-bold text-dark mb-1"> <h5 class="font-weight-bold text-dark mb-1">
<i class="fa fa-shopping-cart text-primary mr-2"/>Itemized Pending Dues <i class="fa fa-shopping-cart text-primary mr-2 me-2"/> Itemized Pending Dues
</h5> </h5>
<p class="text-muted small mb-0">Select individual fee items or pay all outstanding dues online securely via Razorpay / UPI.</p> <p class="text-muted small mb-0">Select individual fee items or pay all outstanding dues online securely via Razorpay / UPI.</p>
</div> </div>
<a href="/my/education/payment/history" class="btn btn-sm btn-outline-info font-weight-bold" style="border-radius: 8px;"> <a href="/my/education/payment/history" class="btn btn-sm btn-outline-info font-weight-bold" style="border-radius: 8px;">
<i class="fa fa-history mr-1"/> Payment History <i class="fa fa-history mr-1 me-1"/> Payment History
</a> </a>
</div> </div>
@ -2641,7 +2646,7 @@
<td><span t-field="fee.academic_year_id.name"/></td> <td><span t-field="fee.academic_year_id.name"/></td>
<td> <td>
<span class="badge bg-light text-dark p-2"> <span class="badge bg-light text-dark p-2">
<i class="fa fa-calendar-o mr-1"/> <span t-field="fee.assignment_date"/> <i class="fa fa-calendar-o mr-1 me-1"/> <span t-field="fee.assignment_date"/>
</span> </span>
</td> </td>
<td class="text-right font-weight-bold text-dark" style="font-size: 1.05rem;"> <td class="text-right font-weight-bold text-dark" style="font-size: 1.05rem;">
@ -2662,13 +2667,13 @@
<div class="d-flex align-items-center justify-content-between p-3 rounded-lg" style="background: #e6fffa; border: 1px solid #b2f5ea; border-radius: 12px;"> <div class="d-flex align-items-center justify-content-between p-3 rounded-lg" style="background: #e6fffa; border: 1px solid #b2f5ea; border-radius: 12px;">
<div> <div>
<span class="text-muted font-weight-bold">Selected Items: </span> <span class="text-muted font-weight-bold">Selected Items: </span>
<span id="selectedCount" class="font-weight-bold text-dark mr-3">0</span> <span id="selectedCount" class="font-weight-bold text-dark mr-3 me-3">0</span>
<span class="text-muted font-weight-bold">Total Dues to Pay: </span> <span class="text-muted font-weight-bold">Total Dues to Pay: </span>
<span id="selectedTotalAmount" class="font-weight-bold" style="color: #2b6cb0; font-size: 1.25rem;">₹0.00</span> <span id="selectedTotalAmount" class="font-weight-bold" style="color: #2b6cb0; font-size: 1.25rem;">₹0.00</span>
</div> </div>
<div> <div>
<button type="button" id="btnPayOnline" class="btn text-white font-weight-bold px-4 py-2" style="background: linear-gradient(135deg, #1f8f8f 0%, #144d4d 100%); border-radius: 10px; box-shadow: 0 4px 12px rgba(31, 143, 143, 0.25);"> <button type="button" id="btnPayOnline" class="btn text-white font-weight-bold px-4 py-2" style="background: linear-gradient(135deg, #1f8f8f 0%, #144d4d 100%); border-radius: 10px; box-shadow: 0 4px 12px rgba(31, 143, 143, 0.25);">
<i class="fa fa-shield mr-2"/> Proceed to Payment <i class="fa fa-shield mr-2 me-2"/> Proceed to Payment
</button> </button>
</div> </div>
</div> </div>
@ -2686,7 +2691,7 @@
<div class="premium-card"> <div class="premium-card">
<div class="d-flex align-items-center justify-content-between border-bottom pb-3 mb-3"> <div class="d-flex align-items-center justify-content-between border-bottom pb-3 mb-3">
<h5 class="font-weight-bold text-dark mb-0"> <h5 class="font-weight-bold text-dark mb-0">
<i class="fa fa-exchange text-primary mr-2"/>Ledger &amp; Transaction Details <i class="fa fa-exchange text-primary mr-2 me-2"/> Ledger &amp; Transaction Details
</h5> </h5>
<button class="btn-filter"> <button class="btn-filter">
<i class="fa fa-filter"/> Filter <i class="fa fa-filter"/> Filter
@ -2708,7 +2713,7 @@
<t t-if="ledger_lines"> <t t-if="ledger_lines">
<t t-foreach="ledger_lines" t-as="line"> <t t-foreach="ledger_lines" t-as="line">
<tr> <tr>
<td><i class="fa fa-calendar-o mr-2 text-muted"/> <span t-field="line.date"/></td> <td><i class="fa fa-calendar-o mr-2 text-muted me-2"/> <span t-field="line.date"/></td>
<td class="font-weight-bold text-dark"><span t-field="line.description"/></td> <td class="font-weight-bold text-dark"><span t-field="line.description"/></td>
<td class="text-right text-danger font-weight-bold"> <td class="text-right text-danger font-weight-bold">
<t t-if="line.debit &gt; 0">+ <t t-esc="student.currency_id.symbol"/> <t t-esc="'{0:,.2f}'.format(line.debit)"/></t> <t t-if="line.debit &gt; 0">+ <t t-esc="student.currency_id.symbol"/> <t t-esc="'{0:,.2f}'.format(line.debit)"/></t>
@ -2743,7 +2748,7 @@
<!-- Official Payment Receipts --> <!-- Official Payment Receipts -->
<div class="premium-card"> <div class="premium-card">
<h5 class="font-weight-bold mb-3 text-dark"> <h5 class="font-weight-bold mb-3 text-dark">
<i class="fa fa-file-text-o text-info mr-2"/>Official Payment Receipts <i class="fa fa-file-text-o text-info mr-2 me-2"/> Official Payment Receipts
</h5> </h5>
<div class="table-responsive"> <div class="table-responsive">
<table class="premium-table"> <table class="premium-table">
@ -2761,7 +2766,7 @@
<t t-foreach="payments" t-as="pay"> <t t-foreach="payments" t-as="pay">
<tr> <tr>
<td class="font-weight-bold text-dark"><span t-field="pay.receipt_number"/></td> <td class="font-weight-bold text-dark"><span t-field="pay.receipt_number"/></td>
<td><i class="fa fa-calendar-o mr-2 text-muted"/> <span t-field="pay.payment_date"/></td> <td><i class="fa fa-calendar-o mr-2 text-muted me-2"/> <span t-field="pay.payment_date"/></td>
<td><span t-field="pay.payment_method"/></td> <td><span t-field="pay.payment_method"/></td>
<td class="text-right font-weight-bold text-success"> <td class="text-right font-weight-bold text-success">
<t t-esc="student.currency_id.symbol"/> <t t-esc="'{0:,.2f}'.format(pay.amount)"/> <t t-esc="student.currency_id.symbol"/> <t t-esc="'{0:,.2f}'.format(pay.amount)"/>
@ -2825,7 +2830,7 @@
function initiatePayment(selectedFeeIds) { function initiatePayment(selectedFeeIds) {
if (!btnPayOnline) return; if (!btnPayOnline) return;
btnPayOnline.disabled = true; btnPayOnline.disabled = true;
btnPayOnline.innerHTML = '&lt;i class="fa fa-spinner fa-spin mr-2"&gt;&lt;/i&gt; Initializing...'; btnPayOnline.innerHTML = '&lt;i class="fa fa-spinner fa-spin mr-2 me-2"&gt;&lt;/i&gt; Initializing...';
fetch('/my/education/payment/create', { fetch('/my/education/payment/create', {
method: 'POST', method: 'POST',
@ -2845,7 +2850,7 @@
if (data.error) { if (data.error) {
alert("Payment Error: " + data.error); alert("Payment Error: " + data.error);
btnPayOnline.disabled = false; btnPayOnline.disabled = false;
btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2"&gt;&lt;/i&gt; Proceed to Payment'; btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2 me-2"&gt;&lt;/i&gt; Proceed to Payment';
return; return;
} }
@ -2877,7 +2882,7 @@
"modal": { "modal": {
"ondismiss": function() { "ondismiss": function() {
btnPayOnline.disabled = false; btnPayOnline.disabled = false;
btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2"&gt;&lt;/i&gt; Proceed to Payment'; btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2 me-2"&gt;&lt;/i&gt; Proceed to Payment';
} }
} }
}; };
@ -2886,13 +2891,13 @@
} else { } else {
alert("Razorpay SDK could not be loaded. Please check your internet connection."); alert("Razorpay SDK could not be loaded. Please check your internet connection.");
btnPayOnline.disabled = false; btnPayOnline.disabled = false;
btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2"&gt;&lt;/i&gt; Proceed to Payment'; btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2 me-2"&gt;&lt;/i&gt; Proceed to Payment';
} }
}) })
.catch(function(err) { .catch(function(err) {
alert("Server Connection Error: " + err); alert("Server Connection Error: " + err);
btnPayOnline.disabled = false; btnPayOnline.disabled = false;
btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2"&gt;&lt;/i&gt; Proceed to Payment'; btnPayOnline.innerHTML = '&lt;i class="fa fa-shield mr-2 me-2"&gt;&lt;/i&gt; Proceed to Payment';
}); });
} }
@ -3198,10 +3203,14 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 16px; gap: 16px;
flex: 1;
min-width: 0;
} }
.document-icon-avatar { .document-icon-avatar {
width: 42px; width: 42px;
height: 42px; height: 42px;
min-width: 42px;
min-height: 42px;
border-radius: 50%; border-radius: 50%;
background: #e6f7f7; background: #e6f7f7;
color: #1f8f8f; color: #1f8f8f;
@ -3209,6 +3218,7 @@
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 1.15rem; font-size: 1.15rem;
flex-shrink: 0;
} }
.document-meta-title { .document-meta-title {
font-size: 0.95rem; font-size: 0.95rem;
@ -3377,6 +3387,70 @@
overflow: visible !important; overflow: visible !important;
} }
} }
@media (max-width: 767px) {
.portal-header {
padding: 0 20px;
}
.portal-sidebar {
padding: 12px 8px;
gap: 4px;
}
.sidebar-link {
padding: 8px 12px;
font-size: 0.85rem;
gap: 8px;
}
.sidebar-link span {
display: none;
}
.sidebar-link i {
font-size: 1.3rem;
margin: 0;
width: auto;
}
.portal-footer-area {
height: auto;
flex-direction: column;
justify-content: center;
gap: 8px;
padding: 16px 20px;
text-align: center;
}
}
@media (max-width: 575px) {
.portal-header {
padding: 0 12px !important;
height: 60px;
}
.portal-logo-area span {
display: none;
}
.premium-card {
padding: 20px !important;
border-radius: 18px !important;
}
.document-upload-row {
flex-direction: column;
align-items: stretch;
gap: 12px;
}
.btn-choose-file {
width: 100%;
justify-content: center;
}
.upload-footer-actions {
flex-direction: column;
gap: 12px;
align-items: stretch;
}
.btn-upload-submit {
width: 100%;
justify-content: center;
}
.encrypted-label {
justify-content: center;
}
}
</style> </style>
<!-- Top Header --> <!-- Top Header -->
@ -3403,10 +3477,10 @@
<i class="fa fa-angle-down"/> <i class="fa fa-angle-down"/>
</div> </div>
<div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;"> <div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;">
<a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted"/> My Profile</a> <a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted me-2"/> My Profile</a>
<a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted"/> Dashboard</a> <a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted me-2"/> Dashboard</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2"/> Logout</a> <a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2 me-2"/> Logout</a>
</div> </div>
</div> </div>
</div> </div>
@ -3724,10 +3798,10 @@
<!-- Header --> <!-- Header -->
<div class="d-flex align-items-center justify-content-between border-bottom pb-3 mb-4"> <div class="d-flex align-items-center justify-content-between border-bottom pb-3 mb-4">
<h5 class="font-weight-bold text-dark mb-0"> <h5 class="font-weight-bold text-dark mb-0">
<i class="fa fa-shield text-success mr-2"/>Secure Online Checkout <i class="fa fa-shield text-success mr-2 me-2"/> Secure Online Checkout
</h5> </h5>
<span class="badge badge-pill badge-light text-muted p-2" style="border: 1px solid #e2e8f0;"> <span class="badge badge-pill badge-light text-muted p-2" style="border: 1px solid #e2e8f0;">
<i class="fa fa-lock text-success mr-1"/> PCI-DSS Compliant <i class="fa fa-lock text-success mr-1 me-1"/> PCI-DSS Compliant
</span> </span>
</div> </div>
@ -3819,7 +3893,7 @@
</div> </div>
<button type="button" class="btn btn-primary btn-block shadow-sm py-2 font-weight-bold mt-4" style="border-radius: 8px;" onclick="startRealtimePayment()"> <button type="button" class="btn btn-primary btn-block shadow-sm py-2 font-weight-bold mt-4" style="border-radius: 8px;" onclick="startRealtimePayment()">
<i class="fa fa-lock mr-2"/> Submit Secure Payment <i class="fa fa-lock mr-2 me-2"/> Submit Secure Payment
</button> </button>
</form> </form>
</div> </div>
@ -4111,6 +4185,78 @@
.dropdown-toggle::after { .dropdown-toggle::after {
display: none !important; display: none !important;
} }
@media (max-width: 991px) {
.portal-layout-wrapper {
flex-direction: column;
}
.portal-sidebar {
width: 100% !important;
border-right: none !important;
border-bottom: 1px solid rgba(31, 143, 143, 0.1);
padding: 16px 20px;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 8px;
position: static !important;
max-height: none !important;
}
.sidebar-link {
padding: 10px 16px;
}
.sidebar-promo-card {
display: none !important;
}
.portal-content-area {
padding: 24px !important;
height: auto !important;
min-height: auto !important;
overflow: visible !important;
}
}
@media (max-width: 767px) {
.portal-header {
padding: 0 20px;
}
.portal-sidebar {
padding: 12px 8px;
gap: 4px;
}
.sidebar-link {
padding: 8px 12px;
font-size: 0.85rem;
gap: 8px;
}
.sidebar-link span {
display: none;
}
.sidebar-link i {
font-size: 1.3rem;
margin: 0;
width: auto;
}
.portal-footer-area {
height: auto;
flex-direction: column;
justify-content: center;
gap: 8px;
padding: 16px 20px;
text-align: center;
}
}
@media (max-width: 575px) {
.portal-header {
padding: 0 12px !important;
height: 60px;
}
.portal-logo-area span {
display: none;
}
.premium-card {
padding: 20px !important;
border-radius: 18px !important;
}
}
</style> </style>
<!-- Top Header --> <!-- Top Header -->
@ -4137,10 +4283,10 @@
<i class="fa fa-angle-down"/> <i class="fa fa-angle-down"/>
</div> </div>
<div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;"> <div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;">
<a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted"/> My Profile</a> <a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted me-2"/> My Profile</a>
<a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted"/> Dashboard</a> <a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted me-2"/> Dashboard</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2"/> Logout</a> <a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2 me-2"/> Logout</a>
</div> </div>
</div> </div>
</div> </div>
@ -4275,7 +4421,7 @@
<div class="premium-card"> <div class="premium-card">
<div class="d-flex align-items-center justify-content-between mb-3 border-bottom pb-2"> <div class="d-flex align-items-center justify-content-between mb-3 border-bottom pb-2">
<h5 class="font-weight-bold text-dark mb-0"> <h5 class="font-weight-bold text-dark mb-0">
<i class="fa fa-list text-primary mr-2"/> Attendance Session Logs (<t t-esc="total_sessions"/> Records) <i class="fa fa-list text-primary mr-2 me-2"/> Attendance Session Logs (<t t-esc="total_sessions"/> Records)
</h5> </h5>
</div> </div>
@ -4294,7 +4440,7 @@
<t t-foreach="attendance_records" t-as="att"> <t t-foreach="attendance_records" t-as="att">
<tr> <tr>
<td style="font-weight: 700; color: #1e293b;"> <td style="font-weight: 700; color: #1e293b;">
<i class="fa fa-calendar text-muted mr-1"/> <i class="fa fa-calendar text-muted mr-1 me-1"/>
<t t-esc="att.date"/> <t t-esc="att.date"/>
</td> </td>
<td style="color: #475569;"> <td style="color: #475569;">
@ -4345,7 +4491,7 @@
<div class="container py-4"> <div class="container py-4">
<div class="card mb-4 border-0 shadow-sm"> <div class="card mb-4 border-0 shadow-sm">
<div class="card-header text-white border-0 py-3" style="background-color: #1f8f8f !important;"> <div class="card-header text-white border-0 py-3" style="background-color: #1f8f8f !important;">
<h4 class="mb-0 font-weight-bold"><i class="fa fa-graduation-cap mr-2"/> <t t-esc="exam.name"/></h4> <h4 class="mb-0 font-weight-bold"><i class="fa fa-graduation-cap mr-2 me-2"/> <t t-esc="exam.name"/></h4>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="row mb-4"> <div class="row mb-4">
@ -4397,7 +4543,7 @@
</table> </table>
</div> </div>
<div class="mt-4"> <div class="mt-4">
<a href="/my/education/dashboard" class="btn text-white px-4 py-2" style="background-color: #1f8f8f; border-radius: 8px;"><i class="fa fa-arrow-left mr-1"/> Back to Dashboard</a> <a href="/my/education/dashboard" class="btn text-white px-4 py-2" style="background-color: #1f8f8f; border-radius: 8px;"><i class="fa fa-arrow-left mr-1 me-1"/> Back to Dashboard</a>
</div> </div>
</div> </div>
</div> </div>
@ -4411,11 +4557,11 @@
<div class="container py-4"> <div class="container py-4">
<div class="card border-0 shadow-sm"> <div class="card border-0 shadow-sm">
<div class="card-header text-white border-0 py-3" style="background-color: #1f8f8f !important;"> <div class="card-header text-white border-0 py-3" style="background-color: #1f8f8f !important;">
<h4 class="mb-0 font-weight-bold"><i class="fa fa-bullhorn mr-2"/> <t t-esc="announcement.title"/></h4> <h4 class="mb-0 font-weight-bold"><i class="fa fa-bullhorn mr-2 me-2"/> <t t-esc="announcement.title"/></h4>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="mb-4 text-muted border-bottom pb-2"> <div class="mb-4 text-muted border-bottom pb-2">
<i class="fa fa-calendar mr-1"/> Published on: <strong><t t-esc="announcement.date_published"/></strong> <i class="fa fa-calendar mr-1 me-1"/> Published on: <strong><t t-esc="announcement.date_published"/></strong>
<span class="mx-2">|</span> <span class="mx-2">|</span>
<span class="badge badge-secondary px-2 py-1"><t t-esc="announcement.announcement_type.capitalize()"/></span> <span class="badge badge-secondary px-2 py-1"><t t-esc="announcement.announcement_type.capitalize()"/></span>
</div> </div>
@ -4423,7 +4569,7 @@
<t t-out="announcement.content"/> <t t-out="announcement.content"/>
</div> </div>
<div class="mt-5"> <div class="mt-5">
<a href="/my/education/dashboard" class="btn text-white px-4 py-2" style="background-color: #1f8f8f; border-radius: 8px;"><i class="fa fa-arrow-left mr-1"/> Back to Dashboard</a> <a href="/my/education/dashboard" class="btn text-white px-4 py-2" style="background-color: #1f8f8f; border-radius: 8px;"><i class="fa fa-arrow-left mr-1 me-1"/> Back to Dashboard</a>
</div> </div>
</div> </div>
</div> </div>
@ -4633,7 +4779,7 @@
box-shadow: 0 8px 24px 0 rgba(31, 143, 143, 0.06) !important; box-shadow: 0 8px 24px 0 rgba(31, 143, 143, 0.06) !important;
} }
.card-deco-dots { .card-deco-dots {
position: absolute; display: none;position: absolute;
top: 20px; top: 20px;
right: 24px; right: 24px;
color: #d1f1f1; color: #d1f1f1;
@ -5015,7 +5161,8 @@
max-height: none !important; max-height: none !important;
} }
.sidebar-link { .sidebar-link {
padding: 10px 16px; padding: 10px 5px;
gap: 3px !important;
} }
.sidebar-promo-card { .sidebar-promo-card {
display: none !important; display: none !important;
@ -5059,7 +5206,7 @@
} }
@media (max-width: 575px) { @media (max-width: 575px) {
.portal-header { .portal-header {
padding: 0 12px; padding: 0 12px !important;
height: 60px; height: 60px;
} }
.portal-logo-area span { .portal-logo-area span {
@ -5069,6 +5216,27 @@
padding: 20px !important; padding: 20px !important;
border-radius: 18px !important; border-radius: 18px !important;
} }
.document-upload-row {
flex-direction: column;
align-items: stretch;
gap: 12px;
}
.btn-choose-file {
width: 100%;
justify-content: center;
}
.upload-footer-actions {
flex-direction: column;
gap: 12px;
align-items: stretch;
}
.btn-upload-submit {
width: 100%;
justify-content: center;
}
.encrypted-label {
justify-content: center;
}
} }
</style> </style>
@ -5096,10 +5264,10 @@
<i class="fa fa-angle-down"/> <i class="fa fa-angle-down"/>
</div> </div>
<div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;"> <div class="dropdown-menu dropdown-menu-end shadow-sm" aria-labelledby="userMenuDropdown" style="border-radius: 12px; border: 1px solid rgba(31, 143, 143, 0.1); margin-top: 10px;">
<a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted"/> My Profile</a> <a class="dropdown-item py-2" href="/my/education/profile" style="font-weight: 600; color: #4a5568;"><i class="fa fa-user-circle mr-2 text-muted me-2"/> My Profile</a>
<a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted"/> Dashboard</a> <a class="dropdown-item py-2" href="/my/education/dashboard" style="font-weight: 600; color: #4a5568;"><i class="fa fa-home mr-2 text-muted me-2"/> Dashboard</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2"/> Logout</a> <a class="dropdown-item py-2 text-danger" href="/web/session/logout?redirect=/" style="font-weight: 600;"><i class="fa fa-sign-out mr-2 me-2"/> Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<!-- Add Timetable to Portal Home --> <!-- Add Timetable to Portal Home -->
<template id="portal_my_home_timetable" name="Portal My Home: Timetable" inherit_id="portal.portal_my_home" priority="40"> <template id="portal_my_home_timetable" name="Portal My Home: Timetable" inherit_id="portal.portal_my_home" priority="40">
@ -158,6 +158,18 @@
.breadcrumb-premium a { color: #1f8f8f; text-decoration: none; } .breadcrumb-premium a { color: #1f8f8f; text-decoration: none; }
.breadcrumb-premium span { color: #a0aec0; } .breadcrumb-premium span { color: #a0aec0; }
.breadcrumb-premium .active { color: #1f8f8f; } .breadcrumb-premium .active { color: #1f8f8f; }
.portal-footer-area {
height: 60px;
background: #ffffff;
border-top: 1px solid rgba(31, 143, 143, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 40px;
font-size: 0.9rem;
color: #718096;
font-weight: 600;
}
.timetable-card { .timetable-card {
border-radius: 12px; border-radius: 12px;
@ -205,6 +217,78 @@
text-align: center; text-align: center;
margin-top: 2rem; margin-top: 2rem;
} }
@media (max-width: 991px) {
.portal-layout-wrapper {
flex-direction: column;
}
.portal-sidebar {
width: 100% !important;
border-right: none !important;
border-bottom: 1px solid rgba(31, 143, 143, 0.1);
padding: 16px 20px;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 8px;
position: static !important;
max-height: none !important;
}
.sidebar-link {
padding: 10px 16px;
}
.sidebar-promo-card {
display: none !important;
}
.portal-content-area {
padding: 24px !important;
height: auto !important;
min-height: auto !important;
overflow: visible !important;
}
}
@media (max-width: 767px) {
.portal-header {
padding: 0 20px;
}
.portal-sidebar {
padding: 12px 8px;
gap: 4px;
}
.sidebar-link {
padding: 8px 12px;
font-size: 0.85rem;
gap: 8px;
}
.sidebar-link span {
display: none;
}
.sidebar-link i {
font-size: 1.3rem;
margin: 0;
width: auto;
}
.portal-footer-area {
height: auto;
flex-direction: column;
justify-content: center;
gap: 8px;
padding: 16px 20px;
text-align: center;
}
}
@media (max-width: 575px) {
.portal-header {
padding: 0 12px !important;
height: 60px;
}
.portal-logo-area span {
display: none;
}
.timetable-card {
padding: 20px !important;
border-radius: 18px !important;
}
}
</style> </style>
<!-- Top Header --> <!-- Top Header -->
@ -342,6 +426,12 @@
</t> </t>
</div> </div>
</div> </div>
<!-- Bottom Footer Area -->
<div class="portal-footer-area">
<span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div>
</t> </t>
</template> </template>

29
fix_mr.py Normal file
View File

@ -0,0 +1,29 @@
import re
path = r'c:\Users\Admin\Metatron_Student_ERP\addons\education_portal\views\portal_templates.xml'
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
# Replace mr-X with mr-X me-X
def replace_class(m):
cls = m.group(1)
num = m.group(2)
if f'me-{num}' not in cls:
cls = cls + f' me-{num}'
return f'class="{cls}"'
new_content = re.sub(r'class="([^"]*?\bmr-(\d)\b[^"]*?)"', replace_class, content)
# Add space after /> if there is text directly
new_content = re.sub(r'(<i[^>]*?/>)([A-Za-z0-9])', r'\1 \2', new_content)
# Add space after </i> if there is text directly
new_content = re.sub(r'(</i>)([A-Za-z0-9])', r'\1 \2', new_content)
if new_content != content:
with open(path, 'w', encoding='utf-8') as f:
f.write(new_content)
print('Updated portal_templates.xml')
else:
print('No changes needed in portal_templates.xml')