You are on page 1of 156

ODOO TECHNICAL DEV

ELOPMENT

Aziz Adi Nugroho


azizadinugroho4@gmail.com
085156129054

1
Aziz Adi Nugroho
• SMA N 11 Semarang (2009)
• S.Kom in Information System with GPA 3.57 of 4.0
Dian Nuswantoro University (2012-2016)
• M.Kom in Computer Science with GPA 3.83 of 4.0
Dian Nuswantoro University (2016-2019)
• Core Competency in Enterprise Architecture,
Software Engineering and Machine Learning
• Laboratory Assistant Computer Network (2015-2016)
• Software Engineer and Lead Engineer – PT PCI
Business Solution (Port Cities) (2016-2018)
• System Analyst, Project Manager and Development Manager – PT Brainmatics Cipta Infor
matika (Brainmatics) (2018 – 2020)
• Professional Trainer at Brainmatics (2016 – Now)
• Lecturer at Universitas Indraprasta PGRI (Unindra) (2020 – Now)
• Industrial IT Training and Certifications: Data Mining, System Analyst and Design with UM
L, BPMN and Enterprise Architecture Development Practice
• IT Consultant: TNP2K, Kemsos, BPS, KPK, INSW, Kemenkeu, FIF, PLN, PJB, Pertamina EP, Laz
ada, Paragon, Elizabeth Bags, HIJUP, Ethnicraft, TLI, Ayam Brand etc
2
Konten Training
1. Getting Started with Odoo Development
2. Building Your First Odoo Application
3. Inheritance – Extending Existing Applications
4. Module Data
5. Models – Structuring the Application Data
6. Views – Designing the User Interface
7. ORM Application Logic – Supporting Business Processes
8. Writing Tests and Debugging Your Code
9. QWeb and Kanban Views
10. Creating QWeb Reports
11. Creating Website Frontend Features
12. External API – Integrating with Other Systems
13. Deployment Checklist – Going Live
3
Tujuan Training
• Memahami konfigurasi & instalasi Odoo pada lingk
up pengembangan Odoo
• Mampu membuat aplikasi Odoo & memahami kons
ep dasar pengembangan Odoo
• Memahami mekanisme inherit di semua level melip
uti models, views, dan business logic
• Memahami format data file pada Odoo (XML & CS
V)
• Memahami konsep dan fitur ORM
• Mampu membuat pelaporan dengan QWEB report
• Memahami penggunaan eksternal API

4
Textbook

5
Pre Test
1. Apa itu ERP?
2. Apa syarat utama ERP?
3. Apa itu Odoo?
4. Apakah Odoo aplikasi berbasis web?
5. Sebutkan tahap instalasi Odoo?
6. Apakah developer dapat melihat struktur database melalui UI
Odoo tanpa perlu mengakses pyshical data (PostgreSQL)?
7. Sebutkan minimal 2 aplikasi yang sudah disediakan oleh Odoo?
8. Sebutkan file apa saja (minimal 2 file) yang harus sediakan oleh
developer ketika membuat modul baru?
9. Sebutkan jenis tampilan yang ada di Odoo (minimal 2)?
10. Apakah memungkinkan melakukan penambahan fitur pada apli
kasi (existing) Odoo tanpa menimpa base file Odoo?

6
Getting Started with
Odoo Development

7
Apa itu ERP?

8
Apa itu ERP?

Enterprise Resource Planning (ERP) system adalah sistem yang


mengintegrasikan dan merampingkan data di perusahaan menjadi
satu sistem lengkap yang mendukung seluruh kebutuhan
perusahaan (Bradford, 2015)

9
Sistem ERP dirancang untuk mengintegrasikan proses di semua fungsi bisnis
seperti sales, accounting, manufacturing, purchasing dll yang sebelumnya berdiri
sendiri-sendiri. Dasar dari sistem ERP adalah database yang terstruktur dengan
baik yang dapat melayani kebutuhan operasional perusahaan serta sebagai
bahan pengambilan keputusan 10
Perbedaan Sistem Informasi dan E
RP

Sistem Informasi ERP

11
Syarat Utama ERP
• Integrasi, menggabungkan berbagai kebutuhan pada satu si
stem dalam satu logical database, sehingga memudahkan s
emua departemen berbagi informasi dan berkomunikasi
• Kredibilitas, database yang ada dapat mengijinkan setiap de
partemen dalam perusahaan untuk menyimpan dan menga
mbil informasi secara real-time. Informasi tersebut harus da
pat dipercaya, dapat diakses dan mudah disebarluaskan
• Modular, rancangan sistem pada bisnis dapat memilih mod
ul-modul yang diperlukan, dikombinasikan dan disesuaikan.
Serta dapat menambahkan modul baru untuk meningkatka
n unjuk kerja bisnis

12
Manfaat ERP
• Mengintegrasikan data pada setiap departemen se
hingga dapat meningkatkan akurasi data dan menur
unkan risiko redundansi data
• Informasi dapat diakses secara real-time
• Standarisasi proses bisnis pada ERP dapat memuda
hkan pihak internal dalam berinteraksi
• Memudahkan stakeholder dalam memperoleh infor
masi untuk pengambilak keputusan

13
Revolusi Industri

14
Apa itu Odoo?

15
Apa itu Odoo?

All-in-one management software

16
Odoo
           

Odoo merupakan sistem ERP yang memiliki


    cakupan aplikasi sangat luas mulai dari Sales  
    CRM, Purchase, Warehouse, Manufacture,  
    Inventory, Project Management, Accounting,  
    HR / Payroll, Website / E-Commerce, dan  
    lain sebagainya.  
       
    Odoo Sendiri menawarkan 3 jenis solusi;  
    yaitu Odoo Enterprise, Odoo Online SaaS  
    version, dan Odoo Community version.  
    Odoo Enterprise yaitu Odoo yang di install  
  sendiri (local) dengan hardware / perangkat  

5400+
  dukungan yang harus disediakan sendiri (on-  
  site install) dengan melakukan pembayaran  
developers
  lisensi mulai dari $360 per user setiap tahun.  
  Odoo Online SaaS yaitu Odoo yang  

312
  terpasang di cloud server, dan Odoo  
  Community yaitu versi Open Source yang  
new Apps per month
  bisa kita dapatkan source code nya secara  
  gratis.      

 
   
23 languages
 
 
 

 
 
 
 

 
 
 
 
 

 
 
   
 
 

 
 
           
           

17
Sejarah Odoo

Old version, no official support, community support only

Long Term Stable version, still supported

Latest version

Future version

18
Kondisi Pasar

• Pasar Enterprise sedang dalam keadaan jenuh


• Pergerakan pasar untuk UKM tetap rendah meski investasi besar dari
vendor terkemuka
• Sistem ERP yang ada di pasaran cenderung terlalu mahal
• Lead time untuk implementasi terlalu lama
• Solusi yang ditawarkan tidak berbasis web
19
Perbandingan Implementation Cos
t ERP

20
Implementasi Odoo di Seluruh Du
nia

21
Implementasi Odoo di Indonesia

22
Bahasa Pemrograman

23
Komunitas
• https://odoo-community.org/

24
Konfigurasi & Instalas
i Odoo

25
Tahap Instalasi

Check System Requirements

Install System Requirements

Install Odoo

Run Odoo
26
Odoo System Requirements
Hardware Requirements
Requirements Specification
CPU > =4 Cores
Storage > =50 GB
RAM >=8 GB

Software Requirements
Requirements Specification
Operating System Ubuntu 18.04+ LTS (Bionic Beaver)
Programming Language Python 3.6+
Database Management System PostgreSQL 10.7+
IDE VS Code 1.41+
Browser Chromium or Chromium

27
Instalasi
1. Odoo Source Code
https://github.com/odoo/odoo

28
Instalasi
2. Configure Odoo User and Group
• sudo adduser --system --home=/opt/odoo13 --group odoo13 `
• cd /opt/odoo13
• git init
• git clone --single-branch --branch 13.0 https://github.com/odoo/odoo.g
it
4. Update Apt Source List
sudo apt-get update
6. Install Requirements
• sudo apt install python3-pip
• sudo pip3 install –r /opt/odoo13/odoo/requirement.txt

29
Instalasi
7. Install Python Dependencies for Odoo
sudo apt install git python3-pip build-essential wget python3-dev python3-venv pytho
n3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less
8. Install Dependencies Using pip3
• sudo apt install libpq-dev python3-dev
• sudo apt install build-essential
• sudo apt install postgresql-server-dev-all
• sudo pip3 install Babel decorator docutils ebaysdk feedparser gevent greenlet html2t
ext Jinja2 lxml Mako MarkupSafe mock num2words ofxparse passlib Pillow psutil psy
cogreen psycopg2 pydot pyparsing PyPDF2 pyserial python-dateutil python-openid p
ytz pyusb PyYAML qrcode reportlab requests six suds-jurko vatnumber vobject Werk
zeug XlsxWriter xlwt xlrd
9. Odoo Web Dependencies
• sudo apt-get install -y npm
• sudo ln -s /usr/bin/nodejs /usr/bin/node
• sudo npm install -g less less-plugin-clean-css
• sudo apt-get install node-less
• sudo python3 -m pip install libsass

30
Instalasi
9. Install PostgreSQL
• sudo apt-get update
• sudo apt-get install postgresql
10. Create Database User for Odoo
• sudo su postgres
• createuser --createdb --username postgres --no-cre
aterole --no-superuser --pwprompt odoo13
• exit

31
Instalasi
11. Install Gdata
• cd /opt/odoo13
• sudo wget https://pypi.python.org/packages/a8/70/bd554151443fe9e89d9a934a7891aaffc63
b9cb5c7d608972919a002c03c/gdata-2.0.18.tar.gz
• sudo tar zxvf gdata-2.0.18.tar.gz
• sudo chown -R odoo13: gdata-2.0.18
• sudo -s
• cd gdata-2.0.18/
• python3 setup.py install
12. Install wkhtmltopdf
• sudo wget https://builds.wkhtmltopdf.org/0.12.1.3/wkhtmltox_0.12.1.3-1~bionic_amd64.deb
• sudo dpkg -i wkhtmltox_0.12.1.3-1~bionic_amd64.deb
• sudo apt-get install -f
• sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
• sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
13. Jika error, wkhtmltopdf failed (error code: -8). Message: b" odoo 13
• sudo apt install ttf-mscorefonts-installer
• sudo fc-cache -f -v

32
Menjalankan Service Odoo
• sudo su odoo13 -s /bin/bash
• /opt/odoo13/odoo/odoo-bin --http-port=8069

33
34
Starting Odoo Development
• Activating The Developer Tools

35
Membuat Aplikasi di
Odoo

36
Odoo Architecture

The Model Layer, mendefinisikan struktur data dari aplikasi


The View Layer, mendeskripsikan user interface
The Controller Layer, mengelola business logic dari aplikasi
37
Essential Concepts

38
Struktur Modul Odoo

Odoo

Application Application Application

Module Module Module Module

Sub Sub
Module
Module Module

39
Struktur File pada Modul
__init__.py

__manifest__.py

models
js
views
description img
statics
src css
wizard
Module xml
data
font
demo

test

security

controller
https://www.odoo.com/documentatio
n/13.0/reference/guidelines.html
i18n

40
Penjelasan Struktur File pada Mod
ul
• __init__.py
File ini merupakan inisialisasi dari modul. File tersebut bertin
dak sebagai ‘constructor’ seperti di java. Berisi pernyataan i
mpor yang menghubungkan folder dan file dalam modul
• __manifest__.py
File ini merupakan manifest dari modul. Berisi berbagai infor
masi tentang modul seperti judul, deskripsi, versi, author dll
• models
Folder ini berisi semua file yang berbentuk file python (.py) y
ang dibuat ataupun hasil inherit
• views
Folder ini berisi semua file view (.xml). File tampilan dapat b
erisi form, tree/list, action dll
41
Penjelasan Struktur File pada Mod
ul
• static
Folder ini digunakan untuk menyimpan data terkait si
tus web
• src
• Js – berisi file .js
• Img – berisi images
• Css – berisi file css untuk mendesain
• Xml – Digunakan untuk qweb templates
• Font – berisi file font
• Lib – Digunakan untuk mengimplementasikan library dari pihak
ke-3 seperti Combobox library atau Google Maps library
• description – berisi file index.html untuk memberikan pe
ngantar grafis ke modul. Selain itu, berisi icon.png yang d
itetapkan sebagai logo pada modul

42
Penjelasan Struktur File pada Mod
ul
• data
Berisi file data (.xml). Terkadang, data perlu diisi secara default s
etiap kali menginstal modul
• demo
Berisi file data demo (.xml). Data ini berguna ketika ingin mempe
rlihatkan kepada pengguna sekilas tentang bagaimana entri data
pada modul tersebut
• security
Folder ini digunakan untuk memberikan user roles dan permissi
on (.xml/.csv)
• controller
Folder ini berisi file python (.py) yang menjalankan perintah-peri
ntah yang berfungsi untuk memproses dan mengirimkan data ke
halaman web
43
Penjelasan Struktur File pada Mod
ul
• wizard
Folder ini berisi transient models beserta view-nya. Data
disimpan sementara dalam model/tabel dan dihapus se
cara berkala (otomatis)
• test
Berisi file python (.py) untuk membuat test cases
• report
Berisi file (.xml dan .py) yang mendeskripsikan laporan
(qweb report)
• i18n
Berisi file .po yang digunakan untuk menterjemahkan te
xt
44
Membuat Modul
• Buat folder library_app
• Buat file __init__.py dan __manifest__.py
• Isi file __manifest__.py
{
'name': 'Library Management',
'description': ‘ Pengelolaan Perpustakaan',
'author’: ‘Brainmatics',
'depends': ['base'],
'application': True,
}

45
• Atribut ‘depends’ diisi dengan modul yang memiliki depe
ndensi terhadap modul yang dibuat. Jika tidak terdapat d
ependensi apapun, maka diisi dengan modul ‘base’
• Atribut lain yang bisa ditambahkan, yaitu:
• Summary: menampilkan sub judul dari modul
• Version: secara default 1.0. seharusnya mengikuti aturan sema
ntic versioning (semver.org)
• License: secara default LGPL-3
• Website: informasi url
• Category: mengelompokan modul berdasarkan fungsionalitasn
ya
• Installable: secara default ‘true’, namun dapat diset ‘false’ untu
k disable modul
• Auto_install: jika diset ‘true’, maka modul akan terinstall secar
a otomatis
46
• Adding to the addons path
/opt/odoo13/odoo/odoo-bin --addons-path=/opt/od
oo13/odoo/addons,/home/azizadingrh/custom_add
ons/ --http-port=8069

• Installing the new module

47
Menambahkan Menu
• Buat file library_menu.xml di dalam folder views

• Tambahkan script berikut pada __manifest__.py


'data':['views/library_menu.xml']

48
Menambahkan Security Groups
• Sebelum aplikasi diakses oleh pengguna, hak akses
perlu didefinisikan terlebih dahulu (security groups)
• Secara umum, Odoo menyediakan dua security gro
ups yaitu level user (pengguna biasa) dan level man
ager (akses ke konfigurasi)

49
• Buat file library_security.xml di dalam folder securit
y
• Definisikan kategori security

• Definisikan hak akses untuk kategori tersebut

50
Keterangan
• name: judul grup
• category_id: field untuk memanggil security category yang d
idefinisikan sebelumnya
• implied_ids: user pada grup ini secara otomatis akan mewari
si grup lain yang didefinisikan
• Users: memberikan hak istimewa pada grup. Misal penggun
a pada grup sales manager dapat melihat menu sale configu
ration
51
• Tambahkan script berikut pada __manifest__.py

52
The Model Layer
• Model pada Odoo mendeskripsikan business object
s, seperti opportunity, sales order, partner dll. Setia
p model memiliki sejumlah atribut
• Model diimplementasikan menggunakan python cla
ss yang berasal dari Odoo template class. Lalu diterj
emahkan ke database objects, dan Odoo secara oto
matis menangani hal tersebut ketika menginstal ata
u melakukan upgrade modul. Mekanisme tersebut
dikelola oleh Object Relational Model (ORM) bawaa
n Odoo

53
Membuat Model
• Buat file library_book.py didalam folder models
• Isi dengan script berikut

• Buat file __init__.py didalam folder models


Isi dengan script berikut
from . import library_book

54
• buka file __init__.py yang ada di dalam folder librar
y_apps dan isi dengan code berikut:
from . import models

55
• Baris pertama merupakan penanda bahwa pada file tersebu
t memiliki UTF-8 sehingga dapat menangani karakter non-A
SCII
• Baris kedua merupakan deklarasi untuk import models dan
fields yang berasal dari sistem core Odoo
• Baris ketiga menyatakan model baru yang dibuat
• Baris keempat menyatakan nama dari class/model yang dib
uat. Nama ini nantinya akan otomatis terbentuk sebagai na
ma tabel pada PostgreSQL
• Baris kelima menyatakan deskripsi dari class/model yang di
buat (not mandatory)
• Baris berikutnya merupakan deklarasi field-field pada mode
l. Field tersebut nantinya akan otomatis terbentuk sebagai c
olumn pada PostgreSQL
56
Fields Type
• https://odoo-new-api-guide-line.readthedocs.io/en
/latest/fields.html#
• https://www.odoo.com/documentation
• Odoo 12 Development Essentials (Hal 159)

57
Database Structure

58
The View Layer
• Tampilan pada Odoo didefinisikan dengan menggun
akan xml
• Buat folder views dan isi dengan file library_menu.x
ml

59
Keterangan
• Elemen <action window> mendefinisikan client-side window
action yang akan menampilkan tampilan tree atau form pad
a model library.book
• Elemen <menuitem> memanggil action yang sebelumnya di
definisikan untuk menampilkan menu

60
Setting Up Access Security
• Buat file csv bernama ‘ir.model.access.csv’ pada folder security

• id: unique id sebagai identifier


• name, atribut yang mendeskripsikan judul. Usahakan tetap uni
que
• model_id, identifier untuk mengenali model yang sudah dibuat
(XML ids)
• group_id, identifier untuk mendefinisikan Batasan akses berda
sarkan grup user
• Perm, mendefinisikan akses read, write, create dan unlink (del
ete).

61
• Tambahkan script berikut pada __manifest__.py

62
63
Latihan
• Buat modul/aplikasi baru bernama ‘education_app’, buat file __manifest_
_.py dan __init__.py
• Definisikan tampilan menu untuk aplikasi baru tersebut pada folder views.
Menu utama (parent) bernama “Education”, sedangkan menu turunannya
bernama “Courses”
• Buat security group untuk aplikasi baru tersebut (‘user’ dan ‘manager’)
• Buat class bernama ‘Course’ dan model bernama ‘education.course’ di file
python (.py) pada folder models. Definisikan juga file init pada folder terse
but
• Definisikan fields berikut pada model yang baru saja dibuat:
• name = char, ‘Course Name’, wajib diisi
• price = float, ‘Price’
• course_category = selection (‘Development’, ‘Networking’, ‘Management’)
• image = binary, ‘cover’
• active = boolean, default is True
• Beri hak akses dengan mendefinisikannya pada file ‘csv’
• Tampilkan halaman menu aplikasi yang baru saja dibuat

64
Hasil

65
Membuat Tampilan Form View
• Buat file ‘book_view.xml’ pada folder views

66
67
Business Document Form View

68
69
Menambahkan Action Button
<button name="button_check_isbn" type="object“ st
ring="Check ISBN"/>

• string = tampilan tulisan pada button


• type = tipe action yang akan dijalankan (object/action)
• object, perlu mendefinisikan method python
contoh: def set_open(self) …
• action, memanggil id xml untuk menampilkan
contoh: name="%(action_view_sale_advance_payment_inv)d“
• name = sebagai identifier pada button
• class = atribut opsional untuk mengatur style CSS, seperti pa
da HTML

70
Menggunakan Group untuk Mengatur Forms

71
72
Latihan
• Atur tampilan pada Course menjadi business docu
ment form view
• Urutkan tampilan sebagai berikut:
• Cover (sebelah kiri)
• Name (sebelah kiri)
• Active (sebelah kanan)
• Price (sebelah kanan)
• Course Category (sebelah kanan)
• Tambahkan Button ‘Archive’

73
Hasil

74
Menambahkan List View
• Tambahkan source code berikut pada book_view.x
ml

75
76
Menambahkan Search View
• Tambahkan source code berikut pada book_view.x
ml

77
78
Latihan
• Tambahkan tree/list dan pada tampilan Course
• Buat filter active dan inactive pada search view

79
The Business Logic Layer
• Menambahkan method python pada class Book untuk mem
beri action pada button
• Method untuk mengecek apakah jumlah digit ISBN sudah se
suai

• Method untuk menampilkan warning

80
81
Web Page and Controller
• Odoo juga menyediakan framework yang dapat dig
unakan untuk mengembangkan situs web yang teri
ntegrasi dengan aplikasi backend
• Kita akan coba membuat aplikasi library yang sudah
dibuat dapat dipanggil dengan mengakses alamat w
eb http://my-server/library/books

82
• Buat file ‘main.py’ pada folder controller

83
• Buat file ‘book_list_template.xml’ pada folder views

84
Inherit models, views,
business logic

85
Tujuan Extend Application
• Mengembangkan fitur-fitur yang sudah dibuat pada
aplikasi existing
• Memodifikasi business logic tanpa menimpa code y
ang sudah ada
• Mengurangi risiko terjadinya bugs ketika aplikasi exi
sting dikembangkan fiturnya
• Mengembangkan fitur-fitur pada modul yang sifatn
ya modular

86
Extending Library Application
• Membuat modul baru bernama ‘library_member’
• Buat file __manifest__.py

87
• Menambahkan field is_available di model ‘library.b
ook’
• Buat file library_member/__init__.py
from . import models
• Buat file library_member/models/library_book.py

• Buat file library_member/models/__init__.py


from . import library_book

88
89
Memodifikasi Field pada Aplikasi E
xisting
• Untuk menambahkan atribut pada field yang sudah
dideklarasikan di aplikasi existing, hanya perlu men
deskripsikan atribut yang baru saja
isbn = fields.Char(help="Use a valid ISBN-13 or ISBN-
10.")

90
Extending View
• Buat file views/book_view.xml

91
Macam-macam position:
• Inside: meletakan field didalam node yang dipilih
• After: meletakkan field setelah node yang dipilih
• Before: meletakkan field setelah node yang dipilih
• Replace: menimpa field pada node yang dipilih. Seb
isa mungkin penggunaanya dihindari karena dapat
merusak modul lain yang memiliki dependensi terh
adapnya
• Attributes: memodifikasi nilai dari atribut. Misal, m
enyembunyikan field.
<atribut name = "invisible"> True </attribute>.

92
Extending View with XPath
• Dalam beberapa kasus, kita ingin menambahkan fie
ld pada posisi yang elemennya tidak memiliki identi
fier. Misal <group>, <notebook>, atau <page>

93
Modifying Data
• Tidak seperti view, regular data record tidak memili
ki struktur arch XML dan tidak bias menggunakan X
path. Namun, masih dapat dimodifikasi.
Contoh
library_member/security/library_security.xml

94
Embedding Models using Delegation Inheritance

• Buat file library_member/models/library_member.py

• Delegate=True, jika membuat member baru maka aka


n secara otomatis membuat data pada partner
• Ondelete=‘cascade’, jika member dihapus, maka akan
secara otomatis juga menghapus data pada partner

95
Adding the security ACLs
• Buat file library_member/security/ir.model.access.c
sv

96
Adding the Menu item
• Buat menu baru dibawah menu utama ‘Library’ pad
a file library_member/views/library_menu.xml

97
Adding the Form and List Views
• Tampilkan form dan tree view pada file library_me
mber/views/member_view.xml

98
Updating the manifest file so that we can declare these new data
files

• Panggil file-file yang sudah dibuat sebelumnya pada


__manifest__.py sebelum melakukan upgrade mod
ul

99
Latihan
• Buat modul baru bernama ‘education_trainer’, dependensi dengan education
_app
• Tambahkan field training_implementation_date (tipe=date) di model ‘educati
on.course’ dengan metode inherit
• Tampilkan pada Course Form dan Tree view
• Untuk Form view, tampilkan setelah field Course Name
• Untuk Tree view, tampilkan sebelum Price
• Buat model baru bernama ‘course.trainer’
• Buat field pada ‘course.trainer’:
• trainer_id: many2one ke res.partner
• image: binary, string=‘Profile Picture’
• name: char, related with trainer_id
• course_ids: many2many ke education.course
• Buat menu ‘Trainer’ dibawah menu Education
• Tampilkan field yang baru saja dibuat dalam bentuk Form dan Tree view
• trainer_id
• image
• course

100
Hasil

101
Hasil

102
Extending Python Methods
• Tambahkan business logic pada existing python met
hod (library_member/models/library_book.py)

103
Format Data File pad
a Odoo

104
Understanding the external identifier concept

105
106
107
Exporting and Importing Data Files
• Exporting Data Files

108
109
• Importing Data Files

110
Konsep dan Fitur OR
M di Odoo

111
Konsep ORM
• ORM (Object Relational Mapping) adalah metode p
emrograman yang digunakan untuk mengkonversi d
ata dari lingkungan bahasa pemrograman berorient
asi objek (OOP) dengan lingkungan database relasio
nal
• Contoh penggunaan ORM di Odoo

112
Latihan
• Install modul purchase
• Buat modul baru bernama ‘purchase_ extend’
• Tampilkan informasi tentang phone number dan em
ail dari vendor pada purchase order
• Buat field ‘vendor_phone’ (string=phone), type=char. Rel
asikan field tersebut dengan field phone yang ada di ven
dor
• Buat field ‘vendor_email’ (string=email), type=char, widg
et=email. Relasikan field tersebut dengan field email yan
g ada di vendor
• Tampilkan 2 fields yang baru saja dibuat pada form dan t
ree view setelah field vendor

113
Hasil

114
Latihan
• Kebutuhan:
• Menampilkan informasi user yang membuat PO
• Kebutuhan Teknis:
• Pada model ‘purchase.order’, buat field pic_id (string = P
erson in Contact), type = many2one ke model res.users
• Set default field pic dengan active user
• Tampilkan field contact_person pada purchase order for
m dan tree view setelah field ‘order date’

115
Hasil

116
Latihan
• Kebutuhan
• Ketika pengguna membuat atau mengubah PO. Apabila
field vendor reference tidak diisi, maka field tersebut ak
an otomatis terisi dengan “No Vendor Reference”
• Kebutuhan Teknis:
• Lakukan extends method create dan write pada model p
urchase.order. Tambahkan kondisi, jika partner_ref koso
ng, maka isi kolom tersebut dengan “No Vendor Referen
ce”

117
Hasil

118
Latihan
• Kebutuhan
• Pada purchase order, dibutuhkan informasi terkait Down
Payment (DP)
• User dapat menginput data pada field DP
• Currency pada DP harus sama dengan currency yang dig
unakan pada PO
• Kebutuhan Teknis:
• Pada model ‘purchase.order’, buat field ‘down_paymen
t’ (label = Down Payment), type = float
• Tampilkan setelah field taxes (amount_tax) pada form vi
ew purchase order

119
Hasil

120
• Kebutuhan
• Perhitungan total biaya pada PO disesuaikan setelah pen
ambahan fitur down payment
• Kebutuhan Teknis:
• Pada model ‘purchase.order’, buat field ‘total’ (label = To
tal), type = float, readonly=True
• Tampilkan field ‘total’ dengan me-replace amount_total
pada PO form view
• Buat python method ‘total_calculation’ yang isinya amo
unt_total+down_payment
• Gunakan api.depends pada method tersebut. Jika amou
nt_total berubah nilainya, maka fungsi dieksekusi

121
Hasil

122
Laporan dengan QW
EB Report

123
Instal wkhtmltopdf
• Install wkhtmltopdf
sudo wget https://builds.wkhtmltopdf.org/0.12.1.3/wkht
mltox_0.12.1.3-1~bionic_amd64.deb
sudo dpkg -i wkhtmltox_0.12.1.3-1~bionic_amd64.deb
sudo apt-get install -f
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
https://www.odoo.com/forum/help-1/question/ubuntu-1
8-04-lts-how-to-install-wkhtmltopdf-0-12-1-recommended
-for-odoo-9-0-and-lower-134198
• Jika error, wkhtmltopdf failed (error code: -8). Message:
b" odoo 12
sudo apt install ttf-mscorefonts-installer
124
• Buat file library_app/reports/library_book_report.x
ml

http:/ / getbootstrap.com
125
Hasil

126
127
Latihan
• Tambahkan fields pada model ‘library.book’, sebaga
i berikut:
• publisher_id, type=many2one, ke model res.partner
• author_ids, type=many2many, ke model res.partner
• Tampilkan setelah field name
• Tampilkan pada Qweb Report
• Title
• Date
• ISBN
• Publisher: name, phone, website
• Author: image (tampilkan image), name

128
129
Penggunaan Eksterna
l API

130
• Odoo menyediakan web service API yang tujuannya
digunakan supaya aplikasi eksternal dapat mengkon
sumsi data ataupun berinteraksi dengan Odoo

131
Setup Eclipse Pydev Interpreter
• Buka window->install new software

132
• Buka window -> preference -> pydev -> python inte
rpreter
• Tambahkan python 3 /usr/bin/python3
• Lalu ‘Apply’

133
Connecting to Odoo API using XM
L-RPC
• Buat file /external_api/test_api.py

• Common, akses untuk layanan public, tidak perlu a


utentifikasi

134
• Akses web service API dengan autentifikasi

• Hasil

135
Search dan Read

• search_read

136
CRUD XML-RPC

137
The Library client XML-RPC interfa
ce
• Install odoorpc
sudo pip3 install odoorpc

• Buat file /external_api/library_api.py

138
• search_read()

• create()

• write()

• unlink()

139
• Eksekusi

140
Deploying Odoo in L
ive Server (GoLive)

141
Membuat Auto-Startup Service Od
oo
File yang dibutuhkan:
• Log file
• Conf file
• Service file

142
Log File
Buat file log dan beri akses (permission)
• sudo mkdir /var/log/odoo
• sudo nano /etc/odoo/odoo.log
• sudo chmod 777 -R /var/log/odoo

Script untuk menjalankan log


• tail –f /var/log/odoo/ odoo.log

143
Conf File
Cloning file .conf odoo ke folder etc
• sudo mkdir /etc/odoo
• sudo cp /opt/odoo12/debian/odoo.conf /etc/odoo/
odoo.conf
• sudo chmod 777 -R /etc/odoo

144
Konfigurasi file odoo.conf, sudo nano /etc/odoo/odoo.conf

Keterangan:
• addons_path: lokasi modul addons (termasuk modul custom)
• Admin_passwd: master password yang digunakan untuk men
gakses web client database

145
• db_name: nama database yang akan dijalankan
• dbfilter: filter database mana saja yang bias diakses
• http_port: nomer port pada server
• list_db: fungsinya seperti filter, jika diset false maka
tidak ada database yang ditampilkan
• logfile: lokasi dimana log pada server akan ditulis
• proxy_mode: jika odoo dijalankan dengan reverse p
roxy, maka set proxy_mode = true
• without_demo: jika membuat database baru maka
tidak ada data demo didalamnya
• workers: konfigurasi multiprocessing pada odoo
146
Multiprocessing Workers
• Secara default, server menjalankan satu proses dan
hanya dapat menggunakan 1 core cpu untuk dipros
es
• Fungsi workers pada server odoo adalah mengakti
fkan fitur multiprocessing, sehingga beban proses y
ang dijalankan dapat dibagi ke banyaknya jumlah co
re cpu yang tersedia

147
Menentukan Jumlah Worker
• 1 worker ~= 6 concurrent user
• workers = (#CPU * 2) + 1
Misal server anda memiliki 4 core cpu maka jumlah w
orkers-nya adalah 9 dan dapat menangani proses yan
g dilakukan oleh 36 concurrent user.

148
Service File
Membuat systemd service
• sudo nano /lib/systemd/system/odoo.service

149
• Lakukan registrasi service baru
sudo systemctl enable odoo.service
• Jalankan service
sudo systemctl start odoo

150
Setting Up an Nginx Reverse Proxy
• Meskipun Odoo dapat melayani halaman web sendi
ri, disarankan tetap menggunakan reverse proxy ya
ng diposisikan didepannya
• Reverse proxy bertindak sebagai perantara yang me
ngelola lalu lintas antara client yang mengirim perm
intaan dan server Odoo meresponnya

151
Manfaat Reverse Proxy
• Menangani protocol HTTPS untuk mengenkripsi lalu
lintas komunikasi
• Menyembunyikan karakteristik jaringan internal
• Bertindak sebagai firewall aplikasi, membatasi URL
yang diterima untuk diproses
• Bersifat cache static content, sehingga mengurangi
beban pada server
• Konten terkompresi, sehingga mempercepat loadin
g time
• Bertindak sebagai load balancer, mendistribusikan b
eban dengan beberapa server

152
• Install nginx
sudo apt-get install nginx
sudo service nginx start
• Konfigurasi nginx
sudo rm /etc/nginx/sites-enabled/default
sudo touch /etc/nginx/sites-available/odoo12 (nama
domain)
sudo ln -s /etc/nginx/sites-available/odoo12 /etc/ngi
nx/sites-enabled/odoo12 (nama domain)

153
sudo nano /etc/nginx/sites-available/odoo

154
• Cek apakah konfigurasi sudah benar
sudo nginx –t

Jalankan
sudo /etc/init.d/nginx reload
sudo systemctl reload nginx

155
Bonus - Git Repository

156

You might also like