Compare commits
No commits in common. "19e8d9382192fecd5668d01018234412c3858590" and "53d8312e1ca67db75a84eb808f88414e275677db" have entirely different histories.
19e8d93821
...
53d8312e1c
|
@ -11,18 +11,20 @@
|
||||||
'views/subject.xml',
|
'views/subject.xml',
|
||||||
'views/course.xml',
|
'views/course.xml',
|
||||||
'views/course_attendance.xml',
|
'views/course_attendance.xml',
|
||||||
'views/school_subject_teacher_views.xml',
|
'views/school_subject_teacher_info_views.xml',
|
||||||
'views/application.xml',
|
'views/application.xml',
|
||||||
'views/enrollment.xml',
|
'views/enrollment.xml',
|
||||||
'views/assignment_views.xml',
|
'views/assignment_views.xml',
|
||||||
'views/lesson_views.xml',
|
'views/lesson_views.xml',
|
||||||
'views/timeoff_views.xml',
|
'views/timeoff_views.xml',
|
||||||
'views/teacher_attendance_view.xml',
|
|
||||||
'views/school_misc_views.xml',
|
|
||||||
'views/school_reporting_views.xml',
|
|
||||||
'views/menu.xml',
|
'views/menu.xml',
|
||||||
|
|
||||||
],
|
],
|
||||||
|
'assets': {
|
||||||
|
'web.assets_frontend': [
|
||||||
|
'school_management/static/src/**/*',
|
||||||
|
],
|
||||||
|
},
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'application': True,
|
'application': True,
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,4 @@ from . import school_course_schedule
|
||||||
from . import school_course_assignment
|
from . import school_course_assignment
|
||||||
from . import school_subject_lesson
|
from . import school_subject_lesson
|
||||||
from . import school_subject_teacher_info
|
from . import school_subject_teacher_info
|
||||||
from . import teacher_attendance
|
|
||||||
from . import school_misc_menus
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,62 +0,0 @@
|
||||||
from odoo import models, fields
|
|
||||||
|
|
||||||
class SchoolNotice(models.Model):
|
|
||||||
_name = 'school.notice.board'
|
|
||||||
_description = 'School Notice Board'
|
|
||||||
|
|
||||||
title = fields.Char("Title", required=True)
|
|
||||||
start_date = fields.Date("Start Date", required=True)
|
|
||||||
end_date = fields.Date("End Date")
|
|
||||||
description = fields.Text("Description")
|
|
||||||
school_id = fields.Many2one('res.company', string="School", default=lambda self: self.env.company)
|
|
||||||
visible_to = fields.Selection([
|
|
||||||
('all', 'All'),
|
|
||||||
('students', 'Students'),
|
|
||||||
('teachers', 'Teachers')
|
|
||||||
], string="Visible To", default='all', required=True)
|
|
||||||
|
|
||||||
class SchoolReportDummy(models.Model):
|
|
||||||
_name = 'school.reporting.dummy'
|
|
||||||
_description = 'Reporting Dummy'
|
|
||||||
|
|
||||||
name = fields.Char("Report Name")
|
|
||||||
date_generated = fields.Date("Generated On", default=fields.Date.today)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SchoolFeesReport(models.Model):
|
|
||||||
_name = 'school.fees.report'
|
|
||||||
_description = 'Fees Report'
|
|
||||||
|
|
||||||
name = fields.Char("Report Name")
|
|
||||||
amount = fields.Float("Amount")
|
|
||||||
|
|
||||||
class SchoolTranscriptReport(models.Model):
|
|
||||||
_name = 'school.transcript.report'
|
|
||||||
_description = 'Transcript Report'
|
|
||||||
|
|
||||||
student_id = fields.Many2one('school.application', string="Student", ondelete='set null')
|
|
||||||
grade = fields.Char("Grade")
|
|
||||||
|
|
||||||
class SchoolScholarshipReport(models.Model):
|
|
||||||
_name = 'school.scholarship.report'
|
|
||||||
_description = 'Scholarship Report'
|
|
||||||
|
|
||||||
student_id = fields.Many2one('school.application', string="Student", ondelete='set null')
|
|
||||||
scholarship_name = fields.Char("Scholarship Name")
|
|
||||||
awarded_amount = fields.Float("Awarded Amount")
|
|
||||||
|
|
||||||
class SchoolReportCard(models.Model):
|
|
||||||
_name = 'school.report.card'
|
|
||||||
_description = 'Report Card'
|
|
||||||
|
|
||||||
student_id = fields.Many2one('school.application', string="Student", ondelete='set null')
|
|
||||||
subject_id = fields.Many2one('school.subject', string="Subject Name", required=True)
|
|
||||||
score = fields.Float("Score")
|
|
||||||
|
|
||||||
class SchoolConfigSettings(models.Model):
|
|
||||||
_name = 'school.config.settings'
|
|
||||||
_description = 'School Configuration Settings'
|
|
||||||
|
|
||||||
key = fields.Char("Setting Key", required=True)
|
|
||||||
value = fields.Char("Setting Value")
|
|
|
@ -1,28 +0,0 @@
|
||||||
from odoo import models, fields, api
|
|
||||||
from odoo.exceptions import ValidationError
|
|
||||||
|
|
||||||
class TeacherAttendance(models.Model):
|
|
||||||
_name = 'school.teacher.attendance'
|
|
||||||
_description = 'Teacher Attendance'
|
|
||||||
_order = 'date desc'
|
|
||||||
|
|
||||||
teacher_id = fields.Many2one('school.subject.teacher.info', string='Teacher', required=True)
|
|
||||||
date = fields.Date(string='Date', required=True, default=fields.Date.today)
|
|
||||||
attendance_status = fields.Selection([
|
|
||||||
('present', 'Present'),
|
|
||||||
('absent', 'Absent'),
|
|
||||||
('on_leave', 'On Leave'),
|
|
||||||
('late', 'Late')
|
|
||||||
], string='Status', required=True, default='present')
|
|
||||||
remarks = fields.Text(string='Remarks')
|
|
||||||
|
|
||||||
@api.constrains('date', 'teacher_id')
|
|
||||||
def _check_duplicate_attendance(self):
|
|
||||||
for rec in self:
|
|
||||||
existing = self.search([
|
|
||||||
('teacher_id', '=', rec.teacher_id.id),
|
|
||||||
('date', '=', rec.date),
|
|
||||||
('id', '!=', rec.id)
|
|
||||||
])
|
|
||||||
if existing:
|
|
||||||
raise ValidationError("Attendance for this teacher already exists on this date.")
|
|
|
@ -15,11 +15,3 @@ access_school_course_assignment,School Course Assignment,model_school_course_ass
|
||||||
access_school_subject_lesson,School Subject Lesson,model_school_subject_lesson,,1,1,1,1
|
access_school_subject_lesson,School Subject Lesson,model_school_subject_lesson,,1,1,1,1
|
||||||
access_school_subject_teacher_info,School Subject Teacher Info,model_school_subject_teacher_info,,1,1,1,1
|
access_school_subject_teacher_info,School Subject Teacher Info,model_school_subject_teacher_info,,1,1,1,1
|
||||||
access_school_subject_teacher_info_admin,Subject Teacher Info,model_school_subject_teacher_info,school_management.group_school_admin,1,1,1,1
|
access_school_subject_teacher_info_admin,Subject Teacher Info,model_school_subject_teacher_info,school_management.group_school_admin,1,1,1,1
|
||||||
access_teacher_attendance,Teacher Attendance,model_school_teacher_attendance,,1,1,1,1
|
|
||||||
access_school_notice_board,School Notice Board,model_school_notice_board,,1,1,1,1
|
|
||||||
access_school_reporting_dummy,School Reporting Dummy,model_school_reporting_dummy,,1,1,1,1
|
|
||||||
access_school_config_settings,School Config Settings,model_school_config_settings,,1,1,1,1
|
|
||||||
access_school_fees_report,Fees Report,model_school_fees_report,,1,1,1,1
|
|
||||||
access_school_transcript_report,Transcript Report,model_school_transcript_report,,1,1,1,1
|
|
||||||
access_school_scholarship_report,Scholarship Report,model_school_scholarship_report,,1,1,1,1
|
|
||||||
access_school_report_card,Report Card,model_school_report_card,,1,1,1,1
|
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
// odoo.define('school_management.login_script', function (require) {
|
||||||
|
// "use strict";
|
||||||
|
|
||||||
|
// document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
// const toggleBtn = document.querySelector("#toggle-password");
|
||||||
|
// const pwField = document.querySelector("#password");
|
||||||
|
|
||||||
|
// if (toggleBtn && pwField) {
|
||||||
|
// toggleBtn.addEventListener("click", function () {
|
||||||
|
// const type = pwField.type === "password" ? "text" : "password";
|
||||||
|
// pwField.type = type;
|
||||||
|
// toggleBtn.innerText = type === "password" ? "👁️" : "🙈";
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
|
@ -0,0 +1,650 @@
|
||||||
|
/* style.css - Main stylesheet for EduManage system */
|
||||||
|
|
||||||
|
/* Reset and Base Styles */
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 16px;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #333;
|
||||||
|
background-color: #f8fafc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Typography */
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
color: #1a202c;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 { font-size: 2.5rem; font-weight: 700; }
|
||||||
|
h2 { font-size: 2rem; font-weight: 600; }
|
||||||
|
h3 { font-size: 1.5rem; font-weight: 600; }
|
||||||
|
h4 { font-size: 1.25rem; font-weight: 500; }
|
||||||
|
h5 { font-size: 1.125rem; font-weight: 500; }
|
||||||
|
h6 { font-size: 1rem; font-weight: 500; }
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
color: #4a5568;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #3182ce;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #2c5aa0;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Layout Components */
|
||||||
|
.container {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-column {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.justify-between {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.justify-center {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
.header {
|
||||||
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
|
color: white;
|
||||||
|
padding: 1rem 0;
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo img {
|
||||||
|
height: 40px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-info {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-avatar {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 2px solid rgba(255, 255, 255, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-details h4 {
|
||||||
|
color: white;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-details span {
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation */
|
||||||
|
.sidebar {
|
||||||
|
background: white;
|
||||||
|
width: 250px;
|
||||||
|
min-height: calc(100vh - 80px);
|
||||||
|
box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1);
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 80px;
|
||||||
|
z-index: 999;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu {
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 15px 25px;
|
||||||
|
color: #4a5568;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:hover {
|
||||||
|
background-color: #f7fafc;
|
||||||
|
color: #3182ce;
|
||||||
|
border-left-color: #3182ce;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item.active {
|
||||||
|
background-color: #ebf8ff;
|
||||||
|
color: #3182ce;
|
||||||
|
border-left-color: #3182ce;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item i {
|
||||||
|
margin-right: 12px;
|
||||||
|
width: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Content */
|
||||||
|
.main-content {
|
||||||
|
margin-left: 250px;
|
||||||
|
padding: 30px;
|
||||||
|
min-height: calc(100vh - 80px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
border-bottom: 1px solid #e2e8f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-title {
|
||||||
|
color: #1a202c;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-subtitle {
|
||||||
|
color: #718096;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cards and Components */
|
||||||
|
.card {
|
||||||
|
background: white;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||||
|
margin-bottom: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover {
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
padding: 20px;
|
||||||
|
background: #f7fafc;
|
||||||
|
border-bottom: 1px solid #e2e8f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin: 0;
|
||||||
|
color: #1a202c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
padding: 15px 20px;
|
||||||
|
background: #f7fafc;
|
||||||
|
border-top: 1px solid #e2e8f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Statistics Cards */
|
||||||
|
.stats-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||||
|
gap: 20px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-card {
|
||||||
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
|
color: white;
|
||||||
|
padding: 25px;
|
||||||
|
border-radius: 12px;
|
||||||
|
text-align: center;
|
||||||
|
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.25);
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-card:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-card h3 {
|
||||||
|
color: rgba(255, 255, 255, 0.9);
|
||||||
|
font-size: 0.875rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-value {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-change {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
margin-top: 5px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
.form-group {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
color: #374151;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px 16px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #3182ce;
|
||||||
|
box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-select {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px 16px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
border-radius: 6px;
|
||||||
|
background-color: white;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-textarea {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px 16px;
|
||||||
|
border: 1px solid #d1d5db;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
resize: vertical;
|
||||||
|
min-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 12px 24px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
background-color: #3182ce;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary:hover {
|
||||||
|
background-color: #2c5aa0;
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 4px 12px rgba(49, 130, 206, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-secondary {
|
||||||
|
background-color: #e2e8f0;
|
||||||
|
color: #374151;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-secondary:hover {
|
||||||
|
background-color: #cbd5e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-success {
|
||||||
|
background-color: #38a169;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-success:hover {
|
||||||
|
background-color: #2f855a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-danger {
|
||||||
|
background-color: #e53e3e;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-danger:hover {
|
||||||
|
background-color: #c53030;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sm {
|
||||||
|
padding: 8px 16px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-lg {
|
||||||
|
padding: 16px 32px;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
.table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table th,
|
||||||
|
.table td {
|
||||||
|
padding: 12px 16px;
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid #e2e8f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table th {
|
||||||
|
background-color: #f7fafc;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #374151;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table tbody tr:hover {
|
||||||
|
background-color: #f7fafc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Login Page Styles */
|
||||||
|
.login-container {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-card {
|
||||||
|
background: white;
|
||||||
|
padding: 40px;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
|
||||||
|
width: 100%;
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-header {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-logo {
|
||||||
|
height: 60px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dashboard Specific Styles */
|
||||||
|
.dashboard-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||||
|
gap: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.activity-item {
|
||||||
|
padding: 15px;
|
||||||
|
border-left: 4px solid #3182ce;
|
||||||
|
background: #f7fafc;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 0 6px 6px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.activity-time {
|
||||||
|
color: #718096;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modals */
|
||||||
|
.modal {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
z-index: 10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
background: white;
|
||||||
|
padding: 30px;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.25);
|
||||||
|
max-width: 500px;
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-header {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
border-bottom: 1px solid #e2e8f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-title {
|
||||||
|
margin: 0;
|
||||||
|
color: #1a202c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: 15px;
|
||||||
|
right: 20px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #718096;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-btn:hover {
|
||||||
|
color: #1a202c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Notifications */
|
||||||
|
.notification {
|
||||||
|
position: fixed;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
padding: 15px 20px;
|
||||||
|
border-radius: 6px;
|
||||||
|
color: white;
|
||||||
|
font-weight: 500;
|
||||||
|
z-index: 10001;
|
||||||
|
animation: slideIn 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.info {
|
||||||
|
background-color: #3182ce;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.success {
|
||||||
|
background-color: #38a169;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.warning {
|
||||||
|
background-color: #d69e2e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.error {
|
||||||
|
background-color: #e53e3e;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slideIn {
|
||||||
|
from {
|
||||||
|
transform: translateX(100%);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translateX(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive Design */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.sidebar {
|
||||||
|
transform: translateX(-100%);
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar.open {
|
||||||
|
transform: translateX(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
margin-left: 0;
|
||||||
|
padding: 20px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .container {
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats-grid {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard-grid {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.login-card {
|
||||||
|
margin: 20px;
|
||||||
|
padding: 30px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
margin: 20px;
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-card {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-value {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Utility Classes */
|
||||||
|
.mt-10 { margin-top: 10px; }
|
||||||
|
.mt-20 { margin-top: 20px; }
|
||||||
|
.mb-10 { margin-bottom: 10px; }
|
||||||
|
.mb-20 { margin-bottom: 20px; }
|
||||||
|
.ml-10 { margin-left: 10px; }
|
||||||
|
.mr-10 { margin-right: 10px; }
|
||||||
|
|
||||||
|
.p-10 { padding: 10px; }
|
||||||
|
.p-20 { padding: 20px; }
|
||||||
|
.pt-10 { padding-top: 10px; }
|
||||||
|
.pb-10 { padding-bottom: 10px; }
|
||||||
|
|
||||||
|
.hidden { display: none; }
|
||||||
|
.visible { display: block; }
|
||||||
|
|
||||||
|
.text-muted { color: #718096; }
|
||||||
|
.text-primary { color: #3182ce; }
|
||||||
|
.text-success { color: #38a169; }
|
||||||
|
.text-warning { color: #d69e2e; }
|
||||||
|
.text-danger { color: #e53e3e; }
|
||||||
|
|
||||||
|
.bg-light { background-color: #f7fafc; }
|
||||||
|
.bg-primary { background-color: #3182ce; }
|
||||||
|
.bg-success { background-color: #38a169; }
|
||||||
|
.bg-warning { background-color: #d69e2e; }
|
||||||
|
.bg-danger { background-color: #e53e3e; }
|
||||||
|
|
||||||
|
.border { border: 1px solid #e2e8f0; }
|
||||||
|
.border-top { border-top: 1px solid #e2e8f0; }
|
||||||
|
.border-bottom { border-bottom: 1px solid #e2e8f0; }
|
||||||
|
.border-left { border-left: 1px solid #e2e8f0; }
|
||||||
|
.border-right { border-right: 1px solid #e2e8f0; }
|
||||||
|
|
||||||
|
.rounded { border-radius: 6px; }
|
||||||
|
.rounded-lg { border-radius: 12px; }
|
||||||
|
.rounded-full { border-radius: 50%; }
|
||||||
|
|
||||||
|
.shadow { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }
|
||||||
|
.shadow-md { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); }
|
||||||
|
.shadow-lg { box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15); }
|
|
@ -113,9 +113,12 @@
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="kanban-box">
|
<t t-name="kanban-box">
|
||||||
<div class="d-flex align-items-start" style="gap: 20px;">
|
<div class="d-flex align-items-start" style="gap: 20px;">
|
||||||
<div>
|
<!-- IMAGE -->
|
||||||
|
<div>
|
||||||
<field name="image" widget="image" alt="Product" style="width: 60px; height: 60px; object-fit: cover;" options="{'img_class': 'w-100 object-fit-contain'}" invisible="not image"/>
|
<field name="image" widget="image" alt="Product" style="width: 60px; height: 60px; object-fit: cover;" options="{'img_class': 'w-100 object-fit-contain'}" invisible="not image"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- DETAILS -->
|
||||||
<div class="o_kanban_details">
|
<div class="o_kanban_details">
|
||||||
<strong><field name="name"/></strong><br/>
|
<strong><field name="name"/></strong><br/>
|
||||||
<i class="fa fa-envelope"/> <field name="email"/><br/>
|
<i class="fa fa-envelope"/> <field name="email"/><br/>
|
||||||
|
@ -129,36 +132,10 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<!-- Pivot View -->
|
|
||||||
<record id="view_school_application_pivot" model="ir.ui.view">
|
|
||||||
<field name="name">school.application.pivot</field>
|
|
||||||
<field name="model">school.application</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<pivot string="Application Pivot">
|
|
||||||
<field name="status" type="row"/>
|
|
||||||
<field name="gender" type="row"/>
|
|
||||||
<field name="class_name" type="col"/>
|
|
||||||
</pivot>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Graph View -->
|
|
||||||
<record id="view_school_application_graph" model="ir.ui.view">
|
|
||||||
<field name="name">school.application.graph</field>
|
|
||||||
<field name="model">school.application</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<graph string="Application Chart" type="bar">
|
|
||||||
<field name="class_name" type="row"/>
|
|
||||||
<field name="gender" type="col"/>
|
|
||||||
</graph>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Action -->
|
<!-- Action -->
|
||||||
<record id="action_school_application" model="ir.actions.act_window">
|
<record id="action_school_application" model="ir.actions.act_window">
|
||||||
<field name="name">Applications</field>
|
<field name="name">Applications</field>
|
||||||
<field name="res_model">school.application</field>
|
<field name="res_model">school.application</field>
|
||||||
<field name="view_mode">list,form,kanban,graph,pivot</field>
|
<field name="view_mode">list,form,kanban</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
@ -119,35 +119,11 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="view_school_enrollment_pivot" model="ir.ui.view">
|
|
||||||
<field name="name">school.enrollment.pivot</field>
|
|
||||||
<field name="model">school.enrollment</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<pivot string="Enrollment Stats">
|
|
||||||
<field name="class_name" type="row"/>
|
|
||||||
<field name="session_status" type="row"/>
|
|
||||||
<field name="fees_status" type="col"/>
|
|
||||||
</pivot>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Graph View -->
|
|
||||||
<record id="view_school_enrollment_graph" model="ir.ui.view">
|
|
||||||
<field name="name">school.enrollment.graph</field>
|
|
||||||
<field name="model">school.enrollment</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<graph string="Enrollment Chart" type="bar">
|
|
||||||
<field name="class_name" type="row"/>
|
|
||||||
<field name="session_status" type="col"/>
|
|
||||||
</graph>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Action Window -->
|
<!-- Action Window -->
|
||||||
<record id="action_school_enrollment" model="ir.actions.act_window">
|
<record id="action_school_enrollment" model="ir.actions.act_window">
|
||||||
<field name="name">Enrollment</field>
|
<field name="name">Enrollment</field>
|
||||||
<field name="res_model">school.enrollment</field>
|
<field name="res_model">school.enrollment</field>
|
||||||
<field name="view_mode">list,form,kanban,pivot,graph</field>
|
<field name="view_mode">list,form,kanban</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
@ -28,116 +28,40 @@
|
||||||
action="action_school_class_schedule"
|
action="action_school_class_schedule"
|
||||||
sequence="50"/>
|
sequence="50"/>
|
||||||
|
|
||||||
<!-- Parent: Teacher Menu (no action) -->
|
|
||||||
<menuitem id="menu_teachers_root"
|
<menuitem id="menu_teachers_root"
|
||||||
name="Teacher"
|
name="Teachers"
|
||||||
parent="menu_school_root"
|
parent="menu_school_root"
|
||||||
sequence="20"/>
|
sequence="60"/>
|
||||||
|
|
||||||
<!-- Submenu 1: All Teachers -->
|
<menuitem id="menu_teacher_main"
|
||||||
<menuitem id="menu_teacher_all"
|
name="Teacher"
|
||||||
name="All Teachers"
|
|
||||||
parent="menu_teachers_root"
|
parent="menu_teachers_root"
|
||||||
action="action_school_subject_teacher_info"
|
action="action_school_subject_teacher_info"
|
||||||
sequence="1"/>
|
sequence="1"/>
|
||||||
|
|
||||||
<!-- Submenu 2: Teacher Attendance -->
|
|
||||||
<menuitem id="menu_teacher_assignment"
|
<menuitem id="menu_teacher_assignment"
|
||||||
name="Assignment"
|
name="Assignment"
|
||||||
parent="menu_teachers_root"
|
parent="menu_teacher_main"
|
||||||
action="action_school_course_assignment"
|
action="action_school_course_assignment"
|
||||||
sequence="2"/>
|
sequence="2"/>
|
||||||
|
|
||||||
<menuitem id="menu_teacher_lessonplan"
|
<menuitem id="menu_teacher_lessonplan"
|
||||||
name="Lesson Plan"
|
name="Lesson Plan"
|
||||||
parent="menu_teachers_root"
|
parent="menu_teacher_main"
|
||||||
action="action_school_subject_lesson"
|
action="action_school_subject_lesson"
|
||||||
sequence="3"/>
|
sequence="3"/>
|
||||||
|
|
||||||
<menuitem id="menu_teacher_attendance_view"
|
<menuitem id="menu_teacher_attendance"
|
||||||
name="Teacher Attendance"
|
name="Teacher Attendance"
|
||||||
parent="menu_teachers_root"
|
parent="menu_teacher_main"
|
||||||
action="action_teacher_attendance"
|
action="action_school_course_attendance"
|
||||||
sequence="4"/>
|
sequence="4"/>
|
||||||
|
|
||||||
<menuitem id="menu_teacher_timeoff"
|
<menuitem id="menu_teacher_timeoff"
|
||||||
name="Time Off"
|
name="Time Off"
|
||||||
parent="menu_teachers_root"
|
parent="menu_teacher_main"
|
||||||
action="action_school_course_schedule"
|
action="action_school_course_schedule"
|
||||||
sequence="5"/>
|
sequence="5"/>
|
||||||
|
|
||||||
<!-- Notice Board Menu -->
|
|
||||||
<menuitem id="menu_school_notice_board"
|
|
||||||
name="Notice Board"
|
|
||||||
parent="menu_school_root"
|
|
||||||
sequence="70"/>
|
|
||||||
|
|
||||||
<!-- Dummy child menu to make parent visible -->
|
|
||||||
<menuitem id="menu_school_notice_list"
|
|
||||||
name="All Notices"
|
|
||||||
parent="menu_school_notice_board"
|
|
||||||
action="action_school_notice_board"
|
|
||||||
sequence="1"/>
|
|
||||||
|
|
||||||
<!-- Reporting Menu -->
|
|
||||||
<menuitem id="menu_school_reporting"
|
|
||||||
name="Reporting"
|
|
||||||
parent="menu_school_root"
|
|
||||||
sequence="80"/>
|
|
||||||
|
|
||||||
<!--General Report-->
|
|
||||||
<menuitem id="menu_school_reporting_dummy"
|
|
||||||
name="General Report"
|
|
||||||
parent="menu_school_reporting"
|
|
||||||
action="action_school_reporting_dummy"
|
|
||||||
sequence="1"/>
|
|
||||||
|
|
||||||
<!--Fees Report-->
|
|
||||||
<menuitem id="menu_school_fees_report"
|
|
||||||
name="Fees Report"
|
|
||||||
parent="menu_school_reporting"
|
|
||||||
action="action_school_fees_report"
|
|
||||||
sequence="2"/>
|
|
||||||
|
|
||||||
<!-- 2. Transcript Report -->
|
|
||||||
<menuitem id="menu_school_transcript_report"
|
|
||||||
name="Transcript Report"
|
|
||||||
parent="menu_school_reporting"
|
|
||||||
action="action_school_transcript_report"
|
|
||||||
sequence="3"/>
|
|
||||||
|
|
||||||
<!-- 3. Scholarship Report -->
|
|
||||||
<menuitem id="menu_school_scholarship_report"
|
|
||||||
name="Scholarship Report"
|
|
||||||
parent="menu_school_reporting"
|
|
||||||
action="action_school_scholarship_report"
|
|
||||||
sequence="4"/>
|
|
||||||
|
|
||||||
<!-- 4. Report Card -->
|
|
||||||
<menuitem id="menu_school_report_card"
|
|
||||||
name="Report Card"
|
|
||||||
parent="menu_school_reporting"
|
|
||||||
action="action_school_report_card"
|
|
||||||
sequence="5"/>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Configuration Menu -->
|
|
||||||
<menuitem id="menu_school_configuration"
|
|
||||||
name="Configuration"
|
|
||||||
parent="menu_school_root"
|
|
||||||
sequence="90"/>
|
|
||||||
|
|
||||||
<menuitem id="menu_school_config_settings"
|
|
||||||
name="Settings"
|
|
||||||
parent="menu_school_configuration"
|
|
||||||
action="action_school_config_settings"
|
|
||||||
sequence="1"/>
|
|
||||||
|
|
||||||
<!-- <menuitem id="menu_teacher_main"
|
|
||||||
name="Teacher"
|
|
||||||
parent="menu_teachers_root"
|
|
||||||
action="action_school_subject_teacher_info"
|
|
||||||
sequence="1"/> -->
|
|
||||||
|
|
||||||
<!-- Class Schedule Submenus -->
|
<!-- Class Schedule Submenus -->
|
||||||
<menuitem id="menu_school_class"
|
<menuitem id="menu_school_class"
|
||||||
|
@ -162,5 +86,6 @@
|
||||||
name="Course Attendance"
|
name="Course Attendance"
|
||||||
parent="menu_school_class_schedule"
|
parent="menu_school_class_schedule"
|
||||||
action="action_school_course_attendance"
|
action="action_school_course_attendance"
|
||||||
sequence="40"/>
|
sequence="40"/>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
@ -82,8 +82,8 @@
|
||||||
</kanban>
|
</kanban>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
<!-- Action Window -->
|
||||||
<!-- Action Window -->
|
<!-- ✅ Corrected Action Window -->
|
||||||
<record id="action_school_class_schedule" model="ir.actions.act_window">
|
<record id="action_school_class_schedule" model="ir.actions.act_window">
|
||||||
<field name="name">Class Schedule</field>
|
<field name="name">Class Schedule</field>
|
||||||
<field name="res_model">school.class.schedule</field> <!-- FIXED -->
|
<field name="res_model">school.class.schedule</field> <!-- FIXED -->
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
<odoo>
|
|
||||||
<record id="view_school_notice_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.notice.board.list</field>
|
|
||||||
<field name="model">school.notice.board</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="title"/>
|
|
||||||
<field name="start_date"/>
|
|
||||||
<field name="end_date"/>
|
|
||||||
<field name="school_id"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_school_notice_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.notice.board.form</field>
|
|
||||||
<field name="model">school.notice.board</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form>
|
|
||||||
<sheet>
|
|
||||||
<group>
|
|
||||||
<field name="title"/>
|
|
||||||
<field name="school_id"/>
|
|
||||||
</group>
|
|
||||||
<group>
|
|
||||||
<field name="start_date"/>
|
|
||||||
<field name="end_date"/>
|
|
||||||
<field name="visible_to"/>
|
|
||||||
</group>
|
|
||||||
<group>
|
|
||||||
<field name="description"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Notice Action -->
|
|
||||||
<record id="action_school_notice_board" model="ir.actions.act_window">
|
|
||||||
<field name="name">All Notices</field>
|
|
||||||
<field name="res_model">school.notice.board</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_school_reporting_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.reporting.dummy.list</field>
|
|
||||||
<field name="model">school.reporting.dummy</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="date_generated"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_school_reporting_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.reporting.dummy.form</field>
|
|
||||||
<field name="model">school.reporting.dummy</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form>
|
|
||||||
<sheet>
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="date_generated"/>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Reporting Dummy Action -->
|
|
||||||
<record id="action_school_reporting_dummy" model="ir.actions.act_window">
|
|
||||||
<field name="name">General Report</field>
|
|
||||||
<field name="res_model">school.reporting.dummy</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_school_config_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.config.settings.list</field>
|
|
||||||
<field name="model">school.config.settings</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="key"/>
|
|
||||||
<field name="value"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_school_config_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.config.settings.form</field>
|
|
||||||
<field name="model">school.config.settings</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form>
|
|
||||||
<sheet>
|
|
||||||
<field name="key"/>
|
|
||||||
<field name="value"/>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Config Settings Action -->
|
|
||||||
<record id="action_school_config_settings" model="ir.actions.act_window">
|
|
||||||
<field name="name">Settings</field>
|
|
||||||
<field name="res_model">school.config.settings</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
|
@ -1,142 +0,0 @@
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<!-- === Action & Views: Fees Report === -->
|
|
||||||
<record id="view_fees_report_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.fees.report.list</field>
|
|
||||||
<field name="model">school.fees.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="amount"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<record id="view_fees_report_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.fees.report.form</field>
|
|
||||||
<field name="model">school.fees.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Fees Report">
|
|
||||||
<sheet>
|
|
||||||
<group>
|
|
||||||
<field name="name"/>
|
|
||||||
<field name="amount"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<record id="action_school_fees_report" model="ir.actions.act_window">
|
|
||||||
<field name="name">Fees Report</field>
|
|
||||||
<field name="res_model">school.fees.report</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- === Action & Views: Transcript Report === -->
|
|
||||||
<record id="view_transcript_report_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.transcript.report.list</field>
|
|
||||||
<field name="model">school.transcript.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="student_id"/>
|
|
||||||
<field name="grade"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<record id="view_transcript_report_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.transcript.report.form</field>
|
|
||||||
<field name="model">school.transcript.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Transcript Report">
|
|
||||||
<sheet>
|
|
||||||
<group>
|
|
||||||
<field name="student_id"/>
|
|
||||||
<field name="grade"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<record id="action_school_transcript_report" model="ir.actions.act_window">
|
|
||||||
<field name="name">Transcript Report</field>
|
|
||||||
<field name="res_model">school.transcript.report</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- === Action & Views: Scholarship Report === -->
|
|
||||||
<record id="view_scholarship_report_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.scholarship.report.list</field>
|
|
||||||
<field name="model">school.scholarship.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="student_id"/>
|
|
||||||
<field name="scholarship_name"/>
|
|
||||||
<field name="awarded_amount"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<record id="view_scholarship_report_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.scholarship.report.form</field>
|
|
||||||
<field name="model">school.scholarship.report</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Scholarship Report">
|
|
||||||
<sheet>
|
|
||||||
<group>
|
|
||||||
<field name="student_id"/>
|
|
||||||
<field name="scholarship_name"/>
|
|
||||||
<field name="awarded_amount"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<record id="action_school_scholarship_report" model="ir.actions.act_window">
|
|
||||||
<field name="name">Scholarship Report</field>
|
|
||||||
<field name="res_model">school.scholarship.report</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- === Action & Views: Report Card === -->
|
|
||||||
<record id="view_report_card_list" model="ir.ui.view">
|
|
||||||
<field name="name">school.report.card.list</field>
|
|
||||||
<field name="model">school.report.card</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="student_id"/>
|
|
||||||
<field name="subject_id"/>
|
|
||||||
<field name="score"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<record id="view_report_card_form" model="ir.ui.view">
|
|
||||||
<field name="name">school.report.card.form</field>
|
|
||||||
<field name="model">school.report.card</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Report Card">
|
|
||||||
<sheet>
|
|
||||||
<group>
|
|
||||||
<field name="student_id"/>
|
|
||||||
<field name="subject_id"/>
|
|
||||||
<field name="score"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<record id="action_school_report_card" model="ir.actions.act_window">
|
|
||||||
<field name="name">Report Card</field>
|
|
||||||
<field name="res_model">school.report.card</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<!-- list View -->
|
<!-- Tree View -->
|
||||||
<record id="view_school_subject_teacher_list" model="ir.ui.view">
|
<record id="view_school_subject_teacher_info_list" model="ir.ui.view">
|
||||||
<field name="name">school.subject.teacher.list</field>
|
<field name="name">school.subject.teacher.info.list</field>
|
||||||
<field name="model">school.subject.teacher.info</field>
|
<field name="model">school.subject.teacher.info</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<list string="Subject Teacher Info">
|
<list string="Subject Teacher Info">
|
||||||
|
@ -19,8 +19,8 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Form View -->
|
<!-- Form View -->
|
||||||
<record id="view_school_subject_teacher_form" model="ir.ui.view">
|
<record id="view_school_subject_teacher_info_form" model="ir.ui.view">
|
||||||
<field name="name">school.subject.teacher.form</field>
|
<field name="name">school.subject.teacher.info.form</field>
|
||||||
<field name="model">school.subject.teacher.info</field>
|
<field name="model">school.subject.teacher.info</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Subject Teacher Info">
|
<form string="Subject Teacher Info">
|
||||||
|
@ -56,8 +56,8 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Kanban View -->
|
<!-- Kanban View -->
|
||||||
<record id="view_school_subject_teacher_kanban" model="ir.ui.view">
|
<record id="view_school_subject_teacher_info_kanban" model="ir.ui.view">
|
||||||
<field name="name">school.subject.teacher.kanban</field>
|
<field name="name">school.subject.teacher.info.kanban</field>
|
||||||
<field name="model">school.subject.teacher.info</field>
|
<field name="model">school.subject.teacher.info</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<kanban class="o_kanban_example">
|
<kanban class="o_kanban_example">
|
||||||
|
@ -86,8 +86,8 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!--Pivot View-->
|
<!--Pivot View-->
|
||||||
<record id="view_school_subject_teacher_pivot" model="ir.ui.view">
|
<record id="view_school_subject_teacher_info_pivot" model="ir.ui.view">
|
||||||
<field name="name">school.subject.teacher.pivot</field>
|
<field name="name">school.subject.teacher.info.pivot</field>
|
||||||
<field name="model">school.subject.teacher.info</field>
|
<field name="model">school.subject.teacher.info</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<pivot string="Subject Teacher Stats" disable_linking="True">
|
<pivot string="Subject Teacher Stats" disable_linking="True">
|
||||||
|
@ -100,26 +100,14 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Search View -->
|
|
||||||
<record id="view_school_subject_teacher_search" model="ir.ui.view">
|
|
||||||
<field name="name">school.subject.teacher.search</field>
|
|
||||||
<field name="model">school.subject.teacher.info</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<search>
|
|
||||||
<field name="employee_name"/>
|
|
||||||
<field name="subject_id"/>
|
|
||||||
<field name="email"/>
|
|
||||||
<field name="department"/>
|
|
||||||
</search>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Action -->
|
<!-- Action -->
|
||||||
<record id="action_school_subject_teacher_info" model="ir.actions.act_window">
|
<record id="action_school_subject_teacher_info" model="ir.actions.act_window">
|
||||||
<field name="name">All Teachers</field>
|
<field name="name">Subject Teacher Info</field>
|
||||||
<field name="res_model">school.subject.teacher.info</field>
|
<field name="res_model">school.subject.teacher.info</field>
|
||||||
<field name="view_mode">kanban,search,pivot,list,form</field>
|
<field name="view_mode">list,form</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p class="o_view_nocontent_smiling_face">Create Subject Teacher Information.</p>
|
||||||
|
</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<record id="view_teacher_attendance_list" model="ir.ui.view">
|
|
||||||
<field name="name">teacher.attendance.list</field>
|
|
||||||
<field name="model">school.teacher.attendance</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<list>
|
|
||||||
<field name="teacher_id"/>
|
|
||||||
<field name="date"/>
|
|
||||||
<field name="attendance_status"/>
|
|
||||||
<field name="remarks"/>
|
|
||||||
</list>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_teacher_attendance_form" model="ir.ui.view">
|
|
||||||
<field name="name">teacher.attendance.form</field>
|
|
||||||
<field name="model">school.teacher.attendance</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<form string="Teacher Attendance">
|
|
||||||
<sheet>
|
|
||||||
<group>
|
|
||||||
<field name="teacher_id"/>
|
|
||||||
<field name="date"/>
|
|
||||||
<field name="attendance_status"/>
|
|
||||||
<field name="remarks"/>
|
|
||||||
</group>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="action_teacher_attendance" model="ir.actions.act_window">
|
|
||||||
<field name="name">Teacher Attendance</field>
|
|
||||||
<field name="res_model">school.teacher.attendance</field>
|
|
||||||
<field name="view_mode">list,form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
Loading…
Reference in New Issue