Ketika mengembangkan aplikasi menggunakan Odoo 17 kita biasa membuat tampilan di mana nilai suatu field bergantung dari field-filed lain. Di sini kita akan menggunakan onchange.
Penggunaan onchange untuk perubahan field pembuakan aplikasi Odoo 17 adalah seperti pada langkah-langkah berikut ini
- Start SSH filesystem
- Model asrama.student
from datetime import datetime, timedelta from odoo import _, fields, models, api from odoo.exceptions import UserError class AsramaStudent(models.Model): _name = 'asrama.student' _description = 'Informasi Asrama Student' partner_id = fields.Many2one('res.partner', ondelete='cascade', delegate=True) #name = fields.Char('Nama pelajar') gender = fields.Selection( [('male','Male'),('female','Female'),('other','Other')], string='Jenis kelamin', help='Jenis kelamin pelajar', ) active = fields.Boolean('Active',default=True,help='Activate/Deactive record') room_id = fields.Many2one('asrama.room','Room',help='Pilih room') hostel_id = fields.Many2one('asrama.hostel',related='room_id.hostel_id') status = fields.Selection( [('draft','Draft'),('reservation','Reservation'),('pending','Pending'),('paid','Paid'),('discharge','Discharge'),('cancel','Cancel')], string='Status',copy=False,default='draft', help='Status asrama student' ) @api.depends('admission_date','discharge_date') def _compute_check_duration(self): """Mengecek durasi""" for rec in self: if rec.discharge_date and rec.admission_date: rec.duration = (rec.discharge_date - rec.admission_date).days def _inverse_duration(self): for stu in self: if stu.discharge_date and stu.admission_date: duration = (stu.discharge_date - stu.admission_date).days if duration != stu.duration: stu.discharge_date = (stu.admission_date + timedelta(days=stu.duration)).strftime('%Y-%m-%d') admission_date = fields.Date('Tanggal masuk',help='Tangga di mana pelajar masuk asrama', default=fields.Datetime.today()) discharge_date = fields.Date('Tanggal keluar',help='Tanggal di mana pelajar keluar asrama') # duration = fields.Integer('Durasi', compute='_compute_check_duration',inverse='_inverse_duration', # help='Durasi lamanya tinggal') duration = fields.Integer('Durasi', inverse='_inverse_duration', help='Durasi lamanya tinggal') def action_assign_room(self): self.ensure_one() if self.status != 'paid': raise UserError(_("Tidak bisa memberikan room jika belum Paid!")) room_as_super_user = self.env['asrama.room'].sudo() room_rec = room_as_super_user.create({ 'name': 'Kamar A-505', 'room_no': 'A-505', 'floor_no': 1, 'student_per_room' : 5, 'category_id' : self.env.ref("asramaku.kategori_elite").id, 'hostel_id': self.hostel_id.id, }) if room_rec: self.sudo().room_id = room_rec.id def action_wizard_assign_room(self): return { 'type' : 'ir.actions.act_window', 'name' : _('Assign Room'), 'res_model' : 'assign.room.student.wizard', 'view_type' : 'form', 'view_mode' : 'form' , 'views' : [[False,'form']], 'target': 'new', } def action_remove_room(self): if self.env.context.get('is_hostel_room'): self.room_id = False @api.onchange('admission_date','discharge_date') def onchange_duration(self): if self.discharge_date and self.admission_date: self.duration = (self.discharge_date - self.admission_date).days
- Start Odoo dengan upgrade modul
- Tampilan yang dihasilkan
Kunjungi www.proweb.co.id/implementasi-odoo/ jika anda membutuhkan layanan mplementasi Odoo ERP.