SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
ODOO (OpenERP)
Creating a MODULE
Tarun Behal
Intro..
 OpenERP use open-object server as ORM (I guess everyone is aware of ORM)
 To build a module, first decide what you want and create a sample scheme.
 In this presentation, we’ll create a new module for managing our daily transactions
where we’ll keep a log of where and what money we spent on a particular day
Daily Transaction manager (a start..)
 Each transaction will have a subject, date, amount we spent and note section where
we can write additional note regarding the transaction.
 We can also categorize transaction based on type. For eg: transport, household and
personal.
 This will help us in categorizing where we are spending more.
Daily Transaction manager - Modelling
 Once our schema is finalized, we can easily extract attribute of each field.
 For eg: Subject of transaction is mandatory, Date must be autofilled for today’s
date.
 So final schema will be as follow:
 Subject – mandatory, text field
 Date – Date field, default with current date
 Notes – text field
 Type – selection field
 Amount – mandatory and float
Daily Transaction Manager - Modelling
 Once our modelling is done, we will create a new module for our Daily Transaction
Manager
 To create a new module, first create a folder named daily_transaction inside app
directory of OpenERP
 Inside that create 2 files named __init__.py and __openerp__.py (we’ll discuss about
the files further in the presentation)
__init__.py
 In this file we’ve to write name of all folder and python files which are to be
compiled for this module.
 If any python file or a directory is not listed in this file, then those files will be
ignored which could result in fatal error
 So in our __init__.py we’ve imported our daily_transaction.py file.
__openerp__.py
__openerp__.py (cont..)
 In this file, we’ll write description of our module and its properties. Lets discuss
each field in this file:
 Name, description, version, author and category are used to describe our module and its
version. So each time we make any changes we’ll increase the version number.
 Depends : Here we specify if our module depends on other module. For eg: if we are
creating an extension to CRM module we’ll specify ‘depends: [‘crm’]’
 Data: Here we specify all xml files related to our project. We’ll discuss about xml in later
part of presentation
 Installable & Auto-install : I guess the name is enough to explain these properties.
Now lets move to dirtier part of creating a
module
CODING
daily_transaction.py
 I guess I’ve scared you enough (he he he..!!!!). So lets start with show.
 In this file we’ll write our whole code related to our daily transaction, i.e. Modelling
and Logical part.
 As you’re aware now OpenERP uses ORM, so you don’t have to write any SQL for
modelling.
FAQ : Do we’ve to write all our code in this file? (this was asked by one of trainee while
I was explaining about module development)
ANS: NOOO..!!!!!! . Be smarter..!!!! Create another python file, write your code and just
include that in __init__.py
daily_transaction.py (cont..)
daily_transaction.py (cont..)
 As you can see in previous slide we’ve written our code. Lets discuss each line in
detail now. 
 Line #1: from openerp.osv import fields, osv
 The best explanation so far can be found here (I’m lazy programmer so please go
through this and get the knowledge )
 Line #4: class daily_transaction(osv.osv)
 In this we are creating a class for our daily transaction which is inheriting osv class of
OpenERP. This will provide openerp properties of a module to our module, eg: name,
description, columns, defaults etc.
 Line #5, 6 & 9 are properties of our module
 Line #10 to #20 is our modelling of our module we discussed in Daily Transaction
manager - Modelling
daily_transaction.py (cont..)
 Line #10 to #20 will tell you about power of OpenERP ORM.
 This code is enough to create model of our daily_transaction in the database as
well in user interface and guide us which particular field is mandatory.
 ‘required=True’ is for adding mandatory attribute to our column.
 Other attribute which could be used here are invisible, readonly etc.
 We can use these attributes as dependent on other field values. For eg: we can
make notes field mandatory only if type is household.
 note: fields.text(‘Notes’, type = {‘household’: [{‘required’:True}]}),
Now our modelling part is done, lets move ahead to UI part now.
daily_transaction_view.xml
 I hope everyone may be thinking we need to write HTML, CSS and JS as well as
write actions to do CRUD operation. But with OpenERP forget about all of this.
 With OpenERP it’ll take minutes to do complete CRUD operation. So lets begin
with it.
 OpenERP uses xml template to render data.
 So first create a file named daily_transaction_view.xml in our module folder.
daily_transaction_view.xml (cont..)
 In this file, we’ll create our module UI
 So in basic UI following things are included:
 Menu
 List View (with OpenERP, we’ll call it Tree view)
 Form View
 Search View
 Other features like datepicker, calendar, sort, group, additional filtering using
AND/OR operation etc. are key features which comes automatically with OpenERP.
daily_transaction_view.xml - Menu
 To create menu, we first have to understand our requirements.
 We want our module to have a separate Menu header like any other Sales,
Purchase module
 So out structure will be as follows:
 Daily Transaction (this will be our main menu item for our Module)
 Daily Transaction (this will be our sub menu)
 Daily Transaction (this will list our records and we’ll do CRUD operation here, i.e. action menu)
 So as you can see we’ve to create 3 menus.
daily_transaction_view.xml – Menu (cont..)
 <!-- Main Menu Related Info -->
 <menuitem name="Daily Transaction" id="base.daily_transaction_root" sequence="60"/>
 <!-- Sub Menu Related Info -->
 <menuitem id="menu_daily_transaction_root" name="Daily Transaction" parent="base.daily_transaction_root"
sequence="1" />
 <!– Action Menu Related Info -->
 <menuitem action="action_daily_transaction" id="menu_action_daily_transaction"
parent="menu_daily_transaction_root" sequence="20"/>
So as you can see in our main menu, we have no parent specified. So this will create our parent menu. In sub
menu, we’ve parent, so it’ll create child of that parent menu. And in third we can see we’ve associated an
action to that, so it’ll call that action (we’ll discuss that later in the ppt)
daily_transaction_view.xml – Tree
 To create list/ tree /table, we first have to understand our requirements.
 We want our tree view which will show, subject of our transaction, date of
transaction, type and amount.
 So out structure will be as follows:
 Daily Transaction (this will be our title of List/tree view)
 Subject Date Type Amount
 <Record 1>
 <Record 2>
daily_transaction_view.xml – Tree (cont..)
This xml will create a record in model ir.ui.view.
<!--Daily Transaction List View-->
<record id="view_daily_transaction_tree" model="ir.ui.view"> <!– here id is the external id for this tree view
which must be unique and will be used for accessing this record -->
<field name="name">daily.transaction.tree</field> <!– this will be our name of record in ir.ui.view -->
<field name="model">daily.transaction</field> <!– this will map out tree view with our daily transaction model -->
<field name="arch" type="xml">
<!-- this will be our title of list/tree view -->
<tree string="Daily Transaction">
<!-- these will automatically map table headers for our list view, so we’ll select out column names of our model here -->
<field name="name"/>
<field name="date"/>
<field name="type"/>
<field name="amount"/>
</tree>
</field>
</record>
daily_transaction_view.xml – Form
We’ll create a simple layout for our form
Subject _______________
Date _________________
Type __<Household><Personal>…..__
Amount _________
Notes
_________________________________
_________________________________
daily_transaction_view.xml – Form (cont..)
<!--Daily Transaction Form View-->
<record id="view_daily_transaction_form" model="ir.ui.view">
<field name="name">daily.transaction.form.view</field>
<field name="model">daily.transaction</field>
<field name="arch" type="xml">
<!-- this will be our title of list/tree view -->
<form string="Daily Transaction" version="7.0">
<group>
<field name="name"/>
<field name="date"/>
<field name="type"/>
<field name="amount"/>
<field name="note"/>
</group>
</form>
</field>
</record>
CRUD Operation and Controller
 Now I guess you all may be thinking, what the ****. We don’t see how we’ll click
our menu item which will open out list view
 No records were mapped in our list view just like it happens in any other mvc
where we loop over records and render the data
 We didn’t specified which field is mandatory and bla bla..!!!!
 The answer to all such questions is action
 We’ll create another entry in our xml file for action
daily_transaction_view.xml – Action
<record id="action_daily_transaction" model="ir.actions.act_window">
<field name="name">Daily Transaction</field> <!– name of action -->
<field name="res_model">daily.transaction</field> <!– this action will be mapped to model
specified -->
<field name="view_type">form</field>
<field name="view_mode">tree,form</field> <!-- these are type of view our module will show for
our daily transaction mode -->
<field name="search_view_id" eval="False"/> <!– here we specify id of our search view -->
<field name="context">{}</field>
<field name="help">Create new daily transaction.</field> <!– help text for our model -->
</record>
daily_transaction_view.xml – Action (cont..)
 Line #1 as we see we specified id =“action_daily_transaction”. Now lets rewind to
daily_transaction_view.xml – Menu (cont..) and see for third menu where we
specified action. This is how when we click on that menu, this action will be called.
 For rest all I’ve mention comment on each line
daily_transaction_view.xml
Now wrap the complete xml code we discussed for menu, list, form and action in following
tags:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
_____________________our code here________________
_____________________our code here________________
</data>
</openerp>
Once done, we’ve to tell OpenERP that this will render view of our module. So we’ll make
entry for the filename in __openerp__.py
Install our module
Once done, now lets install our module and start managing our daily transaction. So
for that following steps need to be followed:
 Step 1: Restart openerp server. (service openerp-server restart)
 Step 2: Login to openerp.
 Step 3: Goto Settings-> Modules -> Update Modules List
Install our module
 Step 4: Click on Update
 Step 5: Once done, remove installed filter and search for our module name
Install our module
 Step 6: Click on Install or you can see module properties by clicking on module
name
Manage our daily transactions
Once installation is done, you can see our module name in menu bar.
Menu #1
Menu #2
Menu #3
Manage our daily transactions - Create
Click on create and let’s start posting our transactions
Manage our daily transactions – List/ Tree
view
“
”
Thank you… 
I would really appreciate your feedback. If you feel that something is missing, please
post your comment. Feel free to email me at tarunbehal@hotmail.com

Contenu connexe

Tendances

Everything you always wanted to know about forms* *but were afraid to ask
Everything you always wanted to know about forms* *but were afraid to askEverything you always wanted to know about forms* *but were afraid to ask
Everything you always wanted to know about forms* *but were afraid to askAndrea Giuliano
 
Web2py Code Lab
Web2py Code LabWeb2py Code Lab
Web2py Code LabColin Su
 
Web2py tutorial to create db driven application.
Web2py tutorial to create db driven application.Web2py tutorial to create db driven application.
Web2py tutorial to create db driven application.fRui Apps
 
Jquery presentation
Jquery presentationJquery presentation
Jquery presentationguest5d87aa6
 
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Colin O'Dell
 
Forms, Getting Your Money's Worth
Forms, Getting Your Money's WorthForms, Getting Your Money's Worth
Forms, Getting Your Money's WorthAlex Gaynor
 
Custom Signals for Uncoupled Design
Custom Signals for Uncoupled DesignCustom Signals for Uncoupled Design
Custom Signals for Uncoupled Designecomsmith
 
Ruby on rails
Ruby on rails Ruby on rails
Ruby on rails Mohit Jain
 
50 Laravel Tricks in 50 Minutes
50 Laravel Tricks in 50 Minutes50 Laravel Tricks in 50 Minutes
50 Laravel Tricks in 50 MinutesAzim Kurt
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web servicesMichelangelo van Dam
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with ReactGreeceJS
 
The Django Book - Chapter 7 forms
The Django Book - Chapter 7 formsThe Django Book - Chapter 7 forms
The Django Book - Chapter 7 formsVincent Chien
 
Building an api using golang and postgre sql v1.0
Building an api using golang and postgre sql v1.0Building an api using golang and postgre sql v1.0
Building an api using golang and postgre sql v1.0Frost
 
Form demoinplaywithmysql
Form demoinplaywithmysqlForm demoinplaywithmysql
Form demoinplaywithmysqlKnoldus Inc.
 
Functionnal view modelling
Functionnal view modelling Functionnal view modelling
Functionnal view modelling Hugo Saynac
 
Basics of Ext JS
Basics of Ext JSBasics of Ext JS
Basics of Ext JSikhwanhayat
 

Tendances (18)

Everything you always wanted to know about forms* *but were afraid to ask
Everything you always wanted to know about forms* *but were afraid to askEverything you always wanted to know about forms* *but were afraid to ask
Everything you always wanted to know about forms* *but were afraid to ask
 
Web2py Code Lab
Web2py Code LabWeb2py Code Lab
Web2py Code Lab
 
Web2py tutorial to create db driven application.
Web2py tutorial to create db driven application.Web2py tutorial to create db driven application.
Web2py tutorial to create db driven application.
 
Entity api
Entity apiEntity api
Entity api
 
Jquery presentation
Jquery presentationJquery presentation
Jquery presentation
 
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016
 
Forms, Getting Your Money's Worth
Forms, Getting Your Money's WorthForms, Getting Your Money's Worth
Forms, Getting Your Money's Worth
 
Custom Signals for Uncoupled Design
Custom Signals for Uncoupled DesignCustom Signals for Uncoupled Design
Custom Signals for Uncoupled Design
 
Ruby on rails
Ruby on rails Ruby on rails
Ruby on rails
 
RAD CRUD
RAD CRUDRAD CRUD
RAD CRUD
 
50 Laravel Tricks in 50 Minutes
50 Laravel Tricks in 50 Minutes50 Laravel Tricks in 50 Minutes
50 Laravel Tricks in 50 Minutes
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web services
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
 
The Django Book - Chapter 7 forms
The Django Book - Chapter 7 formsThe Django Book - Chapter 7 forms
The Django Book - Chapter 7 forms
 
Building an api using golang and postgre sql v1.0
Building an api using golang and postgre sql v1.0Building an api using golang and postgre sql v1.0
Building an api using golang and postgre sql v1.0
 
Form demoinplaywithmysql
Form demoinplaywithmysqlForm demoinplaywithmysql
Form demoinplaywithmysql
 
Functionnal view modelling
Functionnal view modelling Functionnal view modelling
Functionnal view modelling
 
Basics of Ext JS
Basics of Ext JSBasics of Ext JS
Basics of Ext JS
 

En vedette

Kavi internet guvenligi genel sunumu
Kavi internet guvenligi genel sunumuKavi internet guvenligi genel sunumu
Kavi internet guvenligi genel sunumuKavi International
 
Virtual team and access to knowledge
Virtual team and access to knowledgeVirtual team and access to knowledge
Virtual team and access to knowledgeAlessandro Guida
 
Mathematical analysis of decahedron with 10 congruent faces each as a right k...
Mathematical analysis of decahedron with 10 congruent faces each as a right k...Mathematical analysis of decahedron with 10 congruent faces each as a right k...
Mathematical analysis of decahedron with 10 congruent faces each as a right k...Harish Chandra Rajpoot
 
Aula isomeria prevupe reta final
Aula isomeria prevupe  reta finalAula isomeria prevupe  reta final
Aula isomeria prevupe reta finalJesrayne Nascimento
 
Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...
Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...
Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...Farming Futures
 
Entrevista Punto Apparte
Entrevista Punto ApparteEntrevista Punto Apparte
Entrevista Punto ApparteLuis Rodríguez
 
Odoo 8 tutorial accounting part 1
Odoo 8 tutorial   accounting part 1Odoo 8 tutorial   accounting part 1
Odoo 8 tutorial accounting part 1Md Omar Bare
 
Modul Odoo ERP
Modul Odoo ERPModul Odoo ERP
Modul Odoo ERPryan28_sp
 
Development Odoo Basic
Development Odoo BasicDevelopment Odoo Basic
Development Odoo BasicMario IC
 
Ersağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün Kataloğu
Ersağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün KataloğuErsağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün Kataloğu
Ersağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün KataloğuErol Dizdar
 
Odoo - Backend modules in v8
Odoo - Backend modules in v8Odoo - Backend modules in v8
Odoo - Backend modules in v8Odoo
 
30 frases sobre las Redes Sociales
30 frases sobre las Redes Sociales30 frases sobre las Redes Sociales
30 frases sobre las Redes SocialesValeria Landivar
 
Early Civilizations in the Fertile Crescent
Early Civilizations in the Fertile CrescentEarly Civilizations in the Fertile Crescent
Early Civilizations in the Fertile CrescentMichael Fernandez
 

En vedette (20)

E-procurement
E-procurementE-procurement
E-procurement
 
Kavi internet guvenligi genel sunumu
Kavi internet guvenligi genel sunumuKavi internet guvenligi genel sunumu
Kavi internet guvenligi genel sunumu
 
Ils356
Ils356Ils356
Ils356
 
Virtual team and access to knowledge
Virtual team and access to knowledgeVirtual team and access to knowledge
Virtual team and access to knowledge
 
Mathematical analysis of decahedron with 10 congruent faces each as a right k...
Mathematical analysis of decahedron with 10 congruent faces each as a right k...Mathematical analysis of decahedron with 10 congruent faces each as a right k...
Mathematical analysis of decahedron with 10 congruent faces each as a right k...
 
Du cafe
Du cafeDu cafe
Du cafe
 
Patrimonio cultural
Patrimonio culturalPatrimonio cultural
Patrimonio cultural
 
Aula isomeria prevupe reta final
Aula isomeria prevupe  reta finalAula isomeria prevupe  reta final
Aula isomeria prevupe reta final
 
Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...
Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...
Setting up an Energy Supply Company - Douglas Jackson (Laurence Gould Partner...
 
ISC, DI e Pedofilia
ISC, DI e PedofiliaISC, DI e Pedofilia
ISC, DI e Pedofilia
 
Tutorial de mixbook
Tutorial de mixbookTutorial de mixbook
Tutorial de mixbook
 
Entrevista Punto Apparte
Entrevista Punto ApparteEntrevista Punto Apparte
Entrevista Punto Apparte
 
Odoo 8 tutorial accounting part 1
Odoo 8 tutorial   accounting part 1Odoo 8 tutorial   accounting part 1
Odoo 8 tutorial accounting part 1
 
Modul Odoo ERP
Modul Odoo ERPModul Odoo ERP
Modul Odoo ERP
 
Development Odoo Basic
Development Odoo BasicDevelopment Odoo Basic
Development Odoo Basic
 
Smart Industry
Smart IndustrySmart Industry
Smart Industry
 
Ersağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün Kataloğu
Ersağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün KataloğuErsağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün Kataloğu
Ersağ Bitkisel Kozmetik ve Temizlik Maddeleri Ürün Kataloğu
 
Odoo - Backend modules in v8
Odoo - Backend modules in v8Odoo - Backend modules in v8
Odoo - Backend modules in v8
 
30 frases sobre las Redes Sociales
30 frases sobre las Redes Sociales30 frases sobre las Redes Sociales
30 frases sobre las Redes Sociales
 
Early Civilizations in the Fertile Crescent
Early Civilizations in the Fertile CrescentEarly Civilizations in the Fertile Crescent
Early Civilizations in the Fertile Crescent
 

Similaire à Odoo (open erp) creating a module

Workflow demo
Workflow demoWorkflow demo
Workflow demoKamal Raj
 
Synapse india reviews on drupal 7 entities (stanford)
Synapse india reviews on drupal 7 entities (stanford)Synapse india reviews on drupal 7 entities (stanford)
Synapse india reviews on drupal 7 entities (stanford)Tarunsingh198
 
Tips On Trick Odoo Add-On.pptx
Tips On Trick Odoo Add-On.pptxTips On Trick Odoo Add-On.pptx
Tips On Trick Odoo Add-On.pptxAgusto Sipahutar
 
Introduction to Mangento
Introduction to Mangento Introduction to Mangento
Introduction to Mangento Ravi Mehrotra
 
Mageguru - magento custom module development
Mageguru -  magento custom module development Mageguru -  magento custom module development
Mageguru - magento custom module development Mage Guru
 
Connecting your Python App to OpenERP through OOOP
Connecting your Python App to OpenERP through OOOPConnecting your Python App to OpenERP through OOOP
Connecting your Python App to OpenERP through OOOPraimonesteve
 
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.Chris Laning
 
Django 1.10.3 Getting started
Django 1.10.3 Getting startedDjango 1.10.3 Getting started
Django 1.10.3 Getting startedMoniaJ
 
RomaFramework Tutorial Basics
RomaFramework Tutorial BasicsRomaFramework Tutorial Basics
RomaFramework Tutorial BasicsLuca Garulli
 
Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0Quang Ngoc
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoJoaquim Rocha
 
Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction PresentationNerd Tzanetopoulos
 
Overview of atg framework
Overview of atg frameworkOverview of atg framework
Overview of atg frameworkYousuf Roushan
 
Programming Building Blocks for Admins
Programming Building Blocks for Admins Programming Building Blocks for Admins
Programming Building Blocks for Admins Salesforce Admins
 
How to Build a Module in Odoo 15 Scaffold Method
How to Build a Module in Odoo 15 Scaffold MethodHow to Build a Module in Odoo 15 Scaffold Method
How to Build a Module in Odoo 15 Scaffold MethodCeline George
 
Mastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsMastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsRuth Marvin
 
Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...
Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...
Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...Massimo Cenci
 
20 tips and tricks with the Autonomous Database
20 tips and tricks with the Autonomous Database20 tips and tricks with the Autonomous Database
20 tips and tricks with the Autonomous DatabaseSandesh Rao
 
Odoo 15 Composition of Module
Odoo 15 Composition of ModuleOdoo 15 Composition of Module
Odoo 15 Composition of ModuleCeline George
 

Similaire à Odoo (open erp) creating a module (20)

Workflow demo
Workflow demoWorkflow demo
Workflow demo
 
Synapse india reviews on drupal 7 entities (stanford)
Synapse india reviews on drupal 7 entities (stanford)Synapse india reviews on drupal 7 entities (stanford)
Synapse india reviews on drupal 7 entities (stanford)
 
Tips On Trick Odoo Add-On.pptx
Tips On Trick Odoo Add-On.pptxTips On Trick Odoo Add-On.pptx
Tips On Trick Odoo Add-On.pptx
 
Mangento
MangentoMangento
Mangento
 
Introduction to Mangento
Introduction to Mangento Introduction to Mangento
Introduction to Mangento
 
Mageguru - magento custom module development
Mageguru -  magento custom module development Mageguru -  magento custom module development
Mageguru - magento custom module development
 
Connecting your Python App to OpenERP through OOOP
Connecting your Python App to OpenERP through OOOPConnecting your Python App to OpenERP through OOOP
Connecting your Python App to OpenERP through OOOP
 
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
 
Django 1.10.3 Getting started
Django 1.10.3 Getting startedDjango 1.10.3 Getting started
Django 1.10.3 Getting started
 
RomaFramework Tutorial Basics
RomaFramework Tutorial BasicsRomaFramework Tutorial Basics
RomaFramework Tutorial Basics
 
Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0Open Source RAD with OpenERP 7.0
Open Source RAD with OpenERP 7.0
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction Presentation
 
Overview of atg framework
Overview of atg frameworkOverview of atg framework
Overview of atg framework
 
Programming Building Blocks for Admins
Programming Building Blocks for Admins Programming Building Blocks for Admins
Programming Building Blocks for Admins
 
How to Build a Module in Odoo 15 Scaffold Method
How to Build a Module in Odoo 15 Scaffold MethodHow to Build a Module in Odoo 15 Scaffold Method
How to Build a Module in Odoo 15 Scaffold Method
 
Mastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsMastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_arguments
 
Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...
Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...
Recipes 10 of Data Warehouse and Business Intelligence - The descriptions man...
 
20 tips and tricks with the Autonomous Database
20 tips and tricks with the Autonomous Database20 tips and tricks with the Autonomous Database
20 tips and tricks with the Autonomous Database
 
Odoo 15 Composition of Module
Odoo 15 Composition of ModuleOdoo 15 Composition of Module
Odoo 15 Composition of Module
 

Odoo (open erp) creating a module

  • 1. ODOO (OpenERP) Creating a MODULE Tarun Behal
  • 2. Intro..  OpenERP use open-object server as ORM (I guess everyone is aware of ORM)  To build a module, first decide what you want and create a sample scheme.  In this presentation, we’ll create a new module for managing our daily transactions where we’ll keep a log of where and what money we spent on a particular day
  • 3. Daily Transaction manager (a start..)  Each transaction will have a subject, date, amount we spent and note section where we can write additional note regarding the transaction.  We can also categorize transaction based on type. For eg: transport, household and personal.  This will help us in categorizing where we are spending more.
  • 4. Daily Transaction manager - Modelling  Once our schema is finalized, we can easily extract attribute of each field.  For eg: Subject of transaction is mandatory, Date must be autofilled for today’s date.  So final schema will be as follow:  Subject – mandatory, text field  Date – Date field, default with current date  Notes – text field  Type – selection field  Amount – mandatory and float
  • 5. Daily Transaction Manager - Modelling  Once our modelling is done, we will create a new module for our Daily Transaction Manager  To create a new module, first create a folder named daily_transaction inside app directory of OpenERP  Inside that create 2 files named __init__.py and __openerp__.py (we’ll discuss about the files further in the presentation)
  • 6. __init__.py  In this file we’ve to write name of all folder and python files which are to be compiled for this module.  If any python file or a directory is not listed in this file, then those files will be ignored which could result in fatal error  So in our __init__.py we’ve imported our daily_transaction.py file.
  • 8. __openerp__.py (cont..)  In this file, we’ll write description of our module and its properties. Lets discuss each field in this file:  Name, description, version, author and category are used to describe our module and its version. So each time we make any changes we’ll increase the version number.  Depends : Here we specify if our module depends on other module. For eg: if we are creating an extension to CRM module we’ll specify ‘depends: [‘crm’]’  Data: Here we specify all xml files related to our project. We’ll discuss about xml in later part of presentation  Installable & Auto-install : I guess the name is enough to explain these properties.
  • 9. Now lets move to dirtier part of creating a module CODING
  • 10. daily_transaction.py  I guess I’ve scared you enough (he he he..!!!!). So lets start with show.  In this file we’ll write our whole code related to our daily transaction, i.e. Modelling and Logical part.  As you’re aware now OpenERP uses ORM, so you don’t have to write any SQL for modelling. FAQ : Do we’ve to write all our code in this file? (this was asked by one of trainee while I was explaining about module development) ANS: NOOO..!!!!!! . Be smarter..!!!! Create another python file, write your code and just include that in __init__.py
  • 12. daily_transaction.py (cont..)  As you can see in previous slide we’ve written our code. Lets discuss each line in detail now.   Line #1: from openerp.osv import fields, osv  The best explanation so far can be found here (I’m lazy programmer so please go through this and get the knowledge )  Line #4: class daily_transaction(osv.osv)  In this we are creating a class for our daily transaction which is inheriting osv class of OpenERP. This will provide openerp properties of a module to our module, eg: name, description, columns, defaults etc.  Line #5, 6 & 9 are properties of our module  Line #10 to #20 is our modelling of our module we discussed in Daily Transaction manager - Modelling
  • 13. daily_transaction.py (cont..)  Line #10 to #20 will tell you about power of OpenERP ORM.  This code is enough to create model of our daily_transaction in the database as well in user interface and guide us which particular field is mandatory.  ‘required=True’ is for adding mandatory attribute to our column.  Other attribute which could be used here are invisible, readonly etc.  We can use these attributes as dependent on other field values. For eg: we can make notes field mandatory only if type is household.  note: fields.text(‘Notes’, type = {‘household’: [{‘required’:True}]}), Now our modelling part is done, lets move ahead to UI part now.
  • 14. daily_transaction_view.xml  I hope everyone may be thinking we need to write HTML, CSS and JS as well as write actions to do CRUD operation. But with OpenERP forget about all of this.  With OpenERP it’ll take minutes to do complete CRUD operation. So lets begin with it.  OpenERP uses xml template to render data.  So first create a file named daily_transaction_view.xml in our module folder.
  • 15. daily_transaction_view.xml (cont..)  In this file, we’ll create our module UI  So in basic UI following things are included:  Menu  List View (with OpenERP, we’ll call it Tree view)  Form View  Search View  Other features like datepicker, calendar, sort, group, additional filtering using AND/OR operation etc. are key features which comes automatically with OpenERP.
  • 16. daily_transaction_view.xml - Menu  To create menu, we first have to understand our requirements.  We want our module to have a separate Menu header like any other Sales, Purchase module  So out structure will be as follows:  Daily Transaction (this will be our main menu item for our Module)  Daily Transaction (this will be our sub menu)  Daily Transaction (this will list our records and we’ll do CRUD operation here, i.e. action menu)  So as you can see we’ve to create 3 menus.
  • 17. daily_transaction_view.xml – Menu (cont..)  <!-- Main Menu Related Info -->  <menuitem name="Daily Transaction" id="base.daily_transaction_root" sequence="60"/>  <!-- Sub Menu Related Info -->  <menuitem id="menu_daily_transaction_root" name="Daily Transaction" parent="base.daily_transaction_root" sequence="1" />  <!– Action Menu Related Info -->  <menuitem action="action_daily_transaction" id="menu_action_daily_transaction" parent="menu_daily_transaction_root" sequence="20"/> So as you can see in our main menu, we have no parent specified. So this will create our parent menu. In sub menu, we’ve parent, so it’ll create child of that parent menu. And in third we can see we’ve associated an action to that, so it’ll call that action (we’ll discuss that later in the ppt)
  • 18. daily_transaction_view.xml – Tree  To create list/ tree /table, we first have to understand our requirements.  We want our tree view which will show, subject of our transaction, date of transaction, type and amount.  So out structure will be as follows:  Daily Transaction (this will be our title of List/tree view)  Subject Date Type Amount  <Record 1>  <Record 2>
  • 19. daily_transaction_view.xml – Tree (cont..) This xml will create a record in model ir.ui.view. <!--Daily Transaction List View--> <record id="view_daily_transaction_tree" model="ir.ui.view"> <!– here id is the external id for this tree view which must be unique and will be used for accessing this record --> <field name="name">daily.transaction.tree</field> <!– this will be our name of record in ir.ui.view --> <field name="model">daily.transaction</field> <!– this will map out tree view with our daily transaction model --> <field name="arch" type="xml"> <!-- this will be our title of list/tree view --> <tree string="Daily Transaction"> <!-- these will automatically map table headers for our list view, so we’ll select out column names of our model here --> <field name="name"/> <field name="date"/> <field name="type"/> <field name="amount"/> </tree> </field> </record>
  • 20. daily_transaction_view.xml – Form We’ll create a simple layout for our form Subject _______________ Date _________________ Type __<Household><Personal>…..__ Amount _________ Notes _________________________________ _________________________________
  • 21. daily_transaction_view.xml – Form (cont..) <!--Daily Transaction Form View--> <record id="view_daily_transaction_form" model="ir.ui.view"> <field name="name">daily.transaction.form.view</field> <field name="model">daily.transaction</field> <field name="arch" type="xml"> <!-- this will be our title of list/tree view --> <form string="Daily Transaction" version="7.0"> <group> <field name="name"/> <field name="date"/> <field name="type"/> <field name="amount"/> <field name="note"/> </group> </form> </field> </record>
  • 22. CRUD Operation and Controller  Now I guess you all may be thinking, what the ****. We don’t see how we’ll click our menu item which will open out list view  No records were mapped in our list view just like it happens in any other mvc where we loop over records and render the data  We didn’t specified which field is mandatory and bla bla..!!!!  The answer to all such questions is action  We’ll create another entry in our xml file for action
  • 23. daily_transaction_view.xml – Action <record id="action_daily_transaction" model="ir.actions.act_window"> <field name="name">Daily Transaction</field> <!– name of action --> <field name="res_model">daily.transaction</field> <!– this action will be mapped to model specified --> <field name="view_type">form</field> <field name="view_mode">tree,form</field> <!-- these are type of view our module will show for our daily transaction mode --> <field name="search_view_id" eval="False"/> <!– here we specify id of our search view --> <field name="context">{}</field> <field name="help">Create new daily transaction.</field> <!– help text for our model --> </record>
  • 24. daily_transaction_view.xml – Action (cont..)  Line #1 as we see we specified id =“action_daily_transaction”. Now lets rewind to daily_transaction_view.xml – Menu (cont..) and see for third menu where we specified action. This is how when we click on that menu, this action will be called.  For rest all I’ve mention comment on each line
  • 25. daily_transaction_view.xml Now wrap the complete xml code we discussed for menu, list, form and action in following tags: <?xml version="1.0" encoding="utf-8"?> <openerp> <data> _____________________our code here________________ _____________________our code here________________ </data> </openerp> Once done, we’ve to tell OpenERP that this will render view of our module. So we’ll make entry for the filename in __openerp__.py
  • 26. Install our module Once done, now lets install our module and start managing our daily transaction. So for that following steps need to be followed:  Step 1: Restart openerp server. (service openerp-server restart)  Step 2: Login to openerp.  Step 3: Goto Settings-> Modules -> Update Modules List
  • 27. Install our module  Step 4: Click on Update  Step 5: Once done, remove installed filter and search for our module name
  • 28. Install our module  Step 6: Click on Install or you can see module properties by clicking on module name
  • 29. Manage our daily transactions Once installation is done, you can see our module name in menu bar. Menu #1 Menu #2 Menu #3
  • 30. Manage our daily transactions - Create Click on create and let’s start posting our transactions
  • 31. Manage our daily transactions – List/ Tree view
  • 32. “ ” Thank you…  I would really appreciate your feedback. If you feel that something is missing, please post your comment. Feel free to email me at tarunbehal@hotmail.com