student dashboard responsive updated
This commit is contained in:
parent
3105a89408
commit
cead33cbfc
@ -552,6 +552,20 @@
|
||||
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 */
|
||||
@media (max-width: 991px) {
|
||||
.portal-layout-wrapper {
|
||||
@ -603,10 +617,18 @@
|
||||
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;
|
||||
padding: 0 12px !important;
|
||||
height: 60px;
|
||||
}
|
||||
.portal-logo-area span {
|
||||
@ -783,7 +805,7 @@
|
||||
|
||||
<div class="premium-card">
|
||||
<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>
|
||||
<t t-if="not exams">
|
||||
<div class="alert alert-info border-0 shadow-sm" style="background: #e6f7f7; color: #144d4d; border-radius: 12px;">
|
||||
@ -821,7 +843,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 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>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
|
||||
</div>
|
||||
@ -917,7 +939,7 @@
|
||||
|
||||
<div class="premium-card">
|
||||
<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>
|
||||
<t t-if="not results">
|
||||
<div class="alert alert-info border-0 shadow-sm" style="background: #e6f7f7; color: #144d4d; border-radius: 12px;">
|
||||
@ -961,7 +983,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 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>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
|
||||
</div>
|
||||
@ -1143,7 +1165,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 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>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
|
||||
</div>
|
||||
|
||||
@ -243,6 +243,87 @@
|
||||
width: 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>
|
||||
|
||||
<!-- Header -->
|
||||
@ -300,6 +381,12 @@
|
||||
<t t-out="0"/>
|
||||
</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>
|
||||
</template>
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Payment Success Template -->
|
||||
<template id="portal_payment_success" name="Payment Success">
|
||||
@ -71,7 +71,7 @@
|
||||
<div class="d-flex justify-content-center gap-3">
|
||||
<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;">
|
||||
<i class="fa fa-download mr-2"/> Download PDF Receipt
|
||||
<i class="fa fa-download mr-2 me-2"/> Download PDF Receipt
|
||||
</a>
|
||||
</t>
|
||||
<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>
|
||||
|
||||
<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 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;">
|
||||
<i class="fa fa-refresh mr-2"/> Retry Payment
|
||||
<i class="fa fa-refresh mr-2 me-2"/> Retry Payment
|
||||
</a>
|
||||
<a href="/my/education/dashboard" class="btn btn-outline-secondary font-weight-bold px-4 py-2" style="border-radius: 10px;">
|
||||
Dashboard
|
||||
@ -159,10 +159,10 @@
|
||||
<div class="history-card">
|
||||
<div class="d-flex align-items-center justify-content-between mb-4">
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
|
||||
@ -841,7 +841,7 @@
|
||||
}
|
||||
@media (max-width: 575px) {
|
||||
.portal-header {
|
||||
padding: 0 12px;
|
||||
padding: 0 12px !important;
|
||||
height: 60px;
|
||||
}
|
||||
.portal-logo-area span {
|
||||
@ -863,6 +863,11 @@
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 424px) {
|
||||
.card-deco-dots {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Top Header -->
|
||||
@ -889,10 +894,10 @@
|
||||
<i class="fa fa-angle-down"/>
|
||||
</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;">
|
||||
<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/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/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 me-2"/> Dashboard</a>
|
||||
<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>
|
||||
@ -1075,7 +1080,7 @@
|
||||
<div class="premium-card">
|
||||
<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">
|
||||
<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>
|
||||
<a href="/my/education/profile" class="header-link-action">View Details ></a>
|
||||
</div>
|
||||
@ -1123,7 +1128,7 @@
|
||||
<div class="premium-card">
|
||||
<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;">
|
||||
<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>
|
||||
<a href="/my/education/finance" class="header-link-action text-nowrap">View All Transactions</a>
|
||||
</div>
|
||||
@ -1165,7 +1170,7 @@
|
||||
<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">
|
||||
<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>
|
||||
<a href="#" class="header-link-action text-nowrap">View Calendar</a>
|
||||
</div>
|
||||
@ -1179,7 +1184,7 @@
|
||||
<div class="event-month"><t t-esc="exam.start_date.strftime('%b')"/></div>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
@ -1452,7 +1457,7 @@
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.card-deco-dots {
|
||||
position: absolute;
|
||||
display: none;position: absolute;
|
||||
top: 20px;
|
||||
right: 24px;
|
||||
color: #d1f1f1;
|
||||
@ -1712,7 +1717,7 @@
|
||||
}
|
||||
@media (max-width: 575px) {
|
||||
.portal-header {
|
||||
padding: 0 12px;
|
||||
padding: 0 12px !important;
|
||||
height: 60px;
|
||||
}
|
||||
.portal-logo-area span {
|
||||
@ -1757,10 +1762,10 @@
|
||||
<i class="fa fa-angle-down"/>
|
||||
</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;">
|
||||
<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/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/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 me-2"/> Dashboard</a>
|
||||
<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>
|
||||
@ -2481,10 +2486,10 @@
|
||||
<i class="fa fa-angle-down"/>
|
||||
</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;">
|
||||
<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/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/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 me-2"/> Dashboard</a>
|
||||
<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>
|
||||
@ -2564,7 +2569,7 @@
|
||||
<!-- Overview Summary Section -->
|
||||
<div class="premium-card">
|
||||
<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>
|
||||
<div class="row g-3">
|
||||
<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>
|
||||
<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>
|
||||
<p class="text-muted small mb-0">Select individual fee items or pay all outstanding dues online securely via Razorpay / UPI.</p>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -2641,7 +2646,7 @@
|
||||
<td><span t-field="fee.academic_year_id.name"/></td>
|
||||
<td>
|
||||
<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>
|
||||
</td>
|
||||
<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>
|
||||
<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 id="selectedTotalAmount" class="font-weight-bold" style="color: #2b6cb0; font-size: 1.25rem;">₹0.00</span>
|
||||
</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);">
|
||||
<i class="fa fa-shield mr-2"/> Proceed to Payment
|
||||
<i class="fa fa-shield mr-2 me-2"/> Proceed to Payment
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -2686,7 +2691,7 @@
|
||||
<div class="premium-card">
|
||||
<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">
|
||||
<i class="fa fa-exchange text-primary mr-2"/>Ledger & Transaction Details
|
||||
<i class="fa fa-exchange text-primary mr-2 me-2"/> Ledger & Transaction Details
|
||||
</h5>
|
||||
<button class="btn-filter">
|
||||
<i class="fa fa-filter"/> Filter
|
||||
@ -2708,7 +2713,7 @@
|
||||
<t t-if="ledger_lines">
|
||||
<t t-foreach="ledger_lines" t-as="line">
|
||||
<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="text-right text-danger font-weight-bold">
|
||||
<t t-if="line.debit > 0">+ <t t-esc="student.currency_id.symbol"/> <t t-esc="'{0:,.2f}'.format(line.debit)"/></t>
|
||||
@ -2743,7 +2748,7 @@
|
||||
<!-- Official Payment Receipts -->
|
||||
<div class="premium-card">
|
||||
<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>
|
||||
<div class="table-responsive">
|
||||
<table class="premium-table">
|
||||
@ -2761,7 +2766,7 @@
|
||||
<t t-foreach="payments" t-as="pay">
|
||||
<tr>
|
||||
<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 class="text-right font-weight-bold text-success">
|
||||
<t t-esc="student.currency_id.symbol"/> <t t-esc="'{0:,.2f}'.format(pay.amount)"/>
|
||||
@ -2825,7 +2830,7 @@
|
||||
function initiatePayment(selectedFeeIds) {
|
||||
if (!btnPayOnline) return;
|
||||
btnPayOnline.disabled = true;
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-spinner fa-spin mr-2"></i> Initializing...';
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-spinner fa-spin mr-2 me-2"></i> Initializing...';
|
||||
|
||||
fetch('/my/education/payment/create', {
|
||||
method: 'POST',
|
||||
@ -2845,7 +2850,7 @@
|
||||
if (data.error) {
|
||||
alert("Payment Error: " + data.error);
|
||||
btnPayOnline.disabled = false;
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2"></i> Proceed to Payment';
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2 me-2"></i> Proceed to Payment';
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2877,7 +2882,7 @@
|
||||
"modal": {
|
||||
"ondismiss": function() {
|
||||
btnPayOnline.disabled = false;
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2"></i> Proceed to Payment';
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2 me-2"></i> Proceed to Payment';
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -2886,13 +2891,13 @@
|
||||
} else {
|
||||
alert("Razorpay SDK could not be loaded. Please check your internet connection.");
|
||||
btnPayOnline.disabled = false;
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2"></i> Proceed to Payment';
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2 me-2"></i> Proceed to Payment';
|
||||
}
|
||||
})
|
||||
.catch(function(err) {
|
||||
alert("Server Connection Error: " + err);
|
||||
btnPayOnline.disabled = false;
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2"></i> Proceed to Payment';
|
||||
btnPayOnline.innerHTML = '<i class="fa fa-shield mr-2 me-2"></i> Proceed to Payment';
|
||||
});
|
||||
}
|
||||
|
||||
@ -3198,10 +3203,14 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.document-icon-avatar {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
min-width: 42px;
|
||||
min-height: 42px;
|
||||
border-radius: 50%;
|
||||
background: #e6f7f7;
|
||||
color: #1f8f8f;
|
||||
@ -3209,6 +3218,7 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.15rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.document-meta-title {
|
||||
font-size: 0.95rem;
|
||||
@ -3377,6 +3387,70 @@
|
||||
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>
|
||||
|
||||
<!-- Top Header -->
|
||||
@ -3403,10 +3477,10 @@
|
||||
<i class="fa fa-angle-down"/>
|
||||
</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;">
|
||||
<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/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/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 me-2"/> Dashboard</a>
|
||||
<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>
|
||||
@ -3724,10 +3798,10 @@
|
||||
<!-- Header -->
|
||||
<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">
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -3819,7 +3893,7 @@
|
||||
</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()">
|
||||
<i class="fa fa-lock mr-2"/> Submit Secure Payment
|
||||
<i class="fa fa-lock mr-2 me-2"/> Submit Secure Payment
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
@ -4111,6 +4185,78 @@
|
||||
.dropdown-toggle::after {
|
||||
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>
|
||||
|
||||
<!-- Top Header -->
|
||||
@ -4137,10 +4283,10 @@
|
||||
<i class="fa fa-angle-down"/>
|
||||
</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;">
|
||||
<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/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/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 me-2"/> Dashboard</a>
|
||||
<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>
|
||||
@ -4275,7 +4421,7 @@
|
||||
<div class="premium-card">
|
||||
<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">
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@ -4294,7 +4440,7 @@
|
||||
<t t-foreach="attendance_records" t-as="att">
|
||||
<tr>
|
||||
<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"/>
|
||||
</td>
|
||||
<td style="color: #475569;">
|
||||
@ -4345,7 +4491,7 @@
|
||||
<div class="container py-4">
|
||||
<div class="card mb-4 border-0 shadow-sm">
|
||||
<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 class="card-body">
|
||||
<div class="row mb-4">
|
||||
@ -4397,7 +4543,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<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>
|
||||
@ -4411,11 +4557,11 @@
|
||||
<div class="container py-4">
|
||||
<div class="card border-0 shadow-sm">
|
||||
<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 class="card-body">
|
||||
<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="badge badge-secondary px-2 py-1"><t t-esc="announcement.announcement_type.capitalize()"/></span>
|
||||
</div>
|
||||
@ -4423,7 +4569,7 @@
|
||||
<t t-out="announcement.content"/>
|
||||
</div>
|
||||
<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>
|
||||
@ -4633,7 +4779,7 @@
|
||||
box-shadow: 0 8px 24px 0 rgba(31, 143, 143, 0.06) !important;
|
||||
}
|
||||
.card-deco-dots {
|
||||
position: absolute;
|
||||
display: none;position: absolute;
|
||||
top: 20px;
|
||||
right: 24px;
|
||||
color: #d1f1f1;
|
||||
@ -5015,7 +5161,8 @@
|
||||
max-height: none !important;
|
||||
}
|
||||
.sidebar-link {
|
||||
padding: 10px 16px;
|
||||
padding: 10px 5px;
|
||||
gap: 3px !important;
|
||||
}
|
||||
.sidebar-promo-card {
|
||||
display: none !important;
|
||||
@ -5059,7 +5206,7 @@
|
||||
}
|
||||
@media (max-width: 575px) {
|
||||
.portal-header {
|
||||
padding: 0 12px;
|
||||
padding: 0 12px !important;
|
||||
height: 60px;
|
||||
}
|
||||
.portal-logo-area span {
|
||||
@ -5069,6 +5216,27 @@
|
||||
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>
|
||||
|
||||
@ -5096,10 +5264,10 @@
|
||||
<i class="fa fa-angle-down"/>
|
||||
</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;">
|
||||
<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/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/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 me-2"/> Dashboard</a>
|
||||
<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>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Add Timetable to Portal Home -->
|
||||
<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 span { color: #a0aec0; }
|
||||
.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 {
|
||||
border-radius: 12px;
|
||||
@ -205,6 +217,78 @@
|
||||
text-align: center;
|
||||
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>
|
||||
|
||||
<!-- Top Header -->
|
||||
@ -342,6 +426,12 @@
|
||||
</t>
|
||||
</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>
|
||||
</template>
|
||||
|
||||
|
||||
29
fix_mr.py
Normal file
29
fix_mr.py
Normal 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')
|
||||
Loading…
x
Reference in New Issue
Block a user