Dalam melakukan pemrograman kita mungkin mendapati suatu fitur yang banyak digunakan di banyak tempat. Akan tidak efisien jika kita menulis code yang sama di berbagai tempat. Untuk kita kita dapat menggunakan abstract model.
Abstract model untuk fitur yang banyak digunakan pada Odoo 17 adalah seperti pada conroh berikut ini
- Stat SSH filesystem
- Model base.archive dan asrama.room
from odoo import fields, models, api, _ from odoo.exceptions import ValidationError 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'))
- View asrama_room
<?xml version='1.0' encoding='utf-8'?> <odoo> <!-- asrama.room tree view --> <record id="asrama_room_view_tree" model="ir.ui.view"> <field name="name">asrama.room.view.tree</field> <field name="model">asrama.room</field> <field name="arch" type="xml"> <tree string='Room'> <field name="name"/> <field name="room_no" /> <field name="floor_no" /> </tree> </field> </record> <!-- asrama.room form view --> <record id="asrama_room_view_form" model="ir.ui.view"> <field name="name">asrama.room.view.form</field> <field name="model">asrama.room</field> <field name="arch" type="xml"> <form string="Room"> <sheet> <group> <group description='Kamar'> <field name="name" /> <field name="room_no" /> <field name="hostel_id" required="1"/> <field name="floor_no" /> <field name="active" /> </group> <group description='Harga'> <field name="student_per_room"/> <field name="availability"/> <field name="rent_amount" /> <field name="currency_id" /> </group> </group> <notebook> <page name="room_studennt" string="Para Pelajar"> <field name="student_ids"/> </page> <page name="asrama_amenities" string="Room Amenities"> <group> <field name="asrama_amenities_ids" widget="many2many_tags"/> </group> </page> </notebook> </sheet> </form> </field> </record> <!-- asrama.room action window --> <record id="asrama_room_action" model="ir.actions.act_window"> <field name="name">Room</field> <field name="type">ir.actions.act_window</field> <field name="res_model">asrama.room</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"> Tambah kamar </p> </field> </record> <!-- This Menu Item must have a parent and an action --> <menuitem id="asrama_room_menu" name="Room Asrama" parent="hostel_main_menu" action="asrama_room_action" sequence="2"/> </odoo>
- Start odoo dengan upgrade modul
- Tabel asrama_room
- Tampilan
Kunjungi www.proweb.co.id/implementasi-odoo/ untuk menambah wawasan implementasi Odoo ERP.