diff --git a/open_academy/__init__.py b/open_academy/__init__.py new file mode 100644 index 000000000..aa4d0fd63 --- /dev/null +++ b/open_academy/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import controllers +from . import models diff --git a/open_academy/__manifest__.py b/open_academy/__manifest__.py new file mode 100644 index 000000000..bdea68333 --- /dev/null +++ b/open_academy/__manifest__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Odoo 15 Development Tutorials", + + 'summary': """ + Odoo 15 Development Tutorials""", + + 'description': """ + Odoo 15 Development Tutorials, + Odoo 14 Development Tutorials, + Odoo 13 Development Tutorials, + Development Tutorials, + Odoo Tutorials, + Odoo13, Odoo14, odoo15, odoo Tutorials, odoo learning, odoo13 Tutorials, odoo14 Tutorials, Tutorials, + Open acadaemy module for managing trainings: + -Manage student enroll + -Attendance registration + -Trainer + -Training sessions + -Courses + -More.. + """, + + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'live_test_url': 'https://bit.ly/3knPv8t', + + # Categories can be used to filter modules in modules listing + # Check https://github.com/odoo/odoo/blob/13.0/odoo/addons/base/data/ir_module_category_data.xml + # for the full list + 'category': 'Tutorials', + 'version': '15.0.1.0.0', + 'license': 'AGPL-3', + + # any module necessary for this one to work correctly + 'depends': ['base', 'board', 'website_slides'], + 'images': ['static/description/banner.gif'], + + # always loaded + 'data': [ + 'data/slide_channel_data.xml', + 'data/slide_channel_data_v13.xml', + 'data/slide_channel_data_v15.xml', + 'security/security.xml', + 'security/ir.model.access.csv', + 'views/views.xml', + 'views/templates.xml', + 'views/openacademy.xml', + 'views/partner.xml', + 'views/session_board.xml', + 'reports.xml', + ], + # only loaded in demonstration mode + 'demo': [ + 'demo/demo.xml', + ], +} diff --git a/open_academy/controllers/__init__.py b/open_academy/controllers/__init__.py new file mode 100644 index 000000000..457bae27e --- /dev/null +++ b/open_academy/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import controllers \ No newline at end of file diff --git a/open_academy/controllers/controllers.py b/open_academy/controllers/controllers.py new file mode 100644 index 000000000..7a7ff9140 --- /dev/null +++ b/open_academy/controllers/controllers.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# from odoo import http + + +# class Openacademy(http.Controller): +# @http.route('/open_academy/open_academy/', auth='public') +# def index(self, **kw): +# return "Hello, world" + +# @http.route('/open_academy/open_academy/objects/', auth='public') +# def list(self, **kw): +# return http.request.render('openacademy.listing', { +# 'root': '/open_academy/open_academy', +# 'objects': http.request.env['open_academy.open_academy'].search([]), +# }) + +# @http.route('/open_academy/open_academy/objects//', auth='public') +# def object(self, obj, **kw): +# return http.request.render('openacademy.object', { +# 'object': obj +# }) diff --git a/open_academy/data/slide_channel_data.xml b/open_academy/data/slide_channel_data.xml new file mode 100644 index 000000000..613c0f070 --- /dev/null +++ b/open_academy/data/slide_channel_data.xml @@ -0,0 +1,555 @@ + + + + + + Odoo 14 Development Tutorial + + public + 1 + training + + most_voted + + + Learn how to build a module for Odoo 14 + + + + + Odoo Technical Tips + + public + 1 + training + + most_voted + + + Useful Odoo Technical Tips + + + + 1-How to Create a Website in Odoo + 1 + https://youtu.be/tiVOy_rjoBk + video + + + + + + 2-How to Create a Dashboard in Odoo + 2 + https://youtu.be/PimIGb0UDFQ + video + + + + + + 3-How to Create a Custom Module in Odoo + 3 + https://youtu.be/TiJ__I77CyE + video + + + + + + 4-Forecast Widget in Tree View + 4 + https://youtu.be/qYGakJExHTk + video + + + + + + 5-Odoo 14 Printed Reports PDF + 5 + https://youtu.be/aEaFPo7eUL8 + video + + + + + + 6-Odoo 14 Reporting Dashboard + 6 + https://youtu.be/sxXMnym1jRg + video + + + + + + 7-How to Create New Models in Odoo? + 7 + https://youtu.be/NN6DwPFp0NQ + video + + + + + + 8-Odoo Security Record Rules + 8 + https://youtu.be/LoXZk52aZVU + video + + + + + + 9-Translation In Odoo 14 + 9 + https://youtu.be/yG6p4hFwSSM + video + + + + + + 10-How to add settings for custom module in Odoo 14 + 10 + https://youtu.be/3E1B-wAquLc + video + + + + + + 11-Method Overriding & Super in Python Odoo + 11 + https://youtu.be/ZRNaZF4Hvmg + video + + + + + + 12-How to Create Wizard in Odoo 14 + 12 + https://youtu.be/nzPWPUGf9LQ + video + + + + + + 13-Web Controller in Odoo + 13 + https://youtu.be/xuIs1B4uueQ + video + + + + + + 14-Odoo Owl Framework + 14 + https://youtu.be/ZxEhlOoYmWw + video + + + + + + 15-How to hide a new or existing field inside a One2Many fields + 15 + https://youtu.be/4ncw5ltZRiw + video + + + + + + 16-How to make all fields read-only in a form + 16 + https://youtu.be/gU0Vwt4SNaM + video + + + + + + 17-How to secure your Odoo database + 17 + https://youtu.be/jqTHa8BDIIo + video + + + + + + 18-How to add chatter to your custom module + 18 + https://youtu.be/-ezlWbg9EsM + video + + + + + + + 19-How to Install Odoo 15 on Ubuntu 20.04 + 19 + https://youtu.be/mlvJCfxNKDE + video + + + + + + 20-How to Install Odoo 14 on Ubuntu 20.04 + 20 + https://youtu.be/ud0z9GB6phs + video + + + + + + + 21-How to Install Odoo 13 on Ubuntu 18.04 + 21 + https://youtu.be/d4AaniD_UDY + video + + + + + + 22-How to Configure Odoo 12 on Pycharm Ubuntu 18 + 22 + https://youtu.be/qri0ZF8kUhU + video + + + + + + + 23-How to Create Smart Button in Odoo 14 + 23 + https://youtu.be/4_5Ia2wwrNo + video + + + + + + + + 1-How to Install Pycharm and Configure PostgreSQL on Ubuntu + 1 + https://youtu.be/V8JxrYLX0VM + video + + + + + + + 2-How to Configure Odoo 14 on Pycharm Ubuntu + 2 + https://youtu.be/UGg1j5RCXKk + video + + + + + + + 3-Building a Module With Menus and Actions in Odoo 14 + 3 + https://youtu.be/wwIniIlIrAc + video + + + + + + + 4-Compositions of a Odoo 14 Module + 4 + https://youtu.be/8_M96X4O6XI + video + + + + + + + 5- Structure of a Odoo 14 Module + 5 + https://youtu.be/1F0veP4EJ2Q + video + + + + + + + 6- Creating an Empty Module Structure Using Scaffold in Odoo 14 + 6 + https://youtu.be/fY-QQXT2clw + video + + + + + + + 7- Adding Data Files in to Your Odoo 14 module + 7 + https://youtu.be/ZGBm2X8xS8A + video + + + + + + + 8- Basic Views in Odoo 14 (Tree, Form, and Search) + 8 + https://youtu.be/kDqrUCWaYAQ + video + + + + + + + 9-Relations Between Models: Many2One Fields in Odoo 14 + 9 + https://youtu.be/g2ug1_WRepk + video + + + + + + + 10-Relations Between Models: One2Many Fields in Odoo 14 + 10 + https://youtu.be/BtcciC84bCE + video + + + + + + + 11-Relations Between Models: Many2Many Fields in Odoo 14 + 11 + https://youtu.be/_75tecUCgd4 + video + + + + + + + 12-Inheritance - Traditional Class Inheritance in Odoo 14 + 12 + https://youtu.be/YZs5fupECxE + video + + + + + + + 13-Inheritance - Traditional Prototype Inheritance in Odoo 14 + 13 + https://youtu.be/UsedzCIpre4 + video + + + + + + + 14-Inheritance - Delegation Inheritance in Odoo 14 + 14 + https://youtu.be/DXXOLKw3HmE + video + + + + + + + 15-Computed fields and @api.depends in Odoo 14 + 15 + https://youtu.be/ElpjiSX0Xug + video + + + + + + + 16-Setting Default Value for Fields in Odoo 14 + 16 + https://youtu.be/9Xju_GFFiWA + video + + + + + + + 17-Onchange mechanism - @api.onchange in Odoo 14 + 17 + https://youtu.be/5sLcvZYy78o + video + + + + + + + 18-Model Constraints - Python Constraints in Odoo 14 + 18 + https://youtu.be/iGSmGY6ba9I + video + + + + + + + 19-Model Constraints - SQL Constraints in Odoo 14 + 19 + https://youtu.be/QcI50BPyiT8 + video + + + + + + + 20-Advanced Views - Tree View Decoration Attribute in Odoo 14 + 20 + https://youtu.be/iHDnzSbKeSo + video + + + + + + + 21-Advanced Views - Calendar View in Odoo 14 + 21 + https://youtu.be/O3VVB0UsN-U + video + + + + + + + 22-Advanced Views - Search View in Odoo 14 + 22 + https://youtu.be/WtBjxvXC504 + video + + + + + + + 23-Advanced Views - Graph View in Odoo 14 + 23 + https://youtu.be/qTXbbOrdgAo + video + + + + + + + 24-Advanced Views - Gantt View in Odoo 14 + 24 + https://youtu.be/kAbSIto2WDU + video + + + + + + + 25-Advanced Views - Kanban View in Odoo 14 + 25 + https://youtu.be/FIZy-O3T3T4 + video + + + + + + + 26-Odoo Security - Groups and Access Rights + 26 + https://youtu.be/IF2q7rzjIew + video + + + + + + + 27-Odoo Security - Record Rules + 27 + https://youtu.be/LoXZk52aZVU + video + + + + + + + 28-Odoo wizards - Creating and Launching + 28 + https://youtu.be/f2YesIhCQT4 + video + + + + + + + + + + + + + + + + + 29-Odoo Reporting - Printed Report(PDF).mp4 + 29 + https://youtu.be/aEaFPo7eUL8 + video + + + + + + + 30-Odoo Reporting - Setup a Dashboard + 30 + https://youtu.be/sxXMnym1jRg + video + + + + + + + diff --git a/open_academy/data/slide_channel_data_v13.xml b/open_academy/data/slide_channel_data_v13.xml new file mode 100644 index 000000000..fe685b900 --- /dev/null +++ b/open_academy/data/slide_channel_data_v13.xml @@ -0,0 +1,319 @@ + + + + + Odoo 13 Development Tutorial + + public + 0 + training + + most_voted + + + Learn how to build a module for Odoo 13 + + + + + 1-How to Install Pycharm and Configure PostgreSQL on Ubuntu + 1 + https://youtu.be/V8JxrYLX0VM + video + + + + + + + 2-How to Configure Odoo 13 on Pycharm Ubuntu + 2 + https://youtu.be/nKguOFx0L08 + video + + + + + + + 3-Components and Structure of Odoo 13 Module + 3 + https://youtu.be/7vkRCzvnhHs + video + + + + + + + 4-How to Create an Empty Module Structure Scaffold Command in Odoo 13 + 4 + https://youtu.be/YbKbYHt3quw + video + + + + + + + 5-Building a module in Odoo 13 + 5 + https://youtu.be/9AvMGOn2ZIw + video + + + + + + + 6-Relations Between Models on Odoo: Many2One Fields in Odoo 13 + 6 + https://youtu.be/MY2bmJmvjSw + video + + + + + + + 7-Relations Between Models in Odoo: One2Many Fields in Odoo 13 + 7 + https://youtu.be/r23BsiktP5g + video + + + + + + + 8-Relations Between Models in Odoo: Many2Many Fields in Odoo 13 + 8 + https://youtu.be/Mgr4M59KjhM + video + + + + + + + 9-Inheritance - Traditional Class Inheritance in Odoo 13 + 9 + https://youtu.be/9AvMGOn2ZIw + video + + + + + + + 10-Inheritance - Traditional Prototype Inheritance in Odoo 13 + 10 + https://youtu.be/WfYN_-AZqio + video + + + + + + + 11-Inheritance - Delegation Inheritance in Odoo 13 + 11 + https://youtu.be/46V3kD5O1sw + video + + + + + + + 12-View Inheritance in Odoo 13 + 12 + https://youtu.be/nTXZOSWhqQs + video + + + + + + + 13-Computed fields and @api.depends in Odoo 13 + 13 + https://youtu.be/eNEgnJGXf68 + video + + + + + + + 14-Setting Default Value for Fields in Odoo 13 + 14 + https://youtu.be/pwgFTIKmH4g + video + + + + + + + 15-Onchange mechanism - @api.onchange in Odoo 13 + 15 + https://youtu.be/NVr5rqklowQ + video + + + + + + + 16-Model Constraints - Python Constraints in Odoo 13 + 16 + https://youtu.be/GTpoo7dgcOY + video + + + + + + + 17-Model Constraints - SQL Constraints in Odoo 13 + 17 + https://youtu.be/EgijG79thgw + video + + + + + + + 18-Tree View Decoration Attribute in odoo 13 + 18 + https://youtu.be/UkBQZeTVLuo + video + + + + + + + 19-Advanced Views - Calendar View in Odoo 13 + 19 + https://youtu.be/gJdRL7Nlmno + video + + + + + + + 20-Advanced Views - Search View in Odoo 13 + 20 + https://youtu.be/b5pxrpntIqE + video + + + + + + + 21-Advanced Views - Gantt View in Odoo 13 + 21 + https://youtu.be/xvGZ9at5c_w + video + + + + + + + 22-Pivot View in Odoo + 22 + https://youtu.be/t9233sxQVIc + video + + + + + + + 23-Graph View in Odoo + 23 + https://youtu.be/8-cup65wEF4 + video + + + + + + + 24-Kanban View in Odoo 13 + 24 + https://youtu.be/Hj4lbg_uwJA + video + + + + + + + 25-Pivot View in Odoo + 25 + https://youtu.be/t9233sxQVIc + video + + + + + + + 26-Security - Groups and access rights in Odoo + 26 + https://youtu.be/wgPtgPbY4uc + video + + + + + + + 27-Wizards - Defining and Launching in Odoo + 27 + https://youtu.be/KT5Vj0P8f8c + video + + + + + + + 28-Odoo Development - URL Actions in Odoo 13 + 28 + https://youtu.be/HxiBsiMCqDY + video + + + + + + + 29-Odoo Development - Server Actions in Odoo 13 + 29 + https://youtu.be/dS3EVb-Xjms + video + + + + + + + 30-Odoo Development - Automated Actions in Odoo 13 + 30 + https://youtu.be/dS3EVb-Xjms + video + + + + + + + \ No newline at end of file diff --git a/open_academy/data/slide_channel_data_v15.xml b/open_academy/data/slide_channel_data_v15.xml new file mode 100644 index 000000000..a77b1851b --- /dev/null +++ b/open_academy/data/slide_channel_data_v15.xml @@ -0,0 +1,330 @@ + + + + + + Odoo 15 Development Tutorial + + public + 1 + training + + most_voted + + + Learn how to build a module for Odoo 15 + + + + + 1-How to Install Pycharm and Configure PostgreSQL on Ubuntu + 1 + https://youtu.be/V8JxrYLX0VM + video + + + + + + + 2-How to Configure Odoo 15 on Pycharm Ubuntu + 2 + https://youtu.be/eXVLsQhu0wQ + video + + + + + + + 3-Building a Module With Menus and Actions in Odoo 15 + 3 + https://youtu.be/TiJ__I77CyE + video + + + + + + + 4-Compositions of a Odoo 15 Module + 4 + https://youtu.be/v9sZdqDDWDs + video + + + + + + + 5- Structure of a Odoo 15 Module + 5 + https://youtu.be/hdYiwlSZavM + video + + + + + + + 6- Creating an Empty Module Structure Using Scaffold in Odoo 15 + 6 + https://youtu.be/FXj0-BEfZBo + video + + + + + + + 7- Adding Data Files in to Your Odoo 15 module + 7 + https://youtu.be/56KHuSyMdIE + video + + + + + + + 8- Basic Views in Odoo 15 (Tree, Form, and Search) + 8 + https://youtu.be/oI89tlL5gyo + video + + + + + + + 9-Relations Between Models: Many2One Fields in Odoo 15 + 9 + https://youtu.be/qiTbIM8i04w + video + + + + + + + 10-Relations Between Models: One2Many Fields in Odoo 15 + 10 + https://youtu.be/HP_s-XlhbfE + video + + + + + + + 11-Relations Between Models: Many2Many Fields in Odoo 15 + 11 + https://youtu.be/yvkQBvFKDWk + video + + + + + + + 12-Inheritance - Traditional Class Inheritance in Odoo 15 + 12 + https://youtu.be/H_CvJaIcby8 + video + + + + + + + 13-Inheritance - Traditional Prototype Inheritance in Odoo 15 + 13 + https://youtu.be/y8wZDo_CQag + video + + + + + + + 14-Inheritance - Delegation Inheritance in Odoo 15 + 14 + https://youtu.be/o6YiKsbYZ3k + video + + + + + + + 15-Computed fields and @api.depends in Odoo 15 + 15 + https://youtu.be/Ls4d_7D_kVE + video + + + + + + + 16-Setting Default Value for Fields in Odoo 15 + 16 + https://youtu.be/M02XbyiSYpo + video + + + + + + + 17-Onchange mechanism - @api.onchange in Odoo 15 + 17 + https://youtu.be/tzWrNVDt244 + video + + + + + + + 18-Model Constraints - Python Constraints in Odoo 15 + 18 + https://youtu.be/xoVnGqI_v1s + video + + + + + + + 19-Model Constraints - SQL Constraints in Odoo 15 + 19 + https://youtu.be/3hq-7rZl73M + video + + + + + + + 20-Advanced Views - Tree View Decoration Attribute in Odoo 15 + 20 + https://youtu.be/DQJwjv76zz0 + video + + + + + + + 21-Advanced Views - Calendar View in Odoo 15 + 21 + https://youtu.be/pDm9wzPimyA + video + + + + + + + 22-Advanced Views - Search View in Odoo 15 + 22 + https://youtu.be/fS7qT0dOmPQ + video + + + + + + + 23-Advanced Views - Graph View in Odoo 15 + 23 + https://youtu.be/v8JYYUASVsU + video + + + + + + + 24-Advanced Views - Gantt View in Odoo 15 + 24 + https://youtu.be/bsbRLPYj3k0 + video + + + + + + + 25-Advanced Views - Kanban View in Odoo 15 + 25 + https://youtu.be/lwIyDmTX3uQ + video + + + + + + + 26-Odoo Security - Groups and Access Rights + 26 + https://youtu.be/pTmv_Nwg2O4 + video + + + + + + + 27-Odoo Security - Record Rules + 27 + https://youtu.be/JS3lxDdOl-Y + video + + + + + + + 28-Odoo wizards - Creating and Launching + 28 + https://youtu.be/CFEOKFKmz7Q + video + + + + + + + + + + + + + + + + + 29-Odoo Reporting - Printed Report(PDF).mp4 + 29 + https://youtu.be/evXKEMFc3FQ + video + + + + + + + 30-Odoo Reporting - Setup a Dashboard + 30 + https://youtu.be/sxXMnym1jRg + video + + + + + + + diff --git a/open_academy/demo/demo.xml b/open_academy/demo/demo.xml new file mode 100644 index 000000000..93f6265ed --- /dev/null +++ b/open_academy/demo/demo.xml @@ -0,0 +1,46 @@ + + + + + Course 0 + Course 0's description + Can have multiple lines + + + + Course 1 + + + + Course 2 + Course 2's description + + + + + diff --git a/open_academy/models/__init__.py b/open_academy/models/__init__.py new file mode 100644 index 000000000..3fcd78295 --- /dev/null +++ b/open_academy/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import partner +from . import wizard \ No newline at end of file diff --git a/open_academy/models/models.py b/open_academy/models/models.py new file mode 100644 index 000000000..ddc8e1ffc --- /dev/null +++ b/open_academy/models/models.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- + + +from datetime import timedelta +from odoo import models, fields, api, exceptions, _ + + +class Course(models.Model): + _name = 'openacademy.course' + _description = "OpenAcademy Courses" + + name = fields.Char(string="Title", required=True) + description = fields.Text() + + responsible_id = fields.Many2one('res.users', string='Responsible', ondelete='set null', index=True) + session_ids = fields.One2many('openacademy.session', 'course_id', string="Sessions") + + _sql_constraints = [ + ('name_description_check', + 'CHECK(name != description)', + "The title of the course should not be the description"), + + ('name_unique', + 'UNIQUE(name)', + "The course title must be unique"), + ] + + +class Session(models.Model): + _name = 'openacademy.session' + _description = "OpenAcademy Sessions" + + name = fields.Char(required=True) + start_date = fields.Date(default=fields.Date.today()) + duration = fields.Float(digits=(6, 2), help="Duration in days") + seats = fields.Integer(string="Number of seats") + + instructor_id = fields.Many2one('res.partner', string='Instructor') + course_id = fields.Many2one('openacademy.course', string='Course', ondelete='cascade', required=True) + attendee_ids = fields.Many2many('res.partner', string="Attendees") + active = fields.Boolean(default=True) + + taken_seats = fields.Float(string="Taken seats", compute='_taken_seats') + + end_date = fields.Date(string="End Date", store=True, + compute='_get_end_date', inverse='_set_end_date') + + attendees_count = fields.Integer( + string="Attendees count", compute='_get_attendees_count', store=True) + + color = fields.Integer() + + @api.depends('seats', 'attendee_ids') + def _taken_seats(self): + for r in self: + if not r.seats: + r.taken_seats = 0.0 + else: + r.taken_seats = 100.0 * len(r.attendee_ids) / r.seats + + @api.onchange('seats', 'attendee_ids') + def _verify_valid_seats(self): + if self.seats < 0: + return { + 'warning': { + 'title': _("Incorrect 'seats' value"), + 'message': _("The number of available seats may not be negative"), + }, + } + if self.seats < len(self.attendee_ids): + return { + 'warning': { + 'title': "Too many attendees", + 'message': "Increase seats or remove excess attendees", + }, + } + + @api.depends('start_date', 'duration') + def _get_end_date(self): + for r in self: + if not (r.start_date and r.duration): + r.end_date = r.start_date + continue + + # Add duration to start_date, but: Monday + 5 days = Saturday, so + # subtract one second to get on Friday instead + duration = timedelta(days=r.duration, seconds=-1) + r.end_date = r.start_date + duration + + def _set_end_date(self): + for r in self: + if not (r.start_date and r.end_date): + continue + + # Compute the difference between dates, but: Friday - Monday = 4 days, + # so add one day to get 5 days instead + r.duration = (r.end_date - r.start_date).days + 1 + + @api.depends('attendee_ids') + def _get_attendees_count(self): + for r in self: + r.attendees_count = len(r.attendee_ids) + + @api.constrains('instructor_id', 'attendee_ids') + def _check_instructor_not_in_attendees(self): + for r in self: + if r.instructor_id and r.instructor_id in r.attendee_ids: + raise exceptions.ValidationError("A session's instructor can't be an attendee") + diff --git a/open_academy/models/partner.py b/open_academy/models/partner.py new file mode 100644 index 000000000..85801f105 --- /dev/null +++ b/open_academy/models/partner.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +from odoo import fields, models + + +class Partner(models.Model): + _inherit = 'res.partner' + + # Add a new column to the res.partner model, by default partners are not + # instructors + instructor = fields.Boolean("Instructor", default=False) + + session_ids = fields.Many2many('openacademy.session', + string="Attended Sessions", readonly=True) diff --git a/open_academy/models/wizard.py b/open_academy/models/wizard.py new file mode 100644 index 000000000..d83b7eb1c --- /dev/null +++ b/open_academy/models/wizard.py @@ -0,0 +1,18 @@ +from odoo import models, fields, api + + +class Wizard(models.TransientModel): + _name = 'openacademy.wizard' + _description = "Wizard: Quick Registration of Attendees to Sessions" + + def _default_sessions(self): + return self.env['openacademy.session'].browse(self._context.get('active_ids')) + + session_ids = fields.Many2many('openacademy.session', + string="Session", required=True, default=_default_sessions) + attendee_ids = fields.Many2many('res.partner', string="Attendees") + + def subscribe(self): + for session in self.session_ids: + session.attendee_ids |= self.attendee_ids + return {} diff --git a/open_academy/reports.xml b/open_academy/reports.xml new file mode 100644 index 000000000..c0311f80a --- /dev/null +++ b/open_academy/reports.xml @@ -0,0 +1,32 @@ + + + + Session Report + openacademy.session + qweb-pdf + open_academy.report_session_view + open_academy.report_session + + report + + + + + diff --git a/open_academy/security/ir.model.access.csv b/open_academy/security/ir.model.access.csv new file mode 100644 index 000000000..d85f71642 --- /dev/null +++ b/open_academy/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 +course_manager,course manager,model_openacademy_course,group_manager,1,1,1,1 +session_manager,session manager,model_openacademy_session,group_manager,1,1,1,1 +course_read_all,course all,model_openacademy_course,,1,0,0,0 +session_read_all,session all,model_openacademy_session,,1,0,0,0 +wizard_manager,wizard session manager,model_openacademy_wizard,group_manager,1,1,1,1 \ No newline at end of file diff --git a/open_academy/security/security.xml b/open_academy/security/security.xml new file mode 100644 index 000000000..35d8c6765 --- /dev/null +++ b/open_academy/security/security.xml @@ -0,0 +1,23 @@ + + + + OpenAcademy / Manager + + + + + Only Responsible can modify Course + + + + + + + + ['|', ('responsible_id','=',False), + ('responsible_id','=',user.id)] + + + + + diff --git a/open_academy/static/description/banner.gif b/open_academy/static/description/banner.gif new file mode 100644 index 000000000..29de8f2fe Binary files /dev/null and b/open_academy/static/description/banner.gif differ diff --git a/open_academy/static/description/icon.png b/open_academy/static/description/icon.png new file mode 100644 index 000000000..93ea937cd Binary files /dev/null and b/open_academy/static/description/icon.png differ diff --git a/open_academy/static/description/images/arrows-transparent.png b/open_academy/static/description/images/arrows-transparent.png new file mode 100644 index 000000000..f2973bb02 Binary files /dev/null and b/open_academy/static/description/images/arrows-transparent.png differ diff --git a/open_academy/static/description/images/cybrosys.png b/open_academy/static/description/images/cybrosys.png new file mode 100644 index 000000000..d76b5bafb Binary files /dev/null and b/open_academy/static/description/images/cybrosys.png differ diff --git a/open_academy/static/description/images/developer_tuorial.gif b/open_academy/static/description/images/developer_tuorial.gif new file mode 100644 index 000000000..29de8f2fe Binary files /dev/null and b/open_academy/static/description/images/developer_tuorial.gif differ diff --git a/open_academy/static/description/images/icons/ecom.png b/open_academy/static/description/images/icons/ecom.png new file mode 100644 index 000000000..6e720d50e Binary files /dev/null and b/open_academy/static/description/images/icons/ecom.png differ diff --git a/open_academy/static/description/images/icons/education.png b/open_academy/static/description/images/icons/education.png new file mode 100644 index 000000000..f0de98eb0 Binary files /dev/null and b/open_academy/static/description/images/icons/education.png differ diff --git a/open_academy/static/description/images/icons/hotel.png b/open_academy/static/description/images/icons/hotel.png new file mode 100644 index 000000000..917c6a63e Binary files /dev/null and b/open_academy/static/description/images/icons/hotel.png differ diff --git a/open_academy/static/description/images/icons/manufacturing.png b/open_academy/static/description/images/icons/manufacturing.png new file mode 100644 index 000000000..68c3722f8 Binary files /dev/null and b/open_academy/static/description/images/icons/manufacturing.png differ diff --git a/open_academy/static/description/images/icons/pos.png b/open_academy/static/description/images/icons/pos.png new file mode 100644 index 000000000..600bfe4f9 Binary files /dev/null and b/open_academy/static/description/images/icons/pos.png differ diff --git a/open_academy/static/description/images/icons/restaurant.png b/open_academy/static/description/images/icons/restaurant.png new file mode 100644 index 000000000..680acf29e Binary files /dev/null and b/open_academy/static/description/images/icons/restaurant.png differ diff --git a/open_academy/static/description/images/icons/service.png b/open_academy/static/description/images/icons/service.png new file mode 100644 index 000000000..bfbe7a6d2 Binary files /dev/null and b/open_academy/static/description/images/icons/service.png differ diff --git a/open_academy/static/description/images/icons/trading.png b/open_academy/static/description/images/icons/trading.png new file mode 100644 index 000000000..a741219b5 Binary files /dev/null and b/open_academy/static/description/images/icons/trading.png differ diff --git a/open_academy/static/description/images/odoo13.png b/open_academy/static/description/images/odoo13.png new file mode 100644 index 000000000..58865eaf8 Binary files /dev/null and b/open_academy/static/description/images/odoo13.png differ diff --git a/open_academy/static/description/images/odoo14.png b/open_academy/static/description/images/odoo14.png new file mode 100644 index 000000000..55ffa6a62 Binary files /dev/null and b/open_academy/static/description/images/odoo14.png differ diff --git a/open_academy/static/description/images/odoo15.png b/open_academy/static/description/images/odoo15.png new file mode 100644 index 000000000..7269b7402 Binary files /dev/null and b/open_academy/static/description/images/odoo15.png differ diff --git a/open_academy/static/description/images/odoo_technical_tip.png b/open_academy/static/description/images/odoo_technical_tip.png new file mode 100644 index 000000000..49ed52ac8 Binary files /dev/null and b/open_academy/static/description/images/odoo_technical_tip.png differ diff --git a/open_academy/static/description/images/trophy.png b/open_academy/static/description/images/trophy.png new file mode 100644 index 000000000..a5496a866 Binary files /dev/null and b/open_academy/static/description/images/trophy.png differ diff --git a/open_academy/static/description/index.html b/open_academy/static/description/index.html new file mode 100644 index 000000000..8858fff3b --- /dev/null +++ b/open_academy/static/description/index.html @@ -0,0 +1,772 @@ + + + + + + + + Odoo 13, 14 And 15 Development Tutorial + + + + + + +
+
+
+ +
+
+ +
+

+ Odoo 15 Development Tutorial

+ +

+ Our Unique Odoo Development Tutorial Course will cover the basics of Odoo Development. You + will learn how to develop and configure odoo, based on specific requirements. +

+ + Key Highlights + +
+
+
+ +
    +
  • Odoo Technical Tips +
  • +
  • Odoo 15 Development Tutorial +
  • +
  • Odoo 14 Development Tutorial +
  • +
  • Odoo 13 Development Tutorial +
  • +
+
+
+ +
+ +
+ + +
+ + + + +
+ +
+
+

What you will learn?

+
    +
  • Learn to + configure your Odoo project. +
  • +
  • Understand the + components and structure of a Odoo module. +
  • +
  • Design and + create modules +
  • +
  • Relation between + models in Odoo(One2Many, Many2One and Many2Many). +
  • +
  • Understand + Inheritance aspects of Odoo (Class, Prototype and Delegation inheritances). +
  • +
  • How to modify + existing views(View inheritance). +
  • +
  • Learn advanced + views of the platform (Tree, Calander. Search, Gantt, Pivot, Graph and Kanban views). +
  • +
  • Understand + security of Odoo (Groups, Access rights, Record rules) +
  • +
  • And many + more.... +
  • +
+
+
+
+ +
+
+
+ + +
+
+ +
+
+

+ Overview

+ +

Our Unique Odoo Development Tutorial Course will cover the basics + of Odoo Development. You + will learn how to develop and configure odoo, based on specific requirements.

+
+
+

+ Features

+
    +
  • +
    + Learn to configure your Odoo project.
    +
  • +
  • +
    + Understand the components and structure of a Odoo module.
    +
  • +
  • +
    + Design and create modules
    +
  • +
  • +
    + Relation between models in Odoo(One2Many, Many2One and Many2Many).
    +
  • +
  • +
    + Understand Inheritance aspects of Odoo (Class, Prototype and Delegation + inheritances).
    +
  • +
  • +
    + How to modify existing views(View inheritance).
    +
  • +
  • +
    + Learn advanced views of the platform (Tree, Calander. Search, Gantt, Pivot, + Graph and Kanban views).
    +
  • +
  • +
    + Understand security of Odoo (Groups, Access rights, Record rules)
    +
  • +
  • +
    + And many more....
    +
  • +
+
+
+

+ Screenshots

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

+ Suggested Products

+
+ +
+ + +
+ +
+
+ Odoo Gold Partner +
+
+

+ Our Services

+

We provide following services

+ +
+
+
+ Odoo Gold Partner +
+
+ + +
+ +
+ + +
+
+
+

+ Need Help?

+
+
+
+ + +
+
+
Visit us
+

Visit our + website for more + information.

+ www.cybrosys.com +
+ +
+
Write to us
+

Do you + have any queries regarding our + products & services? Let us know.

+ odoo@cybrosys.com + info@cybrosys.com +
+ b + +
+
Follow Us
+

Follow us + on social media for latest + updates.

+
+ + + + + + +
+ +
+ +
+
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + + + + diff --git a/open_academy/views/openacademy.xml b/open_academy/views/openacademy.xml new file mode 100644 index 000000000..61d20c173 --- /dev/null +++ b/open_academy/views/openacademy.xml @@ -0,0 +1,259 @@ + + + + + course.list + openacademy.course + + + + + + + + + + + course.form + openacademy.course + +
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + + course.search + openacademy.course + + + + + + + + + + + + + + + + + + Courses + openacademy.course + tree,form + + +

Create the first course +

+
+
+ + + + + + + + + + + + + session.form + openacademy.session + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + session.tree + openacademy.session + + + + + + + + + + + + + + session.calendar + openacademy.session + + + + + + + + + + session.gantt + openacademy.session + + + + + + + + + openacademy.session.graph + openacademy.session + + + + + + + + + + + + openacademy.session.kanban + openacademy.session + + + + + +
+
+ +
+ +
+
+
+
+ + Session name: + +
+ Start date: + +
+ duration: + +
+
+
+
+
+
+
+ + + + Sessions + openacademy.session + tree,form,calendar,gantt,graph,kanban + + + + + + wizard.form + openacademy.wizard + +
+ + + + +
+
+
+
+
+ + + Add Attendees + openacademy.wizard + form + new + + + + +
diff --git a/open_academy/views/partner.xml b/open_academy/views/partner.xml new file mode 100644 index 000000000..f89fae30a --- /dev/null +++ b/open_academy/views/partner.xml @@ -0,0 +1,32 @@ + + + + + + partner.instructor + res.partner + + + + + + + + + + + + + + + Contacts + res.partner + tree,form + + + + + diff --git a/open_academy/views/session_board.xml b/open_academy/views/session_board.xml new file mode 100644 index 000000000..9f4c3b77d --- /dev/null +++ b/open_academy/views/session_board.xml @@ -0,0 +1,63 @@ + + + + + Attendees by course + openacademy.session + graph + + + + Sessions + openacademy.session + calendar + + + + Courses + openacademy.course + tree,form + + + Session Dashboard Form + board.board + form + +
+ + + + + + + + + +
+
+
+ + + Session Dashboard + board.board + form + menu + + + + + +
\ No newline at end of file diff --git a/open_academy/views/templates.xml b/open_academy/views/templates.xml new file mode 100644 index 000000000..cea6b39ad --- /dev/null +++ b/open_academy/views/templates.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/open_academy/views/views.xml b/open_academy/views/views.xml new file mode 100644 index 000000000..1da3b4501 --- /dev/null +++ b/open_academy/views/views.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file