Otoritas dari user Odoo diterapkan hingga ke tabel dan record yang ada pada database PostgreSQL. Tetapi ada kalanya dalam keadaan khusus kita ingin melewati batasan ini. Di sini kita dapat menggunakan sudo tetapi pemakaiannya harus hati-hati sebab kalau tidak hati-hati dapat membuat celah keamanan.
Penggunaan sudo dalam pemrograman Odoo 17 adalah seperti pada contoh-contoh berikut ini
- Start SSH filesystem
- Model asrama.student
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465from 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'
)
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
- View asrama_student
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354<?xml version=
"1.0"
encoding=
"utf-8"
?>
<odoo>
<!-- asrama.student form view -->
<record id=
"asrama_student_view_form"
model=
"ir.ui.view"
>
<field name=
"name"
>asrama.student.view.form</field>
<field name=
"model"
>asrama.student</field>
<field name=
"arch"
type=
"xml"
>
<form string=
""
>
<sheet>
<header>
<button name=
"action_assign_room"
string=
"Assign Room"
type=
"object"
class
=
"btn-primary"
/>
</header>
<group>
<group>
<field name=
"name"
/>
<field name=
"city"
/>
<field name=
"zip"
/>
<field name=
"country_id"
/>
<field name=
"gender"
/>
<field name=
"active"
/>
</group>
<group>
<field name=
"room_id"
/>
<field name=
"hostel_id"
/>
<field name=
"status"
/>
<field name=
"admission_date"
/>
<field name=
"discharge_date"
/>
<field name=
"duration"
/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record model=
"ir.actions.act_window"
id=
"action_asrama_student"
>
<field name=
"name"
>Students</field>
<field name=
"type"
>ir.actions.act_window</field>
<field name=
"res_model"
>asrama.student</field>
<field name=
"view_mode"
>tree,form</field>
<field name=
"domain"
>[]</field>
<field name=
"context"
>{}</field>
<field name=
"help"
type=
"html"
>
<p
class
=
"oe_view_nocontent_create"
>
Create Student.
</p>
</field>
</record>
<!-- This Menu Item must have a parent
and
an action -->
<menuitem id=
"asrama_student_menu"
name=
"Pelajar-pelajar"
parent=
"hostel_main_menu"
action=
"action_asrama_student"
sequence=
"3"
/>
</odoo>
- Start Odoo dengan upgrade modul
- User biasa bisa Assign room karena menggunakan sudo
User biasa klik Assign Room:
Hasil assignment pada Room:
- Daftar kamar
Kunjungi www.proweb.co.id/implementasi-odoo/ jika anda membutuhkan layanan mplementasi Odoo ERP.