Anda memiliki tabel riwayat kepangkatan pegawai dan membutuhkan laporan daftar pegawai beserta pangkat terakhirnya. Sebaiknya siapkan sebuah field pangkat yang melekat pada pegawai. Field ini tidak bisa diubah oleh user karena otomatis terisi berdasarkan tabel riwayat tadi. Di OpenERP field seperti ini bertipe function, atau saya lebih suka menyebutnya calculated field.
Anggaplah modul dinamai hr_custom, jadi buatlah direktorinya:
# mkdir addons/hr_custom
Lalu buatlah file addons/hr_custom/hr_custom.py yang berisi:
from osv import fields, osv class pangkat(osv.osv): _name = 'pangkat' _description = 'Pangkat' _columns = { 'name': fields.char('Uraian', size=128, required=True), } _sql_constraints = [('pangkat_uniq', 'unique(name)', 'Nama harus unik')] _order = 'name' pangkat() class pangkat_line(osv.osv): _name = 'pangkat.line' _description = 'Riwayat Pangkat' _columns = { 'employee_id': fields.many2one('hr.employee', 'Pegawai', required=True), 'pangkat_id': fields.many2one('pangkat', 'Pangkat', required=True), 'tgl': fields.date('Tanggal', required=True), } _order = 'tgl DESC' pangkat_line() class hr_custom(osv.osv): _inherit = 'hr.employee' def _calculate_all(self, cr, uid, ids, field_name, arg, context=None): res = {} for employee in self.browse(cr, uid, ids, context=context): res[employee.id] = { 'pangkat_id': None, } for line in employee.pangkat_line[:1]: res[employee.id]['pangkat_id'] = line.pangkat_id.id return res _columns = { 'pangkat_line': fields.one2many('pangkat.line', 'employee_id', 'Riwayat Pangkat'), 'pangkat_id': fields.function(_calculate_all, string='Pangkat', type='many2one', obj='pangkat', multi='terbaru', store={'hr.employee': (lambda self, cr, uid, ids, c={}: ids, ['pangkat_line'], 10)}), } def pangkat_terbaru(self, cr, uid, employee_id, context): obj = self.pool.get('pangkat_line') ids = obj and obj.search(cr, uid, [('employee_id', '=', employee_id)], limit=1) if ids: lines = obj.browse(cr, uid, ids, context=context) return lines[0].pangkat_id.id hr_custom()
Lalu buatlah agar direktori ini dianggap sebagai modul dengan membuat file addons/hr_custom/__init__.py:
import hr_custom
Atur tampilannya di addons/hr_custom/view.xml:
<openerp> <data> <record id="view_employee_form1" model="ir.ui.view"> <field name="name">hr.employee.form1</field> <field name="model">hr.employee</field> <field name="inherit_id" ref="hr.view_employee_form"/> <field name="arch" type="xml"> <field name="name" position="after"> <field name="pangkat_id"/> </field> <page string="Personal Information" position="after"> <page string="Riwayat Pangkat"> <field mode="tree,form" name="pangkat_line" nolabel="1"> <tree> <field name="pangkat_id"/> <field name="tgl"/> </tree> <form> <field name="pangkat_id"/> <field name="tgl"/> </form> </field> </page> </page> </field> </record> </data> </openerp>
Isi data pangkat di addons/hr_custom/pangkat.csv:
id,name komisaris,Komisaris direktur,Direktur manager-it,Manager IT manager-keuangan,Manager Keuangan manager-pemasaran,Manager Pemasaran staff,Staff
Lengkapi dengan membuat OpenERP profile di addons/hr_custom/__openerp__.py:
{ 'name' : 'Pegawai', 'depends' : ['hr'], 'update_xml': ['view.xml', 'pangkat.csv'], }
Restart daemonnya:
# service openerp restart
Tambahkan modul ini seperti biasa. Cobalah menambah data karyawan beserta riwayat pangkatnya. Perhatikan tanggalnya dimana ia akan mengandalkan tanggal terbesar untuk mendapatkan pangkat saat ini.
Selamat mencoba.
Referensi:
Komentar terbaru
10 tahun 48 pekan y.l.
13 tahun 26 pekan y.l.
13 tahun 26 pekan y.l.
13 tahun 26 pekan y.l.