This commit is contained in:
XuanHuyen 2025-02-23 01:59:56 +07:00
parent 983b76ba74
commit 6baa855977
16 changed files with 388 additions and 0 deletions

4
education/__init__.py Normal file
View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import controllers
from . import models

32
education/__manifest__.py Normal file
View File

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
{
'name': "Education",
'summary': "Module education management",
'description': """
Long description of module's purpose
""",
'author': "Huyen107",
'website': "https://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/15.0/odoo/addons/base/data/ir_module_category_data.xml
# for the full list
'category': 'Education, Management',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
'security/ir.model.access.csv',
'views/education_student_views.xml',
'views/education_class_views.xml',
'views/student_level_views.xml',
],
}

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import controllers

View File

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# from odoo import http
# class School(http.Controller):
# @http.route('/school/school', auth='public')
# def index(self, **kw):
# return "Hello, world"
# @http.route('/school/school/objects', auth='public')
# def list(self, **kw):
# return http.request.render('school.listing', {
# 'root': '/school/school',
# 'objects': http.request.env['school.school'].search([]),
# })
# @http.route('/school/school/objects/<model("school.school"):obj>', auth='public')
# def object(self, obj, **kw):
# return http.request.render('school.object', {
# 'object': obj
# })

30
education/demo/demo.xml Normal file
View File

@ -0,0 +1,30 @@
<odoo>
<data>
<!--
<record id="object0" model="school.school">
<field name="name">Object 0</field>
<field name="value">0</field>
</record>
<record id="object1" model="school.school">
<field name="name">Object 1</field>
<field name="value">10</field>
</record>
<record id="object2" model="school.school">
<field name="name">Object 2</field>
<field name="value">20</field>
</record>
<record id="object3" model="school.school">
<field name="name">Object 3</field>
<field name="value">30</field>
</record>
<record id="object4" model="school.school">
<field name="name">Object 4</field>
<field name="value">40</field>
</record>
-->
</data>
</odoo>

View File

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
from . import education_student
from . import education_class
from . import student_level
from . import education_school

View File

@ -0,0 +1,9 @@
from odoo import fields, api, models
class EducationClass(models.Model):
_name = 'education.class'
_description = 'Education Class'
name = fields.Char(string='Name', required=True)
school_id = fields.Many2one('education.school', string='School', required=True)
teacher_ids = fields.Many2many('res.partner', string='Teachers')

View File

@ -0,0 +1,9 @@
from odoo import fields, api, models
class EductionSchool(models.Model):
_name = 'education.school'
_description = 'School'
name = fields.Char(string='Name', translate=True, required=True)
code = fields.Char(string='Code', copy=False)
class_ids = fields.One2many("education.class", "school_id", string="Classes")

View File

@ -0,0 +1,23 @@
from odoo import fields, api, models
class EducationStudent(models.Model):
_name = "education.student"
_description = "Education Student"
name = fields.Char(string='Name', required=True, translate=True)
student_code = fields.Char(string='Student Code', required=True, index=True,
help="Student ID is unique")
class_id = fields.Many2one("education.class", string="Class")
gender = fields.Selection([('male', 'Male'), ('female', 'Female'), ('other', 'Other')],
string='Gender', default='male')
date_of_birth = fields.Date(string='Date of Birth')
age = fields.Integer(string='Age')
active = fields.Boolean(string='Active', default=True)
notes = fields.Text(string='Internal Notes')
attached_file = fields.Binary('Attached File', groups='base.group_user')
description = fields.Html(string='Description', sanitize=True, strip_style=False)
total_score = fields.Float(string='Total Score')
write_date = fields.Datetime(string='Last Updated on')
currency_id = fields.Many2one('res.currency', string='Currency')
amount_paid = fields.Monetary('Amount Paid')

View File

@ -0,0 +1,11 @@
from odoo import fields, api, models
class StudentLevel(models.Model):
_name = "student.level"
_description = 'Student Level'
_order = "sequence, name"
_rec_name = "code"
code = fields.Char(string="Code", required=True)
name = fields.Char(string='Name', translate=True, required=True)
sequence = fields.Integer(string='Sequence', default=1)

View File

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_education_student,education.student,model_education_student,base.group_user,1,1,1,1
access_education_class,education.class,model_education_class,base.group_user,1,1,1,1
access_education_school,education.school,model_education_school,base.group_user,1,1,1,1
access_student_level,student.level,model_student_level,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_education_student education.student model_education_student base.group_user 1 1 1 1
3 access_education_class education.class model_education_class base.group_user 1 1 1 1
4 access_education_school education.school model_education_school base.group_user 1 1 1 1
5 access_student_level student.level model_student_level base.group_user 1 1 1 1

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- action -->
<record id="education_class_action" model="ir.actions.act_window">
<field name="name">Class</field>
<field name="res_model">education.class</field>
<field name="view_mode">list,form</field>
</record>
<!-- form view -->
<record id="education_class_view_form" model="ir.ui.view">
<field name="name">education.class.view.form</field>
<field name="model">education.class</field>
<field name="arch" type="xml">
<form string="Class Form">
<group>
<group>
<field name="name" />
</group>
</group>
</form>
</field>
</record>
<!-- list view -->
<record id="education_class_view_list" model="ir.ui.view">
<field name="name">education.class.view.list</field>
<field name="model">education.class</field>
<field name="arch" type="xml">
<list string="class">
<field name="name" />
</list>
</field>
</record>
<!-- menu -->
<menuitem
id="education_class_menu"
name="Class"
action="education_class_action"
parent="education_student_menu_root" />
</odoo>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- action -->
<record id="education_student_action" model="ir.actions.act_window">
<field name="name">Students</field>
<field name="res_model">education.student</field>
<field name="view_mode">list,form</field>
</record>
<!-- form view -->
<record id="education_student_view_form" model="ir.ui.view">
<field name="name">education.student.view.form</field>
<field name="model">education.student</field>
<field name="arch" type="xml">
<form string="Student Form">
<sheet>
<group>
<group>
<field name="name" />
<field name="student_code" />
<field name="gender" />
<field name="date_of_birth" />
<field name="age" />
</group>
<group>
<field name="total_score" />
<field name="attached_file" />
<field name="write_date" />
<field name="currency_id" />
<field name="amount_paid" />
</group>
</group>
<group>
<field name="notes" />
</group>
<group>
<field name="description" />
</group>
</sheet>
</form>
</field>
</record>
<!-- list view -->
<record id="education_student_view_list" model="ir.ui.view">
<field name="name">education.student.view.list</field>
<field name="model">education.student</field>
<field name="arch" type="xml">
<list string="Student">
<field name="name" />
<field name="student_code" />
<field name="class_id" />
</list>
</field>
</record>
<!-- search -->
<record id="education_student_view_search" model="ir.ui.view">
<field name="name">education.student.view.search</field>
<field name="model">education.student</field>
<field name="arch" type="xml">
<search string="Student Search">
<field name="name"
filter_domain="['|', '|', ('name', 'ilike', self), ('student_code', '=', self)" />
<field name="class_id" />
</search>
</field>
</record>
<!-- menu -->
<menuitem
id="education_student_menu_root"
name="Education Manage" />
<menuitem
id="education_student_menu"
name="Students"
action="education_student_action"
parent="education_student_menu_root" />
</odoo>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- form view -->
<record id="student_level_view_form" model="ir.ui.view">
<field name="name">student.level.form</field>
<field name="model">student.level</field>
<field name="arch" type="xml">
<form string="Student Level Form">
<sheet>
<group>
<group>
<field name="name" />
<field name="sequence" />
</group>
<group>
<field name="code" />
</group>
</group>
</sheet>
</form>
</field>
</record>
</odoo>

View File

@ -0,0 +1,24 @@
<odoo>
<data>
<!--
<template id="listing">
<ul>
<li t-foreach="objects" t-as="object">
<a t-attf-href="#{ root }/objects/#{ object.id }">
<t t-esc="object.display_name"/>
</a>
</li>
</ul>
</template>
<template id="object">
<h1><t t-esc="object.display_name"/></h1>
<dl>
<t t-foreach="object._fields" t-as="field">
<dt><t t-esc="field"/></dt>
<dd><t t-esc="object[field]"/></dd>
</t>
</dl>
</template>
-->
</data>
</odoo>

60
education/views/views.xml Normal file
View File

@ -0,0 +1,60 @@
<odoo>
<data>
<!-- explicit list view definition -->
<!--
<record model="ir.ui.view" id="school.list">
<field name="name">school list</field>
<field name="model">school.school</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="value"/>
<field name="value2"/>
</list>
</field>
</record>
-->
<!-- actions opening views on models -->
<!--
<record model="ir.actions.act_window" id="school.action_window">
<field name="name">school window</field>
<field name="res_model">school.school</field>
<field name="view_mode">list,form</field>
</record>
-->
<!-- server action to the one above -->
<!--
<record model="ir.actions.server" id="school.action_server">
<field name="name">school server</field>
<field name="model_id" ref="model_school_school"/>
<field name="state">code</field>
<field name="code">
action = {
"type": "ir.actions.act_window",
"view_mode": "list,form",
"res_model": model._name,
}
</field>
</record>
-->
<!-- Top menu item -->
<!--
<menuitem name="school" id="school.menu_root"/>
-->
<!-- menu categories -->
<!--
<menuitem name="Menu 1" id="school.menu_1" parent="school.menu_root"/>
<menuitem name="Menu 2" id="school.menu_2" parent="school.menu_root"/>
-->
<!-- actions -->
<!--
<menuitem name="List" id="school.menu_1_list" parent="school.menu_1"
action="school.action_window"/>
<menuitem name="Server to list" id="school" parent="school.menu_2"
action="school.action_server"/>
-->
</data>
</odoo>