footer update and announcement dynamic data update

This commit is contained in:
Vidhya 2026-09-25 20:12:16 +05:30
parent f189dc7b59
commit 90e9d210a6
8 changed files with 81 additions and 67 deletions

View File

@ -109,6 +109,33 @@ class EducationDashboardController(http.Controller):
except Exception: except Exception:
pass pass
# ── Announcements ─────────────────────────────────────────────────────
announcements_data = []
try:
announcements = env['education.announcement'].search(
[('active', '=', True)],
order='date_published desc', limit=4
)
for ann in announcements:
import re
subtitle = re.sub('<[^>]+>', '', ann.content or '')[:60]
type_colors = {
'notice': ('#fee2e2', '#b91c1c'),
'circular': ('#e0f2fe', '#0369a1'),
'event': ('#fef9c3', '#a16207')
}
bg_color, text_color = type_colors.get(ann.announcement_type, ('#d1fae5', '#065f46'))
ann_type = dict(ann._fields['announcement_type'].selection).get(ann.announcement_type) if ann.announcement_type else 'Notice'
announcements_data.append({
'title': ann.title,
'subtitle': subtitle + ('...' if len(subtitle) == 60 else ''),
'type': ann_type,
'bg_color': bg_color,
'text_color': text_color,
})
except Exception:
pass
# ── User / date context ─────────────────────────────────────────────── # ── User / date context ───────────────────────────────────────────────
user_name = env.user.name user_name = env.user.name
today_str = datetime.date.today().strftime('%A, %b %d, %Y') today_str = datetime.date.today().strftime('%A, %b %d, %Y')
@ -149,6 +176,7 @@ class EducationDashboardController(http.Controller):
# operational # operational
'upcoming_exams': upcoming_exams, 'upcoming_exams': upcoming_exams,
'recent_activities': recent_activities, 'recent_activities': recent_activities,
'announcements': announcements_data,
# context # context
'user_name': user_name, 'user_name': user_name,
'today': today_str, 'today': today_str,

View File

@ -243,7 +243,7 @@ class EducationDashboard extends Component {
openCreateCourse() { openCreateCourse() {
this.actionService.doAction({ this.actionService.doAction({
name: "Courses", type: "ir.actions.act_window", name: "Courses", type: "ir.actions.act_window",
res_model: "education.course", res_model: "education.lms.course",
views: [[false, "list"], [false, "form"]], target: "current" views: [[false, "list"], [false, "form"]], target: "current"
}); });
} }
@ -267,7 +267,7 @@ class EducationDashboard extends Component {
openFees() { openFees() {
this.actionService.doAction({ this.actionService.doAction({
name: "Fee Payments", type: "ir.actions.act_window", name: "Fee Payments", type: "ir.actions.act_window",
res_model: "education.fee.payment", res_model: "education.student.payment",
views: [[false, "list"], [false, "form"]], target: "current" views: [[false, "list"], [false, "form"]], target: "current"
}); });
} }

View File

@ -239,38 +239,24 @@
</div> </div>
<span style="font-size:0.72rem;color:#1f8f8f;font-weight:600;cursor:pointer;">View All</span> <span style="font-size:0.72rem;color:#1f8f8f;font-weight:600;cursor:pointer;">View All</span>
</div> </div>
<t t-if="(state.kpis.announcements || []).length">
<t t-foreach="state.kpis.announcements" t-as="ann" t-key="ann_index">
<div class="edu-ann-row"> <div class="edu-ann-row">
<span class="edu-pill" style="background:#fee2e2;color:#b91c1c;margin-top:1px;">Important</span> <span class="edu-pill" t-attf-style="background:{{ann.bg_color}};color:{{ann.text_color}};margin-top:1px;"><t t-esc="ann.type"/></span>
<div style="flex:1;min-width:0;"> <div style="flex:1;min-width:0;">
<div style="font-size:0.8rem;font-weight:600;color:#0f172a;margin-bottom:1px;">Exam Schedule Released</div> <div style="font-size:0.8rem;font-weight:600;color:#0f172a;margin-bottom:1px;"><t t-esc="ann.title"/></div>
<div style="font-size:0.7rem;color:#94a3b8;">Mid-term schedule has been published.</div> <div style="font-size:0.7rem;color:#94a3b8;"><t t-esc="ann.subtitle"/></div>
</div> </div>
<i class="fa fa-chevron-right" style="color:#cbd5e1;font-size:0.65rem;align-self:center;flex-shrink:0;"/> <i class="fa fa-chevron-right" style="color:#cbd5e1;font-size:0.65rem;align-self:center;flex-shrink:0;"/>
</div> </div>
<div class="edu-ann-row"> </t>
<span class="edu-pill" style="background:#e0f2fe;color:#0369a1;margin-top:1px;">General</span> </t>
<div style="flex:1;min-width:0;"> <t t-else="">
<div style="font-size:0.8rem;font-weight:600;color:#0f172a;margin-bottom:1px;">Library Hours Extended</div> <div style="text-align:center;padding:28px 0;color:#94a3b8;">
<div style="font-size:0.7rem;color:#94a3b8;">Open till 8 PM this week.</div> <i class="fa fa-bullhorn" style="font-size:2rem;display:block;margin-bottom:8px;"/>
</div> <div style="font-size:0.8rem;">No recent announcements</div>
<i class="fa fa-chevron-right" style="color:#cbd5e1;font-size:0.65rem;align-self:center;flex-shrink:0;"/>
</div>
<div class="edu-ann-row">
<span class="edu-pill" style="background:#d1fae5;color:#065f46;margin-top:1px;">Academic</span>
<div style="flex:1;min-width:0;">
<div style="font-size:0.8rem;font-weight:600;color:#0f172a;margin-bottom:1px;">Course Registration Open</div>
<div style="font-size:0.7rem;color:#94a3b8;">Elective course registration is now open.</div>
</div>
<i class="fa fa-chevron-right" style="color:#cbd5e1;font-size:0.65rem;align-self:center;flex-shrink:0;"/>
</div>
<div class="edu-ann-row">
<span class="edu-pill" style="background:#fef9c3;color:#a16207;margin-top:1px;">Event</span>
<div style="flex:1;min-width:0;">
<div style="font-size:0.8rem;font-weight:600;color:#0f172a;margin-bottom:1px;">Annual Tech Fest</div>
<div style="font-size:0.7rem;color:#94a3b8;">Scheduled for next month.</div>
</div>
<i class="fa fa-chevron-right" style="color:#cbd5e1;font-size:0.65rem;align-self:center;flex-shrink:0;"/>
</div> </div>
</t>
</div> </div>
</div> </div>

View File

@ -822,8 +822,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>
@ -962,8 +962,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>
@ -1144,8 +1144,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>

View File

@ -319,9 +319,9 @@
</div> </div>
<!-- Bottom Page Footer --> <!-- Bottom Page Footer -->
<div class="text-center mt-4" style="font-size: 0.85rem; color: #718096; font-weight: 600;"> <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>Powered by <span style="color: #1f8f8f; font-weight: 800;">Odoo</span> Education Portal</div> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<div>© 2026 My Company. All rights reserved.</div> <span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1173,8 +1173,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>
@ -1971,8 +1971,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>
@ -2864,8 +2864,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>
@ -3591,8 +3591,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></span> <span>Powered by <a href="https://metatroncubesolutions.com/" style="color: #144d4d; font-weight: 700; text-decoration: none;">Metatroncube</a></span>
</div> </div>
<!-- Frontend Logic to show selected file name --> <!-- Frontend Logic to show selected file name -->
@ -4242,8 +4242,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>
@ -5061,8 +5061,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>

View File

@ -721,8 +721,8 @@
<!-- 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 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;">
<span>© 2026 My Company. All rights reserved.</span> <span>© 2026 Metatron EduPortal. All rights reserved.</span>
<span>Powered by <span style="color: #714B67; font-weight: 700;">odoo</span></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>