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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788from 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.