diff --git a/education_fee/README.rst b/education_fee/README.rst new file mode 100644 index 000000000..034746440 --- /dev/null +++ b/education_fee/README.rst @@ -0,0 +1,51 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Educational Fee Management +========================== +Education fee is the core module of Educational ERP software,' a management application for effective school run . + +Configuration +============= +No additional configuration required + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +Affero General Public License v3.0 (AGPL v3) +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------ +Developer : (V15) Akhilesh N S, + (V17) Jumana Haseen, + (V18) Gayathri V + +Contact : odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://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 `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/education_fee/__init__.py b/education_fee/__init__.py new file mode 100644 index 000000000..d62d859c1 --- /dev/null +++ b/education_fee/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (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 . import models diff --git a/education_fee/__manifest__.py b/education_fee/__manifest__.py new file mode 100644 index 000000000..6bcc55d73 --- /dev/null +++ b/education_fee/__manifest__.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 . +# +################################################################################ +{ + "name": "Educational Fee Management", + "version": '18.0.1.0.0', + "category": 'Industries', + 'summary': """Education fee is the core module of Educational ERP software, + a management application for effective school run .""", + 'description': """Education fee provides a comprehensive student fee + management solution to automate, streamline and transform fee processing + in educational institutions.""", + "author": "Cybrosys Techno Solutions", + "company": "Cybrosys Techno Solutions", + 'maintainer': 'Cybrosys Techno Solutions', + "website": "http://www.educationalerp.com", + "depends": ['account', 'education_core',], + "data": [ + 'security/ir.model.access.csv', + 'views/education_fee_structure_menu_views.xml', + 'views/account_move_views.xml', + 'views/education_fee_structure_views.xml', + 'views/education_fee_type_views.xml', + 'views/education_fee_category_views.xml', + 'views/account_journal_templates.xml', + 'views/account_journal_views.xml', + ], + 'demo': [ + 'demo/account_account_demo.xml', + 'demo/account_journal_demo.xml', + 'demo/education_fee_category_demo.xml', + 'demo/education_fee_structure_demo.xml', + 'demo/education_fee_type_demo.xml', + 'demo/education_fee_structure_lines_demo.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + "installable": True, + "auto_install": False, + 'application': True, +} diff --git a/education_fee/demo/account_account_demo.xml b/education_fee/demo/account_account_demo.xml new file mode 100644 index 000000000..935edfd65 --- /dev/null +++ b/education_fee/demo/account_account_demo.xml @@ -0,0 +1,29 @@ + + + + + + 100110 + Institutional Fee + + income + + + 111110 + Hostel Fee + + income + + + 120110 + Transportation Fee + + income + + + 20011014 + Other Fee + income + + + diff --git a/education_fee/demo/account_journal_demo.xml b/education_fee/demo/account_journal_demo.xml new file mode 100644 index 000000000..e7b6954a7 --- /dev/null +++ b/education_fee/demo/account_journal_demo.xml @@ -0,0 +1,39 @@ + + + + + + Institutional Fee + sale + IFEE + + + True + + + Hostel Fee + sale + + HFEE + + True + + + Transportations Fee + sale + + TFEE + + True + + + Other Fee + sale + + OFEE + + True + + + diff --git a/education_fee/demo/education_fee_category_demo.xml b/education_fee/demo/education_fee_category_demo.xml new file mode 100644 index 000000000..7b93c5c81 --- /dev/null +++ b/education_fee/demo/education_fee_category_demo.xml @@ -0,0 +1,17 @@ + + + + + + Institutional + + 1 + + + + Transportation + + 0 + + + diff --git a/education_fee/demo/education_fee_structure_demo.xml b/education_fee/demo/education_fee_structure_demo.xml new file mode 100644 index 000000000..75cc49fd7 --- /dev/null +++ b/education_fee/demo/education_fee_structure_demo.xml @@ -0,0 +1,12 @@ + + + + + + + 21000 + Nursery and Reception + + + + diff --git a/education_fee/demo/education_fee_structure_lines_demo.xml b/education_fee/demo/education_fee_structure_lines_demo.xml new file mode 100644 index 000000000..ae2d5d798 --- /dev/null +++ b/education_fee/demo/education_fee_structure_lines_demo.xml @@ -0,0 +1,22 @@ + + + + + + + + onetime + Admission Fee + One time + 1000 + + + + + peryear + Tuition Fee + Annually + 1500 + + + diff --git a/education_fee/demo/education_fee_type_demo.xml b/education_fee/demo/education_fee_type_demo.xml new file mode 100644 index 000000000..2bf686f81 --- /dev/null +++ b/education_fee/demo/education_fee_type_demo.xml @@ -0,0 +1,22 @@ + + + + + + Tuition Fee + Annually + peryear + The Fee which has to be remitted in institution as tuition fee + 1500 + + + + Admission Fee + One time + onetime + The Fee which has to be remitted in institution when joining + 1000 + + + + diff --git a/education_fee/doc/RELEASE_NOTES.md b/education_fee/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..6cdee7200 --- /dev/null +++ b/education_fee/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 27.12.2024 +#### Version 18.0.1.0.0 +##### ADD +- Initial commit for Educational Fee Management diff --git a/education_fee/models/__init__.py b/education_fee/models/__init__.py new file mode 100644 index 000000000..0f3f05fbd --- /dev/null +++ b/education_fee/models/__init__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 . import account_journal +from . import account_move +from . import account_move_line +from . import education_fee_category +from . import education_fee_structure +from . import education_fee_structure_lines +from . import education_fee_type diff --git a/education_fee/models/account_journal.py b/education_fee/models/account_journal.py new file mode 100644 index 000000000..1c5d1e1ea --- /dev/null +++ b/education_fee/models/account_journal.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 fields, models + + +class AccountJournal(models.Model): + """Inherited 'account.journal' model""" + _inherit = 'account.journal' + + is_fee = fields.Boolean(string='Is Educational fee?', + help="Whether educational fee or not.") + + def action_create_new_fee(self): + """Function to return receipt form with details""" + view = self.env.ref('education_fee.receipt_form') + context = self._context.copy() + context.update({'journal_id': self.id, 'default_journal_id': self.id}) + context.update({'default_move_type': 'out_invoice'}) + return { + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': 'account.move', + 'view_id': view.id, + 'context': context, + } diff --git a/education_fee/models/account_move.py b/education_fee/models/account_move.py new file mode 100644 index 000000000..f85b72e94 --- /dev/null +++ b/education_fee/models/account_move.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 . +# +################################################################################ +import datetime +from odoo import api, fields, models + + +class AccountMove(models.Model): + """Inherited model 'account.move' """ + _inherit = 'account.move' + + @api.onchange('fee_structure_id') + def _onchange_fee_structure(self): + """Set default fee lines based on selected fee structure""" + for item in self: + lines = [] + for line in item.fee_structure_id.fee_type_ids: + name = line.fee_type_id.product_variant_id.description_sale + if not name: + name = line.fee_type_id.product_variant_id.name + fee_line = { + 'price_unit': line.fee_amount, + 'quantity': 1.00, + 'product_id': line.fee_type_id.product_variant_id, + 'name': name, + 'account_id': item.journal_id.default_account_id + } + lines.append((0, 0, fee_line)) + item.invoice_line_ids = lines + + @api.onchange('student_id', 'fee_category_id', 'payed_from_date', + 'payed_to_date') + def _onchange_student_id(self): + """Student_id is inherited from res_partner. Set partner_id from + student_id """ + self.ensure_one() + lines = [] + for item in self: + item.invoice_line_ids = lines + item.partner_id = item.student_id.partner_id + item.class_division_id = item.student_id.class_division_id + date_today = datetime.date.today() + company = self.env.user.company_id + from_date = item.payed_from_date + to_date = item.payed_to_date + if not from_date: + from_date = company.compute_fiscalyear_dates(date_today)[ + 'date_from'] + if not to_date: + to_date = date_today + if item.partner_id and item.fee_category_id: + invoice_ids = self.env['account.move'].search([ + ('partner_id', '=', item.partner_id.id), + ('invoice_date', '>=', from_date), + ('invoice_date', '<=', to_date), + ('fee_category_id', '=', item.fee_category_id.id)]) + for invoice in invoice_ids: + for line in invoice.invoice_line_ids: + fee_line = { + 'price_unit': line.price_unit, + 'quantity': line.quantity, + 'product_id': line.product_id, + 'price_subtotal': line.price_subtotal, + 'tax_ids': line.tax_ids, + 'discount': line.discount, + 'receipt_no': line.move_name, + 'date': line.move_id.invoice_date, + } + lines.append((0, 0, fee_line)) + item.payed_line_ids = lines + + @api.onchange('fee_category_id') + def _onchange_fee_category_id(self): + """ Set domain for fee structure based on category""" + self.invoice_line_ids = None + return { + 'domain': { + 'fee_structure_id': [ + ('category_id', '=', self.fee_category_id.id)] + + } + } + + @api.onchange('fee_category_id') + def _onchange_fee_category_id(self): + """Function to get category details""" + for item in self: + if item.fee_category_id: + line = self.fee_category_id.journal_id + item.journal_id = line + + journal_id = fields.Many2one('account.journal', string='Journal', + required=True, help="Corresponding journal " + " stores every details of " + "your transaction.") + student_id = fields.Many2one('education.student', + string='Admission No', help='Student admission' + ' number.') + student_name = fields.Char(string='Name', + related='student_id.partner_id.name', store=True, + help='Name of student.') + class_division_id = fields.Many2one('education.class.division', + string='Class', help='Class of the' + ' student.') + fee_structure_id = fields.Many2one('education.fee.structure', + string='Fee Structure', + help='Fee structure') + is_fee = fields.Boolean(string='Is Fee', store=True, default=False, + help='Fees boolean to specify whether fee or not.') + fee_category_id = fields.Many2one('education.fee.category', + string='Category', + help='Category of fees.') + is_fee_structure = fields.Boolean(string='Have a fee structure?', + related='fee_category_id.fee_structure', + help='Whether fee structure exists.') + payed_line_ids = fields.One2many('account.move.line', 'partner_id', + string='Payments Done', + readonly=True, store=False, + help='Payment lines.') + payed_from_date = fields.Date(string='From Date', + help='From date corresponding to the payment') + payed_to_date = fields.Date(string='To Date', + help='To date corresponding to the payment') + account_id = fields.Many2one('account.account', string='Account', + index=True, ondelete="cascade", + domain="[('deprecated', '=', False)," + " ('company_id', '=', 'company_id')" + ",('is_off_balance', '=', False)]", + check_company=True, + tracking=True, help='Account of ' + 'transaction.') + partner_id = fields.Many2one('res.partner', + string='Partner', help='Partner responsible.') + + @api.model + def create(self, vals): + """ Adding two field to invoice. is_fee use to display fee items only + in fee tree view""" + partner = self.env['res.partner'].browse(vals.get('partner_id')) + if vals.get('fee_category_id'): + vals.update({ + 'is_fee': True, + 'student_name': partner.name + }) + return super().create(vals) diff --git a/education_fee/models/account_move_line.py b/education_fee/models/account_move_line.py new file mode 100644 index 000000000..7e5f63e6e --- /dev/null +++ b/education_fee/models/account_move_line.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 api, fields, models + + +class AccountMoveLine(models.Model): + """Inheriting model 'account.move.line'""" + _inherit = 'account.move.line' + + manual = fields.Boolean(string="Manual", help="True for manual", + default=True) + date = fields.Date(string='Date', help="Date of payment", readonly=True) + receipt_no = fields.Char(string='Receipt No', + help="Uniquely identifies the payment") + + @api.onchange('product_id') + def _get_category_domain(self): + """Set domain for invoice lines depend on selected category""" + if self.move_id.fee_category_id: + fee_types = self.env['education.fee.type'].search( + [('category_id', '=', self.move_id.fee_category_id.id)]) + fee_list = [] + for fee in fee_types: + fee_list.append(fee.product_variant_id.id) + vals = { + 'domain': { + 'product_id': [('id', 'in', tuple(fee_list))] + } + } + return vals diff --git a/education_fee/models/education_fee_category.py b/education_fee/models/education_fee_category.py new file mode 100644 index 000000000..906e951a3 --- /dev/null +++ b/education_fee/models/education_fee_category.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 fields, models + + +class EducationFeeCategory(models.Model): + """Creating model 'education.fee.category' and adding fields""" + _name = 'education.fee.category' + _description = 'Education Fee Category' + + name = fields.Char(string='Name', required=True, + help='Create a fee category suitable for your ' + 'institution. Like Institutional, Hostel, ' + 'Transportation, Arts and Sports, etc') + journal_id = fields.Many2one('account.journal', + string='Journal', required=True, + help='Setting up of unique journal for each ' + 'category help to distinguish ' + 'account entries of each category ') + fee_structure = fields.Boolean(string='Have a Fee Structure?', + required=True, + help='If any fee structure want to be ' + 'included in this category ' + 'you must click here.' + 'For an example Institution ' + 'category have different kind of' + ' fee structures ' + 'for different syllabuses') diff --git a/education_fee/models/education_fee_structure.py b/education_fee/models/education_fee_structure.py new file mode 100644 index 000000000..6e92fa3d1 --- /dev/null +++ b/education_fee/models/education_fee_structure.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 api, fields, models + + +class EducationFeeStructure(models.Model): + """Creating model 'education.fee.structure'""" + _name = 'education.fee.structure' + _description = 'Education Fee Structure' + _rec_name = 'fee_structure_name' + + @api.depends('fee_type_ids.fee_amount') + def compute_total(self): + self.amount_total = sum(line.fee_amount for line in self.fee_type_ids) + + company_currency_id = fields.Many2one('res.currency', + string='Company Currency', + compute='get_company_id', + readonly=True, related_sudo=False, + help='Company currency') + fee_structure_name = fields.Char(string='Name', required=True, + help='Name of fee structure') + fee_type_ids = fields.One2many('education.fee.structure.lines', + 'fee_structure_id', + string='Fee Types', help='Specify the ' + 'fee types.') + comment = fields.Text(string='Additional Information', + help="Additional information regarding the fee" + " structure") + academic_year_id = fields.Many2one('education.academic.year', + string='Academic Year', required=True, + help='Mention the academic year.') + expire = fields.Boolean(string='Expire', + help='Expired or not') + amount_total = fields.Float(string='Amount', + currency_field='company_currency_id', + required=True, compute='compute_total', + help='Total amount') + category_id = fields.Many2one('education.fee.category', + string='Category', required=True, + default=lambda self: self.env[ + 'education.fee.category'].search([], + limit=1), + domain=[('fee_structure', '=', True)], + help='Fees category.') diff --git a/education_fee/models/education_fee_structure_lines.py b/education_fee/models/education_fee_structure_lines.py new file mode 100644 index 000000000..e19f00362 --- /dev/null +++ b/education_fee/models/education_fee_structure_lines.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 api, fields, models + + +class EducationFeeStructureLines(models.Model): + """Creating model 'education.fee.structure.lines'""" + _name = 'education.fee.structure.lines' + _description = 'Education Fee Structure Lines' + + @api.onchange('fee_type_id') + def _onchange_fee_type(self): + """Function to return Fee type ids""" + return { + 'domain': { + 'fee_type_id': [('category_id', '=', + self.fee_structure_id.category_id.id)] + } + } + + fee_type_id = fields.Many2one('education.fee.type', string='Fee', + required=True, + help='Fee Type of fee structure') + fee_structure_id = fields.Many2one('education.fee.structure', + string='Fee Structure', + ondelete='cascade', index=True, + help='Education fee structure of lines') + fee_amount = fields.Float('Amount', required=True, + related='fee_type_id.lst_price', + help='Corresponding fee amount.') + payment_type = fields.Selection([ + ('onetime', 'One Time'), + ('permonth', 'Per Month'), + ('peryear', 'Per Year'), + ('sixmonth', '6 Months'), + ('threemonth', '3 Months') + ], string='Payment Type', related="fee_type_id.payment_type", + help='Payment type describe how much a payment effective Like,' + ' bus fee per month is 30 dollar, sports fee per year' + ' is 40 dollar, etc') + interval = fields.Char(related="fee_type_id.interval", string="Interval", + help='Specify the interval.') + fee_description = fields.Text('Description', + related='fee_type_id.description_sale', + help='Give the fee description.') diff --git a/education_fee/models/education_fee_type.py b/education_fee/models/education_fee_type.py new file mode 100644 index 000000000..3cf003024 --- /dev/null +++ b/education_fee/models/education_fee_type.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Gayathri V (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 api, fields, models + + +class EducationFeeType(models.Model): + """Creating model 'education.fee.type' with fields""" + _name = 'education.fee.type' + _inherits = {'product.product': 'product_variant_id'} + + payment_type = fields.Selection([ + ('onetime', 'One Time'), + ('permonth', 'Per Month'), + ('peryear', 'Per Year'), + ('sixmonth', '6 Months'), + ('threemonth', '3 Months') + ], string='Payment Type', default='permonth', + help='Payment type describe how much a payment effective.' + ' Like, bus fee per month is 30 dollar, sports fee per ' + 'year is 40 dollar, etc') + interval = fields.Char(string='Payment Interval', + help='Interval describe the payment mode of the fee.' + 'For example, Monthly means the fee must be ' + 'paid in each month.' + 'Yearly means the payment paid only ' + 'one time uin year.') + + category_id = fields.Many2one('education.fee.category', + string='Category', + required=True, + help="Fee category", + default=lambda self: self.env[ + 'education.fee.category'].search([], + limit=1)) + + @api.model + def create(self, vals): + """Function calls the create method of the superclass to + perform the actual record creation""" + category_id = self.env['education.fee.category'].browse( + vals.get('category_id')) + vals.update({ + 'property_account_income_id': category_id.journal_id.default_account_id.id, + }) + res = super().create(vals) + return res diff --git a/education_fee/security/ir.model.access.csv b/education_fee/security/ir.model.access.csv new file mode 100644 index 000000000..2d5003713 --- /dev/null +++ b/education_fee/security/ir.model.access.csv @@ -0,0 +1,9 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_fee_structure_account_user,education.fee.structure.account.user,education_fee.model_education_fee_structure,account.group_account_user,1,1,1,0 +access_fee_structure_account_manager,product.fee.structure.account.manager,education_fee.model_education_fee_structure,account.group_account_manager,1,1,1,1 +access_fee_type_account_user,product.fee.type.account.user,education_fee.model_education_fee_type,account.group_account_user,1,1,1,0 +access_fee_type_account_manager,product.fee.type.account.manager,education_fee.model_education_fee_type,account.group_account_manager,1,1,1,1 +access_fee_structure_line_account_user,education.fee.structure.line.account.user,education_fee.model_education_fee_structure_lines,account.group_account_user,1,1,1,0 +access_fee_structure_line_account_manager,education.fee.structure.line.account.manager,education_fee.model_education_fee_structure_lines,account.group_account_manager,1,1,1,1 +access_fee_category_account_user,education.fee.category.account.user,education_fee.model_education_fee_category,account.group_account_user,1,1,1,0 +access_fee_category_account_manager,education.fee.category.account.manager,education_fee.model_education_fee_category,account.group_account_manager,1,1,1,1 diff --git a/education_fee/static/description/assets/cybro-icon.png b/education_fee/static/description/assets/cybro-icon.png new file mode 100644 index 000000000..06e73e11d Binary files /dev/null and b/education_fee/static/description/assets/cybro-icon.png differ diff --git a/education_fee/static/description/assets/cybro-odoo.png b/education_fee/static/description/assets/cybro-odoo.png new file mode 100644 index 000000000..ed02e07a4 Binary files /dev/null and b/education_fee/static/description/assets/cybro-odoo.png differ diff --git a/education_fee/static/description/assets/h2.png b/education_fee/static/description/assets/h2.png new file mode 100644 index 000000000..0bfc4707d Binary files /dev/null and b/education_fee/static/description/assets/h2.png differ diff --git a/education_fee/static/description/assets/icons/arrows-repeat.svg b/education_fee/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/education_fee/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/banner-1.png b/education_fee/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/education_fee/static/description/assets/icons/banner-1.png differ diff --git a/education_fee/static/description/assets/icons/banner-2.svg b/education_fee/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/education_fee/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/banner-bg.png b/education_fee/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/education_fee/static/description/assets/icons/banner-bg.png differ diff --git a/education_fee/static/description/assets/icons/banner-bg.svg b/education_fee/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/education_fee/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/banner-call.svg b/education_fee/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/education_fee/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/education_fee/static/description/assets/icons/banner-mail.svg b/education_fee/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/education_fee/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/education_fee/static/description/assets/icons/banner-pattern.svg b/education_fee/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/education_fee/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/banner-promo.svg b/education_fee/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/education_fee/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/brand-pair.svg b/education_fee/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/education_fee/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/capture (1).png b/education_fee/static/description/assets/icons/capture (1).png new file mode 100644 index 000000000..8824deafc Binary files /dev/null and b/education_fee/static/description/assets/icons/capture (1).png differ diff --git a/education_fee/static/description/assets/icons/check.png b/education_fee/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/education_fee/static/description/assets/icons/check.png differ diff --git a/education_fee/static/description/assets/icons/chevron.png b/education_fee/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/education_fee/static/description/assets/icons/chevron.png differ diff --git a/education_fee/static/description/assets/icons/close-icon.svg b/education_fee/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/education_fee/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/education_fee/static/description/assets/icons/cogs.png b/education_fee/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/education_fee/static/description/assets/icons/cogs.png differ diff --git a/education_fee/static/description/assets/icons/collabarate-icon.svg b/education_fee/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/education_fee/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/education_fee/static/description/assets/icons/consultation.png b/education_fee/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/education_fee/static/description/assets/icons/consultation.png differ diff --git a/education_fee/static/description/assets/icons/cybro-logo.png b/education_fee/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/education_fee/static/description/assets/icons/cybro-logo.png differ diff --git a/education_fee/static/description/assets/icons/down.svg b/education_fee/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/education_fee/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/education_fee/static/description/assets/icons/ecom-black.png b/education_fee/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/education_fee/static/description/assets/icons/ecom-black.png differ diff --git a/education_fee/static/description/assets/icons/education-black.png b/education_fee/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/education_fee/static/description/assets/icons/education-black.png differ diff --git a/education_fee/static/description/assets/icons/faq.png b/education_fee/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/education_fee/static/description/assets/icons/faq.png differ diff --git a/education_fee/static/description/assets/icons/feature-icon.svg b/education_fee/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/education_fee/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/feature.png b/education_fee/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/education_fee/static/description/assets/icons/feature.png differ diff --git a/education_fee/static/description/assets/icons/gear.svg b/education_fee/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/education_fee/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/hero.gif b/education_fee/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..4923a23d8 Binary files /dev/null and b/education_fee/static/description/assets/icons/hero.gif differ diff --git a/education_fee/static/description/assets/icons/hire-odoo.svg b/education_fee/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/education_fee/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/hotel-black.png b/education_fee/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/education_fee/static/description/assets/icons/hotel-black.png differ diff --git a/education_fee/static/description/assets/icons/img.png b/education_fee/static/description/assets/icons/img.png new file mode 100644 index 000000000..70197f477 Binary files /dev/null and b/education_fee/static/description/assets/icons/img.png differ diff --git a/education_fee/static/description/assets/icons/license.png b/education_fee/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/education_fee/static/description/assets/icons/license.png differ diff --git a/education_fee/static/description/assets/icons/life-ring-icon.svg b/education_fee/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/education_fee/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/lifebuoy.png b/education_fee/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/education_fee/static/description/assets/icons/lifebuoy.png differ diff --git a/education_fee/static/description/assets/icons/mail.svg b/education_fee/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/education_fee/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/education_fee/static/description/assets/icons/manufacturing-black.png b/education_fee/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/education_fee/static/description/assets/icons/manufacturing-black.png differ diff --git a/education_fee/static/description/assets/icons/notes.png b/education_fee/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/education_fee/static/description/assets/icons/notes.png differ diff --git a/education_fee/static/description/assets/icons/notification icon.svg b/education_fee/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/education_fee/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/odoo-consultancy.svg b/education_fee/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/education_fee/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/education_fee/static/description/assets/icons/odoo-licencing.svg b/education_fee/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/education_fee/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/education_fee/static/description/assets/icons/odoo-logo.png b/education_fee/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/education_fee/static/description/assets/icons/odoo-logo.png differ diff --git a/education_fee/static/description/assets/icons/patter.svg b/education_fee/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/education_fee/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/pattern1.png b/education_fee/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/education_fee/static/description/assets/icons/pattern1.png differ diff --git a/education_fee/static/description/assets/icons/photo-capture.png b/education_fee/static/description/assets/icons/photo-capture.png new file mode 100644 index 000000000..06c111758 Binary files /dev/null and b/education_fee/static/description/assets/icons/photo-capture.png differ diff --git a/education_fee/static/description/assets/icons/pos-black.png b/education_fee/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/education_fee/static/description/assets/icons/pos-black.png differ diff --git a/education_fee/static/description/assets/icons/puzzle-piece-icon.svg b/education_fee/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/education_fee/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/puzzle.png b/education_fee/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/education_fee/static/description/assets/icons/puzzle.png differ diff --git a/education_fee/static/description/assets/icons/replace-icon.svg b/education_fee/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/education_fee/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/restaurant-black.png b/education_fee/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/education_fee/static/description/assets/icons/restaurant-black.png differ diff --git a/education_fee/static/description/assets/icons/screenshot-main.png b/education_fee/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/education_fee/static/description/assets/icons/screenshot-main.png differ diff --git a/education_fee/static/description/assets/icons/screenshot.png b/education_fee/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/education_fee/static/description/assets/icons/screenshot.png differ diff --git a/education_fee/static/description/assets/icons/service-black.png b/education_fee/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/education_fee/static/description/assets/icons/service-black.png differ diff --git a/education_fee/static/description/assets/icons/skype-fill.svg b/education_fee/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/education_fee/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/skype.png b/education_fee/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/education_fee/static/description/assets/icons/skype.png differ diff --git a/education_fee/static/description/assets/icons/skype.svg b/education_fee/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/education_fee/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/education_fee/static/description/assets/icons/star-1.svg b/education_fee/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/education_fee/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/star-2.svg b/education_fee/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/education_fee/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/support.png b/education_fee/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/education_fee/static/description/assets/icons/support.png differ diff --git a/education_fee/static/description/assets/icons/test-1 - Copy.png b/education_fee/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/education_fee/static/description/assets/icons/test-1 - Copy.png differ diff --git a/education_fee/static/description/assets/icons/test-1.png b/education_fee/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/education_fee/static/description/assets/icons/test-1.png differ diff --git a/education_fee/static/description/assets/icons/test-2.png b/education_fee/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/education_fee/static/description/assets/icons/test-2.png differ diff --git a/education_fee/static/description/assets/icons/trading-black.png b/education_fee/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/education_fee/static/description/assets/icons/trading-black.png differ diff --git a/education_fee/static/description/assets/icons/training.png b/education_fee/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/education_fee/static/description/assets/icons/training.png differ diff --git a/education_fee/static/description/assets/icons/translate.svg b/education_fee/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/education_fee/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/update.png b/education_fee/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/education_fee/static/description/assets/icons/update.png differ diff --git a/education_fee/static/description/assets/icons/user.png b/education_fee/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/education_fee/static/description/assets/icons/user.png differ diff --git a/education_fee/static/description/assets/icons/video.png b/education_fee/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/education_fee/static/description/assets/icons/video.png differ diff --git a/education_fee/static/description/assets/icons/whatsapp.png b/education_fee/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/education_fee/static/description/assets/icons/whatsapp.png differ diff --git a/education_fee/static/description/assets/icons/wrench-icon.svg b/education_fee/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/education_fee/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/education_fee/static/description/assets/icons/wrench.png b/education_fee/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/education_fee/static/description/assets/icons/wrench.png differ diff --git a/education_fee/static/description/assets/misc/Cybrosys R.png b/education_fee/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/education_fee/static/description/assets/misc/Cybrosys R.png differ diff --git a/education_fee/static/description/assets/misc/categories.png b/education_fee/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/education_fee/static/description/assets/misc/categories.png differ diff --git a/education_fee/static/description/assets/misc/check-box.png b/education_fee/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/education_fee/static/description/assets/misc/check-box.png differ diff --git a/education_fee/static/description/assets/misc/compass.png b/education_fee/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/education_fee/static/description/assets/misc/compass.png differ diff --git a/education_fee/static/description/assets/misc/config.png b/education_fee/static/description/assets/misc/config.png new file mode 100644 index 000000000..71915e76c Binary files /dev/null and b/education_fee/static/description/assets/misc/config.png differ diff --git a/education_fee/static/description/assets/misc/corporate.png b/education_fee/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/education_fee/static/description/assets/misc/corporate.png differ diff --git a/education_fee/static/description/assets/misc/customer-support.png b/education_fee/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/education_fee/static/description/assets/misc/customer-support.png differ diff --git a/education_fee/static/description/assets/misc/cybrosys-logo.png b/education_fee/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/education_fee/static/description/assets/misc/cybrosys-logo.png differ diff --git a/education_fee/static/description/assets/misc/e_logo.png b/education_fee/static/description/assets/misc/e_logo.png new file mode 100644 index 000000000..30138207a Binary files /dev/null and b/education_fee/static/description/assets/misc/e_logo.png differ diff --git a/education_fee/static/description/assets/misc/email.svg b/education_fee/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/education_fee/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/misc/features.png b/education_fee/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/education_fee/static/description/assets/misc/features.png differ diff --git a/education_fee/static/description/assets/misc/logo.png b/education_fee/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/education_fee/static/description/assets/misc/logo.png differ diff --git a/education_fee/static/description/assets/misc/phone.svg b/education_fee/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/education_fee/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/education_fee/static/description/assets/misc/pictures.png b/education_fee/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/education_fee/static/description/assets/misc/pictures.png differ diff --git a/education_fee/static/description/assets/misc/pie-chart.png b/education_fee/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/education_fee/static/description/assets/misc/pie-chart.png differ diff --git a/education_fee/static/description/assets/misc/right-arrow.png b/education_fee/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/education_fee/static/description/assets/misc/right-arrow.png differ diff --git a/education_fee/static/description/assets/misc/star (1) 2.svg b/education_fee/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/education_fee/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/education_fee/static/description/assets/misc/star.png b/education_fee/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/education_fee/static/description/assets/misc/star.png differ diff --git a/education_fee/static/description/assets/misc/support (1) 1.svg b/education_fee/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/education_fee/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/education_fee/static/description/assets/misc/support-email.svg b/education_fee/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/education_fee/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/education_fee/static/description/assets/misc/support.png b/education_fee/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/education_fee/static/description/assets/misc/support.png differ diff --git a/education_fee/static/description/assets/misc/tick-mark.svg b/education_fee/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/education_fee/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/misc/whatsapp 1.svg b/education_fee/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/education_fee/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/education_fee/static/description/assets/misc/whatsapp.png b/education_fee/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/education_fee/static/description/assets/misc/whatsapp.png differ diff --git a/education_fee/static/description/assets/misc/whatsapp.svg b/education_fee/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/education_fee/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/education_fee/static/description/assets/modules/1.gif b/education_fee/static/description/assets/modules/1.gif new file mode 100644 index 000000000..ae3a880a2 Binary files /dev/null and b/education_fee/static/description/assets/modules/1.gif differ diff --git a/education_fee/static/description/assets/modules/1.jpg b/education_fee/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..08bbafeb6 Binary files /dev/null and b/education_fee/static/description/assets/modules/1.jpg differ diff --git a/education_fee/static/description/assets/modules/1.png b/education_fee/static/description/assets/modules/1.png new file mode 100644 index 000000000..c9d686d47 Binary files /dev/null and b/education_fee/static/description/assets/modules/1.png differ diff --git a/education_fee/static/description/assets/modules/2.gif b/education_fee/static/description/assets/modules/2.gif new file mode 100644 index 000000000..d19e2b352 Binary files /dev/null and b/education_fee/static/description/assets/modules/2.gif differ diff --git a/education_fee/static/description/assets/modules/2.jpg b/education_fee/static/description/assets/modules/2.jpg new file mode 100644 index 000000000..39006b41a Binary files /dev/null and b/education_fee/static/description/assets/modules/2.jpg differ diff --git a/education_fee/static/description/assets/modules/2.png b/education_fee/static/description/assets/modules/2.png new file mode 100644 index 000000000..a1209a01f Binary files /dev/null and b/education_fee/static/description/assets/modules/2.png differ diff --git a/education_fee/static/description/assets/modules/3.jpg b/education_fee/static/description/assets/modules/3.jpg new file mode 100644 index 000000000..3d171226b Binary files /dev/null and b/education_fee/static/description/assets/modules/3.jpg differ diff --git a/education_fee/static/description/assets/modules/3.png b/education_fee/static/description/assets/modules/3.png new file mode 100644 index 000000000..8513873ea Binary files /dev/null and b/education_fee/static/description/assets/modules/3.png differ diff --git a/education_fee/static/description/assets/modules/4.jpg b/education_fee/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..1f3f2e27f Binary files /dev/null and b/education_fee/static/description/assets/modules/4.jpg differ diff --git a/education_fee/static/description/assets/modules/4.png b/education_fee/static/description/assets/modules/4.png new file mode 100644 index 000000000..3bedf7981 Binary files /dev/null and b/education_fee/static/description/assets/modules/4.png differ diff --git a/education_fee/static/description/assets/modules/5.gif b/education_fee/static/description/assets/modules/5.gif new file mode 100644 index 000000000..2a5f8e659 Binary files /dev/null and b/education_fee/static/description/assets/modules/5.gif differ diff --git a/education_fee/static/description/assets/modules/5.jpg b/education_fee/static/description/assets/modules/5.jpg new file mode 100644 index 000000000..0db717519 Binary files /dev/null and b/education_fee/static/description/assets/modules/5.jpg differ diff --git a/education_fee/static/description/assets/modules/5.png b/education_fee/static/description/assets/modules/5.png new file mode 100644 index 000000000..0e311ca87 Binary files /dev/null and b/education_fee/static/description/assets/modules/5.png differ diff --git a/education_fee/static/description/assets/modules/6.jpg b/education_fee/static/description/assets/modules/6.jpg new file mode 100644 index 000000000..67c7f7062 Binary files /dev/null and b/education_fee/static/description/assets/modules/6.jpg differ diff --git a/education_fee/static/description/assets/modules/6.png b/education_fee/static/description/assets/modules/6.png new file mode 100644 index 000000000..14391fa4e Binary files /dev/null and b/education_fee/static/description/assets/modules/6.png differ diff --git a/education_fee/static/description/assets/modules/courier_management.jpg b/education_fee/static/description/assets/modules/courier_management.jpg new file mode 100644 index 000000000..3e4a22c32 Binary files /dev/null and b/education_fee/static/description/assets/modules/courier_management.jpg differ diff --git a/education_fee/static/description/assets/modules/cw_sale.png b/education_fee/static/description/assets/modules/cw_sale.png new file mode 100644 index 000000000..1b75c62d5 Binary files /dev/null and b/education_fee/static/description/assets/modules/cw_sale.png differ diff --git a/education_fee/static/description/assets/modules/cw_stock.png b/education_fee/static/description/assets/modules/cw_stock.png new file mode 100644 index 000000000..62af09ec6 Binary files /dev/null and b/education_fee/static/description/assets/modules/cw_stock.png differ diff --git a/education_fee/static/description/assets/modules/delivery_split.jpg b/education_fee/static/description/assets/modules/delivery_split.jpg new file mode 100644 index 000000000..76724ebda Binary files /dev/null and b/education_fee/static/description/assets/modules/delivery_split.jpg differ diff --git a/education_fee/static/description/assets/modules/m1.png b/education_fee/static/description/assets/modules/m1.png new file mode 100644 index 000000000..acb4c76c6 Binary files /dev/null and b/education_fee/static/description/assets/modules/m1.png differ diff --git a/education_fee/static/description/assets/modules/m2.png b/education_fee/static/description/assets/modules/m2.png new file mode 100644 index 000000000..3ef91f771 Binary files /dev/null and b/education_fee/static/description/assets/modules/m2.png differ diff --git a/education_fee/static/description/assets/modules/m3.png b/education_fee/static/description/assets/modules/m3.png new file mode 100644 index 000000000..72febf6ae Binary files /dev/null and b/education_fee/static/description/assets/modules/m3.png differ diff --git a/education_fee/static/description/assets/modules/m4.png b/education_fee/static/description/assets/modules/m4.png new file mode 100644 index 000000000..f7d7f9241 Binary files /dev/null and b/education_fee/static/description/assets/modules/m4.png differ diff --git a/education_fee/static/description/assets/modules/m5.png b/education_fee/static/description/assets/modules/m5.png new file mode 100644 index 000000000..1d3324e88 Binary files /dev/null and b/education_fee/static/description/assets/modules/m5.png differ diff --git a/education_fee/static/description/assets/modules/m6.png b/education_fee/static/description/assets/modules/m6.png new file mode 100644 index 000000000..80938c15a Binary files /dev/null and b/education_fee/static/description/assets/modules/m6.png differ diff --git a/education_fee/static/description/assets/modules/module_image (1).jpeg b/education_fee/static/description/assets/modules/module_image (1).jpeg new file mode 100644 index 000000000..5ae24843e Binary files /dev/null and b/education_fee/static/description/assets/modules/module_image (1).jpeg differ diff --git a/education_fee/static/description/assets/modules/module_image (1).png b/education_fee/static/description/assets/modules/module_image (1).png new file mode 100644 index 000000000..0dea4f332 Binary files /dev/null and b/education_fee/static/description/assets/modules/module_image (1).png differ diff --git a/education_fee/static/description/assets/modules/module_image (2).png b/education_fee/static/description/assets/modules/module_image (2).png new file mode 100644 index 000000000..a5dc79613 Binary files /dev/null and b/education_fee/static/description/assets/modules/module_image (2).png differ diff --git a/education_fee/static/description/assets/modules/module_image-1.jpeg b/education_fee/static/description/assets/modules/module_image-1.jpeg new file mode 100644 index 000000000..31f066e9c Binary files /dev/null and b/education_fee/static/description/assets/modules/module_image-1.jpeg differ diff --git a/education_fee/static/description/assets/modules/module_image.jpeg b/education_fee/static/description/assets/modules/module_image.jpeg new file mode 100644 index 000000000..0cbac311c Binary files /dev/null and b/education_fee/static/description/assets/modules/module_image.jpeg differ diff --git a/education_fee/static/description/assets/modules/module_image.png b/education_fee/static/description/assets/modules/module_image.png new file mode 100644 index 000000000..612be4b77 Binary files /dev/null and b/education_fee/static/description/assets/modules/module_image.png differ diff --git a/education_fee/static/description/assets/modules/multi_product_return_from_website.jpg b/education_fee/static/description/assets/modules/multi_product_return_from_website.jpg new file mode 100644 index 000000000..7f2cc2ab5 Binary files /dev/null and b/education_fee/static/description/assets/modules/multi_product_return_from_website.jpg differ diff --git a/education_fee/static/description/assets/modules/purchase_history_of_product.jpg b/education_fee/static/description/assets/modules/purchase_history_of_product.jpg new file mode 100644 index 000000000..dab7b184c Binary files /dev/null and b/education_fee/static/description/assets/modules/purchase_history_of_product.jpg differ diff --git a/education_fee/static/description/assets/screenshots/1.png b/education_fee/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..61bb1c935 Binary files /dev/null and b/education_fee/static/description/assets/screenshots/1.png differ diff --git a/education_fee/static/description/assets/screenshots/2.png b/education_fee/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..6acd0a27e Binary files /dev/null and b/education_fee/static/description/assets/screenshots/2.png differ diff --git a/education_fee/static/description/assets/screenshots/3.png b/education_fee/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..c3fa3c4f6 Binary files /dev/null and b/education_fee/static/description/assets/screenshots/3.png differ diff --git a/education_fee/static/description/assets/screenshots/4.png b/education_fee/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..6a5e15827 Binary files /dev/null and b/education_fee/static/description/assets/screenshots/4.png differ diff --git a/education_fee/static/description/assets/screenshots/5.png b/education_fee/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..772f6c822 Binary files /dev/null and b/education_fee/static/description/assets/screenshots/5.png differ diff --git a/education_fee/static/description/assets/y18.jpg b/education_fee/static/description/assets/y18.jpg new file mode 100644 index 000000000..eea1714f2 Binary files /dev/null and b/education_fee/static/description/assets/y18.jpg differ diff --git a/education_fee/static/description/banner.jpg b/education_fee/static/description/banner.jpg new file mode 100644 index 000000000..395b2148f Binary files /dev/null and b/education_fee/static/description/banner.jpg differ diff --git a/education_fee/static/description/icon.png b/education_fee/static/description/icon.png new file mode 100644 index 000000000..42c28805c Binary files /dev/null and b/education_fee/static/description/icon.png differ diff --git a/education_fee/static/description/index.html b/education_fee/static/description/index.html new file mode 100644 index 000000000..2de38e467 --- /dev/null +++ b/education_fee/static/description/index.html @@ -0,0 +1,1132 @@ + + + + + + Educational Fee Management + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+
+

Fee Management in Educational ERP +

Educational Fee Management +

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

Key + Highlights

+
+
+
+
+ +
+
+ Configure fee category +
+
+
+
+
+
+ +
+
+ Handle all fees types belonging to the + Institution under one roof
+
+
+
+
+
+ +
+
+ Configure fee structure
+
+
+
+
+ +
+
+
+ Educational Fee Management +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Fee + + Category + +

+
+
+

+ Here we can configure fee + category as different + institutional area like, the + hostel, institutional, or + transportation, etc. Each + category can set different fee + structures and different fee + types. The categorical + segregation enables to review + the financial process solely + +

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

+ Fee + + Types +

+
+
+

+ Education fee helps in + differentiating the fees under + different categories pertaining + to the characteristic and + nature. One can easily classify + the fees with name like lunch + fees, bus fees, admission fees + and much more for quick access + and easy managing. + +

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

+ Fee + + Structure +

+
+
+

+ It is easy to group different + fee types as single one called + fee structure. For an example, + we can add all fee types for a + particular syllabus to a single + fee structure for that + syllabus.This makes the fees + process seamless and + transparent. + +

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

+ Fee + + Receipts + +

+
+
+

+ Fee Receipts comes as an + integrated and comprehensive + platform with the capability of + handling all fees types invoices + belonging to the institution + under one roof. The different + fees categories like Hostel fee, + transportation fee etc. can be + handled in a single form using + the fee receipts feature.We can + create invoices for the fees + based on Category and Fee + Structure and register the + payment + +

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

+ Fee + + Dashboard +

+
+
+

+ Educational fee management + dashboard offers an intelligent, + reliable and easy to use + interface with powerful features + for educational institutions of + any type or size. Flaunting in + simple design it provides an + overview of all internal + transactions undergoing in the + educational institute. + +

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

+ Configure fee structure

+
+
+
+
+
+
+
+ +
+

+ Configure fee category

+
+
+
+
+
+
+
+ +
+

+ Handle all fees types belonging + to the Institution under one + roof

+
+ +
+
+
+
+
+
+ +
+

+ Attendance Table

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

+ The Education Fee module helps educational institutions efficiently manage fee structures, collections, payments, and related reports. It allows for configuring different types of fees, payment plans, and student-wise billing. +

+
+
+ +
+ +
+

+ Yes, the module allows you to create customizable fee structures specific to courses, programs, or departments. You can define tuition fees, lab fees, hostel fees, and any other category as needed. +

+
+
+ +
+ +
+

+ Absolutely! The module supports installment-based fee payments. You can set up flexible payment schedules for students, including due dates and amounts for each installment. +

+
+
+ +
+ +
+

+ Yes, the module includes reporting features to track fee collections, pending dues, and payment history. You can filter reports by students, departments, courses, or date ranges for detailed insights. +

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

+ Latest Release 18.0.1.0.0 +

+ + 26th December, 2024 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + +
+

+ Related Products +

+ +
+ + + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/education_fee/views/account_journal_templates.xml b/education_fee/views/account_journal_templates.xml new file mode 100644 index 000000000..8a1bcf284 --- /dev/null +++ b/education_fee/views/account_journal_templates.xml @@ -0,0 +1,407 @@ + + + + + account.journal.dashboard.kanban + account.journal + + + + + + + Fee Dashboard + account.journal + kanban,form + + menu + {'search_default_dashboard':1} + [] + +

+ This is the Fee dashboard +

+

+ If you have not installed a chart of account, please install one + first. +
+ + Browse + available countries. + +

+
+
+ + +
diff --git a/education_fee/views/account_journal_views.xml b/education_fee/views/account_journal_views.xml new file mode 100644 index 000000000..54d8025e4 --- /dev/null +++ b/education_fee/views/account_journal_views.xml @@ -0,0 +1,14 @@ + + + + + account.journal.view.form.inherit.education.fee + account.journal + + + + + + + + diff --git a/education_fee/views/account_move_views.xml b/education_fee/views/account_move_views.xml new file mode 100644 index 000000000..e7e83b336 --- /dev/null +++ b/education_fee/views/account_move_views.xml @@ -0,0 +1,1832 @@ + + + + + + account.move.line.view.form + account.move.line + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + account.move.line.view.kanban + account.move.line + + + + + + + + +
+
+ + + + + + + +
+ +
+
+ +
+
+
+
+
+
+
+
+ + + account.move.line.view.pivot + account.move.line + + + + + + + + + + + account.move.line.view.list + account.move.line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + account.move.line.list.grouped + account.move.line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

+ + Draft + +

+ + + The current highest number is. You might want to put a + higher number here. + +

+ +

+
+ + + + + + + + + + + + +
+
+ +
+ + +
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+ + + + + +
+ Quantity: + + +
+
+ Unit Price: + +
+ + + + + + +
+
+
+ +
+
+ + + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +