Anda di halaman 1dari 76

PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

PANDUAN LENGKAP PEMROGRAMAN QWEB


ODOO V10
CARA MODIFIKASI DAN MEMBUAT REPORT QWEB INVOICE, PURCHASE
ORDER, SALE ORDER, JOURNAL ENTRY

Revisi 4 Aug 2017

Disarikan dari pengalaman implementasi Odoo untuk sistem Accounting Odoo


di beberapa perusahaan Jasa, E-Commerece, Industri Garment, Retail, Migas,
dan Farmasi.

Buku ini menjelaskan teknis detail pembuatan dan modifikasi Report QWeb
untuk module accounting, sales, purchase, dan inventory Odoo v10.

Buku ini cocok bagi anda yang bergerak di perusahaan yang akan
menggunakan Odoo secara langsung maupun untuk anda yang bergerak di
bidang konsultasi IT dan hendak mengimplementasikan Odoo untuk client.

Pokok bahasan diantaranya:

• Instalasi WKHTMLTOPDF

• Report Sale Order

• Report Invoice

• Report Purchase Order

• Report Acccount Move untuk Voucher Journal Entry

• Text Terbilang

• Ukuran Kertas

• Watermark

• Bootstrap CSS

• Report di PDF dan HTML

• Logo dan Gambar

• Barcode QR Code

• Sub Report, Print Label

• Format Tanggal dan Angka

Semoga Bermanfaat!

© 2017 vitraining.com Page 1 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Daftar Isi
1 Pendahuluan ........................................................................................................ 4
2 Template Addons ................................................................................................. 5
3 Instalasi WKHTMLTOPDF dan Permasalahannya ................................................. 6
4 Modifikasi Report Sale Order ............................................................................... 7
4.1 Folder Addon vit_so_sign............................................................................................. 8
4.2 Edit File __openerp__.py ............................................................................................. 8
4.3 Buat File report/so.xml untuk Modifikasi Report SO .................................................... 9
4.4 Buat File model/so.py untuk Menambah Field validate_id di SO ................................ 10
4.5 Buat File view/so.xml untuk Modifikasi Form SO ....................................................... 11
4.6 Install Addon ............................................................................................................ 11

5 Kwitansi Pelunasan Invoice ............................................................................... 14


5.1 Folder Addon vit_invoice_receipt ............................................................................... 14
5.2 Edit file __openerp__.py ............................................................................................ 15
5.3 Buat File report/invoice.xml untuk Modifikasi Report Invoice ..................................... 15
5.4 Buat File model/invoice.py untuk Field Amount to Text ............................................. 19
5.5 Edit file model/__init__.py ......................................................................................... 19
5.6 Install Addon ............................................................................................................ 20
5.7 Definisi Ukuran Kertas .............................................................................................. 21

6 Purchase Order / RFQ ....................................................................................... 25


6.1 Folder Addon vit_rfq_image ....................................................................................... 25
6.2 Edit file __openerp__.py ............................................................................................ 25
6.3 Buat File report/rfq.xml untuk Modifikasi Report RFQ ............................................... 26
6.4 Install Addon ............................................................................................................ 28

7 Account Move .................................................................................................... 30


7.1 Folder Addon vit_ journal_voucher ............................................................................. 31
7.2 Edit file __openerp__.py ............................................................................................ 31
7.3 Buat File report/account_move.xml ........................................................................... 32
7.4 Install Addon ............................................................................................................ 39
7.5 Modifikasi Ukuran Kertas Voucher ............................................................................. 40
7.6 Currency Symbol ...................................................................................................... 42

8 Watermark ......................................................................................................... 44
8.1 Folder Addon vit_inv_watermark ................................................................................ 45
8.2 Edit file __openerp__.py ............................................................................................ 45
8.3 Copy File Gambar ke Folder Static ............................................................................ 46
8.4 Buat File report/invoice.xml untuk Modifikasi Report RFQ ......................................... 47
8.5 Install Addon ............................................................................................................ 48

9 Menampilkan Report di Format PDF dan HTML ................................................. 49


9.1 Format URL untuk PDF dan HTML ............................................................................ 49
9.2 Mengtahui XML ID Report ......................................................................................... 51

10 Menampilkan Barcode dan QR Code .................................................................. 53


10.1 Tools Pembentuk Gambar Barcode........................................................................... 53
10.2 Type Barcode Odoo .................................................................................................. 53
10.3 Folder Addon vit_so_barcode .................................................................................... 55
10.4 Edit file __openerp__.py ............................................................................................ 55
10.5 Buat File report/so.xml untuk Modifikasi Report Invoice ........................................... 56
10.6 Install Addon ............................................................................................................ 57

11 Mencetak Label dan Sub Report ........................................................................ 59


11.1 Folder Addon vit_invoice_label .................................................................................. 60
11.2 Edit file __openerp__.py ............................................................................................ 60
11.3 Buat File report/invoice.xml untuk Report Label ....................................................... 61
11.4 Install Addon ............................................................................................................ 64
12 Format Tanggal dan Angka ................................................................................ 65

© 2017 vitraining.com Page 2 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

12.1 Format Tanggal ........................................................................................................ 65


12.2 Format Angka........................................................................................................... 65

13 Downlad Addons Hasil Jadi ............................................................................... 67


14 Penutup ............................................................................................................. 68
15 Tentang Penulis ................................................................................................ 69

© 2017 vitraining.com Page 3 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

1 Pendahuluan
Ebook ini tingkatnya lanjutan dari ebook fundamental development addons “5
Hari Menguak Misteri Addons Odoo v10”

Jadi di ebook ini, anda harus sudah paham caranya kalau saya bilang:

• bikin folder addons baru

• tempatkan (copy) folder addon di dalam folder addons Odoo

• install addons

• upgrade addons

• update app list

• restart Odoo

• edit file __openerp__.py

• edit file __init__.py

Kalau belum, beli dulu ebook “5 Hari Menguak Misteri Addons Odoo v10” di
Google Play atau di shop.vitraining.com. Harganya cukup murah kok,
dibanding makan di McDonalds malah lebih mahal J

© 2017 vitraining.com Page 4 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

2 Template Addons
Biar lebih cepat dalam membuat addon baru,
download template addon dari sini:

https://github.com/akhdaniel/published_addons/tr
ee/10.0/10_addons_template

Amankan folder 10_addons_template ini ke suatu


tempat untuk dijadikan template addons berikutnya.

Struktur file dan direktori template:

!"" __init__.py File inisialisasi modul mana yang diaktifkan


!"" __openerp__.py File manifest addons
!"" controllers Folder controller hanya perlu kalo bikin portal web
# !"" __init__.py Inisialisasi modul controller mana yang diaktifkan
# $"" main.py Contoh template controller
!"" data Folder data, berisi data awal yang perlu diinsert
# !"" context_menu.xml Contoh membuat context menu
# !"" cron.xml Contoh data cron
# !"" ir_sequence.xml Contoh data sequence
# $"" parameters.xml Contoh data system parameter
!"" i18n Folder translate bahasa
!"" model Tempat semua object model
# $"" __init__.py Inisialisasi model yang diaktifkan
!"" report Tempat semua XML report
# $"" spm.xml Contoh report XML
!"" security Tempat semua definisi group dan access rights
# !"" groups.xml Contoh definisi group
# $"" ir.model.access.csv Contoh definisi access rights
!"" static Tempat semua file-file statis untuk web portal
# $"" src Tempat semua source web portal
# !"" css Tempat semua file CSS tambahan
# !"" img Tempat semua file image tambahan
# $"" js Tempat semua file JS tambahan
!"" top_menu.xml Top level menu
!"" view Tempat semua view XML
# !"" model.xml Contoh XML untuk model
# !"" template.xml Contoh QWEB template untuk web portal
# $"" web_asset.xml Contoh pemaggilan CSS dan JS web portal
$"" wizard Tempat semua file wizard
$"" __init__.py Inisialisasi modul wizard

© 2017 vitraining.com Page 5 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

3 Instalasi WKHTMLTOPDF dan Permasalahannya


Bagian ini khusus untuk instalasi Odoo di Linux atau Mac. Untuk instalasi di
Windows, umumnya WKHTMLTOPDF sudah terinstall otomatis pada waktu
install Odoo.

Aplikasi WKHTMLTOPDF digunakan oleh Odoo dalam rangka


membentuk PDF dari template QWeb yang bentuknya
sebetulnya HTML. Jadi untuk mengkonvert dari HTML menjadi
PDF berikut semua style CSS yang ada di dalamnya sehingga
hasil konversinya sama persir dengan ketika HTML tersebut
ditampilkan di layar browser.

Situs resmi program WKHTMLTOPDF ada disini:

https://wkhtmltopdf.org/downloads.html

Ada banyak versi WKHTMLTOPDF. Pada saat buku ini ditulis, versi yang
terbukti jalan adalah version 0.12.1 karena versi-versi yang lebih tinggi justru
kadang-kadang tidak sempurna dalam mengkonversi HTML seperti ada
gambar yang hilang, CSS yang tidak betul posisinya.

Jadi untuk sekarang download yang versi 0.12.1.

Setelah download dan install di server tempat Odoo running, kita perlu copy
file executable wkhtmltopdf ke suatu folder yang ada di system PATH
(misalnya /usr/local/bin, /opt/local/bin). Ini diperlukan agar Odoo dapat
menemukan program wkhtmltopdf yang diperlukan.

© 2017 vitraining.com Page 6 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

4 Modifikasi Report Sale Order


Pada bab ini kita mulai membuat addons baru untuk QWEB reporting (sales
order).

Addons ini gunanya untuk menampilkan kolom tanda tangan di bawah


halaman Sale Order seperti ini…


Disini kita akan modifikasi template report SO asli Odoo dengan cara inherit
template XML QWEB. Nama template aslinya:
sale.report_saleorder_document. Info ini bisa ditemukan dari menu:

Settings – Technical – User Interface – Views

Cari view yang tipenya Qweb dan namanya mengandung “saleorder”.

© 2017 vitraining.com Page 7 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

4.1 Folder Addon vit_so_sign


Copy folder template addons menjadi vit_so_sign atau nama lain yang anda
ingini dan tempatkan pada folder addons Odoo.

4.2 Edit File __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang diload, dan status addons, sbb:

{
"name": "SO with Signature",
"version": "1.0",
"depends": [
"base",
"sale"
],
"author": "Akhmad D. Sembiring [vitraining.com]",
"website": "www.vitraining.com",
"category": "Sale",
"description": """\

Features
======================================================================
Add new tabel under SO template for signature:
* Created By
* Validated By
* Received by

""",
"data": [
"report/so.xml",
"view/so.xml",
],
"installable": True,
"auto_install": False,
}

Pada bagian data, kita akan load 2 file XML yaitu:

• report/so.xml yang berisi definisi modifikasi report QWeb Sale Order


bawaan Odoo

• view/so.xml yang berisi definisi inheritance form view Sale Order


bawaan Odoo

© 2017 vitraining.com Page 8 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

4.3 Buat File report/so.xml untuk Modifikasi Report SO


File ini berisi definisi inheritance template QWeb Sale Order asli dan
modifikasi yang kita lakukan.

Saat diinherit maka kita bisa akses semua elemen XML yang ada di template
aslinya dan juga semua variabel yang tersedia pada template tersebut. Salah
satu variabel yang kita perlu adalah:

doc

yang merupakan representasi dari SO yang sedang diprint. Didalamnya


terdapat semua field yang ada di object sale.order, misalnya date_order,
user_id, order_line_ids, dan sebagainya.

Isinya template inherit kita sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<template id="vit_so_sign" inherit_id="sale.report_saleorder_document">
<xpath expr="//div[@class='oe_structure'][last()]" position="after">
<table class="table">
<tr>
<td>Created By</td>
<td>Validated By</td>
<td>Received By</td>
</tr>
<tr>
<td style="padding-top:3cm">
<span t-field="doc.user_id"/>
</td>
<td style="padding-top:3cm">
<span t-field="doc.validated_id"/>
</td>
<td style="padding-top:3cm">
.................
</td>
</tr>
</table>
</xpath>
</template>
</data>
</openerp>

Logika modifikasi template:

Search elemen di template bawaan tepat sebelum tabel tanda tangan akan
ditempatkan (yaitu oe_structure terakhir). Gunakan command xpath:

<xpath expr="//div[@class='oe_structure'][last()]" position="after">

yang akan mencari elemen div dengan class oe_structure yang terakhir
ditemukan, pake last() command untuk hal ini.

Ini dilakukan karena pada template bawaan terdapat banyak div oe_structure
sehingga kita harus menentukan div mana yang mau ditunjuk yaitu div yang
terakhir.

© 2017 vitraining.com Page 9 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Setelah elemennya ditemukan, sisipkan tabel HTML standard untuk


nenampilkan kolom tanda tangan.

<table class="table">
<tr>
<td>Created By</td>
<td>Validated By</td>
<td>Received By</td>
</tr>
<tr>
<td style="padding-top:3cm">
<span t-field="doc.user_id"/>
</td>
<td style="padding-top:3cm">
<span t-field="doc.validated_id"/>
</td>
<td style="padding-top:3cm">
.................
</td>
</tr>
</table>

Style padding-top di td dipake supaya baris tanda tangan agak tinggi supaya
bisa mereka kasi tanda tangan dan cap disitu nantinya.

Pada kolom tabel ke 1 dan 2 kita keluarkan isi variabel:

• doc.user_id yaitu user yang men-create SO

• dod.validate_id yaitu user yang memvalidate SO (akan ditambahkan


fieldnya setelah ini)

4.4 Buat File model/so.py untuk Menambah Field validate_id di SO


Contoh di atas kita perlu field tambahan namanya validate_id di SO.

Caranya adalah dengan meng-inherit object sale.order dan membuat field


baru disitu sehingga field tambahan akan tersedia pada sale.order.

Buat file baru, namanya model/so.py.

Isinya sederhana saja:

from odoo import api, fields, models, _

class sale_order(models.Model):
_name = 'sale.order'
_inherit = 'sale.order'

validated_id = fields.Many2one(comodel_name="res.users",
string="Validated By", required=False, )

Disini kita inherit object sale.order dan nambah field baru namanya
validated_id yang merupakan many2one ke object res.users nya Odoo
sehingga kita bisa pilih nanti siapa yang mem-validasi SO ini.

Lanjut.

© 2017 vitraining.com Page 10 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Edit file model/__init__.py dan aktifkan module kita di atas.

import so

4.5 Buat File view/so.xml untuk Modifikasi Form SO


Inherit form SO supaya muncul field validated_id yang barusan ditambah
tadi.

Buat file baru view/so.xml

Isinya adalah proses inherit dari form XML sale order bawaan Odoo yang
namanya sale.view_order_form.

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<record id="view_order_form_validated" model="ir.ui.view">
<field name="name">view_order_form_validated</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<field name="user_id" position="after">
<field name="validated_id"/>
</field>
</field>
</record>
</data>
</openerp>

Lalu kita cari field yang namanya user_id dan pada posisi setelahnya kita
tambah field validated_id.

4.6 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_so_sign.

Hasilnya: akan terdapat field tambahan di form SO bagian Other Information


yaitu field Validate By yang bisa dipilih dari pilihan user:

© 2017 vitraining.com Page 11 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Lalu pada report SO akan terdapat tambahan kolom tanda tangan,…

© 2017 vitraining.com Page 12 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Done!

© 2017 vitraining.com Page 13 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

5 Kwitansi Pelunasan Invoice


Addon berikutnya yang mau dibuat adalah print out lembar tanda terima uang
pelunasan atas suatu invoice (kwitansi). Disini kita akan membuat report
QWeb baru dan melakukan inherit report object Invoice.

Penampakannya… muncul menu baru namanya Receipt di bawah tombol


Print invoice..


Hasil print outnya sbb:


Disini kita pake format ukuran kertas tersendiri yaitu ½ A4 landscape.

5.1 Folder Addon vit_invoice_receipt


Copy folder template addons menjadi vit_inv_receipt atau nama lain yang
anda ingini dan tempatkan pada folder addons Odoo.

© 2017 vitraining.com Page 14 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

5.2 Edit file __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang diload, dan status addons, sbb:

{
"name": "Print Invoice Receipt",
"version": "1.0",
"depends": [
"base",
"account"
],
"author": "Akhmad D. Sembiring [vitraining.com]",
"website": "www.vitraining.com",
"category": "Accounting",
"description": """\

Features
======================================================================

* Print invoice receipts.


* Addons ini adalah bahan praktek pada traning "Odoo QWeb Programming" yang
diselenggarakan di vitraining.com dan E-Book "Panduang Lengkap Pemrograman
QWeb Odoo v10"
* Klik http://shop.vitraining.com untuk info lebih lanjut

""",
"data": [
"report/invoice.xml",
],
"installable": True,
"application": True,
"auto_install": False,
}

Pada bagian data, kita akan load 1 file XML yaitu:

• report/invoice.xml yang berisi definisi modifikasi report QWeb Invoice


bawaan Odoo dan menampilkan tombol di bawah menu Print
standard

5.3 Buat File report/invoice.xml untuk Modifikasi Report Invoice


Buat file report/invoice.xml yang isinya sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<report
id="report_receipt_menu"
string="Receipt"
model="account.invoice"
report_type="qweb-pdf"
file="account.invoice"
name="vit_inv_receipt.receipt_report"

/>

<template id="receipt_report_document">
<t t-call="report.external_layout">
<t t-set="doc"

© 2017 vitraining.com Page 15 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

t-value="doc.with_context({'lang':doc.partner_id.lang})" />
<div class="page">
<h1>
RECEIPT
</h1>

<p>
Sudah terima dari <span t-field="doc.partner_id"/>
uang sebesar <span t-field="doc.amount_total"/>
(<i><span t-field="doc.amount_to_text"/></i>)
untuk pelunasan invoice no <span t-field="doc.number"/>.
</p>

<p>
Bandung, <t t-esc="time.strftime('%d %b %Y')"/>
</p>

<p>
Yang menerima,
</p>

<p style="padding-top:2cm">
...............
</p>
</div>
</t>
</template>

<template id="receipt_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="vit_inv_receipt.receipt_report_document"
t-lang="doc.partner_id.lang"/>
</t>
</t>
</template>
</data>
</openerp>

Pada coding di atas…

Tag ini:

<report
id="report_receipt_menu"
string="Receipt"
model="account.invoice"
report_type="qweb-pdf"
file="account.invoice"
name="vit_inv_receipt.receipt_report"

/>

gunanya untuk membuat action report baru dengan label Receipt untuk
object account.invoice sehingga akan muncul tombol Receipt pada waktu kita
buka form invoice…

© 2017 vitraining.com Page 16 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


atau saat select beberapa record invoice pada tree view invoice…


Waktu di-click menu report Receipt maka Odoo akan memproses template
XML yang namanya vit_inv_receipt.receipt_report dan men-generate file PDF
yang siap didownload.

Template ini terdefinisi di bagian bawah yaitu…

<template id="receipt_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="vit_inv_receipt.receipt_report_document"

© 2017 vitraining.com Page 17 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

t-lang="doc.partner_id.lang"/>
</t>
</t>
</template>

waktu dipanggil, template ini akan melakukan looping foreach untuk setiap
record Invoice yang mau diprint. Pada framework QWeb Odoo, records
Invoice yang akan diprint tersebut tersimpan di dalam variabel list docs.
Walaupun cuma 1 record, bentuknya tetap list sehingga harus dilooping
dengan foreach.

Pada setiap looping kita punya variabel doc yang merupakan representasi dari
1 record Invoice yang akan diprint.

Lalu variabel doc tersebut dikirimkan sebagai parameter pada waktu


pemanggilan template QWeb lainnya yaitu
vit_inv_receipt.receipt_report_document. Template ini adalah template yang
mendefinisikan posisi elemen-elemen dokumen receipt yaitu…

<template id="receipt_report_document">
<t t-call="report.external_layout">
<t t-set="doc"
t-value="doc.with_context({'lang':doc.partner_id.lang})" />
<div class="page">
<h1>
RECEIPT
</h1>

<p>
Sudah terima dari <span t-field="doc.partner_id"/>
uang sebesar <span t-field="doc.amount_total"/>
(<i><span t-field="doc.amount_to_text"/></i>)
untuk pelunasan invoice no <span t-field="doc.number"/>.
</p>

<p>
Bandung, <t t-esc="time.strftime('%d %b %Y')"/>
</p>

<p>
Yang menerima,
</p>

<p style="padding-top:2cm">
...............
</p>
</div>
</t>
</template>

Pertama-tama kita panggil template bawaan Odoo yang namanya


report.external_layout. Template ini membawa definisi file-file CSS yang
diperlukan oleh setiap report QWeb.

Lalu kita definisikan property bahasa pada variabel doc agar sesuai dengan
bahasa partner invoice terkait.

© 2017 vitraining.com Page 18 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Lalu kita buat div class page yang akan berisi elemen yang akan dimunculkan
pada kwitansi, mulai dari judulnya “RECEIPT”, sampai dengan tanda tangan.

Sederhana saja, kita cuma pake elemen <div>, <p>, dan <h1> standard
HTML untuk menampilkan isi dokumen kwitansi.

Di tengah-tengah dokumen kita keluarkan isi variabel doc, yaitu:

• doc.partner_id: menampilkan nama partner pada invoice

• doc.amount_total: menampilkan total amount invoice

• doc.amount_to_text: menampilkan angka terbilang

• doc.number: menampilkan nomor invoice

Selain itu kita tampilkan juga code python time.strftime('%d %b %Y') untuk
menampilkan tanggal hari ini dengan format “02 Jan 2017”

5.4 Buat File model/invoice.py untuk Field Amount to Text


Template report kita di atas perlu field tambahan amount_to_text pada object
invoice untuk menampilkan angka terbilang.

Buat file model/invoice.py yang isinya

from odoo import api, fields, models, _


from odoo.tools import amount_to_text_en

class invoice(models.Model):
_name = 'account.invoice'
_inherit = 'account.invoice'

@api.depends('amount_total','currency_id')
def _amount_to_text(self):
for record in self:
record.amount_to_text =
amount_to_text_en.amount_to_text(
record.amount_total, 'id', record.currency_id.name)

amount_to_text = fields.Char(compute='_amount_to_text',
string="amount text", required=False, )

Disini kita inherit object account.invoice untuk menambahkan field


amount_to_text yang berupa field character tapi isinya dihitung melalui
method _amount_to_text().

Method ini memanfaatkan package odoo amount_to_text_en yang sudah


tersedia pada framework Odoo dan tinggal kita panggil method
amount_to_text() yang ada pada package amount_to_text_en terhadap field
amount_total.

5.5 Edit file model/__init__.py


Aktifkan modul invoice.py:

import invoice

© 2017 vitraining.com Page 19 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

5.6 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_inv_receipt.

Hasilnya, muncul tombol Receipt di bawah tombol Print pada halaman form
Invoice.


Waktu diklik, muncul report kwitansi seperti yang didefinisikan…

© 2017 vitraining.com Page 20 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Tapi ukuran kertasnya masih standard A4 bawaan Odoo.

Kita perlu ganti ukuran kertasnya agar jadi ½ A4 dan landscape. Nanti setelah
ini..

5.7 Definisi Ukuran Kertas


Edit file report/invoice.xml

Tambahi baris-baris berikut di bawah template terakhir tapi masih di dalam


tag <data>.

<record id="receipt_paperformat" model="report.paperformat">


<field name="name">Receipt Paper Format</field>
<field name="default" eval="False" />
<field name="format">A5</field>
<field name="page_height">0</field>
<field name="page_width">0</field>
<field name="orientation">Landscape</field>
<field name="margin_top">4</field>
<field name="margin_bottom">4</field>
<field name="margin_left">4</field>
<field name="margin_right">4</field>
<field name="header_line" eval="False" />
<field name="header_spacing">35</field>
<field name="dpi">90</field>
</record>

<record id="report_receipt_menu" model="ir.actions.report.xml">


<field name="paperformat_id" ref="vit_inv_receipt.receipt_paperformat"/>

© 2017 vitraining.com Page 21 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

</record>

<record id="report_receipt_menu" model="ir.actions.report.xml">


<field name="print_report_name">'Receipt '+(object.name or
'').replace('/','')+'.pdf'</field>
</record>

Ayo kita bedah satu-satu tag QWeb di atas…

Tag ini:

<record id="receipt_paperformat" model="report.paperformat">

gunanya untuk membuat record Paper Format di Odoo. Nanti akan muncul
paper format baru dari menu Settings – Technical – Reports – Paper Format.
Disini kita definisikan ukuran kertas A5, orientasi landscape, margin atas
bawah kiri kanan, spasi dengan header dan footer, serta DIP (dot per inch)
yaitu tingkat ketajaman hasil cetakan.

Tag ini:

<record id="report_receipt_menu" model="ir.actions.report.xml">

gunanya untuk mendefinisikan ulang menu action report yang namanya


report_receipt_menu yang udah kita buat di atas, dengan men-set
paperformat nya dengan record paper format di atasnya.

Tag ini:

<record id="report_receipt_menu" model="ir.actions.report.xml">

gunanya untuk mendefinisikan ulang menu action report di atas dengan men-
set print_report_name untuk membentuk nama file PDF yang dihasilkan
menjadi:

'Receipt '+(object.name or '').replace('/','')+'.pdf'

Contohnya nanti: Receipt INV001002.pdf.

Upgrade addons, hasilnya print out kwitansi berubah ukuran kertasnya


menjadi sbb:

© 2017 vitraining.com Page 22 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Dilihat di menu:

Settings – Technical – Reports – Paper Format

Maka akan terlihat paper format yang kita buat di atas…

© 2017 vitraining.com Page 23 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

5.8 Text Terbilang Bahasa Indonesia


Tulisan terbilang diatas masih menggunakan bahasa Inggris bawaan Odoo.
Kalau mau pake bahasa Indonesia, kita harus buat library atau method yang
berfungsi sama seperti method amount_to_text di atas.. yaitu men-translate
angka-angka yang jadi parameter input menjadi tulisan ratusan, ribuan,
jutaan, milyaran, dan seterusnya..

Saya ada pernah lihat di internet ada yang udah pernah bikin library seperti
itu, kalau tidak salah buatan salah satu master Odoo Indonesia, bang
Muhammad Azis… cari aja namanya di google ntar pasti ketemu blognya J

© 2017 vitraining.com Page 24 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

6 Purchase Order / RFQ


Addon berikutnya yang mau dibuat adalah modifikasi print out report Request
for Quotation yang merupakan object purchase.order, jadi caranya akan sama
nanti ketika perlu memodifikasi report Purchase Order.

Disini kita akan membuat report QWeb inherit dari template asli RFQ dengan
menambahkan kolom gambar pada tabel detail RFQ.

Penampakannya seperti ini…

6.1 Folder Addon vit_rfq_image


Copy folder template addons menjadi vit_rfq_image atau nama lain yang
anda ingini dan tempatkan pada folder addons Odoo.

6.2 Edit file __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang diload, dan status addons, sbb:

{
"name": "Display Image on RFQ",
"version": "1.0",
"depends": [
"base",
"purchase"
],
"author": "Akhmad D. Sembiring [vitraining.com]",
"website": "www.vitraining.com",
"category": "Purchasing",
"description": """\

Features
======================================================================

© 2017 vitraining.com Page 25 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

* Add product image column on RFQ report


* Addons ini adalah bahan praktek pada traning "Odoo QWeb Programming" yang
diselenggarakan di vitraining.com dan E-Book "Panduang Lengkap Pemrograman
QWeb Odoo v10"
* Klik http://shop.vitraining.com untuk info lebih lanjut

""",
"data": [
"report/rfq.xml",
],
"application": True,
"installable": True,
"auto_install": False,
}

Pada bagian data, kita akan load 1 file XML yaitu:

• report/rfq.xml yang berisi definisi modifikasi report QWeb RFQ


bawaan Odoo untuk menampilkan gambar produk pada tabel detail
dokumen RFQ

6.3 Buat File report/rfq.xml untuk Modifikasi Report RFQ


Buat file report/rfq.xml yang isinya sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<template name="rfq_image"
inherit_id="purchase.report_purchasequotation_document">

<xpath expr="//table[@class='table table-condensed']" position="replace">


<table class="table table-condensed">
<thead>
<tr>
<th><strong>Description</strong></th>
<th><strong>Image</strong></th>
<th class="text-center">
<strong>Expected Date</strong>
</th>
<th class="text-right"><strong>Qty</strong></th>
</tr>
</thead>
<tbody>
<tr t-foreach="o.order_line" t-as="order_line">
<td>
<span t-field="order_line.name"/>
</td>
<td>
<img
t-att-src="'data:image/jpeg;base64,%s' % order_line.product_id.image"
style="max-height:50px" />
</td>
<td class="text-center">
<span t-field="order_line.date_planned"/>
</td>
<td class="text-right">
<span t-field="order_line.product_qty"/>
<span t-field="order_line.product_uom"
groups="product.group_uom"/>
</td>

© 2017 vitraining.com Page 26 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

</tr>
</tbody>
</table>
</xpath>
</template>
</data>
</openerp>

Pada coding di atas, kita meng-inherit template QWeb asli RFQ yang namanya
purchase.report_purchasequotation_document.

Coba cek ke menu:

Settings – Technical – User Interface – Views

Cari template QWeb purchase.report_purchasequotation_document


Pada template tersebut terdapat tabel yang berisi baris-baris detail produk
seperti area yang disorot di atas.

Dalam contoh addon kali ini kita akan me-replace tabel tersebut secara
keseluruhan dengan cara meng-copy paste definisi tabel aslinya kedalam
template punya kita.

Caranya seperti ini , perhatikan comman position tag <xpath> kali ini yaitu
replace.

<xpath expr="//table[@class='table table-condensed']" position="replace">


<table class="table table-condensed">
....
</table>
</xpath>

© 2017 vitraining.com Page 27 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Setelah copy-paste kedalam template kita, maka kita bisa edit isi tabel semau
kita, contohnya disini kita tambah <td> yang berisi gambar produk, yang
diambil dari variabel:

order_line.product_id.image

dan diformat kedalam tag <img> seperti ini…

<td>
<img t-att-src="'data:image/jpeg;base64,%s' % order_line.product_id.image"
style="max-height:50px" />
</td>

Atribut t-att-src adalah atribut khusus QWeb untuk memformat atribut src tag
<img> berdasarkan format string python standar:

'data:image/jpeg;base64,%s' % order_line.product_id.image

disini, atribut src dari tag <img> akan terisi dengan data image yang ter-
encode dengan base64 string yang berasal dari variabel
order_line.product_id.image.

Atribut static style=”max-height:50px” gunanya supaya image yang muncul


dibatasi tingginya hanya maksimal 50px saja.

6.4 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_rfq_image.

Hasilnya, print out RFQ akan berubah yaitu ada tambahan kolom gambar
pada tabel detail produk.

© 2017 vitraining.com Page 28 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

© 2017 vitraining.com Page 29 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

7 Account Move
Addon berikutnya yang mau dibuat adalah mendefinisikan report baru dan
inherit object Account Move untuk bisa mencetak Voucher Journal Entry.

Penampakannya seperti ini…

Ada tambahan tombol Print pada form Journal Entry…


Waktu di-klik muncul report Voucher Journal Entry seperti ini dimana muncul
semua detail data Journal Entry seperti di layar dan juga ada tambahan
kolom tanda tangan di bawahnya.

Ukuran kertasnya pun khusus seperti layaknya sebuah voucher.

© 2017 vitraining.com Page 30 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

7.1 Folder Addon vit_ journal_voucher


Copy folder template addons menjadi vit_journal_voucher atau nama lain
yang anda ingini dan tempatkan pada folder addons Odoo.

7.2 Edit file __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang diload, dan status addons, sbb:

{
"name": "Print Journal Voucher",
"version": "1.0",
"depends": [
"base",
"account"
],
"author": "Akhmad D. Sembiring [vitraining.com]",
"website": "www.vitraining.com",
"category": "Accounting",
"description": """\

Features
======================================================================

* Print account move journal voucher


* Addons ini adalah bahan praktek pada traning "Odoo QWeb Programming" yang
diselenggarakan di vitraining.com dan E-Book "Panduang Lengkap Pemrograman
QWeb Odoo v10"
* Klik http://shop.vitraining.com untuk info lebih lanjut

""",
"data": [
"report/account_move.xml",

© 2017 vitraining.com Page 31 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

],
"installable": True,
"application": True,
"auto_install": False,
}

Pada bagian data, kita akan load 1 file XML yaitu:

• report/account_move.xml yang berisi definisi tambahan tombol Print


dan template report QWeb untuk menghasilkan report Voucher
Journal Entry

7.3 Buat File report/account_move.xml


Buat file report/account_move.xml yang isinya sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<report
id="report_account_move_menu"
string="Journal Voucher"
model="account.move"
report_type="qweb-pdf"
file="account.account_move"
name="vit_journal_voucher.account_move_report"
/>

<template id="report_account_move_document">
<div class="page">

<div class="row">
<div class="col-xs-3">Number</div>
<div class="col-xs-3"><span t-field="doc.name"/></div>

<div class="col-xs-3">Journal</div>
<div class="col-xs-3"><span t-field="doc.journal_id"/></div>
</div>

<div class="row">
<div class="col-xs-3">Date</div>
<div class="col-xs-3"><span t-field="doc.date"/></div>

<div class="col-xs-3">Reference</div>
<div class="col-xs-3"><span t-field="doc.ref"/> </div>
</div>

<p><strong>Journal Items</strong></p>

<table class="table table-condensed table-striped">


<tr>
<th>Account</th>
<th>Partner</th>
<th>Label</th>
<th class="text-right">Debit</th>
<th class="text-right">Credit</th>
</tr>

<tr t-foreach="doc.line_ids" t-as="line">


<td><span t-field="line.account_id"/></td>
<td><span t-field="line.partner_id"/></td>
<td><span t-field="line.name"/></td>

© 2017 vitraining.com Page 32 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

<td class="text-right"><span t-field="line.debit"/></td>


<td class="text-right"><span t-field="line.credit"/></td>
</tr>

<tr>
<td class="text-right" colspan="3">Total</td>
<td class="text-right"><span t-field="doc.amount"/></td>
<td class="text-right"><span t-field="doc.amount"/></td>
</tr>

</table>

<p>
<span t-field="doc.narration"/>
</p>

<table class="table">
<tr>
<td>Created By</td>
<td>Validated By</td>
<td>Posted By</td>
</tr>
<tr>
<td style="padding-top:2cm">
<span t-field="doc.create_uid"/>
</td>
<td style="padding-top:2cm">
....................
</td>
<td style="padding-top:2cm">
....................
</td>
</tr>
</table>

</div>
</template>

<template id="account_move_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="vit_journal_voucher.report_account_move_document"
t-lang="doc.create_uid.lang"/>
</t>
</t>
</template>

</data>
</openerp>

Pada coding di atas…

Tag ini:

<report
id="report_account_move_menu"
string="Journal Voucher"
model="account.move"
report_type="qweb-pdf"
file="account.account_move"
name="vit_journal_voucher.account_move_report"
/>

© 2017 vitraining.com Page 33 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

gunanya untuk membuat action report baru dengan label Journal Voucher
untuk object account.move sehingga akan muncul tombol Journal Voucher
pada waktu kita buka form invoice…


atau saat select beberapa record Journal Entry pada tree view …

Waktu di-click menu report Journal Voucher maka Odoo akan memproses
template XML yang namanya vit_journal_voucher.account_move_report dan
men-generate file PDF yang siap didownload.

Template ini terdefinisi di bagian bawah yaitu…

<template id="account_move_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="vit_journal_voucher.report_account_move_document"
t-lang="doc.create_uid.lang"/>

© 2017 vitraining.com Page 34 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

</t>
</t>
</template>

waktu dipanggil, template ini akan melakukan looping foreach untuk setiap
record Account Move yang mau diprint. Pada framework QWeb Odoo, records
Account Move yang akan diprint tersebut tersimpan di dalam variabel list
docs. Walaupun cuma 1 record, bentuknya tetap list sehingga harus dilooping
dengan foreach.

Pada setiap looping kita punya variabel doc yang merupakan representasi dari
1 record Account Move yang akan diprint.

Lalu variabel doc tersebut dikirimkan sebagai parameter pada waktu


pemanggilan template QWeb lainnya yaitu
vit_journal_voucher.report_account_move_document.

Pada saat mengirim ke template tersebut kita tentukan bahasa yang akan
digunakan pada templat tersebut nantinya, yaitu dari atribut:

t-lang="doc.create_uid.lang"

disini kita ambil field lang (bahasa) dari field creator_id pada doc, artinya
bahasa yang akan digunakan pada template adalah bahasa user yang men-
create dokumen.

Template ini adalah template yang mendefinisikan posisi elemen-elemen


dokumen Journal Voucher yaitu…

<template id="report_account_move_document">
<div class="page">

<div class="row">
<div class="col-xs-3">Number</div>
<div class="col-xs-3"><span t-field="doc.name"/></div>

<div class="col-xs-3">Journal</div>
<div class="col-xs-3"><span t-field="doc.journal_id"/></div>
</div>

<div class="row">
<div class="col-xs-3">Date</div>
<div class="col-xs-3"><span t-field="doc.date"/></div>

<div class="col-xs-3">Reference</div>
<div class="col-xs-3"><span t-field="doc.ref"/> </div>
</div>

<p><strong>Journal Items</strong></p>

<table class="table table-condensed table-striped">


<tr>
<th>Account</th>
<th>Partner</th>
<th>Label</th>
<th class="text-right">Debit</th>
<th class="text-right">Credit</th>
</tr>

© 2017 vitraining.com Page 35 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

<tr t-foreach="doc.line_ids" t-as="line">


<td><span t-field="line.account_id"/></td>
<td><span t-field="line.partner_id"/></td>
<td><span t-field="line.name"/></td>
<td class="text-right"><span t-field="line.debit"/></td>
<td class="text-right"><span t-field="line.credit"/></td>
</tr>

<tr>
<td class="text-right" colspan="3">Total</td>
<td class="text-right"><span t-field="doc.amount"/></td>
<td class="text-right"><span t-field="doc.amount"/></td>
</tr>

</table>

<p>
<span t-field="doc.narration"/>
</p>

<table class="table">
<tr>
<td>Created By</td>
<td>Validated By</td>
<td>Posted By</td>
</tr>
<tr>
<td style="padding-top:2cm">
<span t-field="doc.create_uid"/>
</td>
<td style="padding-top:2cm">
....................
</td>
<td style="padding-top:2cm">
....................
</td>
</tr>
</table>

</div>
</template>

Template di atas sebenarnya hanya dokumen HTML sederhana saja, yaitu


kombinasi tag <div> dan <table>. Pada template di atas, kita cuma pake
elemen <div>, <table>, <p>, dan <h1> standard HTML untuk menampilkan
isi dokumen Journal Voucher dengan bantuan CSS Bootstrap untuk posisi dan
ukuran elemen.

Pertama kita buat <div> dengan class page yang akan berisi elemen yang
akan dimunculkan pada Journal Voucher, mulai dari bagian atas dokumen
yang berisi Nomor, Jenis Journal, Tanggal, dan Reference.

<div class="row">
<div class="col-xs-3">Number</div>
<div class="col-xs-3"><span t-field="doc.name"/></div>

<div class="col-xs-3">Journal</div>
<div class="col-xs-3"><span t-field="doc.journal_id"/></div>
</div>

© 2017 vitraining.com Page 36 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

<div class="row">
<div class="col-xs-3">Date</div>
<div class="col-xs-3"><span t-field="doc.date"/></div>

<div class="col-xs-3">Reference</div>
<div class="col-xs-3"><span t-field="doc.ref"/> </div>
</div>

Perhatikan disini kita menggunakan tag <div> untuk memposisikan field-field


header dokumen seperti tabel dengan menggunakan bantuan CSS Bootstrap.

Perlu diketahui, Odoo QWeb menggunakan CSS dari Bootstrap baik untuk
print out maupun web portal, dan sudah by default diaktifkan sehingga kita
tinggal gunakan class CSS Bootstrap yang kita perlukan.

Contoh di atas kita gunakan class CSS col-xs-3 untuk membuat ukuran dari
<div> adalah 3 bagian dari 12 bagian layar yang didefinisikan di Bootstrap,
dimulai dari ukuran layar yang paling kecil (xs = extra small). Untuk layout
QWeb reporting kita gunakan ukuran layar xs ini.

Lanjut ke tag berikutnya…

<p><strong>Journal Items</strong></p>

<table class="table table-condensed table-striped">


<tr>
<th>Account</th>
<th>Partner</th>
<th>Label</th>
<th class="text-right">Debit</th>
<th class="text-right">Credit</th>
</tr>

Tag di atas untuk memunculkan judul tabel “Journal Items” dengan font bold.

Lalu dilanjut dengan definisi <table> dan header tabel <tr> yang berisi judul
kolom-kolom tabel nantinya.

Lanjut…

<tr t-foreach="doc.line_ids" t-as="line">


<td><span t-field="line.account_id"/></td>
<td><span t-field="line.partner_id"/></td>
<td><span t-field="line.name"/></td>
<td class="text-right"><span t-field="line.debit"/></td>
<td class="text-right"><span t-field="line.credit"/></td>
</tr>

<tr>
<td class="text-right" colspan="3">Total</td>
<td class="text-right"><span t-field="doc.amount"/></td>
<td class="text-right"><span t-field="doc.amount"/></td>
</tr>

</table>

© 2017 vitraining.com Page 37 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Tag di atas adalah untuk menampilkan baris-baris tabel detail Journal


Voucher yang jumlahnya bisa bervariasi tergantung banyaknya Journal Items
dokumen Journal Entry. Minimal 2 baris untuk sisi debit dan kredit.

Disitu kita gunakan perintah QWeb t-foreach untuk me-looping tag <tr> yang
berisi data <td>. Looping dilakukan untuk setiap record yang ada pada field
line_ids yang ada pada variabel doc. Hal ini didefinisikan oleh atribut t-
foreach

Untuk setiap looping, kita punya variabel lokal namanya line yang ditentukan
pada atribute t-as. Variabel line merupakan representasi dari Account Move
Line yang terdapat pada Account Move, sehingga kita bisa langsung keluarkan
isi fieldnya, misalnya dengan line.account_id, line.partner_id, dan seterusnya.

Pada kolom Debit dan Credit, <td> kita tambahi atribut class=”text-right”. Ini
adalah class Bootstrap untuk membuat kolom tabel menjadi rata kanan.

Tag berikutnya…

<p>
<span t-field="doc.narration"/>
</p>

Sederhana saja, cuma mengeluarkan isi field narration pada variabel doc di
dalam tag <p>.

Terakhir, tag ini…

<table class="table">
<tr>
<td>Created By</td>
<td>Validated By</td>
<td>Posted By</td>
</tr>
<tr>
<td style="padding-top:2cm">
<span t-field="doc.create_uid"/>
</td>
<td style="padding-top:2cm">
....................
</td>
<td style="padding-top:2cm">
....................
</td>
</tr>
</table>

Tag ini hanya <table> HTML biasa yang menampilkan kolom-kolom tanda
tangan yang salah satunya adalah field create_uid.

© 2017 vitraining.com Page 38 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

7.4 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_journal_voucher.

Hasilnya, muncul tombol Journal Voucher di bawah tombol Print pada


halaman form Journal Entry.

Waktu diklik, muncul report Journal Voucher seperti yang didefinisikan…

© 2017 vitraining.com Page 39 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Tapi ukuran kertasnya masih standard A4 portrait bawaan Odoo.

Kita perlu ganti ukuran kertasnya sesuai kemauan dan landscape.

7.5 Modifikasi Ukuran Kertas Voucher


Edit file report/account_move.xml

Tambahi baris-baris berikut di bawah template terakhir tapi masih di dalam


tag <data>.

© 2017 vitraining.com Page 40 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

<record id="journal_voucher_paperformat" model="report.paperformat">


<field name="name">Jounal Voucher Paper Format</field>
<field name="default" eval="False" />
<field name="format">custom</field>
<field name="page_height">150</field>
<field name="page_width">210</field>
<field name="orientation">Portrait</field>
<field name="margin_top">4</field>
<field name="margin_bottom">4</field>
<field name="margin_left">4</field>
<field name="margin_right">4</field>
<field name="header_line" eval="False" />
<field name="header_spacing">0</field>
<field name="dpi">90</field>
</record>

<record id="report_account_move_menu" model="ir.actions.report.xml">


<field name="paperformat_id"
ref="vit_journal_voucher.journal_voucher_paperformat"/>
</record>

Ayo kita bedah lagi satu-satu tag QWeb di atas…

Tag ini:

<record id="journal_voucher_paperformat" model="report.paperformat">

gunanya untuk membuat record Paper Format di Odoo. Nanti akan muncul
paper format baru dari menu Settings – Technical – Reports – Paper Format.
Disini kita definisikan ukuran kertas custom ukuran 150x210 mm, orientasi
portrait, margin atas bawah kiri kanan, spasi dengan header dan footer, serta
DIP (dot per inch) yaitu tingkat ketajaman hasil cetakan.

Lalu tag ini:

<record id="report_account_move_menu" model="ir.actions.report.xml">

gunanya untuk mendefinisikan ulang menu action report yang namanya


report_account_move_menu yang udah kita buat di atas, dengan men-set
paperformat nya dengan record paper format di atasnya yaitu
vit_journal_voucher.journal_voucher_paperformat.

Upgrade addons, hasilnya print out Journal Voucher berubah ukuran


kertasnya menjadi sbb:

© 2017 vitraining.com Page 41 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

7.6 Currency Symbol


Pada setiap print out dokumen yang didalamnya terdapat informasi currency,
maka symbol currency otomatis terbawa terikat dengan angka nominalnya.
Symbol currency bisa berada di depan maupun di belakang angka.

Untuk mengubah posisi symbl currency, nggak perlu lewat QWeb, tapi cukup
definisi data currency nya saja.

Masuk ke menu:

Accounting – Configuration – Multi Currencies – Currency

Misalnya untuk Currency IDR…

© 2017 vitraining.com Page 42 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Perhatikan bagian Display dimana kita bisa mengeset symbol currency


beserta posisi symbol tersebut apakah sebelum atau sesudah angka nomila
currency.

© 2017 vitraining.com Page 43 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

8 Watermark
Addon berikutnya yang mau dibuat adalah modifikasi print out report Invoice
untuk menampilkan gambar watermark di belakang dokumen ketika statusnya
Draft, Open, dan Paid.

Disini kita akan membuat report QWeb inherit dari template asli Invoice
dengan menambahkan gambar dengan style CSS tertentu sesuai dengan
status invoice tersebut.

Penampakannya seperti ini…

Ketika status Invoice masih Draft:


Ketika status Invoice sudah Paid:

© 2017 vitraining.com Page 44 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Ketika status Invoice Open, tidak ada gambar watermark.

8.1 Folder Addon vit_inv_watermark


Copy folder template addons menjadi vit_inv_watermark atau nama lain yang
anda ingini dan tempatkan pada folder addons Odoo.

8.2 Edit file __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang diload, dan status addons, sbb:

{
"name": "Add Watermark Image on Invoice",
"version": "1.0",
"depends": [
"base",
"account"
],
"author": "Akhmad D. Sembiring [vitraining.com]",
"website": "www.vitraining.com",
"category": "Accounting",
"description": """\
Features
======================================================================

© 2017 vitraining.com Page 45 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

* Add Watermark on Invoice depending it's state: Open, Draft, Paid


* Addons ini adalah bahan praktek pada traning "Odoo QWeb Programming" yang
diselenggarakan di vitraining.com dan E-Book "Panduang Lengkap Pemrograman
QWeb Odoo v10"
* Klik http://shop.vitraining.com untuk info lebih lanjut

""",
"data": [
"report/invoice.xml",
],
"installable": True,
"application": True,
"auto_install": False,
}

Pada bagian data, kita akan load 1 file XML yaitu:

• report/invoice.xml yang berisi definisi modifikasi report QWeb Invoice


bawaan Odoo untuk menampilkan gambar watermark di background
dokumen Invoice tergantung dari statusnya.

8.3 Copy File Gambar ke Folder Static


Di addon ini kita akan menampilkan gambar statik yang bukan berasal dari
field tabel database tapi berupa file gambar biasa yaitu gambar tulisan
DRAFT dan gambar tulisan COPY untuk ditempatkan di background dokumen.

Untuk hal ini, kita perlu copy 2 gambar tersebut ke folder khusus di addon
yang namanya “static”. Folder ini disiapkan oleh Odoo untuk menyediakan file
dan folder yang sifatnya statik (tidak berubah-ubah semalanya) seperti file
gambar, Javascript library, dan CSS. Semua file dan folder yang berada di
dalam folder static secara otomatis dapat diakses via browser, contohnya:

http://nama_server/nama_addons/static/namafile.png

Contoh gambar dapat didownload dari:

http://bit.ly/vitraining-qweb

ambil file:

• draft.png

• copy.png

Simpan kedua file tersebut kedalam folder static/src/img di addons. Maka


kedua file tersebut akan dapat diakses melalui URL:

• http://nama_server/static/src/img/draft.png

• http://nama_server/static/src/img/copy.png

© 2017 vitraining.com Page 46 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

8.4 Buat File report/invoice.xml untuk Modifikasi Report RFQ


Buat file report/invoice.xml yang isinya sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<template id="vit_inv_watermark" inherit_id="account.report_invoice_document">
<xpath expr="//div[@class='page']" position="inside">
<t t-if="o.state=='draft'">
<div
style="top:0px;position:absolute;opacity:0.25;width:100%;text-align:center;z-
index:1000;">
<img src="/vit_inv_watermark/static/src/img/draft.png"/>
</div>
</t>

<t t-if="o.state=='paid'">
<div
style="top:0px;position:absolute;opacity:0.25;width:100%;text-align:center;z-
index:1000;">
<img src="/vit_inv_watermark/static/src/img/copy.png"/>
</div>
</t>
</xpath>
</template>
</data>
</openerp>

Pada template di atas, kita meng-inherit template Invoice bawaan Odoo yang
namanya account.report_invoice_document dengan mencari elemen XML yang
namanya “page” dan menyisip sesuatu di dalam elemen tersebut
menggunakan atribut “inside”.

Yang kita sisip adalah file gambar menggunakan tag <img> dengan alamat
file masing-masign gambar yaitu:

• /vit_inv_watermark/static/src/img/draft.png

• /vit_inv_watermark/static/src/img/copy.png

Tag <img> ditempatkan pada tag <div> dengan style khusus yaitu:

• top:0px supaya atasnya gambar berada pada posisi paling atas


halaman

• position:absolute supaya posisi gambar adalah absolut dengan


kordinat 0,0 nya ada di kiri atas halaman

• opacity:0.25 supaya gambar agak transparan 25%

• width:100% supaya lebar gambar dimaksimalkan 100% selebar


halaman

• text-align:center supaya posisi gambar berada ditengah-tengah kertas

• z-index:1000 supaya gambar berada pada tumpukan layer elemen


yang benar

Tag ini:

© 2017 vitraining.com Page 47 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

<t t-if="o.state=='draft'">

dan:

<t t-if="o.state=='paid'">

Gunanya untuk menentukan gambar apa yang akan dimunculkan sesuai


dengan state dokumen Invoice yang diprint. Jika masih Draft maka munculkan
gambar draft.png. Jika sudah Paid maka mnculkan gambar copy.png. Jika
sedang Open maka tidak ada gambar watermak apapun.

8.5 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_inv_watermark.

Hasilnya, print out Invoice akan berubah yaitu ada tambahan gambar
watermark DRAFT atau COPY tergantung dari status Invoice saat ini.

© 2017 vitraining.com Page 48 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

9 Menampilkan Report di Format PDF dan HTML


Semua report QWeb yang bawaan Odoo maupun yang kita buat sendiri dapat
diakses melalui web browser selain dari download PDF seperti biasanya.

Menampilkan report dalam bentuk HTML di browser berguna misalnya untuk:

• melihat preview report yang sedang kita develop supaya nggak


kebanyakan download PDF

• mencetak report via browser jika misalnya ada masalah dalam


generate PDF atau ketidak adaan WKHTMLTOPDF

• mengirimkan URL ke partner supaya mereka bisa lihat dokumen


secara online

9.1 Format URL untuk PDF dan HTML


Odoo menyiapkan URL khusus untuk kedua hal ini, yaitu:

• /report/html/<nama_addons>.<xml_report_id>/<record_id>

• /report/pdf/<nama_addons>.<xml_report_id>/<record_id>

Disni:

• /report/pdf untuk mengeluarkan report di browser dalam bentuk PDF

• /report/html untuk mengeluarkan report di browser dalam bentuk


HTML

• <nama_addons> adalah nama addon yang reportnya mau kita


tampilkan misalnya account, purchase, stock, vit_inv_watermark,
vit_inv_receipt, dan lainnya

• <xml_report_id> adalah ID XML dari report yang mau ditampilkan.


Pada contoh-contoh di atas kita sudah banyak menggunakan ID XML
untuk report-report yang akan kita inherit, misalnya report_invoice,
report_purchasequotation

• <record_id> adalah ID integer dari record yang mau ditampilkan

Contohnya untuk menampilkan report Invoice dengan ID=10 di layar dalam


format HTML:

http://localhost:8069/report/html/account.report_invoice/10

Munculnya…

© 2017 vitraining.com Page 49 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Jika diakses melalui :

http://localhost:8069/report/pdf/account.report_invoice/10

Maka muncul dokument PDF yang bisa dilihat langsung di layar browser
tanpa download dulu…

© 2017 vitraining.com Page 50 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

9.2 Mengtahui XML ID Report


Semua XML ID report Odoo dapat kita lihat melalui menu:

System – Techical – User Interface – Views

Muncul semua view XML Odoo termasuk report, form, tree, search, dan
lainnya…


Untuk mencari view QWeb saja, filter yang jenis QWeb saja. Lalu cari nama
report yang mau kita liat, misalnya “invoice”.

© 2017 vitraining.com Page 51 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Terlihat ada beberapa QWeb XML terkait Invoice.

Fokuskan ke view yang tidak ada Inherited View nya, artinya dia adalah murni
bawaan Odoo dan bukan hasil inherit dan view lain. Ada 2 keliatan..

• report_invoice

• report_invoice_document

Struktur report QWeb Odoo umumnya ada 2 seperti di atas.. dimana


report_invoice adalah template yang dipanggil langsung dari menu action
report di bawah tombol Print (ini yang kita perlukan).

Sementara template kedua yaitu report_invoice_document adalah template


untuk me-layout posisi setiap element document invoice yang dipanggil
melalui template sebelumnya.

Bisa kita cek isi dari template report_invoice sbb:


Baris yang disorot di atas menunjukkan bagaiman template ini memanggil
template lain yaitu account.report_invoice_document.

Untuk kebutuhan menampilkan report via URL browser langsung, template


yang kita perlukan adalah yang dipanggil langsung via menu action report
dalam hal ini report_invoice.

© 2017 vitraining.com Page 52 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

10 Menampilkan Barcode dan QR Code


10.1 Tools Pembentuk Gambar Barcode
Sering kali kita perlu menampilkan barcode atau QR code pada print out
report.

Untungnya Odoo udah menyediakan tools untuk bisa menghasilkan gambar


barcode. Ada URL khusus untuk hal ini, yaitu:

/report/barcode/?type=Code128& value=1234&width=400&height=70

Disini:

• /report/barcode lokasi tools untuk menghasilkan gambar barcode

• type jenis barcode yang mau dihasilkan, lihat di bawah ini tabel
jenisnya

• value nilai yang mau dijadikan barcode misalnya kode barang, nomor
dokumen, URL dan sebagainya.

• width lebar barcode

• height tinggi barcode

10.2 Type Barcode Odoo


Tabel type barcode yang disupport Odoo:

Type Keterangan Contoh value=123456


Codabar

Code11

Code128

EAN13

EAN8

© 2017 vitraining.com Page 53 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Extended39

Extended93

FIM
I2of5

MSI
POSTNET
QR

Standard39

Standard93

UPCA

USPS_4State

Lanjut. Addon yang mau dibuat adalah print out report Sale Order yang
dilengkapi dengan barcode yang berisi nomor SO.

Penampakannya…

© 2017 vitraining.com Page 54 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

10.3 Folder Addon vit_so_barcode


Copy folder template addons menjadi vit_so_barcode atau nama lain yang
anda ingini dan tempatkan pada folder addons Odoo.

10.4 Edit file __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang di-load, dan status addons, sbb:

{
"name": "Display Barcode on SO Report",
"version": "1.0",
"depends": [
"base",
"sale"
],
"author": "Akhmad D. Sembiring [vitraining.com]",
"website": "www.vitraining.com",
"category": "Sale",
"description": """\

Features
======================================================================

* Display barcode on PDF report of SO.


* Addons ini adalah bahan praktek pada traning "Odoo QWeb Programming" yang
diselenggarakan di vitraining.com dan E-Book "Panduang Lengkap Pemrograman
QWeb Odoo v10"
* Klik http://shop.vitraining.com untuk info lebih lanjut

""",
"data": [
"report/so.xml",
],
"application": True,

© 2017 vitraining.com Page 55 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

"installable": True,
"auto_install": False,
}

Pada bagian data, kita akan load 1 file XML yaitu:

• report/so.xml yang berisi definisi modifikasi report QWeb Sale Order


bawaan Odoo dan menampilkan barcode nomor SO.

10.5 Buat File report/so.xml untuk Modifikasi Report Invoice


Buat file report/so.xml yang isinya sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<template id="vit_so_barcode" inherit_id="sale.report_saleorder_document">
<xpath expr="//h2" position="inside">
<div class="col-xs-3 pull-right">
<img t-attf-src =
"/report/barcode/?type=QR&amp;value=/report/html/sale.report_saleorder/#{doc.id}&amp;w
idth=100&amp;height=100"/>
</div>
</xpath>
</template>
</data>
</openerp>

Disini kita buat XML template baru yang inherited dari template report SO
bawaan Odoo yang namanya sale.report_saleorder_document.

Lalu kita cari elemen <h2> pada template tersebut dan kita sisipak sesuatu di
dalamnya dengan atribut “inside”.

Yang kita sisipkan kedalam <h2> adalah sebuah <div> yang berisi <img>
yang atribut src-nya adalah URL untuk membentuk gambar barcode dengan
parameter tertentu.

<div class="col-xs-3 pull-right">


<img
t-attf-src =
"/report/barcode/?type=QR&amp;value=/report/html/sale.report_saleorder/#{doc.id}&amp;w
idth=100&amp;height=100"/>
</div>

Pada tag <div>:

• kita buat ukurannya 3 bagian dari 12 bagian kertas yaitu dengan class
Bootstrap col-xs-3

• lalu kita buat dia merapat ke kanan dengan class Bootstrap pull-right.

Pada tag <img> di dalam <div>

• kita tentukan atribut src nya menggunakan atribut khusus QWeb t-


attf-src yang akan membentuk atribut src untuk tag <img> tapi

© 2017 vitraining.com Page 56 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

membolehkan kita memformat isinya menggunakan format string


Python

• Syntax URL ini:


"/report/barcode/?type=QR&amp;value=/report/html/sale.report_sale
order/#{doc.id}&amp;width=100&amp;height=100" kalau di
breakdown parameter URL-nya akan menjadi seperti ini

o /report/barcode

o type=QR

o value=/report/html/sale.report_sale_order/#{doc.id}

o width=100

o height=100

• syntax di atas dipecah-pecah berdasarkan &amp; yang merupakan


representasi karakter & didalam file XML.

• Syntax tersebut sesuai dengan permintaan URL tools barcode Odoo.

Yang perlu diperhatikan adalah parameter value yang isinya:


/report/html/sale.report_sale_order/#{doc.id}.

Kerena kita menggunakan atribut t-attf-src maka isi dari atribut tersebut
boleh berisi syntax string format python, contohnya disini kita pakai #{doc.id}
yang jika dieksekusi akan mengeluarkan isi variabel doc.id dimana doc adalah
representasi dari record SO yang sedang diprint.

10.6 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_so_barcode.

Hasilnya, muncul QR code di sebelah kanan Nomor SO yang kalau di-scan


dengan barcode scanner akan muncul lagi nomor SO tersebut.

© 2017 vitraining.com Page 57 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

© 2017 vitraining.com Page 58 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

11 Mencetak Label dan Sub Report


Addon selanjutnya adalah untuk mencetak label nama dan alamat partner
misalnya pada kertas stiker untuk keperluan ditempel di amplop pengiriman.

Disini kita akan melakukan looping sub report dalam satu halaman report
utama. Contohnya kita akan mencetak 6 label dalam 1 lembar kertas.

Penampakannya… muncul menu baru namanya Label di bawah tombol Print


invoice..

Hasil print outnya seperti ini..

© 2017 vitraining.com Page 59 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Jadi dalam satu lembar kertas kita keluarkan 6 label yang berisi nama dan
alamat partner. Jika diprint di kertas stiker maka kita tinggal kupas dan
tempelkan di amplop atau paket untuk pengiriman dokumen atau barang ke
partner.

Kalau dilihat, setiap label isinya sama semua. Supaya tidak mengulang
definisi coding untuk layout label, kita akan menggunakan t-call untuk
memanggil sub report template label tersebut pada report utama.

11.1 Folder Addon vit_invoice_label


Copy folder template addons menjadi vit_inv_label atau nama lain yang anda
ingini dan tempatkan pada folder addons Odoo.

11.2 Edit file __openerp__.py


Edit file __openerp__.py yang berisi nama addons, versi, dependency, author,
desctiption, data XML yang diload, dan status addons, sbb:

{
"name": "Print Invoice Label",
"version": "1.0",
"depends": [
"base",
"account"
],
"category": "Accounting",
"author": "akhmad.daniel@gmail.com [vitraining.com]",

© 2017 vitraining.com Page 60 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

"category": "Accounting",
"website": "www.vitraining.com",
"description": """\

Manage
======================================================================

* Print invoice labels on one page.


* Addons ini adalah bahan praktek pada traning "Odoo QWeb Programming" yang
diselenggarakan di vitraining.com dan E-Book "Panduang Lengkap Pemrograman
QWeb Odoo v10"
* Klik http://shop.vitraining.com untuk info lebih lanjut

""",
"data": [
"report/invoice.xml",
],
"application": True,
"installable": True,
"auto_install": False,
}

Pada bagian data, kita akan load 1 file XML yaitu:

• report/invoice.xml yang berisi definisi report QWeb label dan


menampilkan tombol Label di bawah menu Print standard.

11.3 Buat File report/invoice.xml untuk Report Label


Buat file report/invoice.xml yang isinya sbb:

<?xml version="1.0" encoding="utf-8"?>


<openerp>
<data>
<report
id="report_label_menu"
string="Label"
model="account.invoice"
report_type="qweb-pdf"
file="account.invoice"
name="vit_inv_label.label_report"
/>

<template id="label_report_document">
<t t-set="doc" t-value="doc.with_context({'lang':doc.partner_id.lang})" />
<div class="page">
<t t-foreach="range(6)" t-as="i">
<t t-call="vit_inv_label.label"/>
</t>
</div>
</template>

<template id="label_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="vit_inv_label.label_report_document"
t-lang="doc.partner_id.lang"/>
</t>
</t>
</template>

© 2017 vitraining.com Page 61 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

<template id="label">
<div class="panel panel-default col-xs-6" >
<div class="panel-body">
<span t-field="doc.partner_id"/><br/>
<span t-field="doc.partner_id.street"/>
<span t-field="doc.partner_id.street2"/><br/>
<span t-field="doc.partner_id.city"/><br/>
<span t-field="doc.partner_id.state_id"/>
<span t-field="doc.partner_id.zip"/><br/>
<span t-field="doc.partner_id.country_id"/><br/>
</div>
</div>
</template>
</data>
</openerp>

Breakdown tag coding di atas…

Tag ini…

<report
id="report_label_menu"
string="Label"
model="account.invoice"
report_type="qweb-pdf"
file="account.invoice"
name="vit_inv_label.label_report"
/>

gunanya untuk membuat action report baru dengan label Label untuk object
account.invoice sehingga akan muncul tombol Label pada waktu kita buka
form Invoice… sepert ini:


atau saat select beberapa record invoice pada tree view invoice… seperti ini:

© 2017 vitraining.com Page 62 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10


Waktu di-click menu report Label maka Odoo akan memproses template XML
yang namanya vit_inv_label.label_report dan men-generate file PDF yang siap
didownload.

Template ini terdefinisi di bagian bawah yaitu…

<template id="label_report">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="vit_inv_label.label_report_document"
t-lang="doc.partner_id.lang"/>
</t>
</t>
</template>

waktu dipanggil, template ini akan melakukan looping foreach untuk setiap
record Invoice yang mau diprint. Pada framework QWeb Odoo, records
Invoice yang akan diprint tersebut tersimpan di dalam variabel list docs.
Walaupun cuma 1 record, bentuknya tetap list sehingga harus dilooping
dengan foreach.

Pada setiap looping kita punya variabel doc yang merupakan representasi dari
1 record Invoice yang akan diprint.

Lalu variabel doc tersebut dikirimkan sebagai parameter pada waktu


pemanggilan template QWeb lainnya yaitu vit_inv_label.
label_report_document. Template ini adalah template yang mendefinisikan
posisi elemen-elemen dokumen receipt yaitu…

<template id="label_report_document">
<t t-set="doc" t-value="doc.with_context({'lang':doc.partner_id.lang})" />
<div class="page">
<t t-foreach="range(6)" t-as="i">
<t t-call="vit_inv_label.label"/>
</t>
</div>
</template>

© 2017 vitraining.com Page 63 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Disini kita definisikan property bahasa pada variabel doc agar sesuai dengan
bahasa partner invoice terkait.

Setelah itu kita lalkukan looping foreach sebuah list yang kita bentuk
menggunakan command Python range(6) yang hasilnya adalah list seperti ini:

[0,1,2,3,4,5]

Pada setiap looping, kita panggil lagi template lain menggunakan t-call, yang
namanya adalah vit_inv_label.label. Ini yang kita sebut sebagai sub report.

Disini kita definisikan layout dari label itu sendiri…

<template id="label">
<div class="panel panel-default col-xs-6" >
<div class="panel-body">
<span t-field="doc.partner_id"/><br/>
<span t-field="doc.partner_id.street"/>
<span t-field="doc.partner_id.street2"/><br/>
<span t-field="doc.partner_id.city"/><br/>
<span t-field="doc.partner_id.state_id"/>
<span t-field="doc.partner_id.zip"/><br/>
<span t-field="doc.partner_id.country_id"/><br/>
</div>
</div>
</template>

Layout template label kita buat sederhana saja, yaitu cuma tag <span>
dengan isi diambil dari t-field untuk menampilkan isi field alamat partner
seperti street, street2, city, dan seterusnya.

11.4 Install Addon


Modifikasi selesai.

Lakukan proses Update Apps List.

Install addons vit_inv_label.

Hasilnya, muncul tombol Label di bawah tombol Print pada halaman form
Invoice.


Waktu diklik, muncul report label seperti yang didefinisikan…

© 2017 vitraining.com Page 64 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

12 Format Tanggal dan Angka


12.1 Format Tanggal
Kadangkala kite perlu memformat tanggal dan jam khusus di report Qweb
yang berbeda dengan format tanggal dan jam yang diset di system language.

Untuk hal ini kita bisa gunakan atribut t-field-options pada field yang
jenisnya date time, seperti contoh:

<span t-field="object.depart_date"
t-field-options='{"format": "d MMM y HH:mm"}'/>

akan memformat field tanggal menjadi 10 Dec 2012 23:20.

Format string ini menggunakan pola yang ditentukan pada


LDML

http://www.unicode.org/reports/tr35/tr35-
dates.html#Date_Format_Patterns

Beberapa contoh formatnya seperti ini:

y or yyyy = 4 digits year


yy = 2 digits year
MM = 2 digits month
MMM = 3 characters month name
MMMM = complete month name
dd = 2 digits date
h = 0-12 hours
HH = 00 - 23 hours
mm = 00-59 minutes
ss = 00-59 seconds

12.2 Format Angka


Misalnya kita punya data dictionary schedule yang salah satu key nya adalah
adult_price dengan nilai 1000000.00.

Untuk memformat data numerik tersebut, kita bisa gunakan format standard
Python seperti ini:

<span t-esc="'{:,}'.format(schedule['adult_price'])"/>

Maka akan tampil di report QWeb menjadi:

10,000,000.0

© 2017 vitraining.com Page 65 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

© 2017 vitraining.com Page 66 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

13 Downlad Addons Hasil Jadi

Semua addons hasil jadi dalam ebook ini bisa didownload


atau di-clone dari GitHub:

https://github.com/akhdaniel/vitraining_qweb/tree/10.0

Untuk men-clone dengan Github client gunakan


command:

git clone git@github.com:akhdaniel/vitraining_qweb.git -b 10

© 2017 vitraining.com Page 67 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

14 Penutup
Semoga buku ini bisa menjadi panduan lengkap anda dalam melakukan
pembuatan dan pemrograman report QWeb di Odoo 10 baik untuk
perusahaan sendiri maupun untuk perusahaan client anda.

Jika ada pertanyaan atau saran boleh kirim email ke saya langsung supaya
buku ini menjadi lebih sempurna.

Jangan lupa untuk gabung ke milis ini agar mudah berdiskusi jika ada
kesulitan.

Subscribe dengan email: kirim email kosong ke

buku-openerp-vitraining+subscribe@googlegroups.com

Subscribe dengan web klik :

http://groups.google.com/d/forum/buku-openerp-vitraining

© 2017 vitraining.com Page 68 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

15 Tentang Penulis

Akhmad Daniel Sembiring

2003 -- Now: CEO VITRAINING.COM



TEMPAT DAN TANGGAL LAHIR
Binjai, 19 September 1971
akhmad.daniel@gmail.com

PENDIDIKAN:

1995 – 1998 Program Magister Teknik Elektro


Institut Teknologi Bandung
1990 – 1994 Teknik Elektro Institut Teknologi Bandung , Indonesia Sub
Jurusan Teknik Sistem Komputer

PENGALAMAN:
2017 Implementasi Odoo doQar.com mobile advertising, Odoo as the backend
for GPS and OBD-II based mobile advertising system
2016 Implementasi Odoo MRP Defasindo Kreasi Prima, Odoo Purchase,
Sales, Inventory, Accounting, MRP, and HR implementation for garment
industry.
2015 Implementasi Odoo CRM Reliance Grup, Odoo CRM implementatio for
capturing data from various Reliance business unit into one single data
repository server to be used for further marketing strategies.
2015 Implementasi Odoo Lucas Djaya and Marin Liza, Odoo for pharmaceutical
industry, implementing complex MRP, Purchase, and Warehouse for
production planning and inventory control system.
2014 Implementasi Odoo Mutif, Odoo for garment business, purchase,
manufacturing, sales, accouting.
2014 Implementasi Odoo Koperasi Karyawan Freeport Indonesia, Odoo for
garment business, point of sales antar cabang, movement antar gudang,
purchase, sales, accounting.
2013 Mobile Sales, Logistic, and Support, for Surya Manggala Informatika,
aplikasi mobile Android dan Grails server untuk mobile sales, logistic,
and engineer support
2013 Implementasi Odoo Tiket.com, integrasi portal e-commerce tiket.com
dengan Odoo untuk menghasilkan invoice, payment, journal sesuai
dengan tipe barang, pembayaran, discount, dan partner.
2013 Pasific Prestress Indonesia PT, implementasi Odoo untuk modul HRD, data
karyawan, recruitment, payroll, perhitungan lembur sesuai dengan
peraturan Menteri Tenaga Kerja, import data absensi fingerprint.
2012 Asiades, Furniture Distributor Company, Dubai, UAE. Odoo implementation
and customization for furniture distributor company, implementation of
down payment journal where the Company can track Down Payment prior
to invoice creation, and when the invoice is paid, the Down Payment is

© 2017 vitraining.com Page 69 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

taken into account so the payment will be done only by the outstanding
amount.
2012 SAGE Petroleum, Ghana, Africa: Odoo implementation and customization
for petroleum distribution company for Product Discount Journal,
Nominal Discount Entry, Discount per Customer per Product database,
Analytical Account Setup, and Government Subsidized Product Sales
Journal, project management, bill of material product costing based on
raw material total cost
2012 Sunberry LZE and Breezer Petroleum Card System: Odoo implementation
and customization to integrate to Petro Plus Card Management system
for maintaining the loyalty card system, postpaid and prepaid card for
petroleum payment system, project management
2011 Pengembangan aplikasi eBengkel untuk PT Pendopo Multikarya, aplikasi
akuntansi untuk bisnis bengkel online.
2011 Pengembangan aplikasi XLS Report Generator for Deutsche Bank,
bekerjasama dengan PT Skyworx Indonesia
2011 Pengembangan aplikasi Mobile Survey System berbasis Android untuk
aplikasi Loan Originating System, Bank Muamalat, bekerjasama dengan
PT Skyowrx Indonesia
2011 SAGE Operational Management System
Membangun sistem management inventory bahan bakar minyak untuk
SAGE Petroleum Limited, Ghana, Africa.
2011 Fixed Asset Management System Rabobank International Indonesia
Membangun system management fixed asset, procurement, dan
inventory untuk PT Rabobank International Indonesia.
2011 MyPushme.com
Membangun sistem sinkronisasi data contact, email, picture antara
mobile devices berbasis Symbian, Android, iPhone, dan Windows Mobile
dengan MS Outlook, Gmail, Yahoo, POP3/IMAP, untuk Sunberry Limited,
Ghana, Africa.
2010 Kukuloba.com
Membangun sistem portal diskon. Website ini merupakan media dimana
pelaku usaha dapat mengiklankan produk dan jasa secara gratis dengan
cara memberikan diskon yang menarik dan menentukan jumlah minimal
penjualan yang Anda inginkan. Disini kami menggunakan sistem
penawaran harga diskon dalam batas waktu 24 jam. Artinya, harga
diskon hanya akan berlaku jika jumlah minimal penjualan terpenuhi
dalam jangka waktu tersebut. Jika belum terpenuhi maka penawaran
diskon itu otomatis tidak berlaku.
2010 GPS Tracking Indonesia
Membangun sistem pelacak kendaraan berbasis GPS dan GSM untuk
memantau posisi kendaraan secara realtime melalui web dan mobile
device.
2009 Ligarwangi.com
Membangun sistem toko online ligarwangi.com yang dapat menerima
pembayaran melalui transfer bank BCA, Mandiri, dan BNI, serta
pembayaran melalui Credit Card melalui PayPal. Sistem ini dibangun
menggunakan Zen Cart.
2009 IALF Jakarta

© 2017 vitraining.com Page 70 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Membangun sistem SMS Gateway yang dapat menangani pengiriman


SMS melalui Microsoft Outlook 2007 dengan menggunakan Outlook
Mobile Services (OMS). SMS dikirimkan melalui HTTP dan serial port/
modem GSM
2009 Direktorat Jenderal MIGAS Jakarta
Membangun sistem integrasi antara sistem monitoring realisasi anggaran
(DIPA) dengan sistem Aplikasi Surat Perintah Membayar (SPM 2000)
Departemen Keuangan. Aplikasi ini menjembatani proses pembuatan
SPM secara online antara sistem aplikasi monitoring anggaran yang
dibuat diatas MS SQL Server dengan Aplikasi SPM2009 yang dibangun di
atas database FoxPro.
2009 IALF Jakarta
Membangun sistem aplikasi Fixed Asset Management System,
Purchasing, dan Inventory System, yang dimulai dari proses requisition,
purchase order, delivery order, invoice, bank disbursement voucher untuk
mencetak ke cek dan giro bank, serta sistem inventory management.
2009 Heliantono dan Rekan, Kantor Akuntan Publik
Audit sistem informasi berbasis Oracle pada Institut Teknologi Bandung
(ITB) sebagai bagian dari audit sistem keuangan yang dilakukan oleh
Kantor Akuntan Publik untuk tahun laporan 2008.
2009 IALF Jakarta
Membangun sistem aplikasi pembuatan user Active Directory yang
mampu men-create user pada server Active Directory Windows 2003
dengan kriteria tertentu dan jumlah user tertentu, mencetak label user
dan pasword untuk digunakan sebagai access code untuk mengakses
internet di jaringan hot spot IALF Jakarta.
2008 PT Bank Bumiputera, Tbk
Membangun sistem aplikasi Fixed Asset Management System, yang
dimulai dari proses permohonan dan persetujuan pembelian, purchase
order, delivery order, invoice, dan integrasi dengan Silverlake melalui GL
voucher.
2008 IALF Surabaya
Membangun sistem aplikasi multimedia menggunakan Google Desktop.
Pada aplikasi ini user dapat mencari bahan-bahan pelajaran baik berupa
video, gambar, text, document, dan lain sebagainya melalui sebuah
interface yang mudah digunakan dengan back end indexing Google
Desktop. Materi tersebut disimpan pada sebuah server yang dapat
diindex oleh Google Desktop. Ketika sebuah file materi ditemukan, user
dapat mengakses file tersebut melalui Windows sharing sehingga
misalnya materi dalam bentuk DVD (yang telah dibuat menjadi ISO file)
dapat dimainkan pada komputer local seolah-olah sedang menjalankan
DVD pada sebuah DVD Drive yang memungkinkan menu dan semua fitur
DVD lainnya aktif. Pada komputer local terdapat program mounter yang
melakukan mounting file dengan extension ISO menjadi sebuah virtual
drive.
2008 Kementerian Negara BUMN
Bekerjasama dengan PT INTI Bandung, membangun sistem aplikasi
Executive Information System (EIS) yaitu sistem pelaporan data kuangan
dan operasional 139 BUMN ke Kementerian Negara BUMN secara online.
2007 PT Indonesia Media Technology

© 2017 vitraining.com Page 71 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Pengembangan Sistem Aplikasi SMS Gateway untuk portal Astaga.com


2007 PT Indonesia Media Technology
Pengembangan Sistem Portal Astaga.com versi 2, pengembangan dan
redesign portal lama, penambahan fitur dan channel baru.
2006 PT Telekomunikasi Indonesia
Bekerjasama dengan PT INTI Bandung, membangun sistem aplikasi
Konversi Call Data Record (CDR) menjadi file ASCII untuk sentral
Siemens EWSD, AT&T, Samsung, dan NEAX
2006 Aplikasi Sistem Perkantoran Elektronis PT ASDP Indonesia Ferry
Implementasi aplikasi Sistem Perkantoran Elektronis, meliputi
pembuatan surat-surat dinas, penomoran, klasifikasi surat, arsip,
penerimaan surat, scanning, email, printing, dll.
2006 Aplikasi SMS Gateway TOLL SMS 5272
Implementasi aplikasi SMS Gateway untuk informasi kemacetan jalan tol,
quiz pengguna jalan tol, zodiak, berita, dll. Bekerjasama dengan PT MIK,
DIME, dan Jasa Marga.
2006 Project Management Office, PT TELKOM Divisi ISC
Implementasi aplikasi Project Management Office, bekerja sama dengan
PT INTI. Menggunakan software open source dotproject, meliputi
instalasi, migrasi data, koneksi dengan LDAP Server PT TELKOM, dan
training user dan administrator.
2005 Billing ISP -- Jalawave Cakrawala Bandung
Implementasi aplikasi Billing ISP untuk perusahaan internet service
provider. Terdiri dari billing untuk customer postpaid maupun prepaid.
Realtime checking ke network access server. Menggunakan freeRADIUS,
freeside, MySQL , Postgres, Perl, dan Apache sebagai infrastruktur
aplikasinya.
2005 Aplikasi SMS Gateway, PT KAESKA Media
Implementasi aplikasi SMS Gateway untuk PT KAESKA Media - sebuah
perusahaan content provider - untuk aplikasi SMS interaktif informasi
kampus, sekolah, polling, info harga dan kurs, dan sebagainya.
Termasuk di dalamnya adalah aplikasi download ringtone, wallpaper,
logo, java games.
2005 Outsourcing untuk Ghana Health Service - Ghana , Africa
Modifikasi dan integrasi beberapa program opensource untuk aplikasi
sistem informasi rumah sakit dan financial terintegrasi. Di sini client
menginginkan agar program open source Care2x dan SQL Ledger dapat
saling terintegrasi dan dapat sesuai dengan logika bisnis yang di Ghana
Africa.
2005 Sistem Informasi Akademik/ Politeknik Negeri Medan
Software untuk automatisasi sistem administrasi akademik Politeknik
Negeri Medan. Mencakup sistem Registrasi, Kenaikan Kelas, Absensi,
Biodata mahasiswa dan dosen, daftar nilai, KRS, Transkrip Nilai (Mark
Sheet), KTM, Pembayaran SPP, Yudisium, Surat Peringatan, dan lain-
lain.
2005 Fixed Asset Management System I/A/L/F Denpasar
Software untuk otomatisasi proses administrasi dan manajemen Fixed

© 2017 vitraining.com Page 72 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Asset ( Aktiva Tetap) di Indonesia Australia Language Foundation Jakarta.


Sistem ini meliputi proses pembelian, disposal, penjualan, penghapusan,
pemindahan, physical inventory, printing barcode, dll.
Laporan yang dihasilkan adalah laporan aktiva tetap, laporan
penyusutan, laporan pembelian, penjualan, disposal, dan sebagainya.
2005 Academic Finance Administration System I/A/L/F Surabaya
Software untuk otomatisasi proses administrasi dan keuangan di
Indonesia Australia Language Foundation Surabaya.
Sistem ini meliputi proses registrasi peserta kursus dan IELTS Test,
pembayaran (cash, credit card, bank transfer, cheque) , manajemen
peserta kursus dan test (pindah jadwal, refund, cancel), manajemen
kelas, client, dan teacher, sistem administrasi manajerial, sistem
administrasi keuangan, manajemen inventory buku dan merchandising.
2005 POS PBB BALIKPAPAN
Bekerjasama dengan salah satu perusahan IT di Balikpapan untuk desain
dan implementasi sistem online pembayaran Pajak Bumi dan Bangunan
(PBB) kota Balikpapan.
Mencakup 12 bank Tempat Pembayaran (TP), 1 kantor Pelayanan Pajak
Bumi dan Bangunan (KP PBB), 1 kantor Dinas Pendapatan Daerah.
2005 Network Monitoring System, PT TELKOM
Bekerjasama dengan PT CMI dan ITB untuk mendesain dan implementasi
sistem Network Management System, menggantikan sistem lama yang
menggunakan Alcatel. Memonitor jaringan microwave Jakarta-Bandung
(Dayeuh Kolot), menampilkan tampilan dalam bentuk web interface,
sehingga dapat dimonitor di kantor pusat PT TELKOM.
2004 Academic Finance Administration System I/A/L/F Denpasar
Software untuk otomatisasi proses administrasi dan keuangan di
Indonesia Australia Language Foundation Denpasar Bali.
Sistem ini meliputi proses registrasi peserta kursus dan IELTS Test,
pembayaran (cash, credit card, bank transfer, cheque) , manajemen
peserta kursus dan test (pindah jadwal, refund, cancel), manajemen
kelas, client, dan teacher, sistem administrasi manajerial, sistem
administrasi keuangan, manajemen inventory buku dan merchandising.
Mencakup juga sistem Customer Relationship Management (CRM) untuk
mencatat progres follow up proposal ke client yang meminta training
inhouse, Inventory Fixed Asset, dan Human Resource Database.
2004 Academic Finance Administration System I/A/L/F Surabaya
Pengembangan Sistem Informasi Administrasi Kursus untuk Indonesia
Australia Language Foundation / IALF – Surabaya.
Sistem ini meliputi proses registrasi peserta kursus dan IELTS Test,
pembayaran (cash, credit card, bank transfer, cheque) , manajemen
peserta kursus dan test (pindah jadwal, refund, cancel), manajemen
kelas, client, dan teacher, sistem administrasi manajerial, sistem
administrasi keuangan, manajemen inventory buku dan merchandising.
2003 Pengembangan Sistem Informasi Administrasi Kursus untuk Indonesia
Australia Language Foundation / IALF – Jakarta
Sistem ini meliputi proses registrasi peserta kursus dan IELTS Test,
pembayaran (cash, credit card, bank transfer, cheque) , manajemen

© 2017 vitraining.com Page 73 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

peserta kursus dan test (pindah jadwal, refund, cancel), manajemen


kelas, client, dan teacher, sistem administrasi manajerial, sistem
administrasi keuangan, manajemen inventory buku dan merchandising.
2003 Pengembangan sistem informasi Community Development PT Riau
Andalan Pulp and Paper, Pelalawan, Riau, PT MYOH Technology
2003 Pengembangan sistem informasi Jaminan Pelayanan Kesehatan
Masyarakan (JPKM) di Kimia Farma Persero, Jakarta, PT MYOH Technology
2003 Pengembangan sistem pembayaran Pajak Bumi dan Bangunan (PBB)
Online di Kotamadya Tangerang, Banten, PT MYOH Technology
2001 Pembuatan layanan SMS Gateway – PT Celicom Indonesia
2000 System Architect, PT Celicom Indonesia
1998 PoInter Internet Training Center, koordinator dan staf pengajar pelatihan
di bidang teknologi informasi.
1998 PT Semen Gresik , Konsultan Pengembangan Sistem Informasi
1998 PT Semen Gresik , Konsultan Penanganan Y2K untuk Sistem Informasi
1997 PoInter, Pojok Internet, warung internet di Bandung.
1996 Badan Pengelola Dampak Lingkungan (BAPEDAL) Jakarta Perancangan dan
Instalasi Internet Server untuk Sistim informasi Lingkungan Ekonet-
Bapedal dan interkoneksi jaringan lokal ke Internet
1996 Direktorat Teknologi PT.Krakatau Steel Cilegon Perancangan dan Instalasi
Secure LAN (Firewall), Aplikasi Internet dan interkoneksi ke jaringan
Internet melalui VSAT
1996 Lembaga Pendidikan Perkebunan (LPP) Yogyakarta Supervisi untuk
pengembangan beberapa layanan Internet pada LAN dan Novell Netware
untuk LAN dan WAN
1996 Indonesia OnLine Access (IdOLA) , PT. Aplikanusa Lintasarta Jakarta
Konsultasi pengembangan layanan Internet dan PPP billing system untuk
Network operation Center (NOC) IdOLA sebagai Internet Service Provider
1994 Polytechnique Education Development Center (PEDC) Project Engineer
pada pengembangan sistem jaringan komputer paket radio TCP/IP
menggunakan HF link untuk 6 Politeknik di Indonesia.
1994 PT. Elektrindo Nusantara & Computer Network Research Group Staf peneliti
pada proyek pengembangan HDLC card untuk sistem komunikasi data
berkecepatan tinggi berbasis TCP/Ip via Satelit
1994 Jurusan Teknik Elektro Institut Teknologi Bandung Pengembangan
Jaringan Backbone Jurusan teknik Elektro dan ITB-NET
1993 Pusat Antar Universitas bidang Mikroelektronika (PAUME) Institut
Teknologi Bandung, Staf Peneliti pada Computer Network Rearch Group

PENGALAMAN MENGAJAR :
2008 Kementerian Negara BUMN
Pelatihan aplikasi Portal Executive Information System untuk 139 BUMN
seluruh Indonesia
2006 PT ASDP Indonesia Ferry
Training HTML , PHP, MySQL tahap II untuk calon staf IT PT ASDP
seluruh Indonesia.

© 2017 vitraining.com Page 74 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

2006 PT ASDP Indonesia Ferry


Training HTML , PHP, MySQL tahap I untuk calon staf IT PT ASDP
seluruh Indonesia.
2004 PT Telkom VI Balikpapan – Pendidikan Profesi Bidang Teknologi
Informasi, Teknologi Wide Area Network, LAPI ITB
1999 Pertamina UP III Plaju, training Active Server Pages
1998 PoInter Internet Training Center, staf pengajar
1998 In-House Training Pengembangan Sistem Intranet untuk staf PT.
Semen Gresik, Tretes
1997 In-House Training Computer Networking & Data Communication untuk
staf PT. Semen Padang, Semen Gresik & Semen Tonasa, Padang, 18 -
20 Maret
1996 Training Penggunaan Aplikasi Internet untuk staf PT. Krakatau Steel,
Cilegon, 29-31 Mei
1996 Training UNIX Network Administrator untuk administrator jaringan PT.
Krakatau Steel, Bandung, 25-28 Maret
1996 Training jaringan Komputer TCP/IP dan Paket Radio untuk administrator
jaringan Lembaga Pendidikan Perkebunan (LPP) Yogyakarta, Bandung,
9-10 Januari
1995 In-House Training TCP/IP & UNIX Network Administrator untuk staf
PT.Aplikanusa Lintasarta, Jakarta ,22-24 November
1995 Training publik, Applied Computer Internetworking, UNIX Integration to
WAN, Computer Network Research Group, Hotel Chedi, Bandung 18-20
Juli
1995 Training Singkat jaringan Komputer TCP/IP dan Paket Radio, Politeknik
Universitas Nusa Cendana, Kupang , 26-27 Mei
1995 Training Singkat jaringan Komputer TCP/IP dan Paket Radio, Politeknik
Universitas Nusa Cendana, Kupang , 23-24 Mei
1995 Training publik, Applied Computer Internetworking, Novell Integration to
WAN, Computer Network Research Group, Hotel Chedi, Bandung, 16-18
Mei
1995 Program Magang &Training Network Design & Management for Office
untuk administrator jaringan Perum PERURI, bandung, 5-23 Januari
1994 Kursus Singkat Perancangan jaringan Komputer berbasis Paket Radio
untuk YAE Bogor, Bandung, Juli
1994 Kursus Singkat Perancangan Jaringan Komputer berbasis Novell dan Paket
Radio untuk staf Polytechnique Education Development Center ITB,
Bandung, Maret

PUBLIKASI
2014 OpenERP 7.0 Untuk Bisnis Retail di Indonesia: Strategi Implementasi,
Akhmad Daniel Sembiring, Google Play Store Books.
https://play.google.com/store/books/details?id=lPQrBQAAQBAJ
2014 5 Hari Menguak Misteri Addons Odoo 7.0, Akhmad Daniel Sembiring,
Google Play Store Books.
https://play.google.com/store/books/details?id=uAKABAAAQBAJ
2001 Apache Web Server, Onno W. Purbo & Akhmad Daniel Sembiring, PT Elex

© 2017 vitraining.com Page 75 of 76


PANDUAN LENGKAP PEMROGRAMAN QWEB ODOO V10

Media, Jakarta
2000 Sistem Operasi Linux Redhat, Onno W. Purbo & Akhmad Daniel
Sembiring, PT Elex Media, Jakarta
2000 Membangun Web E-Commerce, Onno W. Purbo & Akhmad Daniel
Sembiring, PT Elex Media, Jakarta
1998 Java dan JavaScript, Onno W. Purbo & Akhmad Daniel Sembiring, PT Elex
Media, Jakarta
1997 Pemrograman JavaScript, Onno W. Purbo & Akhmad Daniel Sembiring,
Infokomputer
1997 Akses Database - Web dengan CGI, Onno W. Purbo & Akhmad Daniel
Sembiring, Infokomputer

© 2017 vitraining.com Page 76 of 76

Anda mungkin juga menyukai