diff --git a/music_school_institute/README.rst b/music_school_institute/README.rst new file mode 100644 index 000000000..d24b940c3 --- /dev/null +++ b/music_school_institute/README.rst @@ -0,0 +1,42 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +Music School Institute +======================= +* A Complete Solution for Music School Institute. + +Configuration +============= +* No additional configuration is needed. + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: (V16) Vishnu kp, + (V15) Sabeel B +Contact: odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: ``__ diff --git a/music_school_institute/__init__.py b/music_school_institute/__init__.py new file mode 100644 index 000000000..338d1c573 --- /dev/null +++ b/music_school_institute/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import models diff --git a/music_school_institute/__manifest__.py b/music_school_institute/__manifest__.py new file mode 100644 index 000000000..fbc3b568b --- /dev/null +++ b/music_school_institute/__manifest__.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + "name": "Music School Institute", + "version": "15.0.1.0.0", + "category": "Industries", + "summary": "Efficiently manage teachers, students, classes, attendance, " + "fees, and more with our Music School Management module. ", + "description": """Simplify music school operations with this comprehensive + Odoo module. Manage teachers and students, track attendance, handle fees, + and plan events effortlessly. Stay organized and focus on nurturing + musical talent.""", + "author": "Cybrosys Techno Solutions", + "company": "Cybrosys Techno Solutions", + "maintainer": "Cybrosys Techno Solutions", + "website": "https://www.cybrosys.com", + "depends": ["stock", "sale", "calendar", "event", "hr"], + "data": [ + "security/music_school_institute_groups.xml", + "security/music_school_institute_security.xml", + "security/ir.model.access.csv", + "views/service_type_views.xml", + "views/class_type_views.xml", + "views/res_partner_views.xml", + "views/product_template_views.xml", + "views/hr_employee_views.xml", + "views/class_lesson_views.xml", + "views/students_attendance_views.xml", + "views/music_school_institute_menus.xml", + "views/account_move_views.xml" + ], + "images": ["static/description/banner.jpg"], + "license": "LGPL-3", + "installable": True, + "auto_install": False, + "application": False, +} diff --git a/music_school_institute/doc/RELEASE_NOTES.md b/music_school_institute/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..90a03ed9c --- /dev/null +++ b/music_school_institute/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 31.07.2024 +#### Version 15.0.1.0.0 +##### ADD + +- Initial Commit for Music School Institute diff --git a/music_school_institute/models/__init__.py b/music_school_institute/models/__init__.py new file mode 100644 index 000000000..2d9840a20 --- /dev/null +++ b/music_school_institute/models/__init__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import class_lesson +from . import class_type +from . import hr_employee +from . import product_template +from . import res_partner +from . import service_type +from . import students_attendance +from . import account_move diff --git a/music_school_institute/models/account_move.py b/music_school_institute/models/account_move.py new file mode 100644 index 000000000..9588c01d4 --- /dev/null +++ b/music_school_institute/models/account_move.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sabeel B (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +from odoo import models, fields + + +class AccountMove(models.Model): + """Inherited account_move to add new fields""" + _inherit = 'account.move' + + music_class_id = fields.Many2one('class.type', + string="Music Class", + help="Own invoice relation field") diff --git a/music_school_institute/models/class_lesson.py b/music_school_institute/models/class_lesson.py new file mode 100644 index 000000000..74462dd1b --- /dev/null +++ b/music_school_institute/models/class_lesson.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class ClassLesson(models.Model): + """Class is used to represent the lessons.""" + _name = 'class.lesson' + _description = 'Class Lesson' + + name = fields.Char(string='Name', help='Name of the lesson.') + hours = fields.Char(string='Hours', help='Hours of the lesson.') + teacher_id = fields.Many2one('hr.employee', string='Teacher', + domain=[('teacher', '=', True)], + help='Teacher assigned to the lesson.') + + +class ClassLessonType(models.Model): + """Class is used to represent the lessons.""" + _name = 'class.lesson.type' + _description = 'Class Lesson Type' + + lesson_id = fields.Many2one('class.lesson', + String='Lessons', help='Choose already ' + 'created lessons') + hours = fields.Char(string='Hours', + help='Hours of the lesson.') + teacher_id = fields.Many2one('hr.employee', string='Teacher', + domain=[('teacher', '=', True)], + help='Teacher assigned to the lesson.') + relation_id = fields.Many2one('class.type', + string='Relation ID', + help='Relation to the corresponding class.') + + @api.onchange('lesson_id') + def _onchange_lesson_id(self): + """Change values according to the lesson chosen""" + if self.lesson_id: + self.hours = self.lesson_id.hours + self.teacher_id = self.lesson_id.teacher_id.id diff --git a/music_school_institute/models/class_type.py b/music_school_institute/models/class_type.py new file mode 100644 index 000000000..f7a41bfdb --- /dev/null +++ b/music_school_institute/models/class_type.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models, _ +from dateutil.relativedelta import relativedelta +from odoo.exceptions import ValidationError + + +class ClassType(models.Model): + """Class is used to create the music class records.""" + _name = 'class.type' + _description = 'Class Type' + + name = fields.Char(string='Name', help='Class name.', required=True) + from_date = fields.Date(string='From', help='Class starting date.', + required=True) + to_date = fields.Date(string='To', help='Class ending date.', required=True) + service_id = fields.Many2one('service.type', string='Services', + help='Type of service.') + instrument_id = fields.Many2one('product.product', + String='Instrument', + domain=[('music_instrument', '=', True)], + required=True, + help='Instrument used in the music class.') + teacher_id = fields.Many2one('hr.employee', string='Teacher', + domain=[('teacher', '=', True)], + required=True, + help='Teacher name.') + location = fields.Char(string='Location', help='Location of the class.') + repeats = fields.Selection(selection=[('weekly', 'Weekly'), + ('monthly', 'Monthly')], + string='Repeats', + help='Repeated days per week.') + state = fields.Selection( + selection=[('draft', 'Draft'), ('started', 'Started'), + ('completed', 'Completed'), + ('invoice', 'Invoiced'), ('canceled', 'Canceled')], + default='draft', help='State of the class.') + lesson_ids = fields.One2many('class.lesson.type', + 'relation_id', + String='Class Lessons', + help='Daily class lessons records.') + student_ids = fields.Many2many('res.partner', string='Student', + domain=[('student', '=', True)], + String='Student ID', + help='Student who joined in the class.', + required=True) + order_count = fields.Integer(compute='_compute_order_count', + String='Order Count', + help='Total count of the invoice.') + sunday = fields.Boolean(string='Sunday', help='Mark the day as a workday.') + monday = fields.Boolean(string='Monday', help='Mark the day as a workday.') + tuesday = fields.Boolean(string='Tuesday', + help='Mark the day as a workday.') + wednesday = fields.Boolean(string='Wednesday', + help='Mark the day as a workday.') + thursday = fields.Boolean(string='Thursday', + help='Mark the day as a workday.') + friday = fields.Boolean(string='Friday', help='Mark the day as a workday.') + saturday = fields.Boolean(string='Saturday', + help='Mark the day as a workday.') + company_id = fields.Many2one('res.company', string='Company', + copy=False, readonly=True, + help="Current company", + default=lambda self: self.env.company.id) + + @api.constrains('to_date', 'from_date') + def date_constrains(self): + """Validation for date fields""" + for rec in self: + if rec.to_date < rec.from_date: + raise ValidationError( + _('Sorry, To Date Must be greater Than From Date...')) + + def _compute_duration(self): + """Function used to compute the days between the from and to date.""" + for records in self: + if records.from_date and records.to_date: + true_days = [] + daily_hours = sum(int(rec.hours) for rec in records.lesson_ids) + if records.repeats == 'weekly': + if records.sunday: + true_days.append('Sunday') + if records.monday: + true_days.append('Monday') + if records.tuesday: + true_days.append('Tuesday') + if records.wednesday: + true_days.append('Wednesday') + if records.thursday: + true_days.append('Thursday') + if records.friday: + true_days.append('Friday') + if records.saturday: + true_days.append('Saturday') + return len(true_days) * daily_hours + elif records.repeats == 'monthly': + delta = relativedelta(records.to_date, records.from_date) + months_difference = delta.years * 12 + delta.months + return int(months_difference) * daily_hours + else: + return daily_hours + + def action_button_class_start(self): + """Change the corresponding class state to start.""" + self.write({'state': 'started'}) + + def action_button_set_to_draft(self): + """Change the corresponding class state to draft.""" + self.write({'state': 'draft'}) + + def action_button_class_cancel(self): + """Change the corresponding class state to cancel.""" + self.write({'state': 'canceled'}) + + def action_button_class_completed(self): + """Change the corresponding class state to complete.""" + self.write({'state': 'completed'}) + + def action_button_create_order(self): + """Button to create the invoice.""" + for student in self.student_ids: + self.env['account.move'].create([ + {'move_type': 'out_invoice', + 'partner_id': student.id, + 'invoice_date': self.from_date, + 'music_class_id': self.id, + 'invoice_line_ids': [(0, 0, { + 'product_id': self.instrument_id.id, + 'price_unit': self.instrument_id.lst_price, + 'quantity': int(self._compute_duration())})]}]) + self.write({'state': 'invoice'}) + + def related_order(self): + """Related invoice in smart button.""" + return { + 'type': 'ir.actions.act_window', + 'name': 'Invoices', + 'view_mode': 'tree,form', + 'res_model': 'account.move', + 'domain': [('music_class_id', '=', self.id)], + 'context': {'create': False}} + + def _compute_order_count(self): + """To compute the total count of the invoice.""" + for record in self: + record.order_count = self.env['account.move'].search_count( + [('music_class_id', '=', self.id)]) diff --git a/music_school_institute/models/hr_employee.py b/music_school_institute/models/hr_employee.py new file mode 100644 index 000000000..816d7cf60 --- /dev/null +++ b/music_school_institute/models/hr_employee.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class HrEmployee(models.Model): + """Model used to create the records of teacher.""" + _inherit = 'hr.employee' + + teacher = fields.Boolean(string='Is Teacher', help='Used to mark the ' + 'employee as a teacher.') diff --git a/music_school_institute/models/product_template.py b/music_school_institute/models/product_template.py new file mode 100644 index 000000000..42c76cf9c --- /dev/null +++ b/music_school_institute/models/product_template.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ProductTemplate(models.Model): + """Model used to product template as an instrument.""" + _inherit = "product.template" + + music_instrument = fields.Boolean(string='Music Instrument', + help='Enable the boolean consider' + ' as instrument.') + event_ticket = fields.Boolean(string='Event Ticket', + help='Used to mark the contact as a student.') diff --git a/music_school_institute/models/res_partner.py b/music_school_institute/models/res_partner.py new file mode 100644 index 000000000..b8bc9ace9 --- /dev/null +++ b/music_school_institute/models/res_partner.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ResPartner(models.Model): + """Model for adding details about the students in contact module.""" + _inherit = 'res.partner' + + student = fields.Boolean(string='Is Student', + help='Used to mark the contact as a student.') + class_id = fields.Many2one('class.type', string='Joined Class', + help='Relation field use to connect the class ' + 'type to the contact.') + attendance_count = fields.Integer(String='Attendance Count', + compute='_compute_attendance_count', + help='Attendance count displaying field.') + student_type = fields.Selection( + [('part_time', 'Part Time'), ('full_time', 'Full Time')], + string='Course Mode', + help='Field used to define the student selected class type.') + + def class_attendance_view(self): + """Function used to view the student attendance.""" + return { + 'type': 'ir.actions.act_window', + 'name': 'class', + 'view_mode': 'tree', + 'res_model': 'students.attendance', + 'domain': [ + ('student_id', '=', self.id)], + 'context': "{'create': False}"} + + def _compute_attendance_count(self): + """Function used to count the attendance.""" + for record in self: + record.attendance_count = self.env[ + 'students.attendance'].search_count( + [('student_id', '=', record.id), + ('attendance', '=', 'present')]) diff --git a/music_school_institute/models/service_type.py b/music_school_institute/models/service_type.py new file mode 100644 index 000000000..3aaa623c5 --- /dev/null +++ b/music_school_institute/models/service_type.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ServiceType(models.Model): + """Service type model and the fields are used to create the service.""" + _name = 'service.type' + _description = 'Service Type' + + name = fields.Char(string='Name', help='Name of the service.', + required=True) + instrument_id = fields.Many2one('product.product', + String='Instrument', + domain=[('music_instrument', '=', True)], + required=True, + help='Instrument used in the ' + 'service.') + teacher_id = fields.Many2one('hr.employee', string='Teacher', + domain=[('teacher', '=', True)], + help='Teacher assigned to the lesson.') diff --git a/music_school_institute/models/students_attendance.py b/music_school_institute/models/students_attendance.py new file mode 100644 index 000000000..610bdaa35 --- /dev/null +++ b/music_school_institute/models/students_attendance.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class StudentsAttendance(models.Model): + """Model used to create the records of attendance.""" + _name = "students.attendance" + _description = 'Students Attendance' + _rec_name = 'student_id' + + student_id = fields.Many2one('res.partner', string='Students', + domain=[('student', '=', True)], + help="Name of the student.", required=True) + attendance = fields.Selection([('present', 'Present'), + ('absent', 'Absent')], string='Attendance', + help="Attendance selection field.") + date = fields.Date(string='Date', default=fields.Date.today(), + help='Date of the student attendance.') + company_id = fields.Many2one('res.company', string='Company', + copy=False, readonly=True, + help="Current company", + default=lambda self: self.env.company.id) diff --git a/music_school_institute/security/ir.model.access.csv b/music_school_institute/security/ir.model.access.csv new file mode 100644 index 000000000..2248faa09 --- /dev/null +++ b/music_school_institute/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_classes_type_user,access.class.type.user,model_class_type,base.group_user,1,1,1,1 +access_services_type_user,access.service.type.user,model_service_type,base.group_user,1,1,1,1 +access_class_lesson_user,access.class.lesson.user,model_class_lesson,base.group_user,1,1,1,1 +access_class_lesson_type_user,access.class.lesson.type.user,model_class_lesson_type,base.group_user,1,1,1,1 +access_students_attendance_user,access.students.attendance.user,model_students_attendance,base.group_user,1,1,1,1 diff --git a/music_school_institute/security/music_school_institute_groups.xml b/music_school_institute/security/music_school_institute_groups.xml new file mode 100644 index 000000000..f938b5756 --- /dev/null +++ b/music_school_institute/security/music_school_institute_groups.xml @@ -0,0 +1,16 @@ + + + + + + Music School + 0 + + + + School Manager + + + + diff --git a/music_school_institute/security/music_school_institute_security.xml b/music_school_institute/security/music_school_institute_security.xml new file mode 100644 index 000000000..0f1d33652 --- /dev/null +++ b/music_school_institute/security/music_school_institute_security.xml @@ -0,0 +1,22 @@ + + + + + + Students Attendance multi-company + + + ['|', ('company_id', 'in', company_ids), + ('company_id', '=', False)] + + + + Class Type multi-company + + + ['|', ('company_id', 'in', company_ids), + ('company_id', '=', False)] + + + + \ No newline at end of file diff --git a/music_school_institute/static/description/assets/icons/check.png b/music_school_institute/static/description/assets/icons/check.png new file mode 100644 index 000000000..ea0da5029 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/check.png differ diff --git a/music_school_institute/static/description/assets/icons/chevron.png b/music_school_institute/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..f49dd8541 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/chevron.png differ diff --git a/music_school_institute/static/description/assets/icons/cogs.png b/music_school_institute/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/cogs.png differ diff --git a/music_school_institute/static/description/assets/icons/consultation.png b/music_school_institute/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/music_school_institute/static/description/assets/icons/consultation.png differ diff --git a/music_school_institute/static/description/assets/icons/ecom-black.png b/music_school_institute/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/ecom-black.png differ diff --git a/music_school_institute/static/description/assets/icons/education-black.png b/music_school_institute/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/music_school_institute/static/description/assets/icons/education-black.png differ diff --git a/music_school_institute/static/description/assets/icons/hotel-black.png b/music_school_institute/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/music_school_institute/static/description/assets/icons/hotel-black.png differ diff --git a/music_school_institute/static/description/assets/icons/icon.png b/music_school_institute/static/description/assets/icons/icon.png new file mode 100644 index 000000000..61b0eb171 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/icon.png differ diff --git a/music_school_institute/static/description/assets/icons/license.png b/music_school_institute/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/music_school_institute/static/description/assets/icons/license.png differ diff --git a/music_school_institute/static/description/assets/icons/lifebuoy.png b/music_school_institute/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/music_school_institute/static/description/assets/icons/lifebuoy.png differ diff --git a/music_school_institute/static/description/assets/icons/logo.png b/music_school_institute/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/music_school_institute/static/description/assets/icons/logo.png differ diff --git a/music_school_institute/static/description/assets/icons/manufacturing-black.png b/music_school_institute/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/music_school_institute/static/description/assets/icons/manufacturing-black.png differ diff --git a/music_school_institute/static/description/assets/icons/pos-black.png b/music_school_institute/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/pos-black.png differ diff --git a/music_school_institute/static/description/assets/icons/puzzle.png b/music_school_institute/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/puzzle.png differ diff --git a/music_school_institute/static/description/assets/icons/restaurant-black.png b/music_school_institute/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/restaurant-black.png differ diff --git a/music_school_institute/static/description/assets/icons/service-black.png b/music_school_institute/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/music_school_institute/static/description/assets/icons/service-black.png differ diff --git a/music_school_institute/static/description/assets/icons/trading-black.png b/music_school_institute/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/music_school_institute/static/description/assets/icons/trading-black.png differ diff --git a/music_school_institute/static/description/assets/icons/training.png b/music_school_institute/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/music_school_institute/static/description/assets/icons/training.png differ diff --git a/music_school_institute/static/description/assets/icons/update.png b/music_school_institute/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/music_school_institute/static/description/assets/icons/update.png differ diff --git a/music_school_institute/static/description/assets/icons/user.png b/music_school_institute/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/music_school_institute/static/description/assets/icons/user.png differ diff --git a/music_school_institute/static/description/assets/icons/wrench.png b/music_school_institute/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/music_school_institute/static/description/assets/icons/wrench.png differ diff --git a/music_school_institute/static/description/assets/modules/budget_image.png b/music_school_institute/static/description/assets/modules/budget_image.png new file mode 100644 index 000000000..b50130c7d Binary files /dev/null and b/music_school_institute/static/description/assets/modules/budget_image.png differ diff --git a/music_school_institute/static/description/assets/modules/credit_image.png b/music_school_institute/static/description/assets/modules/credit_image.png new file mode 100644 index 000000000..3ad04ecfd Binary files /dev/null and b/music_school_institute/static/description/assets/modules/credit_image.png differ diff --git a/music_school_institute/static/description/assets/modules/employee_image.png b/music_school_institute/static/description/assets/modules/employee_image.png new file mode 100644 index 000000000..30ad58232 Binary files /dev/null and b/music_school_institute/static/description/assets/modules/employee_image.png differ diff --git a/music_school_institute/static/description/assets/modules/export_image.png b/music_school_institute/static/description/assets/modules/export_image.png new file mode 100644 index 000000000..492980ad0 Binary files /dev/null and b/music_school_institute/static/description/assets/modules/export_image.png differ diff --git a/music_school_institute/static/description/assets/modules/gantt_image.png b/music_school_institute/static/description/assets/modules/gantt_image.png new file mode 100644 index 000000000..1ae7cfe3b Binary files /dev/null and b/music_school_institute/static/description/assets/modules/gantt_image.png differ diff --git a/music_school_institute/static/description/assets/modules/quotation_image.png b/music_school_institute/static/description/assets/modules/quotation_image.png new file mode 100644 index 000000000..499b1a72f Binary files /dev/null and b/music_school_institute/static/description/assets/modules/quotation_image.png differ diff --git a/music_school_institute/static/description/assets/screenshots/hero.gif b/music_school_institute/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..0e3871d51 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/hero.gif differ diff --git a/music_school_institute/static/description/assets/screenshots/ins_1.png b/music_school_institute/static/description/assets/screenshots/ins_1.png new file mode 100644 index 000000000..294c6cb10 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/ins_1.png differ diff --git a/music_school_institute/static/description/assets/screenshots/ins_2.png b/music_school_institute/static/description/assets/screenshots/ins_2.png new file mode 100644 index 000000000..db531a532 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/ins_2.png differ diff --git a/music_school_institute/static/description/assets/screenshots/lssns.png b/music_school_institute/static/description/assets/screenshots/lssns.png new file mode 100644 index 000000000..172fce156 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/lssns.png differ diff --git a/music_school_institute/static/description/assets/screenshots/scrn_001.png b/music_school_institute/static/description/assets/screenshots/scrn_001.png new file mode 100644 index 000000000..716dfb9de Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/scrn_001.png differ diff --git a/music_school_institute/static/description/assets/screenshots/scrn_002.png b/music_school_institute/static/description/assets/screenshots/scrn_002.png new file mode 100644 index 000000000..7ffe7c8b3 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/scrn_002.png differ diff --git a/music_school_institute/static/description/assets/screenshots/scrn_003.png b/music_school_institute/static/description/assets/screenshots/scrn_003.png new file mode 100644 index 000000000..2872d8c97 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/scrn_003.png differ diff --git a/music_school_institute/static/description/assets/screenshots/scrn_004.png b/music_school_institute/static/description/assets/screenshots/scrn_004.png new file mode 100644 index 000000000..622b2309e Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/scrn_004.png differ diff --git a/music_school_institute/static/description/assets/screenshots/scrn_005.png b/music_school_institute/static/description/assets/screenshots/scrn_005.png new file mode 100644 index 000000000..60b7c3721 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/scrn_005.png differ diff --git a/music_school_institute/static/description/assets/screenshots/services.png b/music_school_institute/static/description/assets/screenshots/services.png new file mode 100644 index 000000000..d977c3542 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/services.png differ diff --git a/music_school_institute/static/description/assets/screenshots/services_2.png b/music_school_institute/static/description/assets/screenshots/services_2.png new file mode 100644 index 000000000..49e5fad8e Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/services_2.png differ diff --git a/music_school_institute/static/description/assets/screenshots/std_1.png b/music_school_institute/static/description/assets/screenshots/std_1.png new file mode 100644 index 000000000..6ee4f8522 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/std_1.png differ diff --git a/music_school_institute/static/description/assets/screenshots/std_2.png b/music_school_institute/static/description/assets/screenshots/std_2.png new file mode 100644 index 000000000..43172d286 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/std_2.png differ diff --git a/music_school_institute/static/description/assets/screenshots/tch_1.png b/music_school_institute/static/description/assets/screenshots/tch_1.png new file mode 100644 index 000000000..460115088 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/tch_1.png differ diff --git a/music_school_institute/static/description/assets/screenshots/tch_2.png b/music_school_institute/static/description/assets/screenshots/tch_2.png new file mode 100644 index 000000000..ef78ec98b Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/tch_2.png differ diff --git a/music_school_institute/static/description/assets/screenshots/tch_3.png b/music_school_institute/static/description/assets/screenshots/tch_3.png new file mode 100644 index 000000000..49f5b2513 Binary files /dev/null and b/music_school_institute/static/description/assets/screenshots/tch_3.png differ diff --git a/music_school_institute/static/description/banner.jpg b/music_school_institute/static/description/banner.jpg new file mode 100644 index 000000000..31e18ce6e Binary files /dev/null and b/music_school_institute/static/description/banner.jpg differ diff --git a/music_school_institute/static/description/cybro_logo.png b/music_school_institute/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/music_school_institute/static/description/cybro_logo.png differ diff --git a/music_school_institute/static/description/icon.png b/music_school_institute/static/description/icon.png new file mode 100644 index 000000000..7d502f845 Binary files /dev/null and b/music_school_institute/static/description/icon.png differ diff --git a/music_school_institute/static/description/index.html b/music_school_institute/static/description/index.html new file mode 100644 index 000000000..a7367dca9 --- /dev/null +++ b/music_school_institute/static/description/index.html @@ -0,0 +1,692 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+
+

+ Music School Institute

+
+

+ A Module For Managing Music School +

+ +
+
+ +
+
+

+ Explore this module

+ +
+
+
+ +
+
+

+ Overview

+
+

+ Music School institute is a core module which can manage any type of music school. + The user can download the module and manage the music school with lots of different class. + It can be used to manage music school event, product, students, and teacher. +

+
+
+ +
+
+

+ Features

+
+
+
+
+ +

Class Management

+ Can Manage Different Class. +
+ +
+ +

Students Management

+ Easily add Student to the class and can view part-time and full time students. +
+ +
+ +

Teachers Management

+ Easily manage your Teachers records. +
+
+
+
+ +

Informative Form Page +

+ Class related order count is visible and can see the invoice. +
+ +
+ +

Attendance +

+ Easy way to add attendance of the students and can issue invoice based on the attendance. +
+
+
+
+
+ + +
+
+

+ Screenshots

+
+
+
+ +

Can Manage The Teachers

+
+ + + +
+
+
+ +

Can Manage Students

+

Users can manage students according to their course type

+
+ + +
+
+
+ +

Instruments Management.

+
+ + + +
+
+
+ +

Lessons

+
+ +
+
+
+ +

Services

+
+ + +
+ +
+
+ +

Attendance

+
+

+ Can add students attendance to the program. +

+ +
+ +
+
+ +

Class

+
+

+ We can add the details including Students, start and end date, state etc. +

+ +
+ +
+
+ +

Class Dashboard View.

+
+ +
+
+
+ +

Events Management

+
+ +
+ +
+
+
+ + + +
+
+

+ Suggested Products

+
+ + +
+ + + +
+
+
+

+ Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

+ Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

+ Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
diff --git a/music_school_institute/views/account_move_views.xml b/music_school_institute/views/account_move_views.xml new file mode 100644 index 000000000..78c3b0e7c --- /dev/null +++ b/music_school_institute/views/account_move_views.xml @@ -0,0 +1,15 @@ + + + + + account.move.form.inherit.music.institute + Account Invoice + account.move + + + + + + + + diff --git a/music_school_institute/views/class_lesson_views.xml b/music_school_institute/views/class_lesson_views.xml new file mode 100644 index 000000000..dd0a44afc --- /dev/null +++ b/music_school_institute/views/class_lesson_views.xml @@ -0,0 +1,75 @@ + + + + + Lessons + class.lesson + tree,form,kanban + + + + class.lesson.view.form + class.lesson + +
+ + +
+
+
+ + + + +
+
+
+
+ + + class.lesson.view.tree + class.lesson + + + + + + + + + + + class.lesson.view.kanban + class.lesson + + + + +
+
+ + Lesson: + + +
+
+ Hours: + +
+
+ Teacher: + +
+
+
+
+
+
+
+
+
+
diff --git a/music_school_institute/views/class_type_views.xml b/music_school_institute/views/class_type_views.xml new file mode 100644 index 000000000..0fcf72762 --- /dev/null +++ b/music_school_institute/views/class_type_views.xml @@ -0,0 +1,164 @@ + + + + + Class + class.type + tree,form,kanban,calendar + + + + class.type.view.form + class.type + +
+
+
+ +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + class.type.view.tree + class.type + + + + + + + + + + + + class.type.view.calendar + class.type + + + + + + + + + + class.type.view.kanban + class.type + + + + +
+
+ + Class: + + +
+ + Service: + + +
+ From date: + +
+
+ To date: + +
+
+ +
+
+ + Teacher: + + +
+
+
+
+
+
+
+
+
+
diff --git a/music_school_institute/views/hr_employee_views.xml b/music_school_institute/views/hr_employee_views.xml new file mode 100644 index 000000000..49180481d --- /dev/null +++ b/music_school_institute/views/hr_employee_views.xml @@ -0,0 +1,24 @@ + + + + + Teachers + [('teacher','=', True)] + {'default_teacher':True} + hr.employee + kanban,tree,form + + + + + hr.employee.view.form.inherit.music.school.management + + hr.employee + + + + + + + + diff --git a/music_school_institute/views/music_school_institute_menus.xml b/music_school_institute/views/music_school_institute_menus.xml new file mode 100644 index 000000000..40d2e39ce --- /dev/null +++ b/music_school_institute/views/music_school_institute_menus.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/music_school_institute/views/product_template_views.xml b/music_school_institute/views/product_template_views.xml new file mode 100644 index 000000000..2b2d664d0 --- /dev/null +++ b/music_school_institute/views/product_template_views.xml @@ -0,0 +1,29 @@ + + + + + + product.template.view.form.inherit.music.school.management + + product.template + + + + + + + + + + + + + Instruments + [('music_instrument','=', True)] + {'default_music_instrument':True} + product.template + kanban,tree,form + + diff --git a/music_school_institute/views/res_partner_views.xml b/music_school_institute/views/res_partner_views.xml new file mode 100644 index 000000000..b165dbb7d --- /dev/null +++ b/music_school_institute/views/res_partner_views.xml @@ -0,0 +1,61 @@ + + + + + Students + [('student','=', True)] + {'default_student':True} + res.partner + kanban,tree,form + + + + Part Time + [('student_type','=', 'part_time')] + {'default_student':True ,'default_student_type':'part_time' } + res.partner + kanban,tree,form + + + + Full Time + [('student_type','=', 'full_time')] + {'default_student':True, 'default_student_type':'full_time' } + res.partner + kanban,tree,form + + + + + res.partner.view.form.inherit.music.school.management + + res.partner + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
diff --git a/music_school_institute/views/service_type_views.xml b/music_school_institute/views/service_type_views.xml new file mode 100644 index 000000000..e395d6033 --- /dev/null +++ b/music_school_institute/views/service_type_views.xml @@ -0,0 +1,44 @@ + + + + + Services + service.type + tree,form + + + + service.type.view.form + service.type + +
+ + +
+
+
+ + + + +
+
+
+
+ + + service.type.view.tree + service.type + + + + + + + + +
diff --git a/music_school_institute/views/students_attendance_views.xml b/music_school_institute/views/students_attendance_views.xml new file mode 100644 index 000000000..f87879282 --- /dev/null +++ b/music_school_institute/views/students_attendance_views.xml @@ -0,0 +1,38 @@ + + + + + Attendance + students.attendance + tree,form,kanban + + + + students.attendance.view.form + students.attendance + +
+ + + + + + + +
+
+
+ + + students.attendance.view.tree + students.attendance + + + + + + + + +
\ No newline at end of file