added function filled but not ovveride (odoo19

added function filled but not ovveride (odoo19

jadi contoh form pendaftaran itu udah kita buat ya ada tambahan kelompok tapi dia kan ada fungsi yang berjalan jika sudah terbuat maka kelompok auto keisi tapi karena ini gada jadi ya tidak akan keisi

tapi ada inherit

ada class terbuat tapi tidak ada kelompok_id maka kita pakaikan

di model ke di siswa ya karena kita pernah inherit nya jadi


kita lihat dulu di model udah ada fieldnya belum nih klo belum maka kita tambahin kalau udah ya jangan di tambahin field lagi

cara lihatnya ke menu otak 9 lalu pencarian ketik models catatan harus ?debug=1 ya


lalu kita cari modelnya data siswa itu di hr.employee maka

pilih


ganti jadi 999 biar keliatan semua


cari kelompok_id caranya ctrl+f

kalau 0/0 dan urut seara abjad gada maka kita tambahin



dan defnya itu gini

def update_datas(self):
        res = super(Inherit_Siswa_data, self).update_datas()
        for rec in self:
            if rec.is_student:
                rec.write({'kelompok_id': rec.pendaftaran_id.kelompok_id.id})
        return res

pebacaanya adalah kita inisialisasi atau biarin def aslinya jalan dulu super(modelclass nya inheritnya lalu panggil fungsi aslinya dulu

habis itu jangan di return lalu tambahkan tambahkan fungsinya

setelah itu di res seperti diatas itu yang sudah di contohkan

setelah itu kita restart dan upgrade modul maka ketika di approve akan



itu saya readonly harusnya tidak usah jadi abaikan xml kalian harusnya sampai sini paham lah ya


ovveride controller download excel (odoo19)

ovveride controller download excel (odoo19)

 

Kita cari nih dia itu arahnya kemana pas download di module utama

kalau di vscode


maka ketemu 3 tuh karena kita mau siswa yakita cari aja yg student



nah ketemu kan kita cari lagi itu on clicknya dengan cara seperti tadi
maka muncul
nah muncul
jadi kita cari tuh download_student_excel
kita COPAS aja itu semua
dan kita ke modul kita dev_tkCrm
lalu kita tambahkan controllers
di report_siswa.py itu
misal saya ubah semula

dan saya mau ilangin NISN




ubah jadi
 dan diilangin 
kalau headernya di hilangin jadi ya di bawahnya isianya harus di ilangin NISN itu adalah setelah JK yaitu 0 itu no 1 itu nama siswa 2 itu NIS 3 itu JK dan 4 itu NISN nah itu yg kita hilangkan juga di isanya


rapihin nomernya
    

dan lalu tambahkan biasa di init dalam controller dan diluar controller


setelah itu restart dan upgrade lalu download lagi
dan taraa NISN sudah gada dan kav sudah jadi Kab

bonus:
    karena kolom E sudah dihilangin jadi rapihin lagi lebar kolomnya yang semula

menjadi

E nya dihapus dan laiya naik semua 














Menambahkan wizard lulus button (odoo19)

Menambahkan wizard lulus button (odoo19)

 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

kita ke siswa_wiz dulu

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
nah oke dijelasin ya
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
menjadi seperti ini

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
Nah abis itu
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 

'view_mode': 'form',
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

'view_id': view_id,
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


'target': 'new',
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 kalau di klik muncul

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

LALU SUBMIT
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
masih sama kita isi
maka