DASAR DASAR OPENERP SISI TEKNIKAL DAN CO

DASAR-DASAR OPENERP: SISI TEKNIKAL DAN CONTOH KASUS

oleh:

Noprianto Whisnu Budhysantika Widoyo

"Beberapa kelebihan buku ini: ditulis oleh para programer dan praktisi yang bukan saja pernah mengimplementasi tapi juga memodifikasi OpenERP, ditujukan tidak hanya untuk Windows tapi juga

Linux, dan diterbitkan secara independen dan dengan lisensi terbuka. Disarankan dibaca."

Steven Haryanto

"OpenERP merupakan produk open source yang mudah dikembangkan dan konsisten. Meski begitu

dukungannya cenderung komersil. Ini membuat developer pas-pasan seperti saya kesulitan mempelajarinya. Kita beruntung Noprianto dkk bersedia membuat buku yang cukup rinci ini dihadirkan tanpa dipungut biaya."

Owo Sugiana

“Menemukan materi teknis yang ditulis dalam bahasa Indonesia bagaikan mencari jarum di dalam jerami. Bukan karena orang Indonesia tidak ada yang pakar dalam hal teknis ini tapi lebih karena tidak ada yang mau, tidak sempat, atau tidak memiliki kemampuan menulis. Dan memang menulis hal teknis dalam bahasa Indonesia memiliki tantangan tersendiri. Penulisan buku OpenERP dengan model terbuka dan sukarelawan ini patut diacungi jempol. Bagian studi kasus membantu memberikan gambaran kepada pembaca hal apa yang bisa diselesaikan menggunakan OpenERP. Bagi yang belum terbiasa dengan Python bisa mulai dengan bagian lampiran Python Dasar. ”

Zaki Akhmad

Buku tersedia bebas di https://github.com/id-python/buku-openerp

TENTANG BUKU DASAR-DASAR OPENERP: SISI TEKNIKAL DAN CONTOH KASUS (c) 2014 Noprianto, Whisnu Budhysantika, Widoyo Revisi: 0 (27 Agustus 2014, publikasi sendiri)

Buku ini dapat dikopi dan disebarluaskan secara bebas, baik dalam bentuk softcopy ataupun tercetak, dengan beberapa catatan berikut: • Buku ini diharapkan dapat berguna, namun tidak menggaransi apapun.

• Setiap halaman dalam buku ini merupakan satu kesatuan dan tidak terpisahkan. • Apabila mengutip sebagian dari buku ini, cantumkanlah setidaknya judul buku, pengarang dan

nomor revisi. • Softcopy buku (dalam format OpenDocument dan PDF) tersedia bebas di https://github.com/id- python/buku-openerp

MEREK DAGANG

• Windows adalah merek dagang terdaftar dari Microsoft Corporation. • Python adalah merek dagang dari Python Software Foundation. • Linux adalah merek dagang terdaftar dari Linus Torvalds. • OpenERP adalah merek dagang dari OpenERP s.a.

KATA PENGANTAR

Pertama-tama, saya mengucapkan terima kasih kepada Whisnu Budhysantika dan Widoyo yang telah bersedia sama-sama menulis buku ini. Juga terima kasih kepada Owo Sugiana, Steven Haryanto, dan Zaki Akhmad yang telah bersedia memberikan pujian untuk buku ini.

Menulis buku, sebagai proyek komunitas, tanpa ada kejelasan akan diterbitkan, pastinya bukan pekerjaan yang menarik :) Perlu komitmen, terutama ketika ditengah proses penulisan, semua penerbit yang kami hubungi tidak tertarik. Kami memilih untuk terus menulis dan menyediakan bukunya secara bebas!

Buku ini dipersembahkan untuk komunitas Python Indonesia (http://www.python.or.id)

Noprianto

1. Memulai OpenERP

Penulis: Whisnu Budhysantika

OpenERP (dulu bernama TinyERP, sekarang bernama Odoo) adalah sebuah perangkat lunak Enterprise Resource Planning (ERP) atau perangkat lunak perencanaan sumber daya perusahaan yang dilisensikan free/open source. OpenERP dikembangkan dengan bahasa pemrograman Python. Source code dan informasi selengkapnya tentang OpenERP bisa didapatkan di website http://www.openerp.com.

Perangkat lunak perencanaan sumber daya perusahaan akan memberikan manfaat yang besar kepada sebuah perusahaan dalam membantu mengelola sumber daya di sebuah perusahaan sehingga semua sumber daya yang dimiliki dapat tercatat, terkontrol dan dapat dengan mudah diberdayakan.

Sebagaimana lazimnya sistem aplikasi modern, arsitektur sistem pada OpenERP menerapkan sistem modular. Setiap adopsi terhadap kebutuhan baru dapat menghasilkan modul baru. Modul-modul tersebut bisa diinstall bila dibutuhkan. Saat ini tersedia ribuan modul, termasuk yang datang bersama OpenERP seperti: • CRM • Social Network • eInvoicing & Payments • Point of Sale • Project Management • Issue Tracker • Accounting and Finance • Sales Management • Warehouse Management • MRP • Purchase Management • Employee Directory • Timesheets • Leave Management • Expense Management • Assets Management • Payroll

Kesemua modul yang terinstall dirancang untuk dapat saling terhubung.

OpenERP mengembangkan jaringan partnership dengan berbagai perusahaan di seluruh dunia untuk bersama-sama menjadi pelopor dalam pengembangan OpenERP serta menjadi ujung tombak customer support kepada pengguna OpenERP.

1.1 Instalasi

Server OpenERP dapat dijalankan pada berbagai sistem operasi populer, dan relatif tidak sulit untuk diinstal. Bahkan, pada sistem operasi Microsoft Windows, tersedia installer yang siap digunakan. Sementara, untuk client, hanya dibutuhkan web browser.

Berbagai komponen OpenERP, termasuk database, bisa diinstal pada satu server yang sama, ataupun dipisahkan ke beberapa server.

Installer ataupun source code OpenERP bisa didownload dari websitenya.

Instalasi di Microsoft Windows

Untuk menginstall OpenERP dan PostgreSQL, harus menggunakan user dengan hak Administrator. Jika sudah pernah menginstall komponen OpenERP sebelumnya, maka disarankan untuk dilakukan

uninstall terlebih dahulu, sebab beberapa komponen dari instalasi sebelumnya dapat menghambat proses instalasi baru. Pastikan bahwa semua komponen dari OpenERP dan PostgreSQL sebelumnya terhapus.

Klik ganti pada file installer untuk menginstall OpenERP dan Accept semua parameter default, seperti pada contoh berikut.

1. Pilih Bahasa → English

2. Welcome Box

3. Licence Agreement

4. Pilih komponen yang akan diinstall (Pilih semua komponen)

5. Configure PostgreSQL → Hostname: localhost, Port: 5432, Username: openpg, Password: openpgpwd

6. Pilih Folder untuk lokasi instalasi

7. Install

8. Selesai Setelah selesai proses instalasi, kita tidak perlu menjalankan server OpenERP secara manual, sebab

telah terinstall sebagai service. Untuk menggunakan OpenERP, bukalah web browser dan ketikkanlah URL server OpenERP, gunakan

port 8069 (default), misal http://localhost: 8069 Beberapa catatan:

• Bila tampilan dari http://localhost:8069 kosong, maka cobalah untuk start dan stop service OpenERP dari Start → All Program → OpenERP Server. • Periksa kembali konfigurasi OpenERP yang umumnya tersimpan di C:\Program Files\OpenERP All In One\openerp-server.conf. Bukalah filenya dan perhatikan dengan seksama terutama pada bagian database (diawali dengan db_).

• Pastikanlah server database PostgreSQL telah berjalan. • Apabila diperlukan, bukalah log OpenERP yang biasanya tersimpan di C:\Program Files\OpenERP

All In One\openerp-server.log

Instalasi di distribusi Linux Ubuntu

Cara pertama Updatelah database paket sistem dengan perintah berikut: sudo apt-get update Kemudian, installah paket-paket berikut, termasuk server database (diketikkan sebagai satu baris

perintah): sudo apt-get install postgresql postgresql-client pgadmin3 python-dateutil python-feedparser python-

gdata python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python- pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python- gdata python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python- pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-

Berikutnya, untuk OpenERP, kita punya pilihan untuk: • Menggunakan paket deb yang disediakan • Menggunakan source code

Apabila menggunakan paket deb, downloadlah paket deb dari http://nightly.openerp.com/7.0/nightly/deb/ dan installlah paket tersebut:

sudo dpkg -i <file.deb>

Apabila menggunakan source code, ekstraklah arsip source code dan masuklah ke dalam direktori hasil ekstrak.

Cara kedua Tambahkanlah entri berikut ke /etc/apt/sources.list:

deb http://nightly.openerp.com/7.0/nightly/deb/ ./

Kemudian jalankan: sudo apt-get update

sudo apt-get install openerp

Persiapan database Buatlah sebuah user database (kita berikan hak untuk membuat database). Gantilah <user> dengan

nama user yang diinginkan. sudo -u postgres createuser --pwprompt --createdb <user> Pastikanlah pengaturan authentication (contoh: /etc/postgresql/9.3/main/pg_hba.conf) telah dilakukan

dengan baik.

File konfigurasi dan server Apabila menjalankan dari source code, pertama-tama, kita akan buat file konfigurasi dan simpan

sebagai config.ini: ./openerp-server -s -c config.ini –stop-after-init Selanjutnya, editlah file config.ini, terutama untuk parameter koneksi database (diawali db_). Server kemudian bisa dijalankan dengan perintah: ./openerp-server -c config.ini

Apabila menggunakan paket deb: • File konfigurasi terletak di /etc/openerp/openerp-server.conf • Service openerp dapat digunakan untuk start/stop server OpenERP.

1.2 Bekerja dengan database

Akseslah server OpenERP menggunakan web browser. Apabila server terinstall pada localhost, gunakanlah URL http://localhost:8069

Membuat database

Untuk membuat database, akses bagian Manage Databases, pada bagian create isi nama database yang kita inginkan, misal db_latihan, isi password user admin untuk database tersebut. Bagian Master Password secara default akan terisi dengan admin. Untuk mengubahnya, masuk ke bagian Password.

Untuk menambahkan demo data, aktifkanlah pilihan Load demonstration data. Tunggulah proses yang berlangsung dan setelah selesai, kita akan login otomatis sebagai user admin dan diarahkan ke halaman settings, dimana kita bisa melihat modul-modul yang telah terinstall.

Jika kita mengaktifkan pilihan Load demonstration data, maka setelah kita menginstall modul, data sampel akan disertakan. Ini umumnya kita lakukan ketika mempelajari OpenERP.

Operasi lain

Selain pembuatan database yang telah dibahas sebelumnya, di bagian Manage Databases, kita dapat pula melakukan berbagai operasi berikut. Semuanya membutuhkan password master OpenERP.

Duplicate

Membuat duplikat dari sebuah database. Informasi yang diperlukan: • Original database name, nama database yang akan diduplikasi. • New database name, nama database yang akan menjadi hasil proses duplikasi.

Drop Menghapus database. Kita akan diminta untuk memilih nama database yang akan dihapus.

Backup Membackup sebuah database. Kita akan diminta untuk memilih nama database yang akan dibackup.

Restore Membuat database baru berdasarkan hasil backup yang tersedia sebelumnya. Informasi yang diperlukan: • File, file backup • New database name, nama database baru yang akan dibuat

Password Mengubah password master. Kita akan diminta untuk memasukkan informasi: • New master password, password master baru • Confirm new master password, konfirmasi password master baru

1.3 Settings dan technical features

Di bagian settings, dimana kita diarahkan ketika pertama kali login sebagai admin, setelah membuat database, kita akan menemukan beberapa menu dasar berikut.

• Modules • Apps • Updates • Installed Modules, daftar modul yang telah kita instal. Apabila kriteria installed pada search

dihapus, kita bisa mencari dari semua modul yang tersedia. • Users • Users, daftar user OpenERP • Translations • Load a Translation, memilih bahasa yang akan dipergunakan

Apabila kita ingin melakukan pengaturan lebih lanjut, kita dapat mengaktifkan technical features untuk user tertentu. Sebagai contoh, ketika masih login sebagai admin, di bagian Settings: • pilihlah Users → Users

• Pilihlah Administrator (admin) dari daftar user • Klik tombol Edit • Aktiflah pada tab Access Rights • Aktifkan pilihan Technical Features • Klik tombol Save

Ketika kita melakukan reload halaman, maka menu lain akan tersedia pada Settings.

1.4 Modul Sales Management

Masih di Settings, pada bagian Modules → Installed Modules, hapuslah kriteria installed pada kotak pencarian. Daftar modul lengkap akan ditampilkan. Kliklah pada tombol Install di modul Sales Management.

Setelah instalasi dilakukan, kita akan diminta untuk mengatur: • Accounting Package, pilih Custom • Company, pilih perusahaan

Berikutnya, kita dapat mengatur opsi Accounting: • Company, pilih perusahaan • Currency, mata uang. Kita bisa pilih IDR • Sale Tax, pajak pada penjualan • Purchase Tax, pajak pada pembelian

Untuk mengubah data perusahaan, kliklah logo perusahaan (Edit Company data). Untuk bekerja dengan Sales Management, kita bisa klik pada link Sales di baris menu bagian atas

layar: • Sales

• Customers, berisi data customer yang tercatat dalam database kita. • Quotations, berisi quotation yang tercatat dalam database kita. • Sales Orders, berisi sales order yang tercatat dalam database kita.

• Products • Products, berisi data produk yang dimiliki.

Untuk bekerja dengan invoice, kita bisa akses melalui link Invoicing di baris menu bagian atas layar: • Customers

• Customer Invoices, berisi data invoice untuk customer yang tercatat dalam database kita. • Customer Refunds, berisi refund dari customer yang tercatat dalam database kita. Refund

adalah dokumen yang berisikan pengurangan sejumlah tagihan dalam invoice yang telah dibuat untuk customer. Selain melalui bagian ini, refund juga bisa di-generate dari Customer Invoices.

• Sales Receipts, berisi data Sales Receipts yang kita terima dari customer. Sales Receipts ini diperlukan untuk pembuatan Customer Payments. • Customer Payments, berisi data pembayaran yang kita terima dari customer. Kita juga bisa membuat data pembayaran dari Sales Receipts atau Customer Invoice yang statusnya masih Open.

• Customers, berisi data customer. • Suppliers • Supplier Invoices, berisi data invoice dari supplier yang tercatat dalam database kita. • Supplier Refunds, berisi refund supplier yang tercatat dalam database kita. • Purchase Receipts, berisi data Purchase Receipts yang kita terima dari supplier. Purchase

Receipts ini diperlukan untuk pembuatan data Supplier Payments. • Supplier Payments, berisi data pembayaran dari kita kepada para supplier. Kita juga bisa membuat data pembayaran dari Purchase Receipts. • Suppliers, berisi data supplier. Dibeberapa sistem bagian ini disebut Master Vendor.

Untuk bekerja dengan laporan, kita bisa akses melalui link Reporting di baris menu bagian atas layar: • Dashboards

• My Dashboard, berisi berbagai laporan yang kita ingin tampilkan sesuai kebutuhan kita. Berbagai laporan yang terlihat di bagian ini bisa selalu kita ubah-ubah dengan cara masuk ke modul yang kita inginkan laporannya, klik bagian Graph View dan dari drop down menu di bagian search, klik Add to Dashboard.

• Sales, berisi dashboard mengenai laporan Sales. Secara default bagian ini berisi daftar Quotation dan grafik Monthly Turnover. • Sales

• Sales Analysis, berisi daftar Sales dari setiap personal yang bisa ditampilkan dalam format list ataupun grafik. • Accounting

• Invoices Analysis, berisi laporan analisis invoice. • Sales Receipts Analysis, berisi laporan analisis Sales Receipts.

2. Dasar-Dasar Kustomisasi

Penulis: Whisnu Budhysantika

2.1 Developer Mode

Developer mode adalah sebuah fasilitas built-in yang terdapat dalam OpenERP. Yang menjadi ciri utama dari fasilitas ini adalah hadirnya drop down Debug View di samping sebuah nama model.

Untuk mengaktifkan fasilitas ini, bisa dengan cara mengakses menu About OpenERP (terdapat di drop down menu user yang login), lalu klik link Activate the developer mode pada dialog yang ditampilkan.

Salah satu fitur yang sangat berguna ketika developer mode diaktifkan adalah kita bisa mengetahui nama dan informasi lain tentang suatu field, ketika kursor mouse diarahkan pada label suatu field.

Selain itu, ketika sedang aktif pada suatu view, kita akan mendapatkan berbagai fasilitas berikut dari drop down Debug View (item-item berikut tersedia apabila relevan): • View Log (perm_read), menampilkan data:

• ID, Identitas unik dari sebuah obyek • XML ID, file xml yang berkaitan dengan obyek. • Creation User, menampilkan data pembuat • Creation Date, menampilkan data tanggal pembuatan • Latest Modification By, menampilkan data pengubah • Latest Modification Date, menampilkan data tanggal pengubahan data

• Toggle Form Layout Outline, menampilkan layout dari sebuah form. • Set Defaults, fasilitas untuk membuat value yang ada dalam formulir tersebut menjadi default value

untuk form sejenis. Saat kita memilih fungsi ini, maka akan terdapat form baru yang berisi: • Default, berisi Dropdown mengenai value yang berada dalam form tersebut, misal alamat email,

language, signature dan timezone tergantung pada jenis form-nya. • Opsi Only You dan All Users, bila dipilih Only You, maka default value tersebut hanya berlaku untuk user yang saat ini sedang login saja. Bila dipilih All Users, maka berlaku untuk semua

user yang terdaftar dalam database tersebut. • JS Test, berfungsi untuk melakukan debugging terhadap seluruh modul yang ada dalam sebuah database. Kita akan diminta untuk menginput data nama database, password untuk mengakses database tersebut dan admin password-nya. Selanjutnya adalah proses pengecekan modul oleh OpenERP dan setelah selesai akan terlihat hasilnya. Bila ditemukan error, maka akan ditandai user yang terdaftar dalam database tersebut. • JS Test, berfungsi untuk melakukan debugging terhadap seluruh modul yang ada dalam sebuah database. Kita akan diminta untuk menginput data nama database, password untuk mengakses database tersebut dan admin password-nya. Selanjutnya adalah proses pengecekan modul oleh OpenERP dan setelah selesai akan terlihat hasilnya. Bila ditemukan error, maka akan ditandai

mendefinisikan domain dan context-nya. Fasilitas Manage Filters dimaksudkan untuk melakukan CRUD (Create Retrieve Update & Delete) terhadap filter-filter yang kita butuhkan.

• Technical translation, bagian ini berfungsi untuk mendefinisikan translasi teknis dari Field, Object, Report/Template ,View, Wizard Button, Wizard Field, Wizard View, XSL, Help, Code, Constraint, SQL Constraint.

• Manage Views, berfungsi untuk mengatur view dari model yang sedang dilihat, mengatur field apa saja yang ditampilkan, mengubah field, menambahkan ataupun menghapus field yang sedang ditampilkan.

• Edit View, berfungsi untuk mengedit view. • Edit FormView, berfungsi untuk mengedit form view. • Edit SearchView, berfungsi untuk mengedit search view. • Edit Action, berfungsi untuk melakukan pengubahan pada action. • Edit Workflow, berfungsi untuk melakukan CRUD terhadap workflow. • Print Workflow, berfungsi untuk melakukan printing terhadap workflow.

2.2 Menambah dan menampilkan field

Untuk menambahkan field pada sebuah model, bisa dilakukan dengan beberapa cara, yaitu: • Dari Manage Views: Cara ini adalah cara yang sangat mudah dilakukan dan tidak memerlukan

pengetahuan mengenai pemrograman python. Dapat dilakukan dengan mengaktifkan Developer Mode, kemudian dari Debug View pilih Manage Views.

• Dengan mengubah database structure. Aktifkanlah terlebih dahulu technical features untuk user yang diinginkan, kemudian aktiflah di Settings. Di bagian Technical, pilihlah Database Structure → Fields. Kita bisa gunakan tombol Create untuk membuat field baru.

• Dengan membangun modul sendiri (dibahas mulai dari bab 3).

Manage Views

Saat kita membuka Manage Views, fasilitas ini akan langsung memberikan petunjuk di view mana sekarang ini kita sedang berada (selected radio button), sebab secara default semua view yang berkaitan akan ditampilkan. Kita tidak perlu memilih view yang lainnya (kecuali kita tahu). Kita tinggal klik tombol edit.

Semua field yang aktif, ditampilkan dalam format XML <field name=nama_field>. Untuk menambahkan sebuah field baru, kita tinggal mengklik icon plus (+) yang terdapat dibagian kanan setiap field. Dengan cara ini pula kita bisa memastikan field baru tersebut akan terlihat dibagian mana dari tampilan.

Saat mengkilk icon plus (+), kita akan dihadapkan ke sebuah dialog yang meminta kita untuk menginput data Node Type (pilih field) dan Position, selanjutnya klik tombol New Field untuk membuat field baru ataupun memilih field yang telah dibuat sebelumnya untuk menambahkan field pada view.

Field baru

Pada dialog penambahan field baru, kita akan diminta untuk memberikan data: • Wajib diisi

• Field name: adalah nama field di database. Untuk penamaan field custom, harus diawali dengan x_. • Field Label, label yang akan terlihat oleh pengguna.

• Field Type, tipe field (untuk selengkapnya, bacalah juga bab 5). • Model, nama model openerp, misal res.partner untuk partner. • Searchable, bila dipilih, maka akan disertakan dalam proses pencarian data.

• Tidak wajib diisi: • Domain, python expression, contoh [(‘color’=’red’)] yang menunjukkan kemungkinan kriteria dari field. • Serialized Field, jika di set maka field ini tidak akan dibuatkan dalam struktur database tapi hanya di buat dalam sparse struktur. • Required, bila dipilih, maka field ini akan menjadi field yang wajib diisi. • Read Only, bila dipilih, maka field ini akan menjadi field yang tidak bisa diubah isi defaultnya. • Translatable, bila dipilih, dapat diterjemahkan.

2.3 Menyembunyikan dan mengatur posisi field

Menggunakan Manage Views, untuk setiap field, kita bisa klik tombol minus (-) untuk menyembunyikan field. Ketika kita klik pada tombol Remove, kita hanya menghapusnya dari view.

Lebih lanjut, selain tombol + dan -, berikut ada fungsi dari berbagai tombol lainnya: • Icon kertas dan pensil: untuk memodifikasi/mengubah properti sebuah field (dari sisi view):

• Name, nama sebuah field. • String, label dari sebuah field • Required, bila dipilih, maka field tersebut wajib diisi. • Readonly, bila dipilih, maka isi field tersebut tidak bisa diubah. • Invisible, bila dipilih, maka field tersebut tidak akan terlihat (tersembunyi). • Domain, digunakan untuk keperluan filter seperti domain="[('partner_id','=',partner_id)]". • Context, parameter kontekstual, seperti bahasa. • Attrs, atribut sebuah field, lebih lanjut bacalah juga bab 6. • Eval, ekspresi kode python, untuk data non string. • Ref, referensi sebuah field. • On change, fungsi on change, lebih lanjut bacalah juga bab 6. • No Label, bila dipilih, maka label dari field tersebut tidak akan ditampilkan. • Completion, bila dipilih, maka saat field tersebut diisi, akan terdapat saran dalam pengisiannya. • Colspan, pendefinisian jumlah kolom yang ditempati field. • Widget, contoh dari widget adalah mail_thread dan many2many_tags_email. Widget akan

mendefiniskan action yang akan diambil bila field ini digunakan. • Groups, mendefiniskan tempat field tersebut akan berada. • Icon panah hijau mengarah ke atas: untuk pengaturan urutan tampilan field. Bila icon ini di klik maka field tersebut akan naik ke urutan tampilan di atas dari sebelumnya. • Icon panah hijau mengarah ke bawah: untuk pengaturan urutan tampilan field. Bila icon ini di klik maka field tersebut akan turun ke urutan tampilan di bawah dari sebelumnya.

2.4 Kelebihan dan kekurangan

Kelebihan

Proses kostumisasi OpenERP dengan menggunakan fasilitas yang disediakan oleh OpenERP yaitu Developer Mode dan Technical Features akan membawa kita pada pengalaman kemudahan memodifikasi sistem tanpa harus repot bekerja dengan kode Python.

Kemudahan ini menjadi keunggulan tersendiri dari OpenERP. Saat kita membangun sebuah sistem informasi, baik itu pada skala kecil ataupun skala besar seperti ERP, dan kemudian kita harus menerangkan sistem tersebut pada pengguna akhir, pertanyaan yang kemudian selalu muncul adalah “jika ingin menambahkan ini atau itu bagaimana?”. Pertanyaan tersebut seringkali menjadi justifikasi dari pengguna bahwa sebuah sistem itu sulit dan kurang user friendly saat mereka dihadapkan pada kenyataan bahwa “pengubahan harus melalui pengubahan pada pemrograman”.

Tetapi ketika pengubahan itu dengan sangat mudah kita terangkan pada calon pengguna bahwa pengubahan baik itu yang sifatnya penambahan, pengurangan dan lain-lain dapat dibuat dengan sangat mudah hanya dengan beberapa kali klik saja, seringkali menjadi poin tersendiri dan dianggap bahwa sistem yang kita buat sangat baik dan user friendly dari kacamata pengguna tersebut.

OpenERP didesain sedemikian rupa untuk bisa mengadopsi dengan baik setiap penambahan, pengurangan ataupun perubahan terhadap sebuah field tanpa harus melakukan pemrograman.

Kekurangan

Apa yang kita lakukan sejauh ini berdampak pada satu database. Bayangkanlah apabila kita harus melakukan sejumlah kustomisasi yang sama tersebut pada database lain, misal ketika instalasi ulang dilakukan.

Apabila kita terjemahkan setiap apa yang kita lakukan dalam satu atau lebih modul, modul-modul yang kita kembangkan tersebut dapat diinstall dan diuninstall setiap kali diperlukan. Sehingga kita bisa bekerja dengan satu atau lebih database dengan lebih mudah.

Selain itu, terdapat kustomisasi yang lebih kompleks, yang hanya dapat dilakukan lewat pemrograman dengan Python.

3. Dasar Pengembangan Modul OpenERP

Penulis: Whisnu Budhysantika / Noprianto

3.1 Paket Python

Sebuah modul OpenERP terdiri dari satu direktori dan juga merupakan sebuah paket Python yang valid. Dan, oleh karenanya, file __init__.py harus tersedia.

File __init__.py bisa berupa file kosong, ataupun berisikan kode-kode inisialiasi. Di dalam bab-bab berikut, dalam contoh modul, kita bisa melihat bahwa kode-kode inisialiasi tidak diperlukan apabila kita tidak bekerja dengan kode Python, dan hanya fokus pada view, sebagai contoh. Sebaliknya, apabila kita bekerja dengan model (misal: menambah field), maka __init__.py umumnya berisi statement import untuk modul lain di dalam paket.

3.2 Manifest __openerp__.py

Supaya sebuah modul dikenal oleh OpenERP dan informasi lebih rinci tentang modul bisa disediakan, maka kita perlu membuat sebuah file manifest, dengan nama file __openerp__.py, di dalam direktori modul yang kita kembangkan.

File ini akan berisikan sebuah dictionary Python, dengan key berikut. • name: nama modul • version: versi modul • author: pengembang • license: lisensi modul (default AGPL-3). Bacalah juga bab 8 apabila diperlukan. • description: deskripsi apa yang dilakukan oleh modul • category: kategori modul • website: website modul (URL) • depends: daftar modul lain yang dibutuhkan • data: daftar file yang di-load (umumnya XML) pada saat modul diinstall atau diupdate • demo: daftar file tambahan yang di-load (umumnya XML) pada saat modul diinstall atau diupdate

dan flag demo aktif.

3.3 File-file dalam modul

Untuk bekerja dengan suatu model, umumnya kita tempatkan dalam sebuah modul Python tersendiri (file .py). Modul tersebut kemudian kita import dari __init__.py.

Untuk bekerja dengan view, dalam bentuk file XML, umumnya file-file XML ditempatkan di dalam subdirektori view.

File-file yang diperlukan untuk report ataupun wizard umumnya ditempatkan pada subdirektori tersendiri (report dan wizard sebagai contoh).

3.4 Lingkungan OpenERP

Apabila kita melihat pada source code OpenERP: $ ls -1 --group-directories-first

debian doc install openerp openerp.egg-info win32 LICENSE MANIFEST.in openerp-server PKG-INFO README setup.cfg setup.nsi setup.py setup_rpm.sh

Kita bisa melihat satu direktori openerp. Ini merupakan sebuah paket Python: $ ls -1 --group-directories-first openerp

addons cli conf modules osv report service tests tools workflow exceptions.py import_xml.rng __init__.py loglevels.py netsvc.py PKG-INFO pooler.py release.py sql_db.py

Kita akan banyak bekerja dengan osv: $ ls -1 --group-directories-first openerp/osv/

expression.py fields.py __init__.py orm.py osv.py query.py

Terutama pada modul orm.py dan fields.py: $ file openerp/osv/orm.py

openerp/osv/orm.py: Python script, ASCII text executable $ file openerp/osv/fields.py

openerp/osv/fields.py: Python script, UTF-8 Unicode text executable

Apabila kita berada dalam direktori source code OpenERP (root), kita bisa import orm.py dan fields.py dengan cara berikut:

>>> from openerp.osv import orm, fields >>> orm <module 'openerp.osv.orm' from 'openerp/osv/orm.py'> >>> fields <module 'openerp.osv.fields' from 'openerp/osv/fields.py'> >>>

Namun, apabila kita berada di luar source code, maka environment variabel PYTHONPATH perlu di- set terlebih dahulu, pada saat kita ingin bekerja dengan nyaman menggunakan IDE (yang mendukung). Kita tidak perlu lakukan ini pada level modul ketika instalasi dilakukan.

3.5 Lokasi Modul

Modul yang kita kembangkan perlu ditempatkan pada direktori yang dikenal oleh OpenERP, sebagai direktori addons. Pada tree source code OpenERP, ini adalah:

$ file openerp/addons/ openerp/addons/: directory

$ ls -1 openerp/addons/ | head -n10 account account_accountant account_analytic_analysis account_analytic_default account_analytic_plans account_anglo_saxon account_asset account_bank_statement_extensions $ ls -1 openerp/addons/ | head -n10 account account_accountant account_analytic_analysis account_analytic_default account_analytic_plans account_anglo_saxon account_asset account_bank_statement_extensions

Kita bisa kopikan modul yang kita kembangkan ke dalam direktori addons yang dikenal, apabila memiliki hak tulis, atau kita bisa gunakan direktori lain. Direktori lain tersebut kemudian perlu diinformasikan ke server OpenERP. Bacalah juga bab 8 apabila diperlukan.

3.6 Update daftar modul

Apabila diperlukan, pada saat kita menambahkan modul baru di file sistem, kita mungkin perlu memberitahu server OpenERP bahwa ada modul baru yang ditambahkan.

Untuk keperluan tersebut, pertama-tama, aktifkanlah terlebih dahulu Technical features untuk user admin dan: • Aktiflah di menu Settings • Klik Modules → Update Modules List • Sebuah dialog akan ditampilkan, kliklah pada tombol Update

3.7 Mencari dari daftar modul

Apabila modul kita dikenal, maka kita bisa mencari dan melihat informasi detilnya. Di menu Settings, pilihlah Modules → Installed Modules. Pada kotak pencarian, hapuslah kriteria installed dan isikan dengan nama modul kita. Apabila berhasil, modul akan tampil dan kita bisa klik install untuk melakukan instalasi.

Apabila modul kita tidak dikenal: • Pastikan kita telah tempatkan pada direktori addons yang dikenal oleh OpenERP. Apabila

menempatkan pada direktori lain, pastikan kita sudah melakukan konfigurasi yang tepat. • Pastikan modul kita merupakan paket Python yang valid. Dengan pengaturan PYTHONPATH yang tepat, Anda bisa coba lakukan import. • Pastikan manifest __openerp__.py telah benar. • Pastikan tidak ada sintaks yang salah sebagai sebuah modul Python. • Apabila diperlukan, lakukanlah update daftar modul.

3.8 Langkah berikut

• Sebuah IDE yang nyaman sangat disarankan. Pilihlah IDE favorit Anda, dan daftarkanlah PYTHONPATH ataupun hal serupa pada IDE Anda. Apabila didukung, kita bisa memanfaatkan fasilitas code completion, sebagai contoh.

• Mulailah dengan mengembangkan satu modul sederhana, yang menambahkan satu field pada satu • Mulailah dengan mengembangkan satu modul sederhana, yang menambahkan satu field pada satu

Contoh modul buku_contoh.

__init__.py

from . import buku_contoh

__openerp__.py

{ 'name': 'Contoh', 'version': '1.0', 'author': 'noprianto', 'description': 'Contoh modul sederhana', 'category': 'Buku', 'website': 'https://github.com/id-python/buku-openerp', 'depends': ['base'], 'data': [],

buku_contoh.py

from openerp.osv import orm, fields

class res_partner(orm.Model): _name = 'res.partner' _inherit = 'res.partner'

_columns = { 'buku_contoh': fields.char('Contoh field', size=20) }

Pada contoh tersebut, kita akan menambahkan satu field, tapi tidak menampilkan dalam view. Ketika modul sukses diinstall, tidak ada perubahan apapun yang ditampilkan pada model res.partner. Padahal, sesungguhnya, sebuah field telah ditambahkan. Cobalah untuk menampilkan field buku_contoh dengan Manage Views.

Untuk informasi tentang model, kita akan membahasnya di bab 5.

4. Kasus: Perusahaan Rental Kendaraan

Penulis: Widoyo

4.1 Pendahuluan

Sebuah perusahaan persewaan kendaraan, melayani sewa kendaraan:

1. Dengan sopir

2. Tanpa sopir

Periode

Tipe Penggunaan

1. Pribadi / keluarga

2. Dinas

Perawatan kendaraan menjadi tanggung jawab pemilik persewaan, terdiri dari:

1. Ganti oli

2. Ban

3. Service rutin

4.2 Langkah implementasi

Pastikanlah server OpenERP telah terinstall. Kemudian, buatlah sebuah database dengan nama majulancar.

Setup Identitas Perusahaan

Bagian ini merupakan hal pokok, informasi identitas perusahaan, salah satunya untuk tampilan laporan- laporan yang nanti akan dihasilkan.

OpenERP mendukung sistem banyak perusahaan, namun dalam kasus ini hanya dicontohkan untuk satu perusahaan.

Untuk melakukan ini, klik menu Settings → Companies → Companies

Pada setup perusahaan ini dibagi dalam beberapa bagian: • General Information: Berisi informasi umum perusahaan seperti nama, alamat, telepon, dan lain-

lain. Untuk rekening bank, bisa lebih dari satu. • Configuration: Berisi mata uang dan masalah logistik. • Overdue Payments: Berisi template untuk pelanggan bila terjadi keterlambatan membayar tagihan.

Setelah selesai diberikan informasi perusahaan, kita dapat klik pada tombol Preview Header/Footer untuk melihat header/footer.

Memasang Modul

Lakukanlah instalasi untuk modul-modul berikut: • Fleet Management • Point of Sale • eInvoicing & Payments (akan terinstall dengan sendirinya sebagai dependency)

Terjemahan Bahasa Indonesia

Kita dapat pula menggunakan terjemahan ke Bahasa Indonesia, dengan cara memilih menu Settings → Translations → Load a translation, kemudian pilihlah Indonesian / Bahasa Indonesia.

Setelah itu, untuk setiap user, masuklah ke pengaturan Preference (drop down sisi kanan atas layar, klik pada nama user), kemudian ubahlah Language ke Indonesian / Bahasa Indonesia.

Kode Rekening

Untuk mencatat semua transaksi agar dapat langsung masuk ke dalam catatan akuntansi (jurnal), perlu disiapkan kode rekening-kode rekening (Chart of Account – COA) yang nanti akan dipergunakan.

Untuk melakukan hal ini, pertama aktifkan Full accounting features, melalui menu Settings → Configuration → Akuntansi → Full accounting features: journals, legal statements, chart of accounts, etc.

Lalu untuk mendapatkan daftar kode rekening, klik menu Akuntansi → Configuration → Akun → Templates → Akun → Account Templates.

Data Awal

Data awal di sini dimaksudkan sebagai data-data dasar yang menjadi acuan data lain pada saat pengoperasian. Data di sini pada saat berjalan juga masih tetap bisa dilakukan perbaikan, misalnya ditambah, dihapus, atau diubah.

Beberapa data awal yang perlu untuk diisikan adalah:

1. Layanan persewaan, termasuk harga

2. Kendaraan yang dimiliki

3. Pelanggan yang telah pernah menggunakan jasa

Layanan Persewaan

Data ini adalah item-item yang nanti dijual. Mengikuti dari contoh kasus di atas, maka perlu disiapkan penjelasan dari layanan yang akan dijual, antara lain:

1. Dengan atau tidak dengan sopir

2. Waktu sewa: harian (setengah hari dan sehari penuh), mingguan, dan bulanan

3. Keluarga atau dinas Untuk menambahkan produk jual, klik pada menu POS → Produk → Produk, kemudian klik tombol

Create.

Setiap produk perlu untuk dihubungkan dengan kode akun.

Kendaraan

Kendaraan perlu dicatat ke dalam sistem sebagai bagian dari aset. Administrasi kendaraan ini dilakukan dari menu Fleet. Beberapa data yang perlu diadministrasi antara lain:

1. Kendaraan

2. Service, baik berkala maupun yang berbasis kejadian

3. Bahan bakar, yaitu pencatatan penggunaan bahan bakar

4. Biaya lain

5. Kontrak, misalnya bila kendaaraan disewa dalam jangka waktu yang lama atau berbasis kontrak Untuk menambah kendaraan, klik menu Fleet → Vehicle → Vehicle, kemudian klik tombol Create.

Kendaraan yang telah ditambahkan akan tampil pada daftar kendaraan.

Pelanggan

Pelanggan ini adalah pilihan, artinya tidak wajib ditambahkan. Namun lebih baik ditambahkan, hal ini akan memberi nilai tambah sistem agar dapat diketahui loyalitas pelanggan. Selain itu juga berguna untuk menjaga hubungan agar pelanggan tetap loyal dan perbaikan layanan.

Pelanggan dapat berupa perorangan maupun perusahaan. Data pelanggan perlu dihubungkan dengan kode rekening yang telah disiapkan sebelumnya.

Data pelanggan dapat dilihat dari menu Sales → Sales → Customers.

Operasi

Setelah data-data disiapkan, sistem dapat dioperasikan untuk mencatat transaksi-transaksi yang terjadi. Beberapa transaksi yang mungkin terjadi pada sistem antara lain:

1. Pelanggan melakukan sewa kendaraan

2. Kendaraan dilakukan perbaikan

3. Laporan keuangan

Pelayanan Sewa Kendaraan

Ada beberapa langkah untuk hingga menerima pembayaran, yaitu:

1. Membuat penawaran

2. Konfirmasi penjualan

3. Membuat tagihan / invoice

4. Terima pembayaran Pencatatan sewa kendaraan dapat dimulai dari membuat penawaran yang dilakukan melalui menu Sales

→ Sales → Order Penjualan dan klik tombol Create.

Setelah selesai mengisi data-data, lalu klik tombol Confirm Sale. Setelah ini, maka kita bisa membuat tagihan / faktur. Setelah Buat Faktur, lalu View Invoice dan klik tombol Validasi, maka faktur sudah final yang dapat dicetak untuk pelanggan sebagai bahan tagihan.

Untuk mencatat penerimaan pembayaran, klik tombol Register Payment. Pada dialog yang ditampilkan, isikan pembayaran dan klik tombol Pay.

Hal ini akan membuat status dari penjualan ini sudah terbayar.

Pencatatan Biaya Kendaraan

Laporan

Ada berbagai laporan keuangan dapat dihasilkan dari openERP. Berikut ini beberapa screenshot yang mungkin berkaitan dengan Laporan.

Laporan dapat diakses dari menu Reporting.

Dashboard Laporan

Laporan Biaya Kendaraan (Fleet Cost)

Laporan Analisa Penjualan

Laporan Akuntansi

5. Model pada OpenERP

Penulis: Noprianto

Di bab sebelumnya, kita telah membahas dasar-dasar pengembangan modul OpenERP. Kita mengetahui bahwa kita perlu membuat manifest dan informasi apa saja yang perlu disertakan ke dalam file manifest suatu modul agar dapat dikenal oleh OpenERP. Kita juga membuat class, yang diturunkan dari orm.Model dan kemudian bekerja dengan model yang telah disediakan. Kita mengetahui bahwa kita dapat menambahkan field dengan tipe tertentu.

Di bab ini, kita akan membahas lebih lanjut tentang class orm.Model tersebut. Termasuk diantaranya sebagian dari atribut dan method yang telah disediakan.

5.1 Hirarki class

Ketika kita bekerja dengan suatu business object, kita menurunkan dari class orm.Model. Pada source code OpenERP, class ini didefinisikan pada openerp/osv/orm.py. Class ini merupakan turunan dari BaseModel, yang juga didefinisikan pada file yang sama. Lebih lanjut, class BaseModel merupakan base class untuk model pada OpenERP.

| Method resolution order: | Model | BaseModel | __builtin__.object

Untuk bekerja dengan class ini, kita melakukan import dengan cara: >>> from openerp.osv import orm Atau, ketika ingin menambahkan field: >>> from openerp.osv import orm, fields

Apa yang kita lakukan pada contoh terakhir adalah mengimport modul orm dan fields dari package openerp.osv. Sebagai catatan, modul fields mendefinisikan class-class tipe field yang didukung oleh OpenERP.

Dengan menurunkan dari class Model ini, kita dapat menggunakan dan/atau mengoverride sejumlah atribut dan method yang telah disediakan.

Dengan komentar tidak disertakan, ini adalah definisi seutuhnya dari class Model.

class Model(BaseModel): _auto = True _register = False _transient = False

5.2 orm.Model, osv.Model dan osv.osv

Pada berbagai modul yang kita gunakan (baik yang disertakan ataupun dari pihak ketiga), kita akan menemukan class yang diturunkan dari osv.osv. Pada dokumentasi tertentu, kita juga akan menjumpai osv.Model.

Apabila kita mencermati file openerp/osv/osv.py, kita bisa melihat bahwa osv.osv digunakan untuk backward compatibility:

# deprecated - for backward compatibility. osv = Model osv_memory = TransientModel osv_abstract = AbstractModel # ;-)

Lebih lanjut, modul orm diimport oleh modul osv: import orm

… … from openerp.osv.orm import MetaModel, Model, TransientModel, AbstractModel

Dengan cara demikian, kita bisa menggunakan osv.osv dan osv.Model untuk backward compatibility. Di prompt interaktif Python:

>>> from openerp.osv import osv >>> osv.osv <class 'openerp.osv.orm.Model'> >>> osv.Model <class 'openerp.osv.orm.Model'> >>> >>> >>> from openerp.osv import orm >>> orm.Model <class 'openerp.osv.orm.Model'> >>> >>>

Walaupun kita tetap bisa menggunakan osv.osv, untuk kode baru yang ditujukan untuk dijalankan pada OpenERP versi baru, kita akan menggunakan orm.Model.

5.3 Atribut

Class BaseModel memiliki sejumlah atribut yang memiliki peranan/arti tertentu dalam OpenERP. Dan, class Model, sebagai turunan, hanya mendefinisikan ulang beberapa dari atribut tersebut. Class yang kita bangun, sebagai turunan dari Model, juga melakukan hal yang lebih kurang sama.

Dalam contoh yang akan kita bahas, dimana kita menambah field pada model tertentu, apa yang kita lakukan adalah: • Membuat sebuah class baru (menurunkan dari Model) • Mendefinisikan ulang beberapa atribut seperti _name, _inherit dan _columns.

Tanpa kita melakukan lebih jauh lagi, field secara otomatis akan ditambahkan. Berikut adalah sejumlah atribut yang disediakan oleh Model.

Apabila True, maka tabel akan dibuat secara otomatis.

[Wajib] merupakan nama business object dalam notasi titik (misal: res.partner)

_columns

berisikan nama field dan tipenya

_constraints

List dari tuple (nama_fungsi, pesan_kesalahan, fields) untuk memastikan input adalah valid.

Berisikan nilai default, dengan key adalah nama kolom. Bisa berupa literal ataupun fungsi

_rec_name

None

Field alternatif untuk digunakan sebagai name

_parent_name

'parent_id'

_parent_store

False

_parent_order

False

_date_name

Field untuk keperluan sort

_group_by_full

[Pada inheritance tradisional] merupakan _name dari business object parent (wajib, apabila kita menurunkan).

_inherits

_inherit_fields

_all_columns

Nama tabel database. Secara default adalah _name dengan titik diganti dengan underscore.

_invalids

set()

_log_access

Apabila

tidak Apabila True, maka 4 field akan dibuat ditentukan, maka otomatis: create_uid, create_date, write_uid, nilai

diambil write_date, untuk keperluan log.

berdasarkan _auto, dengan default adalah True

_log_create

False

_sql

SQL code untuk membuat table/view apabila _auto adalah False.

_sql_constraints

List dari tuple untuk menentukan SQL constraint

_protected

['read', 'write', 'create', 'default_get', 'perm_read', 'unlink', 'fields_get', 'fields_view_get' , 'search', 'name_get', 'distinct_field_g et', 'name_search', 'copy', 'import_data', 'search_count', 'exists']

CONCURRENCY_CHECK_FIELD

'__last_update'

Beberapa atribut akan dibahas secara khusus pada bagian-bagian berikut.

5.4 Atribut: _columns

Sebagaimana dibahas sebelumnya, atribut _columns digunakan untuk menentukan field dan tipenya, dalam sebuah dictionary.

Apabila kita menurunkan dari business object yang ada, dengan tujuan untuk menambah field, maka kita cukup mendefinisikan field-field yang ingin kita tambahkan saja.

Mari kita ingat kembali ketika melakukan import modul orm dan fields: >>> from openerp.osv import orm, fields

Modul fields mendefinisikan class-class field yang didukung oleh OpenERP. Contoh output dari dir() module fields:

>>> dir(fields) ['Binary', 'DT', 'SUPERUSER_ID', '_', '__builtin__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_column', '_logger', '_symbol_set', '_symbol_set_char', 'base64', 'binary', 'boolean', 'char', 'column_info', 'date', 'datetime', 'dummy', 'field_to_dict', 'float', 'float_repr', 'float_round', 'function', 'get_nice_size', 'html', 'html_sanitize', 'integer', 'invalid_xml_low_bytes', 'logging', 'many2many', 'many2one', 'one2many', 'openerp', 'property', 'pytz', 're', 'reference', 'related', 'sanitize_binary_value', 'selection', 'serialized', 'simplejson', 'sparse', 'text', 'tools', 'xmlrpclib'] >>>

Nama field spesial

Terdapat beberapa nama field spesial yang tidak dapat digunakan (beberapa akan dibuat secara otomatis oleh sistem): id, name, active, sequence, state, parent_id, parent_left, parent_right, create_date, create_uid, write_date, write_uid.

Class _column

Modul fields mendefinisikan sebuah class dengan nama _column, yang merupakan base class untuk semua tipe field. Berikut adalah atribut yang didefinisikan:

>>> from openerp.osv import orm, fields >>> c = fields._column() >>> dir(c) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_as_display_name', '_auto_join', '_classic_read', '_classic_write', '_context', '_deprecated', '_domain', '_multi', '_obj', '_prefetch', '_properties', '_symbol_c', '_symbol_f', '_symbol_get',

'_symbol_set', '_type', 'as_display_name', 'change_default', 'deprecated', 'get', 'group_operator', 'groups', 'help', 'manual', 'ondelete', 'priority', 'read', 'readonly', 'required', 'restart', 'search', 'select', 'selectable', 'set', 'size', 'states', 'string', 'translate', 'view_load', 'write'] >>>

Beberapa dari atribut tersebut memiliki arti khusus, sebagai contoh: • string: label field • required: harus diisi • readonly: hanya dapat dibaca • help: tooltip help

Tipe field: boolean

Merupakan tipe dasar, digunakan untuk benar/salah. Class dan constructor: class boolean(_column)

| __init__(self, string='unknown', required=False, **args)

Contoh (cuplikan dari program 5-1): 'buku_field_4' : fields.boolean( 'Buku Field 4' ),

Tipe field: integer

Merupakan tipe dasar, digunakan untuk integer. Class dan constructor: class integer(_column)

| __init__(self, string='unknown', required=False, **args)

Contoh (cuplikan dari program 5-1):

'buku_field_3' : fields.integer( 'Buku Field 3' , size= 10 ),

Tipe field: reference

Merupakan tipe dasar. Berisikan dynamic relationship ke object lain. Class dan constructor: Merupakan tipe dasar. Berisikan dynamic relationship ke object lain. Class dan constructor:

Tipe field: char

Merupakan tipe dasar, digunakan untuk menampung string (panjang dibatasi). Class dan constructor: class char(_column)

| __init__(self, string='unknown', size=None, **args) Catatan: size, ketika diberikan, akan menentukan maksimal panjang field. Contoh (cuplikan dari program 5-1):

'buku_field_1' : fields.char( 'Buku Field 1' , size= 20 , required= True , help= 'Contoh help' ),

Tipe field: text

Merupakan tipe dasar, digunakan untuk menampung teks. Class: class text(_column)

Tipe field: html

Merupakan tipe dasar. Merupakan turunan dari text. Class: class html(text)

Tipe field: float

Merupakan tipe dasar, digunakan untuk menampung bilangan floating point.

Class dan constructor: class float(_column)

| __init__(self, string='unknown', digits=None, digits_compute=None, required=False, **args) Catatan: digits diberikan dalam format (precision, scale). Gunakanlah selalu apabila bekerja dengan

nilai nominal uang. Contoh (cuplikan dari program 5-1):

'buku_field_2' : fields.float( 'Buku Field 2' , digits=( 4 , 2 )),

Tipe field: date

Merupakan tipe dasar, digunakan untuk menampung tanggal. Class: class date(_column) Contoh (cuplikan dari program 5-1): 'buku_field_5' : fields.date( 'Buku Field 5' ),

Tipe field: datetime

Merupakan tipe dasar, digunakan untuk menampung tanggal/waktu. Class: class datetime(_column) Contoh (cuplikan dari program 5-1): 'buku_field_6' : fields.datetime( 'Buku Field 6' ),

Tipe field: binary

Merupakan tipe dasar. Sesuai konvensi legacy OpenERP adalah untuk transfer/menyimpan data biner sebagai string dalam encoding base64. Sebagai contoh adalah isi file binary.

Class dan constructor: class binary(_column)

| __init__(self, string='unknown', filters=None, **args)

Tipe field: selection

Merupakan tipe dasar, digunakan untuk pilihan. Class dan constructor: class selection(_column)

| __init__(self, selection, string='unknown', **args) Catatan: selection diberikan dalam list dari tuple (key, label) ataupun dengan menggunakan fungsi. Contoh (cuplikan dari program 5-1):

SELECTION_1 = [ ( 'pilihan1' , 'Pilihan 1' ), ( 'pilihan2' , 'Pilihan 2' ), ( 'pilihan3' , 'Pilihan 3' ), ]

SELECTION_2 = [ ( 'pilihan4' , 'Pilihan 4' ), ( 'pilihan5' , 'Pilihan 5' ), ( 'pilihan6' , 'Pilihan 6' ), ( 'pilihan7' , 'Pilihan 7' ), ( 'pilihan8' , 'Pilihan 8' ), ( 'pilihan9' , 'Pilihan 9' ), ( 'pilihan10' , 'Pilihan 10' ), ]

class res_partner(orm.Model): _name = 'res.partner' _inherit = 'res.partner'

def _get_selection_2(self, cr, uid, context= None ): return SELECTION_2

'buku_field_7' : fields.selection(SELECTION_1, 'Buku Field 7' ), 'buku_field_8' : fields.selection(_get_selection_2, 'Buku Field 8' ),

Tipe field: many2one