Browse Source

[ADD] Initial Commit 'open_academy'

pull/192/merge
Ajmal Cybro 3 years ago
parent
commit
9f97314f17
  1. 4
      open_academy/__init__.py
  2. 58
      open_academy/__manifest__.py
  3. 3
      open_academy/controllers/__init__.py
  4. 21
      open_academy/controllers/controllers.py
  5. 555
      open_academy/data/slide_channel_data.xml
  6. 319
      open_academy/data/slide_channel_data_v13.xml
  7. 330
      open_academy/data/slide_channel_data_v15.xml
  8. 46
      open_academy/demo/demo.xml
  9. 5
      open_academy/models/__init__.py
  10. 109
      open_academy/models/models.py
  11. 13
      open_academy/models/partner.py
  12. 18
      open_academy/models/wizard.py
  13. 32
      open_academy/reports.xml
  14. 6
      open_academy/security/ir.model.access.csv
  15. 23
      open_academy/security/security.xml
  16. BIN
      open_academy/static/description/banner.gif
  17. BIN
      open_academy/static/description/icon.png
  18. BIN
      open_academy/static/description/images/arrows-transparent.png
  19. BIN
      open_academy/static/description/images/cybrosys.png
  20. BIN
      open_academy/static/description/images/developer_tuorial.gif
  21. BIN
      open_academy/static/description/images/icons/ecom.png
  22. BIN
      open_academy/static/description/images/icons/education.png
  23. BIN
      open_academy/static/description/images/icons/hotel.png
  24. BIN
      open_academy/static/description/images/icons/manufacturing.png
  25. BIN
      open_academy/static/description/images/icons/pos.png
  26. BIN
      open_academy/static/description/images/icons/restaurant.png
  27. BIN
      open_academy/static/description/images/icons/service.png
  28. BIN
      open_academy/static/description/images/icons/trading.png
  29. BIN
      open_academy/static/description/images/odoo13.png
  30. BIN
      open_academy/static/description/images/odoo14.png
  31. BIN
      open_academy/static/description/images/odoo15.png
  32. BIN
      open_academy/static/description/images/odoo_technical_tip.png
  33. BIN
      open_academy/static/description/images/trophy.png
  34. 772
      open_academy/static/description/index.html
  35. 259
      open_academy/views/openacademy.xml
  36. 32
      open_academy/views/partner.xml
  37. 63
      open_academy/views/session_board.xml
  38. 24
      open_academy/views/templates.xml
  39. 60
      open_academy/views/views.xml

4
open_academy/__init__.py

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

58
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',
],
}

3
open_academy/controllers/__init__.py

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

21
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/<model("open_academy.open_academy"):obj>/', auth='public')
# def object(self, obj, **kw):
# return http.request.render('openacademy.object', {
# 'object': obj
# })

555
open_academy/data/slide_channel_data.xml

@ -0,0 +1,555 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="slide_channel_odoo14_development" model="slide.channel">
<field name="name">Odoo 14 Development Tutorial</field>
<field name="user_id" ref="base.user_admin"/>
<field name="enroll">public</field>
<field name="sequence">1</field>
<field name="channel_type">training</field>
<field name="allow_comment" eval="False"/>
<field name="promote_strategy">most_voted</field>
<field name="is_published" eval="True"/>
<field name="tag_ids" eval="[]"/>
<field name="description">Learn how to build a module for Odoo 14</field>
<field name="create_date" eval="DateTime.now() - relativedelta(days=8)"/>
</record>
<record id="slide_channel_odoo14_technical_tips" model="slide.channel">
<field name="name">Odoo Technical Tips</field>
<field name="user_id" ref="base.user_admin"/>
<field name="enroll">public</field>
<field name="sequence">1</field>
<field name="channel_type">training</field>
<field name="allow_comment" eval="False"/>
<field name="promote_strategy">most_voted</field>
<field name="is_published" eval="True"/>
<field name="tag_ids" eval="[]"/>
<field name="description">Useful Odoo Technical Tips</field>
<field name="create_date" eval="DateTime.now() - relativedelta(days=8)"/>
</record>
<record id="slide_slide_odoo14_tips_1" model="slide.slide">
<field name="name">1-How to Create a Website in Odoo</field>
<field name="sequence">1</field>
<field name="url">https://youtu.be/tiVOy_rjoBk</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_2" model="slide.slide">
<field name="name">2-How to Create a Dashboard in Odoo</field>
<field name="sequence">2</field>
<field name="url">https://youtu.be/PimIGb0UDFQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_3" model="slide.slide">
<field name="name">3-How to Create a Custom Module in Odoo</field>
<field name="sequence">3</field>
<field name="url">https://youtu.be/TiJ__I77CyE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_4" model="slide.slide">
<field name="name">4-Forecast Widget in Tree View</field>
<field name="sequence">4</field>
<field name="url">https://youtu.be/qYGakJExHTk</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_5" model="slide.slide">
<field name="name">5-Odoo 14 Printed Reports PDF</field>
<field name="sequence">5</field>
<field name="url">https://youtu.be/aEaFPo7eUL8</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_6" model="slide.slide">
<field name="name">6-Odoo 14 Reporting Dashboard</field>
<field name="sequence">6</field>
<field name="url">https://youtu.be/sxXMnym1jRg</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_7" model="slide.slide">
<field name="name">7-How to Create New Models in Odoo?</field>
<field name="sequence">7</field>
<field name="url">https://youtu.be/NN6DwPFp0NQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_8" model="slide.slide">
<field name="name">8-Odoo Security Record Rules</field>
<field name="sequence">8</field>
<field name="url">https://youtu.be/LoXZk52aZVU</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_9" model="slide.slide">
<field name="name">9-Translation In Odoo 14</field>
<field name="sequence">9</field>
<field name="url">https://youtu.be/yG6p4hFwSSM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_10" model="slide.slide">
<field name="name">10-How to add settings for custom module in Odoo 14</field>
<field name="sequence">10</field>
<field name="url">https://youtu.be/3E1B-wAquLc</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_11" model="slide.slide">
<field name="name">11-Method Overriding &amp; Super in Python Odoo</field>
<field name="sequence">11</field>
<field name="url">https://youtu.be/ZRNaZF4Hvmg</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_12" model="slide.slide">
<field name="name">12-How to Create Wizard in Odoo 14</field>
<field name="sequence">12</field>
<field name="url">https://youtu.be/nzPWPUGf9LQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_13" model="slide.slide">
<field name="name">13-Web Controller in Odoo</field>
<field name="sequence">13</field>
<field name="url">https://youtu.be/xuIs1B4uueQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_14" model="slide.slide">
<field name="name">14-Odoo Owl Framework</field>
<field name="sequence">14</field>
<field name="url">https://youtu.be/ZxEhlOoYmWw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_15" model="slide.slide">
<field name="name">15-How to hide a new or existing field inside a One2Many fields</field>
<field name="sequence">15</field>
<field name="url">https://youtu.be/4ncw5ltZRiw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_16" model="slide.slide">
<field name="name">16-How to make all fields read-only in a form</field>
<field name="sequence">16</field>
<field name="url">https://youtu.be/gU0Vwt4SNaM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_17" model="slide.slide">
<field name="name">17-How to secure your Odoo database</field>
<field name="sequence">17</field>
<field name="url">https://youtu.be/jqTHa8BDIIo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_18" model="slide.slide">
<field name="name">18-How to add chatter to your custom module</field>
<field name="sequence">18</field>
<field name="url">https://youtu.be/-ezlWbg9EsM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_19" model="slide.slide">
<field name="name">19-How to Install Odoo 15 on Ubuntu 20.04</field>
<field name="sequence">19</field>
<field name="url">https://youtu.be/mlvJCfxNKDE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_20" model="slide.slide">
<field name="name">20-How to Install Odoo 14 on Ubuntu 20.04</field>
<field name="sequence">20</field>
<field name="url">https://youtu.be/ud0z9GB6phs</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_21" model="slide.slide">
<field name="name">21-How to Install Odoo 13 on Ubuntu 18.04</field>
<field name="sequence">21</field>
<field name="url">https://youtu.be/d4AaniD_UDY</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_22" model="slide.slide">
<field name="name">22-How to Configure Odoo 12 on Pycharm Ubuntu 18</field>
<field name="sequence">22</field>
<field name="url">https://youtu.be/qri0ZF8kUhU</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_tips_23" model="slide.slide">
<field name="name">23-How to Create Smart Button in Odoo 14</field>
<field name="sequence">23</field>
<field name="url">https://youtu.be/4_5Ia2wwrNo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_technical_tips"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_1" model="slide.slide">
<field name="name">1-How to Install Pycharm and Configure PostgreSQL on Ubuntu</field>
<field name="sequence">1</field>
<field name="url">https://youtu.be/V8JxrYLX0VM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_2" model="slide.slide">
<field name="name">2-How to Configure Odoo 14 on Pycharm Ubuntu</field>
<field name="sequence">2</field>
<field name="url">https://youtu.be/UGg1j5RCXKk</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_3" model="slide.slide">
<field name="name">3-Building a Module With Menus and Actions in Odoo 14</field>
<field name="sequence">3</field>
<field name="url">https://youtu.be/wwIniIlIrAc</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_4" model="slide.slide">
<field name="name">4-Compositions of a Odoo 14 Module</field>
<field name="sequence">4</field>
<field name="url">https://youtu.be/8_M96X4O6XI</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_5" model="slide.slide">
<field name="name">5- Structure of a Odoo 14 Module</field>
<field name="sequence">5</field>
<field name="url">https://youtu.be/1F0veP4EJ2Q</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_6" model="slide.slide">
<field name="name">6- Creating an Empty Module Structure Using Scaffold in Odoo 14</field>
<field name="sequence">6</field>
<field name="url">https://youtu.be/fY-QQXT2clw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_7" model="slide.slide">
<field name="name">7- Adding Data Files in to Your Odoo 14 module</field>
<field name="sequence">7</field>
<field name="url">https://youtu.be/ZGBm2X8xS8A</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_8" model="slide.slide">
<field name="name">8- Basic Views in Odoo 14 (Tree, Form, and Search)</field>
<field name="sequence">8</field>
<field name="url">https://youtu.be/kDqrUCWaYAQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_9" model="slide.slide">
<field name="name">9-Relations Between Models: Many2One Fields in Odoo 14</field>
<field name="sequence">9</field>
<field name="url">https://youtu.be/g2ug1_WRepk</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_10" model="slide.slide">
<field name="name">10-Relations Between Models: One2Many Fields in Odoo 14</field>
<field name="sequence">10</field>
<field name="url">https://youtu.be/BtcciC84bCE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_11" model="slide.slide">
<field name="name">11-Relations Between Models: Many2Many Fields in Odoo 14</field>
<field name="sequence">11</field>
<field name="url">https://youtu.be/_75tecUCgd4</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_12" model="slide.slide">
<field name="name">12-Inheritance - Traditional Class Inheritance in Odoo 14</field>
<field name="sequence">12</field>
<field name="url">https://youtu.be/YZs5fupECxE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_13" model="slide.slide">
<field name="name">13-Inheritance - Traditional Prototype Inheritance in Odoo 14</field>
<field name="sequence">13</field>
<field name="url">https://youtu.be/UsedzCIpre4</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_14" model="slide.slide">
<field name="name">14-Inheritance - Delegation Inheritance in Odoo 14</field>
<field name="sequence">14</field>
<field name="url">https://youtu.be/DXXOLKw3HmE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_15" model="slide.slide">
<field name="name">15-Computed fields and @api.depends in Odoo 14</field>
<field name="sequence">15</field>
<field name="url">https://youtu.be/ElpjiSX0Xug</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_16" model="slide.slide">
<field name="name">16-Setting Default Value for Fields in Odoo 14</field>
<field name="sequence">16</field>
<field name="url">https://youtu.be/9Xju_GFFiWA</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_17" model="slide.slide">
<field name="name">17-Onchange mechanism - @api.onchange in Odoo 14</field>
<field name="sequence">17</field>
<field name="url">https://youtu.be/5sLcvZYy78o</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_18" model="slide.slide">
<field name="name">18-Model Constraints - Python Constraints in Odoo 14</field>
<field name="sequence">18</field>
<field name="url">https://youtu.be/iGSmGY6ba9I</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_19" model="slide.slide">
<field name="name">19-Model Constraints - SQL Constraints in Odoo 14</field>
<field name="sequence">19</field>
<field name="url">https://youtu.be/QcI50BPyiT8</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_20" model="slide.slide">
<field name="name">20-Advanced Views - Tree View Decoration Attribute in Odoo 14</field>
<field name="sequence">20</field>
<field name="url">https://youtu.be/iHDnzSbKeSo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_21" model="slide.slide">
<field name="name">21-Advanced Views - Calendar View in Odoo 14</field>
<field name="sequence">21</field>
<field name="url">https://youtu.be/O3VVB0UsN-U</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_22" model="slide.slide">
<field name="name">22-Advanced Views - Search View in Odoo 14</field>
<field name="sequence">22</field>
<field name="url">https://youtu.be/WtBjxvXC504</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_23" model="slide.slide">
<field name="name">23-Advanced Views - Graph View in Odoo 14</field>
<field name="sequence">23</field>
<field name="url">https://youtu.be/qTXbbOrdgAo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_24" model="slide.slide">
<field name="name">24-Advanced Views - Gantt View in Odoo 14</field>
<field name="sequence">24</field>
<field name="url">https://youtu.be/kAbSIto2WDU</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_25" model="slide.slide">
<field name="name">25-Advanced Views - Kanban View in Odoo 14</field>
<field name="sequence">25</field>
<field name="url">https://youtu.be/FIZy-O3T3T4</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_26" model="slide.slide">
<field name="name">26-Odoo Security - Groups and Access Rights</field>
<field name="sequence">26</field>
<field name="url">https://youtu.be/IF2q7rzjIew</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_27" model="slide.slide">
<field name="name">27-Odoo Security - Record Rules</field>
<field name="sequence">27</field>
<field name="url">https://youtu.be/LoXZk52aZVU</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_28" model="slide.slide">
<field name="name">28-Odoo wizards - Creating and Launching</field>
<field name="sequence">28</field>
<field name="url">https://youtu.be/f2YesIhCQT4</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<!--<record id="slide_slide_odoo14_dev_29" model="slide.slide">-->
<!--<field name="name">29-Odoo Module Translation - AKA Internationalization</field>-->
<!--<field name="sequence">29</field>-->
<!--<field name="url"></field>-->
<!--<field name="slide_type">video</field>-->
<!--<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>-->
<!--<field name="is_published" eval="True"/>-->
<!--<field name="is_preview" eval="True"/>-->
<!--</record>-->
<record id="slide_slide_odoo14_dev_30" model="slide.slide">
<field name="name">29-Odoo Reporting - Printed Report(PDF).mp4</field>
<field name="sequence">29</field>
<field name="url">https://youtu.be/aEaFPo7eUL8</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo14_dev_31" model="slide.slide">
<field name="name">30-Odoo Reporting - Setup a Dashboard</field>
<field name="sequence">30</field>
<field name="url">https://youtu.be/sxXMnym1jRg</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo14_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
</data>
</odoo>

319
open_academy/data/slide_channel_data_v13.xml

@ -0,0 +1,319 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo><data>
<record id="slide_channel_odoo_development" model="slide.channel">
<field name="name">Odoo 13 Development Tutorial</field>
<field name="user_id" ref="base.user_admin"/>
<field name="enroll">public</field>
<field name="sequence">0</field>
<field name="channel_type">training</field>
<field name="allow_comment" eval="False"/>
<field name="promote_strategy">most_voted</field>
<field name="is_published" eval="True"/>
<field name="tag_ids" eval="[]"/>
<field name="description">Learn how to build a module for Odoo 13 </field>
<field name="create_date" eval="DateTime.now() - relativedelta(days=8)"/>
</record>
<record id="slide_slide_odoo_dev_1" model="slide.slide">
<field name="name">1-How to Install Pycharm and Configure PostgreSQL on Ubuntu</field>
<field name="sequence">1</field>
<field name="url">https://youtu.be/V8JxrYLX0VM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_2" model="slide.slide">
<field name="name">2-How to Configure Odoo 13 on Pycharm Ubuntu</field>
<field name="sequence">2</field>
<field name="url">https://youtu.be/nKguOFx0L08</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_3" model="slide.slide">
<field name="name">3-Components and Structure of Odoo 13 Module</field>
<field name="sequence">3</field>
<field name="url">https://youtu.be/7vkRCzvnhHs</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_4" model="slide.slide">
<field name="name">4-How to Create an Empty Module Structure Scaffold Command in Odoo 13</field>
<field name="sequence">4</field>
<field name="url">https://youtu.be/YbKbYHt3quw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_5" model="slide.slide">
<field name="name">5-Building a module in Odoo 13</field>
<field name="sequence">5</field>
<field name="url">https://youtu.be/9AvMGOn2ZIw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_6" model="slide.slide">
<field name="name">6-Relations Between Models on Odoo: Many2One Fields in Odoo 13</field>
<field name="sequence">6</field>
<field name="url">https://youtu.be/MY2bmJmvjSw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_7" model="slide.slide">
<field name="name">7-Relations Between Models in Odoo: One2Many Fields in Odoo 13</field>
<field name="sequence">7</field>
<field name="url">https://youtu.be/r23BsiktP5g</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_8" model="slide.slide">
<field name="name">8-Relations Between Models in Odoo: Many2Many Fields in Odoo 13</field>
<field name="sequence">8</field>
<field name="url">https://youtu.be/Mgr4M59KjhM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_9" model="slide.slide">
<field name="name">9-Inheritance - Traditional Class Inheritance in Odoo 13</field>
<field name="sequence">9</field>
<field name="url">https://youtu.be/9AvMGOn2ZIw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_10" model="slide.slide">
<field name="name">10-Inheritance - Traditional Prototype Inheritance in Odoo 13</field>
<field name="sequence">10</field>
<field name="url">https://youtu.be/WfYN_-AZqio</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_11" model="slide.slide">
<field name="name">11-Inheritance - Delegation Inheritance in Odoo 13</field>
<field name="sequence">11</field>
<field name="url">https://youtu.be/46V3kD5O1sw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_12" model="slide.slide">
<field name="name">12-View Inheritance in Odoo 13</field>
<field name="sequence">12</field>
<field name="url">https://youtu.be/nTXZOSWhqQs</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_13" model="slide.slide">
<field name="name">13-Computed fields and @api.depends in Odoo 13</field>
<field name="sequence">13</field>
<field name="url">https://youtu.be/eNEgnJGXf68</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_14" model="slide.slide">
<field name="name">14-Setting Default Value for Fields in Odoo 13</field>
<field name="sequence">14</field>
<field name="url">https://youtu.be/pwgFTIKmH4g</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_15" model="slide.slide">
<field name="name">15-Onchange mechanism - @api.onchange in Odoo 13</field>
<field name="sequence">15</field>
<field name="url">https://youtu.be/NVr5rqklowQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_16" model="slide.slide">
<field name="name">16-Model Constraints - Python Constraints in Odoo 13</field>
<field name="sequence">16</field>
<field name="url">https://youtu.be/GTpoo7dgcOY</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_17" model="slide.slide">
<field name="name">17-Model Constraints - SQL Constraints in Odoo 13</field>
<field name="sequence">17</field>
<field name="url">https://youtu.be/EgijG79thgw</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_18" model="slide.slide">
<field name="name">18-Tree View Decoration Attribute in odoo 13</field>
<field name="sequence">18</field>
<field name="url">https://youtu.be/UkBQZeTVLuo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_19" model="slide.slide">
<field name="name">19-Advanced Views - Calendar View in Odoo 13</field>
<field name="sequence">19</field>
<field name="url">https://youtu.be/gJdRL7Nlmno</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_20" model="slide.slide">
<field name="name">20-Advanced Views - Search View in Odoo 13</field>
<field name="sequence">20</field>
<field name="url">https://youtu.be/b5pxrpntIqE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_21" model="slide.slide">
<field name="name">21-Advanced Views - Gantt View in Odoo 13</field>
<field name="sequence">21</field>
<field name="url">https://youtu.be/xvGZ9at5c_w</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_22" model="slide.slide">
<field name="name">22-Pivot View in Odoo</field>
<field name="sequence">22</field>
<field name="url">https://youtu.be/t9233sxQVIc</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_23" model="slide.slide">
<field name="name">23-Graph View in Odoo</field>
<field name="sequence">23</field>
<field name="url">https://youtu.be/8-cup65wEF4</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_24" model="slide.slide">
<field name="name">24-Kanban View in Odoo 13</field>
<field name="sequence">24</field>
<field name="url">https://youtu.be/Hj4lbg_uwJA</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_25" model="slide.slide">
<field name="name">25-Pivot View in Odoo</field>
<field name="sequence">25</field>
<field name="url">https://youtu.be/t9233sxQVIc</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_26" model="slide.slide">
<field name="name">26-Security - Groups and access rights in Odoo</field>
<field name="sequence">26</field>
<field name="url">https://youtu.be/wgPtgPbY4uc</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_27" model="slide.slide">
<field name="name">27-Wizards - Defining and Launching in Odoo</field>
<field name="sequence">27</field>
<field name="url">https://youtu.be/KT5Vj0P8f8c</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_28" model="slide.slide">
<field name="name">28-Odoo Development - URL Actions in Odoo 13</field>
<field name="sequence">28</field>
<field name="url">https://youtu.be/HxiBsiMCqDY </field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_29" model="slide.slide">
<field name="name">29-Odoo Development - Server Actions in Odoo 13</field>
<field name="sequence">29</field>
<field name="url">https://youtu.be/dS3EVb-Xjms</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo_dev_30" model="slide.slide">
<field name="name">30-Odoo Development - Automated Actions in Odoo 13</field>
<field name="sequence">30</field>
<field name="url">https://youtu.be/dS3EVb-Xjms</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
</data>
</odoo>

330
open_academy/data/slide_channel_data_v15.xml

@ -0,0 +1,330 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="slide_channel_odoo15_development" model="slide.channel">
<field name="name">Odoo 15 Development Tutorial</field>
<field name="user_id" ref="base.user_admin"/>
<field name="enroll">public</field>
<field name="sequence">1</field>
<field name="channel_type">training</field>
<field name="allow_comment" eval="False"/>
<field name="promote_strategy">most_voted</field>
<field name="is_published" eval="True"/>
<field name="tag_ids" eval="[]"/>
<field name="description">Learn how to build a module for Odoo 15</field>
<field name="create_date" eval="DateTime.now() - relativedelta(days=8)"/>
</record>
<record id="slide_slide_odoo15_dev_1" model="slide.slide">
<field name="name">1-How to Install Pycharm and Configure PostgreSQL on Ubuntu</field>
<field name="sequence">1</field>
<field name="url">https://youtu.be/V8JxrYLX0VM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_2" model="slide.slide">
<field name="name">2-How to Configure Odoo 15 on Pycharm Ubuntu</field>
<field name="sequence">2</field>
<field name="url">https://youtu.be/eXVLsQhu0wQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_3" model="slide.slide">
<field name="name">3-Building a Module With Menus and Actions in Odoo 15</field>
<field name="sequence">3</field>
<field name="url">https://youtu.be/TiJ__I77CyE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_4" model="slide.slide">
<field name="name">4-Compositions of a Odoo 15 Module</field>
<field name="sequence">4</field>
<field name="url">https://youtu.be/v9sZdqDDWDs</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_5" model="slide.slide">
<field name="name">5- Structure of a Odoo 15 Module</field>
<field name="sequence">5</field>
<field name="url">https://youtu.be/hdYiwlSZavM</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_6" model="slide.slide">
<field name="name">6- Creating an Empty Module Structure Using Scaffold in Odoo 15</field>
<field name="sequence">6</field>
<field name="url">https://youtu.be/FXj0-BEfZBo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_7" model="slide.slide">
<field name="name">7- Adding Data Files in to Your Odoo 15 module</field>
<field name="sequence">7</field>
<field name="url">https://youtu.be/56KHuSyMdIE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_8" model="slide.slide">
<field name="name">8- Basic Views in Odoo 15 (Tree, Form, and Search)</field>
<field name="sequence">8</field>
<field name="url">https://youtu.be/oI89tlL5gyo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_9" model="slide.slide">
<field name="name">9-Relations Between Models: Many2One Fields in Odoo 15</field>
<field name="sequence">9</field>
<field name="url">https://youtu.be/qiTbIM8i04w</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_10" model="slide.slide">
<field name="name">10-Relations Between Models: One2Many Fields in Odoo 15</field>
<field name="sequence">10</field>
<field name="url">https://youtu.be/HP_s-XlhbfE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_11" model="slide.slide">
<field name="name">11-Relations Between Models: Many2Many Fields in Odoo 15</field>
<field name="sequence">11</field>
<field name="url">https://youtu.be/yvkQBvFKDWk</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_12" model="slide.slide">
<field name="name">12-Inheritance - Traditional Class Inheritance in Odoo 15</field>
<field name="sequence">12</field>
<field name="url">https://youtu.be/H_CvJaIcby8</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_13" model="slide.slide">
<field name="name">13-Inheritance - Traditional Prototype Inheritance in Odoo 15</field>
<field name="sequence">13</field>
<field name="url">https://youtu.be/y8wZDo_CQag</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_14" model="slide.slide">
<field name="name">14-Inheritance - Delegation Inheritance in Odoo 15</field>
<field name="sequence">14</field>
<field name="url">https://youtu.be/o6YiKsbYZ3k</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_15" model="slide.slide">
<field name="name">15-Computed fields and @api.depends in Odoo 15</field>
<field name="sequence">15</field>
<field name="url">https://youtu.be/Ls4d_7D_kVE</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_16" model="slide.slide">
<field name="name">16-Setting Default Value for Fields in Odoo 15</field>
<field name="sequence">16</field>
<field name="url">https://youtu.be/M02XbyiSYpo</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_17" model="slide.slide">
<field name="name">17-Onchange mechanism - @api.onchange in Odoo 15</field>
<field name="sequence">17</field>
<field name="url">https://youtu.be/tzWrNVDt244</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_18" model="slide.slide">
<field name="name">18-Model Constraints - Python Constraints in Odoo 15</field>
<field name="sequence">18</field>
<field name="url">https://youtu.be/xoVnGqI_v1s</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_19" model="slide.slide">
<field name="name">19-Model Constraints - SQL Constraints in Odoo 15</field>
<field name="sequence">19</field>
<field name="url">https://youtu.be/3hq-7rZl73M</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_20" model="slide.slide">
<field name="name">20-Advanced Views - Tree View Decoration Attribute in Odoo 15</field>
<field name="sequence">20</field>
<field name="url">https://youtu.be/DQJwjv76zz0</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_21" model="slide.slide">
<field name="name">21-Advanced Views - Calendar View in Odoo 15</field>
<field name="sequence">21</field>
<field name="url">https://youtu.be/pDm9wzPimyA</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_22" model="slide.slide">
<field name="name">22-Advanced Views - Search View in Odoo 15</field>
<field name="sequence">22</field>
<field name="url">https://youtu.be/fS7qT0dOmPQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_23" model="slide.slide">
<field name="name">23-Advanced Views - Graph View in Odoo 15</field>
<field name="sequence">23</field>
<field name="url">https://youtu.be/v8JYYUASVsU</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_24" model="slide.slide">
<field name="name">24-Advanced Views - Gantt View in Odoo 15</field>
<field name="sequence">24</field>
<field name="url">https://youtu.be/bsbRLPYj3k0</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_25" model="slide.slide">
<field name="name">25-Advanced Views - Kanban View in Odoo 15</field>
<field name="sequence">25</field>
<field name="url">https://youtu.be/lwIyDmTX3uQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_26" model="slide.slide">
<field name="name">26-Odoo Security - Groups and Access Rights</field>
<field name="sequence">26</field>
<field name="url">https://youtu.be/pTmv_Nwg2O4</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_27" model="slide.slide">
<field name="name">27-Odoo Security - Record Rules</field>
<field name="sequence">27</field>
<field name="url">https://youtu.be/JS3lxDdOl-Y</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_28" model="slide.slide">
<field name="name">28-Odoo wizards - Creating and Launching</field>
<field name="sequence">28</field>
<field name="url">https://youtu.be/CFEOKFKmz7Q</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<!--<record id="slide_slide_odoo14_dev_29" model="slide.slide">-->
<!--<field name="name">29-Odoo Module Translation - AKA Internationalization</field>-->
<!--<field name="sequence">29</field>-->
<!--<field name="url"></field>-->
<!--<field name="slide_type">video</field>-->
<!--<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>-->
<!--<field name="is_published" eval="True"/>-->
<!--<field name="is_preview" eval="True"/>-->
<!--</record>-->
<record id="slide_slide_odoo15_dev_30" model="slide.slide">
<field name="name">29-Odoo Reporting - Printed Report(PDF).mp4</field>
<field name="sequence">29</field>
<field name="url">https://youtu.be/evXKEMFc3FQ</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
<record id="slide_slide_odoo15_dev_31" model="slide.slide">
<field name="name">30-Odoo Reporting - Setup a Dashboard</field>
<field name="sequence">30</field>
<field name="url">https://youtu.be/sxXMnym1jRg</field>
<field name="slide_type">video</field>
<field name="channel_id" ref="open_academy.slide_channel_odoo15_development"/>
<field name="is_published" eval="True"/>
<field name="is_preview" eval="True"/>
</record>
</data>
</odoo>

46
open_academy/demo/demo.xml

@ -0,0 +1,46 @@
<odoo>
<data>
<!--
<record id="object0" model="open_academy.open_academy">
<field name="name">Object 0</field>
<field name="value">0</field>
</record>
<record id="object1" model="open_academy.open_academy">
<field name="name">Object 1</field>
<field name="value">10</field>
</record>
<record id="object2" model="open_academy.open_academy">
<field name="name">Object 2</field>
<field name="value">20</field>
</record>
<record id="object3" model="open_academy.open_academy">
<field name="name">Object 3</field>
<field name="value">30</field>
</record>
<record id="object4" model="open_academy.open_academy">
<field name="name">Object 4</field>
<field name="value">40</field>
</record>
-->
<record model="openacademy.course" id="course0">
<field name="name">Course 0</field>
<field name="description">Course 0's description
Can have multiple lines
</field>
</record>
<record model="openacademy.course" id="course1">
<field name="name">Course 1</field>
<!-- no description for this one -->
</record>
<record model="openacademy.course" id="course2">
<field name="name">Course 2</field>
<field name="description">Course 2's description</field>
</record>
</data>
</odoo>

5
open_academy/models/__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
from . import models
from . import partner
from . import wizard

109
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")

13
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)

18
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 {}

32
open_academy/reports.xml

@ -0,0 +1,32 @@
<odoo>
<record id="report_session" model="ir.actions.report">
<field name="name">Session Report</field>
<field name="model">openacademy.session</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">open_academy.report_session_view</field>
<field name="report_file">open_academy.report_session</field>
<field name="binding_model_id" ref="model_openacademy_session"/>
<field name="binding_type">report</field>
</record>
<template id="report_session_view">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="web.external_layout">
<div class="page">
<h2 t-field="doc.name"/>
<p>From <span t-field="doc.start_date"/> to <span t-field="doc.end_date"/></p>
<h3>Attendees:</h3>
<ul>
<t t-foreach="doc.attendee_ids" t-as="attendee">
<li><span t-field="attendee.name"/></li>
</t>
</ul>
</div>
</t>
</t>
</t>
</template>
</odoo>

6
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
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 course_manager course manager model_openacademy_course group_manager 1 1 1 1
3 session_manager session manager model_openacademy_session group_manager 1 1 1 1
4 course_read_all course all model_openacademy_course 1 0 0 0
5 session_read_all session all model_openacademy_session 1 0 0 0
6 wizard_manager wizard session manager model_openacademy_wizard group_manager 1 1 1 1

23
open_academy/security/security.xml

@ -0,0 +1,23 @@
<odoo>
<record id="group_manager" model="res.groups">
<field name="name">OpenAcademy / Manager</field>
</record>
<record id="only_responsible_can_modify" model="ir.rule">
<field name="name">Only Responsible can modify Course</field>
<field name="model_id" ref="model_openacademy_course"/>
<field name="groups" eval="[(4, ref('open_academy.group_manager'))]"/>
<field name="perm_read" eval="0"/>
<field name="perm_write" eval="1"/>
<field name="perm_create" eval="0"/>
<field name="perm_unlink" eval="1"/>
<field name="domain_force">
['|', ('responsible_id','=',False),
('responsible_id','=',user.id)]
</field>
</record>
</odoo>

BIN
open_academy/static/description/banner.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
open_academy/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
open_academy/static/description/images/arrows-transparent.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
open_academy/static/description/images/cybrosys.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
open_academy/static/description/images/developer_tuorial.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
open_academy/static/description/images/icons/ecom.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
open_academy/static/description/images/icons/education.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
open_academy/static/description/images/icons/hotel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
open_academy/static/description/images/icons/manufacturing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
open_academy/static/description/images/icons/pos.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
open_academy/static/description/images/icons/restaurant.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
open_academy/static/description/images/icons/service.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
open_academy/static/description/images/icons/trading.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
open_academy/static/description/images/odoo13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

BIN
open_academy/static/description/images/odoo14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

BIN
open_academy/static/description/images/odoo15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

BIN
open_academy/static/description/images/odoo_technical_tip.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
open_academy/static/description/images/trophy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

772
open_academy/static/description/index.html

@ -0,0 +1,772 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Odoo 13, 14 And 15 Development Tutorial</title>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"
integrity="sha512-P5MgMn1jBN01asBgU0z60Qk4QxiXo86+wlFahKrsQf37c9cro517WzVSPPV1tDKzhku2iJ2FVgL67wG03SGnNA=="
crossorigin="anonymous"/>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN"
crossorigin="anonymous"/>
</head>
<!-- COLORS
red-bg: #FFECEF;
green-bg: #E4FEEE;
blue-bg: #F4F4FF;
tab-title-bg: #edf2f7
jumbotron-bg: #192a56
brand-color: #b22126
yellow-pill: #f6b93b
red-text: #F66170;
green-text: #51A26E;
blue-text: #2765FC;
grey-text: #757575;
tab-title-text: #162635;
-->
<body>
<div class="oe_styling_v8">
<section class="oe_container"
style="font-family: Roboto, 'sans-serif'; padding:2rem 3rem 1rem">
<div class="row shadow-lg"
style="max-width:1540px; margin:0 auto; border-radius: 10px;">
<!-- LEFT HERO -->
<div class="col-lg-7"
style="margin-top: 0rem; padding: 3rem 2.5rem; ">
<div style="width: 200px;">
<img src="https://www.cybrosys.com/images/logo.png"
width="150px" height="auto"/>
</div>
<h2 class="mt-4"
style="font-family: Montserrat, 'sans-serif' ; font-weight: bold;">
Odoo 15 Development Tutorial</h2>
<p class="lead"
style="font-weight: 500; line-height: 1.5; color: #757575">
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.
</p>
<span class="badge px-3 py-2 depth-1"
style="background-color: #FFECEF; color: #F66170; font-weight: bold; border-radius: 1rem;"><i
class="fa fa-star mr-2"></i>Key Highlights</span>
<!-- FEATURES -->
<hr class="mt-4"
style="background: linear-gradient(to right, #e5e5e5, transparent); height: 2px; border-style: none;">
<div class="row">
<div class="col-lg-7 no-gutters">
<!-- FEATURE COLUMN LEFT -->
<ul style="list-style: none; padding: 0; font-weight: 500; line-height: 2;">
<li><i class="fa fa-check-circle mr-2"
style="color: #1abc9c;"></i>Odoo Technical Tips
</li>
<li><i class="fa fa-check-circle mr-2"
style="color: #1abc9c;"></i>Odoo 15 Development Tutorial
</li>
<li><i class="fa fa-check-circle mr-2"
style="color: #1abc9c;"></i>Odoo 14 Development Tutorial
</li>
<li><i class="fa fa-check-circle mr-2"
style="color: #1abc9c;"></i>Odoo 13 Development Tutorial
</li>
</ul>
</div>
</div>
<hr class="mt-4"
style="background: linear-gradient(to right, #e5e5e5, transparent); height: 2px; border-style: none;">
<!-- END OF FEATURES -->
</div>
<!-- END OF LEFT HERO -->
<!-- RIGHT HERO -->
<div class="col-lg-5 d-flex align-items-center"
style="border-radius: 0px 10px 10px 0px; background-repeat: no-repeat; background-size: cover;">
<img src='images/developer_tuorial.gif'
style="width:90%; height: auto; margin: 0 auto;"
class="shadow-lg"/>
<!-- <center>
<img src="https://i.ibb.co/Zg7Z8jT/gnatt-scrn.png"-->
<!-- style="width:90%; height: auto; margin: 0 auto;" class="shadow-lg">-->
<!-- </center> &ndash;&gt;-->
</div>
<!-- END OF RIGHT HERO -->
<div class="row"
style="margin:75px 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4; padding-bottom: 30px;">
<div class="col-md-12 col-sm-12 col-xs-12" style="padding: 0px;margin-left:50px">
<h2 style="font-weight: 600;font-size: 1.8rem;margin-top: 15px;">What you will learn?</h2>
<ul style=" padding: 0 1px; list-style: none; ">
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Learn to
configure your Odoo project.
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Understand the
components and structure of a Odoo module.
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Design and
create modules
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Relation between
models in Odoo(One2Many, Many2One and Many2Many).
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Understand
Inheritance aspects of Odoo (Class, Prototype and Delegation inheritances).
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> How to modify
existing views(View inheritance).
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Learn advanced
views of the platform (Tree, Calander. Search, Gantt, Pivot, Graph and Kanban views).
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Understand
security of Odoo (Groups, Access rights, Record rules)
</li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i
class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> And many
more....
</li>
</ul>
</div>
</div>
</div>
<section class="oe_container" style="margin-top: 4rem;">
<div class="row"
style="max-width:1540px; margin:0 auto; padding-bottom:64px;">
<div class="col-lg-12">
<!-- TAB LIST -->
<ul class="nav nav-tabs d-flex justify-content-center"
role="tablist"
style="background-color:unset; margin:0 auto;">
<li class="nav-item">
<a class="nav-link active" style="color: #000;"
data-toggle="tab" href="#tabs-1"
role="tab"><i class="fa fa-pie-chart mr-2"></i>Overview</a>
</li>
<li class="nav-item">
<a class="nav-link" style="color: #000;"
data-toggle="tab" href="#tabs-3" role="tab"><i
class="fa fa-star mr-2"></i>Features</a>
</li>
<li class="nav-item">
<a class="nav-link" style="color: #000;"
data-toggle="tab" href="#tabs-4" role="tab"><i
class="fa fa-picture-o mr-2"></i>Screenshots</a>
</li>
</ul>
</div>
<div class="col-lg-12">
<!-- Tab panes -->
<div class="tab-content" style="padding: 2rem;">
<div class="tab-pane active" id="tabs-1"
role="tabpanel">
<h3 class="text-center rounded px-3 py-2 mb-4"
style="background-color:#edf2f7; color: #162635; font-family: Roboto, 'sans-serif'; font-weight: bold;">
Overview</h3>
<p class="text-justify"> 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. </p>
</div>
<div class="tab-pane" id="tabs-3" role="tabpanel">
<h3 class="text-center rounded px-3 py-2 mb-4"
style="background-color:#edf2f7; color: #162635; font-family: Roboto, 'sans-serif'; font-weight: bold;">
Features</h3>
<ul style="max-width: 1200px;">
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Learn to configure your Odoo project.</h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Understand the components and structure of a Odoo module.</h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Design and create modules</h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Relation between models in Odoo(One2Many, Many2One and Many2Many).</h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Understand Inheritance aspects of Odoo (Class, Prototype and Delegation
inheritances).</h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
How to modify existing views(View inheritance).</h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Learn advanced views of the platform (Tree, Calander. Search, Gantt, Pivot,
Graph and Kanban views). </h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
Understand security of Odoo (Groups, Access rights, Record rules) </h5>
</li>
<li>
<h5 style="font-family: Roboto, 'sans-serif';">
And many more.... </h5>
</li>
</ul>
</div>
<div class="tab-pane" id="tabs-4" role="tabpanel">
<h3 class="text-center rounded px-3 py-2 mb-4"
style="background-color:#edf2f7; color: #162635; font-family: Roboto, 'sans-serif'; font-weight: bold;">
Screenshots</h3>
<div>
<section class="oe_container">
<div id="demo"
class="row carousel slide mb32"
data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active"
style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16"
style="float: left;">
<h3 class="alert"
style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;">
<i class="fa fa-check-circle-o"
style="width:40px; color:#07B700"></i>
Odoo 15 Development Tutorial
</h3>
<div style=""><img
class="img img-responsive center-block"
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
src="images/odoo15.png">
</div>
</div>
</div>
<div class="carousel-item"
style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16"
style="float: left;">
<h3 class="alert"
style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;">
<i class="fa fa-check-circle-o"
style="width:40px; color:#07B700"></i>
Odoo 14 Development Tutorial
</h3>
<div style=""><img
class="img img-responsive center-block"
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
src="images/odoo14.png">
</div>
</div>
</div>
<div class="carousel-item"
style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16"
style="float: left;">
<h3 class="alert"
style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;">
<i class="fa fa-check-circle-o"
style="width:40px; color:#07B700"></i>
Odoo 13 Development Tutorial</h3>
<div style=""><img
class="img img-responsive center-block"
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
src="images/odoo13.png">
</div>
</div>
</div>
<div class="carousel-item"
style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16"
style="float: left;">
<h3 class="mb32 alert"
style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px; ">
<i class="fa fa-check-circle-o"
style="width:40px; color:#07B700"></i>Technical Tips</h3>
<div style=""><img
class="img img-responsive center-block"
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
src="images/odoo_technical_tip.png">
</div>
</div>
</div>
</div>
</div>
<a class="carousel-control-prev"
href="#demo" data-slide="prev"
style="left:-25px;width: 35px;color: #000;"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next"
href="#demo" data-slide="next"
style="right:-25px;width: 35px;color: #000;"> <span
class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</section>
</div>
</div>
</div>
<!-- END OF TAB LIST -->
</div>
</div>
</section>
<!-- Suggested Products -->
<section class="oe_container"
style="padding:2rem 3rem 1rem; max-width:1540px; margin: 0 auto; ">
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">
Suggested Products</h2>
<hr
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<div id="suggestedSlider" class="row carousel slide mt-4"
data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item" style="min-height: 191px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/12.0/accounting_dynamic_reports/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_task_timer.png?ae168aa">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/13.0/project_report_pdf/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_repo.png?ae168aa">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/export_stockinfo_xls/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_gantt.png?ae168aa">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 191px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/12.0/project_task_timer/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/task_image.png?ae168aa">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/base_accounting_kit/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/reminder.png?ae168aa">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/12.0/project_report_pdf/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_report.png?ae168aa">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#suggestedSlider"
data-slide="prev"
style="width:35px; color:#000">
<span class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span> </a> <a
class="carousel-control-next"
href="#suggestedSlider" data-slide="next"
style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</section>
<!-- End of Suggested Products -->
<!-- Our Services -->
<section class="oe_container" style="padding:2rem 3rem 1rem">
<!-- <h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">Our Services</h2>
<hr
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> -->
<div class="row mt-4 position-relative"
style="max-width:1540px; margin: 0 auto;">
<div class="col-lg-12 jumbotron text-white position-relative shadow-sm"
style="background-color: #b22126; background-image: url('./images/arrows-transparent.png'); background-size: cover; background-position: bottom; border-radius: 10px;">
<span class="badge badge-pill px-3 py-2 text-dark shadow-sm font-weight-bold"
style="background-color: #f6b93b;"><i
class="fa fa-trophy mr-2"></i>Odoo Gold Partner</span>
<div class="row">
<div class="col-lg-6 mt-4">
<h1 style="font-family: Roboto, 'sans-serif'; color:#FFF;">
Our Services</h1>
<p class="lead">We provide following services</p>
<ul class="mt-4"
style="list-style: none; padding: 0; line-height: 2.8; font-weight: 500;">
<li>
<a href="https://www.cybrosys.com/odoo-customization-and-installation/"
style="color: white; text-decoration: none;"
target="_blank"><i
class="fa fa-cogs mr-2"
style="color: #f6b93b; font-size: 1.5rem"></i>Odoo
Customization</a></li>
<li>
<a href="https://www.cybrosys.com/odoo-erp-implementation/"
style="color: white; text-decoration: none;"
target="_blank"><i
class="fa fa-wrench mr-2"
style="color: #f6b93b; font-size: 1.5rem"></i>Odoo
Implementation</a></li>
<li><a href="https://www.cybrosys.com/odoo-erp-support/"
style="color: white; text-decoration: none;"
target="_blank"><i
class="fa fa-life-ring mr-2"
style="color: #f6b93b; font-size: 1.5rem"></i>Odoo
Support</a></li>
<li>
<a href="https://www.cybrosys.com/hire-odoo-developer/"
style="color: white; text-decoration: none;"
target="_blank"><i
class="fa fa-user mr-2"
style="color: #f6b93b; font-size: 1.5rem"></i>
Hire
Odoo Developers</a></li>
</ul>
</div>
</div>
</div>
<img src="./images/trophy.png" width="50%" height="auto"
alt="Odoo Gold Partner"
class="position-absolute" style="right: 0; bottom: 0;">
</div>
</section>
<!-- End of Our Services -->
<!-- Our Industries -->
<section class="oe_container" style="padding:2rem 3rem 1rem">
<div class="row" style="max-width:1540px; margin: 0 auto; ">
<div class="col-lg-12">
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">
Our
Industries</h2>
<hr
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
</div>
<div class="row mt-4 position-relative"
style="max-width:1540px; margin: 0 auto;">
<!-- Left Column -->
<div class="col-lg-6">
<div class="bg-white shadow px-4 py-3 mb-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/"
target="_blank"
class="text-dark" style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/trading.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
Trading</h4>
<p style="font-weight: 300;">Easily procure and
sell your products</p>
</div>
</div>
</a>
</div>
<div class="bg-white shadow px-4 py-3 my-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/"
target="_blank" class="text-dark"
style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/education.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
Education</h4>
<p style="font-weight: 300;">A Collaborative
platform for educational
management</p>
</div>
</div>
</a>
</div>
<div class="bg-white shadow px-4 py-3 my-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/"
target="_blank" class="text-dark"
style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/manufacturing.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
Manufacturing</h4>
<p style="font-weight: 300;">Plan, track and
schedule your operations</p>
</div>
</div>
</a>
</div>
<div class="bg-white shadow px-4 py-3 my-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/"
target="_blank"
class="text-dark" style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/ecom.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
E-commerce & Website</h4>
<p style="font-weight: 300;">Mobile friendly,
awe-inspiring product pages
</p>
</div>
</div>
</a>
</div>
</div>
<!-- End of Left Column -->
<!-- Right Column -->
<div class="col-lg-6">
<div class="bg-white shadow px-4 py-3 mb-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/pos/"
target="_blank"
class="text-dark" style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/pos.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
POS</h4>
<p style="font-weight: 300;">Easy configuring
and convivial selling</p>
</div>
</div>
</a>
</div>
<div class="bg-white shadow px-4 py-3 my-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/service-management/"
target="_blank"
class="text-dark" style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/service.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
Service Management</h4>
<p style="font-weight: 300;">Keep track of
services and invoice accordingly
</p>
</div>
</div>
</a>
</div>
<div class="bg-white shadow px-4 py-3 my-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/"
target="_blank" class="text-dark"
style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/restaurant.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
Restaurant</h4>
<p style="font-weight: 300;">Run your bar or
restaurant methodica</p>
</div>
</div>
</a>
</div>
<div class="bg-white shadow px-4 py-3 my-3"
style="border-radius: 10px;">
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/"
target="_blank"
class="text-dark" style="text-decoration: none;">
<div class="row">
<div class="col-lg-3 no-gutters">
<img src="./images/icons/hotel.png">
</div>
<div class="col-lg-9 no-gutters pt-3">
<h4 style="font-family: Roboto, 'sans-serif">
Hotel Management</h4>
<p style="font-weight: 300;">An all-inclusive
hotel management application
</p>
</div>
</div>
</a>
</div>
</div>
<!-- End of Right Column -->
</div>
</div>
</section>
<!-- End of Our Industries-->
<!-- Footer Section -->
<section class="oe_container" style="padding:2rem 3rem 1rem">
<div class="row" style="max-width:1540px; margin: 0 auto; ">
<div class="col-lg-12 mb-4">
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">
Need Help?</h2>
<hr
style="background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto;">
<div class="col-lg-3 shadow mt-2"
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #546E7A; height: 300px;">
<h5 class="font-weight-bold"
style="font-family: Roboto, 'sans-serif';">Visit us</h5>
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;">Visit our
website for more
information.</p>
<a href="https://cybrosys.com" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #546E7A; color: #FFF; border-radius: 4px;">www.cybrosys.com</a>
</div>
<div class="col-lg-3 shadow mt-2"
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #b22126; height: 330px;">
<h5 class="font-weight-bold"
style="font-family: Roboto, 'sans-serif';">Write to us</h5>
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;">Do you
have any queries regarding our
products &amp; services? Let us know.</p>
<a href="mailto:odoo@cybrosys.com" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #b22126; color: #FFF; border-radius: 4px;">odoo@cybrosys.com</a>
<a href="mailto:info@cybrosys.com" target="_blank"
class="btn btn-block deep_hover"
style="text-decoration: none; background-color: #b22126; color: #FFF; border-radius: 4px;">info@cybrosys.com</a>
</div>
b
<div class="col-lg-3 shadow mt-2"
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #546E7A; height: 300px;">
<h5 class="font-weight-bold"
style="font-family: Roboto, 'sans-serif';">Follow Us</h5>
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;">Follow us
on social media for latest
updates.</p>
<div class="d-flex justify-content-begin align-items-center">
<a href="https://www.facebook.com/cybrosystechnologies"
target="_blank"
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center"
style="text-decoration: none; background-color:#3b5998; color: #fff; height: 35px; width: 35px; border-radius: 4px;"><i
class="fa fa-facebook"></i></a>
<a href="https://twitter.com/cybrosys" target="_blank"
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center"
style="text-decoration: none; background-color:#00acee ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i
class="fa fa-twitter"></i></a>
<a href="https://www.youtube.com/channel/UCKjWLm7iCyOYINVspCSanjg"
target="_blank"
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center"
style="text-decoration: none; background-color:#FF0000 ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i
class="fa fa-play"></i></a>
<a href="https://medium.com/cybrosys" target="_blank"
class="btn mb-2 deep_hover d-flex justify-content-center align-items-center"
style="text-decoration: none; background-color:#000 ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i
class="fa fa-medium"></i></a>
</div>
</div>
<!-- End of Contact Cards -->
</div>
</section>
</div>
<!-- Footer -->
<section class="oe_container" style="padding:2rem 3rem 1rem;">
<div class="row"
style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center"
style="margin-top: 4rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px"
height="auto"/>
</div>
<!-- End of Logo -->
<div class="col-lg-12" style="margin-top: 2rem;">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.bundle.min.js"
integrity="sha512-wV7Yj1alIZDqZFCUQJy85VN+qvEIly93fIQAN7iqDFCPEucLCeNFz4r35FCo9s6WrpdDQPi80xbljXB8Bjtvcg=="
crossorigin="anonymous"></script>
</body>

259
open_academy/views/openacademy.xml

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record model="ir.ui.view" id="course_list_view">
<field name="name">course.list</field>
<field name="model">openacademy.course</field>
<field name="arch" type="xml">
<tree string="Course List" default_order="name desc">
<field name="name"/>
<field name="responsible_id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="course_form_view">
<field name="name">course.form</field>
<field name="model">openacademy.course</field>
<field name="arch" type="xml">
<form string="Course Form">
<sheet>
<group>
<field name="name"/>
<field name="responsible_id"/>
</group>
<notebook>
<page string="Description">
<field name="description"/>
</page>
<page string="Sessions">
<field name="session_ids">
<tree string="Registered Sessions">
<field name="name"/>
<field name="instructor_id"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="course_search_view">
<field name="name">course.search</field>
<field name="model">openacademy.course</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="description"/>
<filter name="my_courses" string="My Courses"
domain="[('responsible_id', '=', uid)]"/>
<group string="Group By">
<filter name="by_responsible" string="Responsible"
context="{'group_by': 'responsible_id'}"/>
</group>
</search>
</field>
</record>
<!-- window action -->
<!--
The following tag is an action definition for a "window action",
that is an action opening a view or a set of views
-->
<record model="ir.actions.act_window" id="course_list_action">
<field name="name">Courses</field>
<field name="res_model">openacademy.course</field>
<field name="view_mode">tree,form</field>
<field name="context" eval="{'search_default_my_courses': 1}"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">Create the first course
</p>
</field>
</record>
<!-- top level menu: no parent -->
<menuitem id="main_openacademy_menu" name="Open Academy"/>
<!-- A first level in the left side menu is needed
before using action= attribute -->
<menuitem id="openacademy_menu" name="Open Academy"
parent="main_openacademy_menu"/>
<!-- the following menuitem should appear *after*
its parent openacademy_menu and *after* its
action course_list_action -->
<menuitem id="courses_menu" name="Courses" parent="openacademy_menu"
action="course_list_action"/>
<!-- Full id location:
action="openacademy.course_list_action"
It is not required when it is the same module -->
<!-- session form view -->
<record model="ir.ui.view" id="session_form_view">
<field name="name">session.form</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<form string="Session Form">
<sheet>
<group>
<group string="General">
<field name="course_id"/>
<field name="name"/>
<field name="instructor_id"/>
<field name="active"/>
</group>
<group string="Schedule">
<field name="start_date"/>
<field name="duration"/>
<field name="seats"/>
<field name="taken_seats" widget="progressbar"/>
</group>
</group>
<label for="attendee_ids"/>
<field name="attendee_ids" widget="many2many_tags"/>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="session_tree_view">
<field name="name">session.tree</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<!--<tree string="Session Tree">-->
<tree string="Session Tree" decoration-bf="duration&lt;5" decoration-it="duration&gt;15">
<field name="name"/>
<field name="course_id"/>
<field name="duration" invisible="1"/>
<field name="taken_seats" widget="progressbar"/>
</tree>
</field>
</record>
<!-- calendar view -->
<record model="ir.ui.view" id="session_calendar_view">
<field name="name">session.calendar</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<calendar string="Session Calendar" date_start="start_date" date_stop="end_date" color="instructor_id" scales="day,week,month" mode="month">
<field name="name"/>
</calendar>
</field>
</record>
<!-- gantt view -->
<record model="ir.ui.view" id="session_gantt_view">
<field name="name">session.gantt</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<gantt string="Session Gantt"
date_start="start_date" date_stop="end_date" color="instructor_id" create="false" edit="false" plan="false" offset="1" progress="taken_seats"
default_group_by='instructor_id'>
</gantt>
</field>
</record>
<!-- graph view -->
<record model="ir.ui.view" id="openacademy_session_graph_view">
<field name="name">openacademy.session.graph</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<graph string="Participations by Courses">
<field name="course_id"/>
<field name="attendees_count" type="measure"/>
</graph>
</field>
</record>
<!-- kanban view -->
<record model="ir.ui.view" id="view_openacad_session_kanban">
<field name="name">openacademy.session.kanban</field>
<field name="model">openacademy.session</field>
<field name="arch" type="xml">
<kanban default_group_by="course_id">
<field name="color"/>
<templates>
<t t-name="kanban-box">
<div
t-attf-class="oe_kanban_color_{{kanban_getcolor(record.color.raw_value)}}
oe_kanban_global_click_edit oe_semantic_html_override
oe_kanban_card {{record.group_fancy==1 ? 'oe_kanban_card_fancy' : ''}}">
<div class="oe_dropdown_kanban">
<!-- dropdown menu -->
<div class="oe_dropdown_toggle">
<i class="fa fa-bars fa-lg" title="Manage" aria-label="Manage"/>
<ul class="oe_dropdown_menu">
<li>
<a type="delete">Delete</a>
</li>
<li>
<ul class="oe_kanban_colorpicker"
data-field="color"/>
</li>
</ul>
</div>
<div class="oe_clear"></div>
</div>
<div t-attf-class="oe_kanban_content">
<!-- title -->
Session name:
<field name="name"/>
<br/>
Start date:
<field name="start_date"/>
<br/>
duration:
<field name="duration"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record model="ir.actions.act_window" id="session_list_action">
<field name="name">Sessions</field>
<field name="res_model">openacademy.session</field>
<field name="view_mode">tree,form,calendar,gantt,graph,kanban</field>
</record>
<menuitem id="session_menu" name="Sessions"
parent="openacademy_menu"
action="session_list_action"/>
<record model="ir.ui.view" id="wizard_form_view">
<field name="name">wizard.form</field>
<field name="model">openacademy.wizard</field>
<field name="arch" type="xml">
<form string="Add Attendees">
<group>
<field name="session_ids"/>
<field name="attendee_ids"/>
</group>
<footer>
<button name="subscribe" type="object"
string="Subscribe" class="oe_highlight"/>
or
<button special="cancel" string="Cancel"/>
</footer>
</form>
</field>
</record>
<record id="launch_session_wizard" model="ir.actions.act_window">
<field name="name">Add Attendees</field>
<field name="res_model">openacademy.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="model_openacademy_session"/>
</record>
</odoo>

32
open_academy/views/partner.xml

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Add instructor field to existing view -->
<record model="ir.ui.view" id="partner_instructor_form_view">
<field name="name">partner.instructor</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Sessions">
<group>
<field name="instructor"/>
<field name="session_ids"/>
</group>
</page>
</notebook>
</field>
</record>
<record model="ir.actions.act_window" id="contact_list_action">
<field name="name">Contacts</field>
<field name="res_model">res.partner</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="configuration_menu" name="Configuration"
parent="main_openacademy_menu"/>
<menuitem id="contact_menu" name="Contacts"
parent="configuration_menu"
action="contact_list_action"/>
</odoo>

63
open_academy/views/session_board.xml

@ -0,0 +1,63 @@
<?xml version="1.0"?>
<odoo>
<record model="ir.actions.act_window" id="act_session_graph">
<field name="name">Attendees by course</field>
<field name="res_model">openacademy.session</field>
<field name="view_mode">graph</field>
<field name="view_id"
ref="open_academy.openacademy_session_graph_view"/>
</record>
<record model="ir.actions.act_window" id="act_session_calendar">
<field name="name">Sessions</field>
<field name="res_model">openacademy.session</field>
<field name="view_mode">calendar</field>
<field name="view_id" ref="open_academy.session_calendar_view"/>
</record>
<record model="ir.actions.act_window" id="act_course_list">
<field name="name">Courses</field>
<field name="res_model">openacademy.course</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.ui.view" id="board_session_form">
<field name="name">Session Dashboard Form</field>
<field name="model">board.board</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Session Dashboard">
<board style="2-1">
<column>
<action
string="Attendees by course"
name="%(act_session_graph)d"
height="150"
width="510"/>
<action
string="Sessions"
name="%(act_session_calendar)d"/>
</column>
<column>
<action
string="Courses"
name="%(act_course_list)d"/>
</column>
</board>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="open_board_session">
<field name="name">Session Dashboard</field>
<field name="res_model">board.board</field>
<field name="view_mode">form</field>
<field name="usage">menu</field>
<field name="view_id" ref="board_session_form"/>
</record>
<menuitem
name="Session Dashboard" parent="base.menu_reporting_dashboard"
action="open_board_session"
sequence="1"
id="menu_board_session"/>
</odoo>

24
open_academy/views/templates.xml

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

60
open_academy/views/views.xml

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