Dalam pengisian form pada aplikasi berbasis Odoo 17 kita dapat menggunakan serangkaian wizard untuk mengarahkan pengisian form secara tepat.
Pembuatan wizard pada pengembangan aplikasi Odoo 17 adalah seperti pada langkah-langkah berikut ini
- Memulai SSH file system
- Model untuk wizard
12345678910111213141516from odoo import models, fields
from datetime import datetime
class
AssignRoomStudentWizard(models.TransientModel):
_name =
'assign.room.student.wizard'
room_id = fields.Many2one(
'asrama.room'
,
'Room'
, required=True)
def add_room_in_student(self):
asrama_room_student = self.env[
'asrama.student'
].browse(self.env.context.get(
'active_id'
))
if
(asrama_room_student):
asrama_room_student.update({
'hostel_id'
: self.room_id.hostel_id.id,
'room_id'
: self.room_id.id,
'admission_date'
: datetime.today()
})
- View untuk wizard
12345678910111213141516171819202122232425262728293031<?xml version=
"1.0"
encoding=
"utf-8"
?>
<odoo>
<!-- assign.room.student.wizard form view -->
<record id=
"assign_room_student_wizard_view_form"
model=
"ir.ui.view"
>
<field name=
"name"
>Assign room student wizard view.form</field>
<field name=
"model"
>assign.room.student.wizard</field>
<field name=
"arch"
type=
"xml"
>
<form string=
"Assign Room"
>
<sheet>
<group>
<field name=
"room_id"
/>
</group>
</sheet>
<footer>
<button string=
"Update"
name=
"add_room_in_student"
class
=
"btn-primary"
type=
"object"
/>
<button string=
"Cancel"
class
=
"btn-default"
special=
'cancel'
/>
</footer>
</form>
</field>
</record>
<!-- assign.room.student.wizard action window -->
<record id=
"assign_room_student_wizard_action"
model=
"ir.actions.act_window"
>
<field name=
"name"
>Assign Room</field>
<field name=
"res_model"
>assign.room.student.wizard</field>
<field name=
"view_mode"
>form</field>
<field name=
"target"
>
new
</field>
</record>
<menuitem id=
"wizard_assign_room_menu"
name=
"Wizard Assign Room"
parent=
"hostel_main_menu"
action=
"assign_room_student_wizard_action"
sequence=
"4"
/>
</odoo>
- Pengisian ir.model.access.csv
123456789101112id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hostel_manager_id,access.hostel.manager,asramaku.model_asrama_hostel,group_hostel_manager,1,1,1,1
access_hostel_user_id,access.hostel.user,asramaku.model_asrama_hostel,group_hostel_user,1,0,0,0
access_hostel_room_manager_id,access.hostel.room.manager,asramaku.model_asrama_room,asramaku.group_hostel_manager,1,1,1,1
access_hostel_room_user_id,access.hostel.room.user,asramaku.model_asrama_room,asramaku.group_hostel_user,1,0,0,0
access_hostel_amenities_manager_id,access.hostel.amenities.manager,asramaku.model_asrama_amenities,asramaku.group_hostel_manager,1,1,1,1
access_hostel_amenities_user_id,access.hostel.amenities.user,asramaku.model_asrama_amenities,asramaku.group_hostel_user,1,0,0,0
access_hostel_student_manager_id,access.hostel.student.manager,asramaku.model_asrama_student,asramaku.group_hostel_manager,1,1,1,1
access_hostel_student_user_id,access.hostel.student.user,asramaku.model_asrama_student,asramaku.group_hostel_user,1,0,0,0
access_hostel_category_manager_id,access.hostel.category.manager,asramaku.model_asrama_category,asramaku.group_hostel_manager,1,1,1,1
access_hostel_category_user_id,access.hostel.category.user,asramaku.model_asrama_category,asramaku.group_hostel_user,1,0,0,0
access_hostel_assign_room_student_wizard_id,access.hostel.assign.room.student.wizard,asramaku.model_assign_room_student_wizard,asramaku.group_hostel_manager,1,1,1,1
- Model asrama.student
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980from 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
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
- View asrama_student.xml
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455<?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"
/>
<button name=
"action_wizard_assign_room"
string=
"Wizard 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>
- Wizard init
1from . import assign_room_student
- Init
123from . import models
from . import controllers
from . import wizard
- Manifest
123456789101112{
'name'
:
'Manajemen Asrama'
,
"data"
:[
"security/hostel_security.xml"
,
"security/ir.model.access.csv"
,
"data/data.xml"
,
"wizard/assign_room_student.xml"
,
"views/hostel.xml"
,
"views/asrama_room.xml"
,
"views/asrama_student.xml"
,
],
}
- Memulai Odoo dengan upgrade modul
- Menjalankan wizard
Room awal suatu murid kemudian klik Wizard Assign Room:
Pengupdatean kamar menggunakan wizard:
Hasil pemanggilan wizard:
Kunjungi www.proweb.co.id/implementasi-odoo/ jika anda membutuhkan layanan mplementasi Odoo ERP.