Membuat detailpesan 1 customer bisa pesan beberapa mobil

Membuat detailpesan 1 customer bisa pesan beberapa mobil

 Membuat class baru didalam order

Buatlah class baru didalam order.py dengan nama detailorder

Hapus from odoo import api, fields, models sehingga menjadi source code seperti berikut
from odoo import api, fields, models

class OrderMobil(models.Model):
_name = 'stylerent.ordermobil'
_description = 'New Description'

pemesan_id = fields.Many2one(
comodel_name='res.partner',
string='Nama Pemesan',
domain=[('is_customernya','=','True')]
)
tanggal_pesan = fields.Datetime(
string='Tanggal pesanan',
default=fields.Datetime.now
)
#membuat viewnya detail field order
detailjenis_ids = fields.One2many(
comodel_name='stylerent.detailorder',
inverse_name='order_id',
string='Detail Pesanan'
)

class DetailOrder(models.Model):
_name = 'stylerent.detailorder'
_description = 'Detail Orderan Customer'

name = fields.Char(
string='Kode Order'
)

order_id = fields.Many2one(
comodel_name='stylerent.ordermobil',
string='Order Mobil'
)
jenissewa_id = fields.Many2one(
comodel_name='stylerent.jenismobil',
string='Jenis Sewa Mobil'
)
Jika One to many harus menggunakan s untuk pembeda karena dia satu ke semua
dan untuk kelas kelas baru dibutuhkan karena untuk memanggil fungsi diluar order misal memanggil fungsi dari models.py order_id untuk memanggil class yg pertama dan jenissewa_id itu lawanya atau yg ada di models.py tersebut
Tambahkan acces karena membuat function class baru menjadi 
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
access_stylerent_service,access.stylerent.service,model_stylerent_service,,1,1,1,1
access_stylerent_ordermobil,access.stylerent.ordermobil,model_stylerent_ordermobil,,1,1,1,1
access_stylerent_detailorder,access.stylerent.detailorder,model_stylerent_detailorder,,1,1,1,1

dan ubah stylerent_order.xml menjadi seperti
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- stylerent.ordermobil tree view -->
<record id="stylerent_ordermobil_view_tree" model="ir.ui.view">
<field name="name">stylerent.ordermobil.view.tree</field>
<field name="model">stylerent.ordermobil</field>
<field name="arch" type="xml">
<tree>
<!-- Add your fields here -->
<field name="pemesan_id"/>
<field name="tanggal_pesan"/>
</tree>
</field>
</record>
<!-- stylerent.ordermobil form view -->
<record id="stylerent_ordermobil_view_form" model="ir.ui.view">
<field name="name">stylerent.ordermobil.view.form</field>
<field name="model">stylerent.ordermobil</field>
<field name="arch" type="xml">
<form string="">
<sheet>
<group>
<field name="pemesan_id" />
</group>
<group>
<field name="tanggal_pesan" />
</group>
<notebook colspan ='4'>
<page name="jenis_mobil" string="Detail Pesanan">
<field name="detailjenis_ids">
<tree editable='bottom'>
<field name="jenissewa_id" />
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>

<!-- stylerent.ordermobil action window -->
<record id="stylerent_ordermobil_action" model="ir.actions.act_window">
<field name="name">Orderan Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stylerent.ordermobil</field>
<field name="view_mode">tree,form</field>
</record>
<!-- This Menu Item must have a parent and an action -->
<menuitem
id="stylerent_ordermobil_menu_act"
name="Order Mobil"
parent="stylerent_menu_root"
action="stylerent_ordermobil_action"
sequence="5"/>
</data>
</odoo>
Dengan membuat field form untuk memanggil ids dan juga memanggil fungsi yang jenissewa nya
sehingga memiliki output

contohnya disini perusahaan atau perorangan bisa menyewa unit dengan jenis sewanya yg harian mingguan atau tahunan yg disediakan oleh pegawai style rent car.








Menambahkan models baru (menu order)

Menambahkan models baru (menu order)

Membuat menu order yang berparent ke judul/ id utama dan berelasi many2one

Buat menu baru order.py pada style_rentcar -> models
sehingga menjadi susunan seperti berikut 

Lalu didalamnya buatlah source code model baru dengan class OrderMobil dan berdomain atau nanti pemesanya akan terfilter secara customer dengan many2one ke partner.py bagian is_customer
from odoo import api, fields, models

class OrderMobil(models.Model):
_name = 'stylerent.ordermobil'
_description = 'New Description'

name = fields.Char(
string='Kode Order',
Required=True,
)
pemesan_id = fields.Many2one(
comodel_name='res.partner',
string='Nama Pemesan',
domain=[('is_customernya','=','True')]
)
tanggal_pesan = fields.Datetime(
string='Tanggal pesanan',
default=fields.Datetime.now
)
agar tanggal pesan nanti secara otomatis mengisi tanggal sekarang
many2one harus menggunakan _id dan one2manu _ids agar bisa membedakan
dan input models baru order.py maka harus ditambahkan di __init__.py menjadi
from . import models
from . import pemeliharaan
from . import partner
from . import order
Lalu tambahkan stylerent_order.xml didalam views
dan didalamnya terdapat surce code
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- stylerent.ordermobil tree view -->
<record id="stylerent_ordermobil_view_tree" model="ir.ui.view">
<field name="name">stylerent.ordermobil.view.tree</field>
<field name="model">stylerent.ordermobil</field>
<field name="arch" type="xml">
<tree>
<!-- Add your fields here -->
<field name="name"/>
<field name="pemesan_id"/>
<field name="tanggal_pesan"/>
</tree>
</field>
</record>
<!-- stylerent.ordermobil form view -->
<record id="stylerent_ordermobil_view_form" model="ir.ui.view">
<field name="name">stylerent.ordermobil.view.form</field>
<field name="model">stylerent.ordermobil</field>
<field name="arch" type="xml">
<form string="">
<sheet>
<group>
<field name="name" />
</group>
<group>
<field name="pemesan_id" />
</group>
<group>
<field name="tanggal_pesan" />
</group>
</sheet>
</form>
</field>
</record>

<!-- stylerent.ordermobil action window -->
<record id="stylerent_ordermobil_action" model="ir.actions.act_window">
<field name="name">Orderan Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">stylerent.ordermobil</field>
<field name="view_mode">tree,form</field>
</record>
<!-- This Menu Item must have a parent and an action -->
<menuitem
id="stylerent_ordermobil_menu_act"
name="Order Mobil"
parent="stylerent_menu_root"
action="stylerent_ordermobil_action"
sequence="5"/>
</data>
</odoo>
karena ingin ditaruh di sebelah style rent car maka parentnya harus id dari stylerent_menu_root danjuga sequence nya kasih lebih kecil dari Operasional
dan tambahkan data pada manifest menjadi
'data': [
'security/ir.model.access.csv',
'views/menu.xml',
'views/stylerent_views.xml',
'views/stylerent_pemeliharaan.xml',
'views/stylerent_pegawai.xml',
'views/stylerent_customer.xml',
'views/stylerent_order.xml'
],

setelah itu karena membuat fungsi models baru dan membuat xml baru yang terhubung jadi harus taruh acces di security dengan source code :
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
access_stylerent_service,access.stylerent.service,model_stylerent_service,,1,1,1,1
access_stylerent_ordermobil,access.stylerent.ordermobil,model_stylerent_ordermobil,,1,1,1,1

setelah itu restart server odoo dan upgrade maka akan tampil :





RELASI Many2one Pegawai dengan pemeliharaan (dan filter pegawai)

RELASI Many2one Pegawai dengan pemeliharaan (dan filter pegawai)

 Nama model Lawanya (Many to One)

buka pemeliharaan.py karena yang akan ditambahkan adalah pemeliharaan dengan kata lain mobil ini diservice oleh siapa penanggung jawabnya
lalu tambahkan dibawah  models_id = fields.Many2one dengan source code
pegawainya_id = fields.Many2one(
comodel_name='res.partner',
string='Penanggung Jawab'
)
comodel_name='res.partner' diambil dari models yang ada di partner.py inheritnya

lalu setelah itu tambahkan pada notebook bawah untuk bisa diketahui penanggungjawabnya dengan cara
buka stylerent_pemeliharaan.xml dan pada <!-- model.name form view -->
didalam notebook ditambahkan penanggunjawab yang memanggil id dari pegawainya_id menjadi code
              <notebook colspan='4'>
<page string="Deskripsi Service">
<field name="deskripsiservice"/>
</page>
<page string="Deskripsi Mobil">
<field name="models_id"/>
</page>
<page string="Penanggung Jawab">
<field name="pegawainya_id"/>
</page>
</notebook>
lalu restart server odoo dan upgrade, maka akan muncul sebagai berikut:
klik pada Operasional -> pemeliharaan (karena tadi menambahkan functionya pada pemeliharaan.xml)
lalu pilih jenis service yg dilakukan
lalu klik pada edit dan klik penanggung jawab dan isi dengan pegawai yang dimaksud seperti :

Filter penanggung jawab hanya pegawai nya saja

buka pemeliharaan.py pada pegawai_id tambahkan domain dibawah dengan ketentuan is_pegawainya(diambil dari res.partner atau models partner.py yg inherit ke res.partner) lalu dengan value True
dan berikut source code nya:
pegawainya_id = fields.Many2one(
comodel_name='res.partner',
string='Penanggung Jawab',
domain=[('is_pegawainya','=','True')]
)
setelah itu lakukan restart server odoo dan lakukan upgrade.
lalu kemenu pemeliharaan dan klik pada salah satu jenis service nya dan klik pada penanggung jawab lalu klik edit maka yang hanya keluar adalah pegawainya saja

saya menambahkan yuda juga dengan create pada data contact pilih customer dan klik create












Filter Data Contact (Odoo-14) Inherit

Filter Data Contact (Odoo-14) Inherit

 Membedakan antara customer dan pegawai tampilan view standard

Tambahkan stylerent_customer.xml dengan copy paste dari stylerent_pegawai.xml sehingga susunanya seperti ini

Buka stylerent_pegawai.xml
dan tambahkan model inherit search view dan sehingga code menjadi
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- partner inherit form view -->
<record id="inherit_res_partner_view_id" model="ir.ui.view">
<field name="name">res.partner.inherit.view.form</field> <!-- Karena tidak membuat models baru hanya inherit-->
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<!-- Add your xpath here -->
<field name="vat" position="after">
<field name="is_pegawainya"/>
<field name="is_menikah"/>
<field name="is_customernya"/>
</field>
</field>
</record>

<!-- model.name inherit search view -->
<record id="res_partner_inherit_search" model="ir.ui.view">
<field name="name">res.partner.inherit.view.search</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_res_partner_filter"/>
<field name="arch" type="xml">
<!-- Add your xpath here -->
<field name="parent_id" position="after">
<filter string="Customer" name="customernya" domain="[('is_customernya', '=', True)]"/>
<filter string="Pegawai" name="pegawainya" domain="[('is_pegawainya', '=', True)]"/>
</field>
</field>
</record>

<!-- res.partner action window -->
<record id="res_partner_pegawai_action" model="ir.actions.act_window">
<field name="name">Data Pegawai Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">tree,form</field>
</record>

<!-- This Menu Item must have a parent and an action -->
<menuitem id="contact_pegawai_res_partner_menu_act"
name="Pegawai"
parent="stylerent_contact_menu_categ"
action="res_partner_pegawai_action"
sequence="11"/>
</data>
</odoo>
Dan tambahkan perlakuan atau filter pada tree form menjadi
<!-- res.partner action window -->
<record id="res_partner_pegawai_action" model="ir.actions.act_window">
<field name="name">Data Pegawai Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">tree,form</field>
<field name="context">
{
'search_default_pegawainya':1,
'default_is_pegawainya':True,
}
</field>
</record>
dan pada stylerent_customer.xml diubah menjadi source code seperti ini
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data>
<!-- partner inherit form view -->
<record id="inherit_res_partner_view_id" model="ir.ui.view">
<field name="name">res.partner.inherit.view.form</field> <!-- Karena tidak membuat models baru hanya inherit-->
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<!-- Add your xpath here -->
<field name="vat" position="after">
<field name="is_pegawainya"/>
<field name="is_menikah"/>
<field name="is_customernya"/>
</field>
</field>
</record>

<!-- res.partner action window -->
<record id="res_partner_action" model="ir.actions.act_window">
<field name="name">Data Customer Style Rent Car</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">tree,form</field>
<field name="context">
{
'search_default_customernya':1,
'default_is_customernya':True,
}
</field>
</record>

<!-- This Menu Item must have a parent and an action -->
<menuitem id="contact_res_partner_menu_act"
name="Customer"
parent="stylerent_contact_menu_categ"
action="res_partner_action"
sequence="10"/>
</data>
</odoo>
tambahkan data di manifest karena menambah xml menjadi
'data': [
'security/ir.model.access.csv',
'views/menu.xml',
'views/stylerent_views.xml',
'views/stylerent_pemeliharaan.xml',
'views/stylerent_pegawai.xml',
'views/stylerent_customer.xml',
],
Lalu restart odoo dan upgade setelahitu akan terlihat seperti ini jika klik data contact -> pegawai
Dan jika klik customer menjadi
Jika tidak ada maka contact atau bagaimana cara membedakanya bisa kalian klik creat atau klik salah satu contact lalu klik edit maka akan muncul seperti ini dan isikan seperti berikut :

Nanti dia akan muncul sesuai pilihanya jika centang customer maka ia akan menjadi data customer style rentcar sebaliknya.


Mengedit tampilan tree untuk Inherit

Menghilangkan tampilan di customer (misalnya) tidak ditampilkan tax_id dan country

Buka stylerent_customer.xml lalu tambahkan odoo inherit tree view hingga menjadi source code seperti ini
<odoo>
<data>
<!-- res.partner inherit tree view -->
<record id="res_partner_customer_view" model="ir.ui.view">
<field name="name">res.partner.inherit.view.tree</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree"/>
<field name="arch" type="xml">
<!-- Add your fields here -->
<field name="vat" position="replace"/>
<field name="country_id" position="replace"/>
</field>
</record>


<!-- partner inherit form view -->
untuk inherit_id nya dicari dengan cara 
pada menu data contact -> customer -> klik developer(kumbang) dan edit view list lalu copy external id nya


Lalu untuk fields yg akan dihilangin name nya menggunakan id dari (arahkan cursor pada columnya nanti akan keluar)

Lakukan upgrade dan ke style rent car-> data contact -> customer maka id yg tadi seperti tax dan country tidak ditampilkan lagi