Dalam melakukan implementasi Odoo kita mungkin perlu membuat record baru adalah bagian setiap pemrograman dengan Odoo 17.
Membuat record baru pada pemrograman Odoo 17 adalah seperti pada langkah-langkah berikut ini
- Memulai file sistem SSH
- Model asrama.room
from 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') def log_all_room_members(self): asrama_student_obj = self.env['asrama.student'] all_members = asrama_student_obj.search([]) print('Semua anggota',all_members) return True def create_categories(self): categ1 = { 'name': 'Child category 1', 'description': 'Description for child 1' } categ2 = { 'name': 'Child category 2', 'description': 'Description child 2' } parent_category_val = { 'name': 'Parent category', 'description': 'Description for parent category', 'child_ids': [ (0,0,categ1), (0,0,categ2), ] } record = self.env['asrama.category'].create(parent_category_val) return True
- 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> <header> <button name="make_available" string="Make Available" type="object"/> <button name="make_closed" string="Make Closed" type="object"/> <button name="log_all_room_members" string="Log semua kamar members" type="object"/> <button name="create_categories" string="Create categories" type="object"/> <field name="state" widget='statusbar'/> </header> <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>
- Model asrama.category
from odoo import fields, models, api from odoo.exceptions import ValidationError class AsramaCategory(models.Model): _name = 'asrama.category' _description = 'Kategori Hostel' _parent_store = True _parent_name = 'parent_id' name = fields.Char('Kategori') description = fields.Char('Description') parent_id = fields.Many2one( 'asrama.category', string='Parent Category', ondelete='restrict', index=True) parent_path = fields.Char(index=True,unaccent=False) child_ids = fields.One2many('asrama.category','parent_id', string='Child Categories') @api.constrains('parent_id') def _check_hierarchy(self): if not self._check_recursion(): raise models.ValidationError('Error! Tidak boleh kategori yang rekursif')
- Tambahkan hak akses pada ir.model.access
id,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
- Start ssh dengan upgrade modul
- Tampilan yang dihasilkan
- Data yang masuk ke tabel asrama_category
Kunjungi www.proweb.co.id/implementasi-odoo/ untuk menambah wawasan implementasi Odoo ERP.