Ketika melakukan pengembangan aplikasi berbasis Odoo 17 ada kemungkinan ada hal-hal yang menyebabkan proses tidak bisa dilanjutkan karena kesalahan. Kesalahan ini dapat diakibatkan yang dimasukkan pengguna atau ada hal-hal yang memang tidak diperbolehkan sesuai algoritmanya atau error lain yang kita belum sempat berikan penanganan. Pesan error atau kesalahan ini perlu ditampilkan ke pengguna dengan pesan yang mudah dimengerti.
Cara menampilkan kesalahan dalam kustomisasi Odoo 17 adalah seperti pada langkah-langkah berikut ini
- Start SSH Filesystem
- Model asrama.room
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586from odoo import fields, models, api, _
from odoo.exceptions import ValidationError, UserError
class
BaseArchive(models.AbstractModel):
_name =
'base.archive'
active = fields.Boolean(
default
=True)
def do_archive(self):
for
record in self:
record.active = not record.active
class
AsramaRoom(models.Model):
_name =
'asrama.room'
_inherit = [
'base.archive'
]
_description =
'Informasi Kamar Asrama'
_rec_name =
'room_no'
name = fields.Char(
'Nama kamar'
,required=True)
room_no = fields.Char(
'No kamar'
,required=True)
floor_no = fields.Integer(
'No Lantai'
,
default
=1, help=
'No Lantai'
)
currency_id = fields.Many2one(
'res.currency'
,string=
'Mata uang'
)
rent_amount = fields.Monetary(
'Harga sewa'
,help=
'Masukkan harga sewa'
)
hostel_id = fields.Many2one(
'asrama.hostel'
,
'Hostel'
, help=
'Nama hostel'
)
student_per_room = fields.Integer(
'Jml pelajar per kamar'
,required=True,
help=
'Jml yang dialokasikan per kamar'
)
@api.depends(
'student_per_room'
,
'student_ids'
)
def _compute_check_availability(self):
""
"Mengecek ketersediaan"
""
for
rec in self:
rec.availability = rec.student_per_room - len (rec.student_ids.ids)
availability = fields.Float(compute=
'_compute_check_availability'
,store=True,
string=
'Ketersediaan'
,help=
'Ketersediaan kamar pada asrama'
)
student_ids = fields.One2many(
'asrama.student'
,
'room_id'
,
'Daftar pelajar'
,
help=
'Pelajar-pelajar dalam room ini'
)
asrama_amenities_ids = fields.Many2many(
'asrama.amenities'
,
'asrama_amenities_rel'
,
'room_id'
,
'amenity_id'
,
string=
'Amenities'
, domain=
"[('active','=',True)]"
,
help=
'Pilih fasilitas room'
)
_sql_constraints = [(
'room_no_unique'
,
'unique(room_no)'
,
'Nomor room harus unik!'
)]
@api.constrains(
'rent_amount'
)
def _check_rent_amount(self):
""
"Constraint pada nilai negatif"
""
if
self.rent_amount < 0:
raise ValidationError(_(
'Nilai rental tidak boleh negatif'
))
room_rating = fields.Float(
'Rata-rata Rating dari Room'
,digits=(14,4))
state = fields.Selection([
(
'draft'
,
'Unavailable'
),
(
'available'
,
'Available'
),
(
'closed'
,
'Closed'
)
],
'State'
,
default
=
'draft'
)
@api.model
def is_allowed_transition(self,old_state,new_state):
allowed = [
(
'draft'
,
'available'
),
(
'available'
,
'closed'
),
(
'closed'
,
'draft'
)
]
return
(old_state,new_state) in allowed
def change_state(self,new_state):
for
room in self:
if
room.is_allowed_transition(room.state, new_state):
room.state = new_state
else
:
msg = _(
'Pindah dari %s ke %s tidak diperbolehkan!'
) % (room.state,new_state)
raise UserError(msg)
def make_available(self):
self.change_state(
'available'
)
def make_closed(self):
self.change_state(
'closed'
)
- Start odoo dengan upgrade modul
- Tampilan pada aplikasi
Kunjungi www.proweb.co.id/implementasi-odoo/ untuk menambah wawasan implementasi Odoo ERP.