jadi kali ini kita akan menambahkan button kelulusan atau keluar untuk ditambahkan
pertama kita lihat dulu dia di model apa dan form apa caranya
seperti biasa tambahkan ?debug=1
lalu seperti biasa kita simpan external_id nya dan kita lihat modelnya
dan modelnya klik aja
abaikan PTK itu karena itu hanyalah descriptionya saja
lalu kita lihat modul kita kemarin dan kita tambahkan modelnya dengan python baru
lalu kita tambahkan pythonya tambahkan odoo model dan field lalu inherit model tadi
dan kita akan lihat nih untuk pembuatan def nya atau tombolnya
kita jadikan def dulu dan kita akan tes apakah tombolnya benar
jadi gini ditambahkan exception silahkan copy saja atau ikuti untuk exceptionya
nah kalau sudah coba kita tambahin modelnya di init dalam models
dan kita mainkan xmlnya dengan bikin xml baru dan ingat catat ya xml id nya dan modelnya
nah xpathnya itu kita kan mau nambahin header jadi sebelum sheet itu kita tambahin header
lalu kita namakan headernya dan kita berikan button inline untuk name sesuai dengan def kita ya untuk test
karena biar ga muncul dimanapun jadi kita tambahin attribut invisible atau hilagin saat status siswanya bukan di siswa
lalu kita tambahin di manifestnya perhatikan itu berikan koma kalau mau menambahkan viewsnya data ya
setelah itu di upgrade restart odoo dan upgrade biasa
nah nongol jadi kita klik nanti dia harusnya nongol raise nya
artinya button berhasil kita tinggal akalin ke openwizard deh
nah untuk membuat wizard kita tambahkan folder wizard kita bikin dulu nih wizardnya
didalamnya jangan lupa init juga file python untuk wizardnya ya juga xmlnya
perhatikan dia bukan Model tapi Transient ya ??? apa itu transient jadi itu adalah id sementara dan akan terhapus otomatis untuk hari berikutnya
dan kita ini ingin tambahkan ketika dia lulus ya jadi kita tambah field siswanya yang mana itu dia pakai hr empoyee dan kita berikan alasanya berupa char aja ya, jangan lupa kita juga kasih aksi jika nanti sudah selesai
kalau id siswa kan memang kesana ya nah kalau status_siswa ambil darimana bang
oke kita bahas ya untuk status siswa itu kita ambil berdasarkan modul utamanya kita lihat status_siswanya nah copas aja pastein di wiz jadi jika kita itu modul utama status_siswa ada di modul tk_crm models data siswa yaudah kita copas aja itu paste di wizardnya
setelah itu kita pakein fungsinya ya
def action_wizards(self):
self.siswa_id.write({
'status_siswa': self.status_siswa,
'reason_siswa': self.reason_siswa
})
artinya nanti siswa itu akan mengganti status siswa berdasarkan wizardya dan reason atau alasanya jika lulus maka kita tinggal tulis saja di boxnya LULUS dan meneruskan ke SD .....
nah jadi kaya gini
oke untuk pythonya udah ya jadi kita lanjut ke xmlnya
sebelum itu kita inisialisasi tuh nama pythonya di init dalam wizard maupun diluar wizard
baca dulu ya
abaikan folder security nanti dijelaskan dibawah lakuin dulu yg ada step by step
lalu tambahkan wizard ke init luar wizard atau init utama
oke kita buat xmlnya ya siswa_wiz.xml
yang dalamnya hanya form saja jadi ketikan oxml dulu habis itu ketikan oform enter
maka menjadi
nah lalu isikan seperti sebelum sebelumnya id di isi form dan model di isi model yang sudah kita buat di python modelnya siswa.wiz karena wizard model kita ya itu
untuk sheet itu kita isi groupnya kita taruh group kasih nama main_group soalnya kita gamau kanan dan kiri jadi gitu aja dan di tambah 2 button yg 1 adalah button aksi yang sudah kita tambahkan def nya yang satunya adalah button kansel jadi name nya itu adalah name dari defnya
setelah itu karena di odoo terbaru itu semua model maupun transient model itu harus didaftarin di security
jadi kita harus tambah folder security dan tambah ir.model.access.csv
oke pelan pelan ya jadi security itu untuk mendaftarkan si nama dari model yang kita buat
perhatikan namanya ya perhatikan nama filenya habis itu dalam dari ir model itu jadi gini
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_siswa_wiz,siswa_wiz,model_siswa_wiz,base.group_system,1,1,1,1
copas saja ya itu
nah ini jadi kita itu perlu access itu utama lalu ada id dari id maka kita taruh saja nama modelnya tapi pakai underscore sama seperti id dari xml pengertianya ya bukan samain persis lalu model_nama modelnya setelah itu koma lalu base.group_system itu adalah nama grupnya karena grup system itu ada di folder base maka ya begitu lalu 1,1,1,1,1 itu dia bisa read write create dan unlink sesuai urutanya
nah setelah itu jangan lupa ir model itu kita taruh di xml jangan lupa ya TARUH DIPALING ATAS DATA dan jangan lupa siswa wizardnya juga ditambahin ya seperti ini
nah kalau sudah jadi kan form xmlnya sudah python sudah jadi kita def yang tadi raise validation kita ubah jadi
def action_active_wizards(self):
view_id = self.env.ref('dev_tkCrm.siswa_wiz_view_form').id
return {
'name': _('Aksi Siswa Pindah'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'siswa.wiz',
'view_id': view_id,
'views': [(view_id, 'form')],
'target': 'new',
'context': {
'default_siswa_id': self.id,
'default_status_siswa': self._context.get('status_target'),
}
}
didalam file python inherit siswa data tadi
sebelumya
kita tambahkan field char
lalu kita ganti raise validation menjadi seperti copasan diatas ya
penjelasanya
view_id itu mengarah ke form siswa wiz yg sudah kita buat silahkan scrol keatas itu kan ada kita buat oform itu ya
lalu formatnya
namamodul kamu . (kasih titik) nama record id nya untuk view id nya
INGAT YA NAMA MODUL KAMU KALAU NAMA MODUL KAMU RR YA RR.NAMARECORD_IDNYA
PAHAM YA nama modul jangan sama persis dev_tkCrm pasti ga ketemu karena itu nama modul saya
oke saya SS lagi nama modul nya itu modul yg lagi develop ya ini
return itu adalah langsung diarahkan lalu dalamnya ada
'name': _('Aksi Siswa'),
ya nama wizard nongolnya
'type': 'ir.actions.act_window',
ini adalah pasti act_windows karena kita wizard
dan ini itu mode nya apakah tree atau form atau kanban karena wizard ya brati form
'res_model': 'siswa.wiz',
nah ini itu modelnya jadi ya python wizardnya bukan model def yg kita lagi edit ya tapi model tujuan atau model wizardnya
karena kita udah deinisikan yg tadi sampe saya tekenin nama modul ya itu variabel view_id
'views': [(view_id, 'form')],
ini untuk form dari view_id
nah ini targetnya ada current tapi kita formnya bikin baru tenang dia ga bakal nambah id penuh karena transient itu selalu ngehapus id
'context': {
'default_siswa_id': self.id,
'default_status_siswa': self._context.get('status_target'),
}
kalau ini saya ingin nanti form itu kan kosong jadi di isi langsung field field pythonya
okeitu penjelasanya
sekarang kita benahin button di xpathnya ya
menjadi
TAMBAHKAN KONTEKSNYA karena kita mau itu button untuk LULUS ya kita tambahin LULUS
biar nanti statusnya dia lulus itu harus sejalan dengan selection ya
nah setelah itu kita lanjut restart dan upgrade
dan nongol
nah muncul gini ini tuh dia lgsung ke isi ya karena kita default tadi di konteks
tapi jangan lupa untuk siswa dan status tolong di invisible saja dan reason di required jadi gini
lalu upgrade lagi
jadi itu jangan ditambahkan dulu agar bisa kita lihat apakah sudah auto keisi belum
Nah kalau sudah upgrade kita akan isi
maka langsung berubah jadi lulus dan button hilang
lalu kita dimana bisa melihat lulus lalu kemana
maka kita xpath tambahka di bawah no hp atau manapun
nah saat ini saya tantang kamu yang sudah belajar tambahkan field reason itu hanya field di xml ya karna pythonya sudah kita tambahkan ke sebelumnya
lalu kita tambah lagi jika siswa itu pindah maka kita tambah lagi xml button nya seperti ini
nah jadi kita gaperlu tuh bikin python atau def baru hanya ganti konteksnya aja
nanti upgrade
status target itu isi dari selection status_siswa
nah bang gimana cara bacanya sih status target itu
nah ini status_siswa ya
status_siswa = fields.Selection(
string='status',
selection=[('calon_siswa', 'Calon Siswa'),('siswa', 'Siswa'), ('lulus', 'Lulus'), ('keluar', 'Keluar')]
)
tuh ada key ada value
key itu ya calon_siswa siswa lulus dan keluar
nah kalau value itu yang ada spasi tanpa underscore atau gede satu itu value
kita pakeinya itu keynya
okeh setelah itu kita upgrade maka