Membuat Sistem Bagi Hasil Penjualan Product (Bag.1)

Assalamu'alaikum Warohmatullah Wabarokatuh.


Pada kesempatan kali ini, saya ingin berbagi pengalaman tentang bagaimana caranya membuat sistem bagi hasil penjualan produk/jasa.

Karena akan ada banyak step yang harus dilakukan, saya akan membagi artikel ini menjadi beberapa bagian, dan bagian pertama adalah custom tampilan pada product.category dan product.template.

Baiklah langsung saja kita mulai bagian dasarnya terlebih dahulu

1. Pastikan anda sudah membuat modul baru untuk tutorial ini, kemudian masuk buka file models.py pada text editor.

2. Masukkan kode di bawah ini terlebih dahulu

from odoo import models, fields, api, _
class KomponenPembagianTarif(models.Model): _name = 'pembagian.tarif' name = fields.Char(string='Komponen Pembagian')

3. Kemudian kita buat object template.komponen.tarif dan tempelkan object tersebut pada field One2many di object product.category

class TemplateKomponenTarif(models.Model):
	_name = 'template.komponen.tarif'

	category_id = fields.Many2one('product.category')
	pembagian_id = fields.Many2one('pembagian.tarif',string='Pembagian',required=True,)
	tipe = fields.Selection([
		('langsung','Langsung'),
		('tidaklangsung','Tidak Langsung')
		],default='tidaklangsung', string='Tipe Pembagian')

class ProductCategoryCustom(models.Model): _inherit = 'product.category' komponen_tarif_line = fields.One2many('template.komponen.tarif', 'category_id', string='Komponen Tarif')

4. Setelah selesai membuat template komponen, mari buat juga komponen tarif pada object product.template. Konsepnya adalah komponen tarif yang ada pada object product.template harus sama dengan kategori produk tersebut. \

class KomponenTarif(models.Model):
_name = 'komponen.tarif'

product_id = fields.Many2one('product.template', string='Produk')
pembagian_id = fields.Many2one('pembagian.tarif', string='Pembagian', required=True, readonly=True, )
nilai = fields.Float(string='Nilai')
persentase = fields.Float(string='Persentase')
tipe = fields.Selection([
('langsung','Langsung'),
('tidaklangsung','Tidak Langsung')
],default='tidaklangsung', string='Tipe Pembagian',  readonly=True, )

class ProductKomponenTarif(models.Model):
_inherit = 'product.template'

kelas_id = fields.Many2one('master.kelas', string='Kelas')
komponen_tarif_line = fields.One2many('komponen.tarif', 'product_id', string='Komponen Tarif')
5. Baiklah sekarang mari kita buat access role untuk object-object baru yang kita buat, buka file security > ir.model.access.csv dan masukkan kode di bawah ini
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
akses_template_komponen_tarif,access_template_komponen_tarif,model_template_komponen_tarif,,1,1,1,1
akses_komponen_tarif,access_komponen_tarif,model_komponen_tarif,,1,1,1,1
akses_pembagian_tarif,access_pembagian_tarif,model_pembagian_tarif,,1,1,1,1
akses_master_kelas,access_master_kelas,model_master_kelas,,1,1,1,1
  pada kode di atas, saya memberikan full access untuk semua user yang ada, anda dapat mengubahnya sesuai kebutuhan.

6. Tahap terakhir pada tutorial kali ini adalah membuat tampilan xml untuk kode di atas, silakan buka file views > views.xml dan masukkan kode di bawah ini.
<odoo>
    <data>
	<record id="product_template_add_komponen_tarif" model="ir.ui.view">
          <field name="name">product.template.add.komponen.tarif</field>
          <field name="model">product.template</field>
          <field name="inherit_id" ref="product.product_template_form_view"/>
          <field name="arch" type="xml">
            <xpath expr='//notebook' position='inside'>
    	        <page string="Komponen Tarif">
    	            <field name='komponen_tarif_line'>
    	                <tree editable='bottom' create='false' delete='false'>
    		            <field name='pembagian_id'/>
    			    <field name='tipe'/>
    			    <field name='nilai'/>
    			    <field name='persentase' widget='percentage'/>
    		        </tree>	
    	            </field>
    		</page>
            </xpath>
          </field>
        </record>
<record id="product_category_add_template_komponen_tarif" model="ir.ui.view"> <field name="name">product.category.add.template.komponen.tarif</field> <field name="model">product.category</field> <field name="inherit_id" ref="product.product_category_form_view"/> <field name="arch" type="xml"> <xpath expr='/form/sheet' position='
            <notebook>         <page string="Komponen Tarif">     <field name='komponen_tarif_line'>         <tree editable='bottom'>             <field name='pembagian_id'/>     <field name='tipe'/>  </tree>         </field>     </page>         </notebook>     </xpath>      </field>      </record>     </data> </odoo>
Alhamdulillah artikel bagian pertama sudah selesai, untuk bagian kedua saya akan berbagi tentang bagaimana menyesuaikan komponen tarif yang ada pada produk agar sama dengan produk kategorinya. 

Terima kasih telah berkunjung ke artikel saya yang sederhana ini, mohon maaf jika banyak kesalahan penulisan maupun bahasa kodingan saya cukup berantakan :-)

Wassalamu'alaikum Warohmatullah Wabarokatuh





Pemisahan Backend dan Frontend Odoo