memanggil fungsi diluar models.py odoo-14

memanggil fungsi diluar models.py odoo-14

 Melanjutkan tutorial kemarrin Relasi table many2one

Membuat fungsi inherit pada 1 models

buka file models.py
pada service_id tambahkan fungsi delegate=True yang dimana fungsi ini bertujuan untuk inherit name pada pemeliharaan kedalam models sehingga nantinya hanya dipanggil nama fungsinya
codingnya :
service_id = fields.Many2one(
comodel_name='stylerent.service',
string='Pemeliharaan',
Required=True,
delegate=True
)

lalu pada <!-- model.name tree view -->
didalamnya tree dibawah harga tambahkan atau panggil fungsi teknik contohnya yg berada bukan pada models.py
<tree>
<field name="name"></field>
<field name="tipe"></field>
<field name="service_id"/>
<field name="kapasitas"></field>
<field name="harga"></field>
<field name="teknik"></field>
<field name="active"></field>
</tree>

Restart server odoo dan upgrade, maka akan keluar hasil :

Menambah fungsi atau tab pada deskripsi (notebook)

buka stylerent_views.xml
dan pada menu <!-- model.name form view -->
didalam notebook tambahkan dwskripsi atau memanggil file di pemeliharaan.py menjadi :
<notebook colspan='4'>
<page string="HARGA SEWA">
<field name="harga"/>
</page>
<page string="Deskripsi service">
<field name="deskripsiservice"/>
</page>
</notebook>
Karena tidak merubah .py maka hanya upgrade saja 
lalu akan menjadi seperti ini saat di klik pilihanya












RELASI table pada odoo-14 (Docker) many2one

RELASI table pada odoo-14 (Docker) many2one

 Membuat relasi many to one

Buat file baru bernama pemeliharaan.py didalam folder style_rentcar -> models
dengan isi code :
from odoo import models, fields, api
#nama class dibiarin tidak masalah yg penting _name nya bedain untuk dipasang di secutrity
class stylerent(models.Model):
_name = "stylerent.service"
_description = "Teknik Pemeliharaan mobil"

name = fields.Selection(
string='Jenis Service',
selection=[('biasa', 'biasa'), ('istimewa', 'istimewa'), ('spesial', 'spesial'), ('super','super')]
)
teknik = fields.Selection(
string='Teknik service',
selection=[('Large', 'All'), ('Medium', 'Machine'), ('Small', 'Oil')]
)
hasil = fields.Selection(
string='Hasil Service',
selection=[('Ringan', 'Ringan'), ('Sedang', 'Sedang'), ('Berat', 'Berat')]
)
tersedia = fields.Boolean(
string='tersedia',
default=True
)
deskripsiservice = fields.Char(
string='deskripsi',
help='Isi dengan Service dari mobil'
)

pada style_rentcar -> models -> __init__.py
tambahkan code dibawah from import pertama
from . import pemeliharaan

Berikan ijin untuk models yang dibuat di security
ditambah pada bawah access diambil dari __name : 'yang ini'
access_stylerent_service,access.stylerent.service,model_stylerent_service,,1,1,1,1

Tambahkan file viewnya untuk dibuat field nya
buat file stylerent_pemeliharaan.py didalam folder style_rentcar -> views
dengan code :
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- model.name tree view -->
<record id="stylerent_service_view_tree" model="ir.ui.view">
<field name="name">stylerent.service.view.tree</field>
<field name="model">stylerent.service</field>
<field name="arch" type="xml">
<tree>
<field name="name"></field>
<field name="teknik"></field>
<field name="hasil"></field>
<field name="deskripsiservice"></field>
<field name="tersedia"></field>
</tree>
</field>
</record>

<!-- model.name form view -->
<record id="stylerent_service_view_form" model="ir.ui.view">
<field name="name">stylerent.service.view.form</field>
<field name="model">stylerent.service</field>
<field name="arch" type="xml">
<form string="Daftar Pemeliharaan Mobil">
<sheet>
<group>
<group colspan='4'>
<group colspan='2'>
<separator string="Rincian Service"/>
<field name="name"/>
<field name="teknik"/>
</group>
<group colspan='2'>
<separator string="Hasil Service"/>
<field name="hasil"/>
<field name="tersedia"/>
</group>
<notebook colspan='4'>
<page string="Deskripsi Service">
<field name="deskripsiservice"/>
</page>
</notebook>
</group>
</group>
</sheet>
</form>
</field>
</record>

<!-- model.name action window -->
<record id="stylerent_service_action" model="ir.actions.act_window">
<field name="name">Jenis Mobil Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stylerent.service</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_smiling_face">
Diisi dengan service mobil
</p><p>
<!-- More details about what a user can do with this object will be OK -->
</p>
</field>
</record>

<!-- This Menu Item must have a parent and an action -->
<menuitem id="stylerent_service_menu_act"
name="Pemeliharaan"
parent="stylerent_datamaster_menu_categ"
action="stylerent_service_action"
sequence="10"/>
</data>
</odoo>

Ubah file menu.xml di views menjadi
code :
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- This Menu Item will appear in the Upper bar, that's why It needs NO parent or action -->
<menuitem id="stylerent_menu_root" name="Style Rent Car" sequence="10"/>

<!-- This Menu Item Must have a parent -->
<menuitem id="stylerent_datamaster_menu_categ"
name="Inventaris"
parent="stylerent_menu_root"
sequence="10"/>

<menuitem id="stylerent_datamaster_menu_categ"
name="Operasional"
parent="stylerent_menu_root"
sequence="11"/>
</data>
</odoo>

Karena menuitem yg kedua sequence 11 adalah untuk memanggil field pemeliharaan
setelah itu tambahkan data di manifest menjadi
'data': [
'security/ir.model.access.csv',
'views/menu.xml',
'views/stylerent_views.xml',
'views/stylerent_pemeliharaan.xml',
],
Lakukan restart server odoo dan upgrade apps 
dan akan memunculkan seperti ini:
dan klik pada pemeliharaan maka akan tampil :
Dan klik create lalu isikan berikut sebagai contoh :


Many To One

Buka models.py yang ada di folder style_rentcar -> models
tambahkan coding berikut : (dibawah active)
service_id = fields.Many2one(
comodel_name='stylerent.service',
string='Pemeliharaan', Required=True
)
comodel name adalah model tujuan yg akan dipasangkan karena ini dikelas jenis mobil dan akan berelasi di kelas service maka comodelnya stylerent.service (__name yang ada di file pemeliharaan.py)

Agar bisa dipangiil buka stylerent_views.xml
dan tambahkan code berikut pada <!-- model.name tree view -->


dibawah  <field name="tipe"></field> menjadi
Coman ini diperhatikan <!-- xxx -->
<!-- model.name tree view -->.
<record id="stylerent_jenismobil_view_tree" model="ir.ui.view">
<field name="name">stylerent.jenismobil.view.tree</field>
<field name="model">stylerent.jenismobil</field>
<field name="arch" type="xml">
<tree>
<field name="name"></field>
<field name="tipe"></field>
<field name="service_id"/>
<field name="kapasitas"></field>
<field name="harga"></field>
<field name="active"></field>
</tree>
</field>
</record>
dan ubah juga pada  <!-- model.name form view --> pada group 
menjadi hanya ditambah service_id
              <group colspan='2'>
<separator string="TIPE MOBIL"/>
<field name="tipe"/>
<field name="service_id"/>
</group>
setelah itu restart server odoo dan lakukan upgrade pada module
lalu tampil  klik pada jenis dan sewa mobil yang semula tipe/jenis mobil diubah dari views -> stylerent_views dan pada menu item yg bawah name nya diubah :

Apabila gagal atau internal server eror silahkan hapus librari pada line 1 yang otomatis tertulis
from typing_extensions import Required
Lalu bisa diedit dengan klik salah satunya lalu klik edit
maka akan muncul dan pilihlah salah satu :

Kalau ingin memilih menu yang ada didalam sini karena pilihanya banyak dengan cara klik kotak dan panah kecil disamping :
Maka akan keluar menu pilihan berikut silahkan diisi sesuai keinginan lalu disimpan
























Membuat models dan addons di odoo (Docker)

Membuat models dan addons di odoo (Docker)

 Membuat models dan addons

buka Docker dan jalankan odoo

Structur membuat models :

buat nama folder sesuai nama models yang akan dibuat
contoh style rentcar
buat struktur didalamnya terdapat



dalam folder views masih kosong sedangkan __init__.py dan __manifest__.py adalah file didalam style rentcar

Tahap pemasukan coding

Pada __Manifest__.py isikan :
# -*- coding: utf-8 -*-
{
'name': 'Style Rent Car',
'summary': 'Style rentcar management software',
'description': """Style rentcar management software""",
'author': "My Company",
'website': "http://srikandiart.com",
'category': 'Productivity',
'version': '0.1',
'application': True,

# any module necessary for this one to work correctly
'depends': ['base'],

# always loaded
'data': [
'security/ir.model.access.csv',
],
}

Lalu restart odoo di docker dan akses kembali localhost
lalu ke updat apps dan cari di menu search filenya lalu install




Membuat models

ketikan pada __init__.py yang ada dalam folder style_rentcar
from . import models

Buat folder models didalam style_rentcar
dan beri isi __init__.py danjuga models.py

dan __init__.py berisi
from . import models

from odoo import models, fields, api

class ModelDasar(models.Model):
_name = "stylerent.modeldasar"
_description = "model dasar style rent car"
kapasitas = fields.Char(
string='kapasitas penumpang',
Required=True,
)
tipe = fields.Selection(
string='tipe/jenis mobil',
selection=[('sedan', 'Sedan'), ('lcgc', 'LCGC'), ('mpv', 'MPV'), ('suv', 'SUV')]
)

class stylerent(models.Model):
_name = "stylerent.jenismobil"
_description = "Daftar Jenis-jenis mobil"
_inherit = 'stylerent.modeldasar' #memanggil model class yg atas inheriten delegation

name = fields.Char(
string='Jenis Sewa',
Required=True
)
harga = fields.Integer(
string='Harga sewa',
Required=True
)
active = fields.Boolean(
default=True
)
Tambahkan folder security di rentcar yang didalamnya berisi ir.models.access.csv
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_stylerent_jenismobil,access.stylerent.jenismobil,model_stylerent_jenismobil,,1,1,1,1
dengan struktur
File dalam folder controllers hanya berisi 
__init__.py
import . from controllers
dan controllers.py kosong

Lalu restart kembali odoo server didalam docker dan refresh kembali untuk page odoo 
lalu lakukan upgrade pada addons :



setelah melakukan update lanjut ke menu setting -> lanjut ke menu bar technical dan pilih models


Cari name yg sudah diinput tadi maka akan keluar modelsnya

Membuat menu bar dan Views

buatlah folder views didalam style_rentcar


dan tambah file menu.xml juga stylerent.xml
dengan code.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- This Menu Item will appear in the Upper bar, that's why It needs NO parent or action -->
<menuitem id="stylerent_menu_root" name="Style Rent Car" sequence="10"/>

<!-- This Menu Item Must have a parent -->
<menuitem id="stylerent_datamaster_menu_categ"
name="Operasional"
parent="stylerent_menu_root"
sequence="10"/>

<menuitem id="stylerent_datacontact_menu_categ"
name="Contacts"
parent="stylerent_menu_root"
sequence="11"/>
</data>
</odoo>

dan coding dari stylerentviews.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- model.name tree view -->
<record id="stylerent_jenismobil_view_tree" model="ir.ui.view">
<field name="name">stylerent.jenismobil.view.tree</field>
<field name="model">stylerent.jenismobil</field>
<field name="arch" type="xml">
<tree>
<field name="name"></field>
<field name="harga"></field>
<field name="kapasitas"></field>
<field name="tipe"></field>
<field name="active"></field>
</tree>
</field>
</record>

<!-- model.name action window -->
<record id="stylerent_jenismobil_action" model="ir.actions.act_window">
<field name="name">Jenis Mobil Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stylerent.jenismobil</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_smiling_face">
Diisi dengan daftar tipe/jenis mobil dan Harga sewa
</p><p>
<!-- More details about what a user can do with this object will be OK -->
</p>
</field>
</record>

<!-- This Menu Item must have a parent and an action -->
<menuitem id="stylerent_jenismobil_menu_act"
name="Tipe/Jenis Mobil"
parent="stylerent_datamaster_menu_categ"
action="stylerent_jenismobil_action"
sequence="10"/>
</data>
</odoo>
Remember Menu Item must have *HARUS PALING BAWAH
Lalu jangan lupa untuk tambahkan manifest berikut ke data yang ada di __manifest__.py
# always loaded
'data': [
'security/ir.model.access.csv',
'views/menu.xml',
'views/stylerent_views.xml',
],
Setelah itu silahkan Restart odoo didalam docker  dan reload kembali page di apps lalu upgrade style_rentcar setelah di update masuk ke menu style rent yg ada di menu -> style rent car

Lalu silahkan create dengan data sebagai berikut

Lalu untuk kembali klik Style Rent Car
dan muncul tampilan




Membuat field Edit

Buka file stylerent_views.xml
lalu tambahkan code ini untuk menambah field jika di klik maka file nya berupa fields edit :
tambahkan dibawah code<!-- model.name tree view --> </record> 
<!-- model.name form view -->
<record id="stylerent_jenismobil_view_form" model="ir.ui.view">
<field name="name">stylerent.jenismobil.view.form</field>
<field name="model">stylerent.jenismobil</field>
<field name="arch" type="xml">
<form string="Daftar Harga Sewa">
<sheet>
<group>
<group colspan='4'>
<group colspan='2'>
<separator string="RINCIAN SEWA"/>
<field name="name"/>
<field name="kapasitas"/>
</group>
<group colspan='2'>
<separator string="TIPE MOBIL"/>
<field name="tipe"/>
</group>
<notebook colspan='4'>
<page string="HARGA SEWA">
<field name="harga"/>
</page>
</notebook>
</group>
</group>
</sheet>
</form>
</field>
</record>
Save dan upgrade langsung module stylerent.car yang ada di apps (tidak usah restart server odoo karena tidak mengedit file py)
maka akan tampil jika  harian mingguan atau tahunan di klik (salah satu):

Membuat Filter pemanggil di menu search agar otomatis ada pilihanya

masuk ke file stylerent_views.xml
dibawah code <!-- model.name form view -->
<!-- model.name search view -->
<record id="stylerent_jenismobil_view_search" model="ir.ui.view">
<field name="name">stylerent.jenismobil.view.search</field>
<field name="model">stylerent.jenismobil</field>
<field name="arch" type="xml">
<search string="Pencarian">
<!-- Add your fields here (pencarian berdasarkan) -->
<field name="name"/>
<field name="tipe"/>
<filter name="7" string="7" domain="[('tipe', 'ilike', '7')]" />
<filter name="5" string="5" domain="[('tipe', 'ilike', '5')]" />
</search>
</field>
</record>
record id nya diambil dari models -> class stylerent.jenismobil
Upgrade module (tanpa restart server) lalu ke menu style rent car Maka muncul :