Query
Anda diminta membuat daftar pegawai berdasarkan usia tertentu, misalkan yang berumur kurang dari 25 tahun. Secara PostgreSQL ini dapat ditempuh dengan query SELECT * FROM hr_employee WHERE now() - birthday . Bagaimana melakukan query langsung seperti ini di OpenERP ?
Sebelum menyentuh tahapan pembuatan source code, tetapkan terlebih dahulu input parameter, yaitu:
- Operator:
lebih kecil dari
,lebih besar dari
, dansama dengan
. - Usia: bernilai antara 25 - 55 tahun.
Karena berbicara pegawai, berarti kita gunakan modul hr
. Sedangkan modul tambahan yang akan dibuat bernama hr_custom
. Mulailah dengan membuat direktorinya:
$ cd /usr/lib/pymodules/python2.7/openerp
$ sudo mkdir -p addons/hr_custom/wizard
$ sudo mkdir addons/hr_custom/report
Kemudian buat struktur wizard-nya melalui file addons/hr_custom/wizard/usia.py
:
OPERATOR = [
('>', 'lebih besar dari'),
('
('=', 'sama dengan'),
]
TAHUN = [ (x, '%d tahun' % x) for x in range(25, 56) ]
class usia(osv.osv_memory):
_name = 'hr_custom.wizard.usia'
_columns = {
'operator': fields.selection(OPERATOR, 'Operator', required=True),
'tahun': fields.selection(TAHUN, 'Usia', required=True),
}
def default_get(self, cr, user, fields_list=None, context=None):
return {'operator': '
'tahun': 25}
def print_report(self, cr, uid, ids, context={}):
res = self.read(cr, uid, ids, ['operator', 'tahun'], context=context)
res = res[0]
sql = "SELECT e.id FROM hr_employee e, resource_resource r WHERE " + \
"e.id = r.id AND now() - e.birthday %s '%d year' ORDER BY r.name"
sql = sql % (res['operator'], res['tahun'])
cr.execute(sql)
ids = [x['id'] for x in cr.dictfetchall()]
datas = {'ids': ids,
'form': res}
return {'datas': datas,
'report_name': 'hr_custom.usia',
'type': 'ir.actions.report.xml'}
usia()
Pastikan direktorinya merupakan modul dengan membuat file addons/hr_custom/wizard/__init__.py
:
Lekatkan wizard ini pada menu melalui file addons/hr_custom/wizard/usia.xml
:
res_model="hr_custom.wizard.usia"
view_mode="form"
target="new"
key2="client_print_multi"/>
parent="hr.menu_hr_reporting"
name="Berdasarkan Usia"
action="window_wizard_usia"/>
Lalu daftarkan di sistem OpenERP melalui file addons/hr_custom/__openerp__.py
:
'name' : 'Kepegawaian',
'category': 'Human Resources',
'version' : '1.0',
'author' : 'OpenSIPKD',
'depends' : ['hr'],
'init_xml' : [
'wizard/usia.xml',
],
'application': True,
'description': 'Laporan Kepegawaian',
}
Selanjutnya buat tampilan PDF-nya melalui addons/hr_custom/report/usia.rml
:
author="Martin Simon" allowSplitting="20">
Aktifkan RML parser di addons/hr_custom/report/usia.py
:
report_sxw('report.hr_custom.usia', 'hr.employee',
'addons/hr_custom/report/usia.rml')
Pastikan direktorinya merupakan modul melalui addons/hr_custom/report/__init__.py
:
Pastikan juga kedua direktori tersebut dipanggil oleh modul induk melalui file addons/hr_custom/__init__.py
:
import report
Nomor Urut
Pada kesempatan ini juga ditampilkan contoh memberikan nomor urut pada file RML, yaitu baris:
yang diletakkan di dalam loop. Kemudian di luar loop lakukan reset seperti ini:
Tanpa seqReset
, nomor urut pada PDF berikutnya akan berlanjut, tidak diawali dengan 1. Makna L1
di atas sepertinya semacam identitas sequence sehingga perlu unik di setiap loop.
Header di Setiap Halaman
Banyaknya jumlah pegawai membuat sebuah PDF terdiri dari beberapa halaman. Sayangnya ini tidak diikuti dengan pengulangan judul kolom. Oleh karena itu Anda perlu menggunakan tag tambahan
dan
seperti pseudo code berikut ini:
Sehingga menjadi seperti ini:
Referensi: