Daftar Isi
- Pendahuluan
- Gambaran Umum Solusi Barcode Stok Odoo
- Desain Modul Barcode Stok
- Persiapan Folder Modul di Server Odoo
- Membuat Berkas Manifest Modul
- Membuat Model Wizard Cetak Barcode
- Membuat Menu Aksi dan Tampilan Wizard
- Membuat Report QWeb Label Barcode
- Menambahkan Fitur Scan Barcode Sederhana
- Instalasi Modul Barcode Stok di Server Odoo
- Pengujian Cetak dan Scan Barcode
- Pertimbangan Produksi dan Praktik Baik
- Kesimpulan
- Sumber dan Referensi
Pendahuluan
Pengelolaan stok yang rapi dan tertelusur memerlukan identifikasi produk yang konsisten. Salah satu cara yang umum digunakan adalah pemberian label barcode pada setiap produk atau kelompok produk. Odoo sebagai sistem perencanaan sumber daya perusahaan memiliki dukungan barcode pada tingkat produk, namun sering kali diperlukan modul tambahan untuk mencetak label dan mengatur proses pemindaian sesuai kebutuhan organisasi.
Artikel ini membahas contoh modul kustom untuk Odoo Community yang berfungsi sebagai solusi sederhana barcode stok. Modul ini dirancang untuk:
- Mencetak label barcode produk dalam bentuk satuan.
- Mencetak label dalam jumlah banyak berdasarkan pilihan produk atau filter tertentu.
- Mendukung pemindaian barcode menggunakan pemindai yang umum dipakai di gudang atau titik penjualan.
Solusi yang dijelaskan bersifat umum dan tidak dimaksudkan untuk menyalin modul berbayar apa pun. Contoh kode dapat dimodifikasi dan dikembangkan sesuai kebutuhan, serta harus selalu diuji di lingkungan pengujian sebelum diimplementasikan di lingkungan produksi.
Gambaran Umum Solusi Barcode Stok Odoo
Secara garis besar, modul barcode stok yang akan dibuat memiliki kemampuan sebagai berikut.
- Memanfaatkan field barcode yang sudah tersedia pada model produk Odoo.
- Menambahkan wizard untuk memilih produk dan jumlah label yang akan dicetak.
- Menyediakan report dalam bentuk QWeb yang menampilkan barcode dan informasi produk pada ukuran label tertentu.
- Menyediakan tampilan sederhana untuk proses pemindaian barcode sehingga petugas gudang dapat memverifikasi produk dengan cepat.
Pemindaian barcode di sisi teknis umumnya dilakukan oleh perangkat pemindai yang bertindak seperti papan ketik, sehingga hasil pemindaian akan dikirim sebagai rangkaian karakter ke kolom input yang aktif di layar. Modul menyiapkan kolom input dan logika pencarian produk berdasarkan nilai barcode tersebut.
Desain Modul Barcode Stok
Nama modul yang akan digunakan dalam contoh ini adalah stock_barcode_label. Modul ini bergantung pada modul stok bawaan Odoo dan memanfaatkan model serta field yang sudah ada. Komponen utama modul meliputi:
- Berkas manifest untuk mendefinisikan metadata modul dan ketergantungan.
- Model wizard untuk menangani input pengguna terkait pencetakan barcode.
- Tampilan formulir wizard dan menu untuk mengaksesnya dari modul inventori.
- Report QWeb yang mengatur bagaimana label barcode dicetak.
- Tampilan pemindaian barcode yang berfungsi mencari produk berdasarkan barcode.
Struktur direktori modul secara garis besar sebagai berikut.
stock_barcode_label/
__init__.py
__manifest__.py
models/
__init__.py
barcode_label_wizard.py
wizard/
__init__.py
barcode_print_wizard_view.xml
views/
product_views.xml
barcode_scan_view.xml
report/
barcode_label_report.xmlStruktur tersebut dapat disesuaikan, namun contoh ini berusaha mempertahankan pembagian yang jelas antara model Python, tampilan, dan report.
Persiapan Folder Modul di Server Odoo
Langkah berikut mengasumsikan bahwa Odoo sudah terpasang di server Ubuntu dan berjalan dengan user khusus, misalnya user odoo, sebagaimana dijelaskan pada artikel instalasi sebelumnya. Modul kustom akan ditempatkan pada direktori addons kustom, misalnya /opt/odoo/custom-addons.
Catatan: pastikan perintah berikut dijalankan menggunakan user dengan hak sudo pada server.
sudo mkdir -p /opt/odoo/custom-addons
sudo chown -R odoo:odoo /opt/odoo/custom-addonsSelanjutnya, pastikan berkas konfigurasi Odoo mencantumkan direktori addons kustom tersebut. Jika konfigurasi berada di /etc/odoo.conf, pastikan parameter addons_path memiliki entri serupa.
addons_path = /opt/odoo/src/odoo/addons,/opt/odoo/custom-addonsSetelah itu, buat folder modul barcode stok.
sudo -u odoo mkdir -p /opt/odoo/custom-addons/stock_barcode_label
sudo -u odoo mkdir -p /opt/odoo/custom-addons/stock_barcode_label/models
sudo -u odoo mkdir -p /opt/odoo/custom-addons/stock_barcode_label/views
sudo -u odoo mkdir -p /opt/odoo/custom-addons/stock_barcode_label/report
sudo -u odoo mkdir -p /opt/odoo/custom-addons/stock_barcode_label/wizardMembuat Berkas Manifest Modul
Berkas manifest digunakan untuk mendefinisikan nama modul, versi, ketergantungan, dan berkas data yang akan dimuat. Buat berkas __manifest__.py pada direktori modul.
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/__manifest__.pyIsi berkas tersebut dengan contoh berikut.
# file: stock_barcode_label/__manifest__.py
{
"name": "Stock Barcode Label",
"summary": "Modul kustom untuk cetak label barcode stok dan pemindaian sederhana.",
"description": "Menambahkan wizard untuk mencetak label barcode produk secara massal atau satuan, serta tampilan sederhana untuk pemindaian barcode.",
"author": "Your Organization",
"website": "https://YOUR_ORGANIZATION_DOMAIN",
"version": "1.0.0",
"license": "LGPL-3",
"depends": [
"stock",
"product"
],
"data": [
"views/product_views.xml",
"wizard/barcode_print_wizard_view.xml",
"views/barcode_scan_view.xml",
"report/barcode_label_report.xml"
],
"application": False,
}Pastikan nama organisasi dan alamat situs diganti sesuai dengan lingkungan masing-masing. Lisensi dapat disesuaikan dengan kebijakan internal, selama tetap menghormati ketentuan lisensi Odoo.
Membuat Model Wizard Cetak Barcode
Wizard digunakan agar pengguna dapat memilih produk dan menentukan jumlah label yang akan dicetak. Model wizard diletakkan pada direktori models dengan nama berkas barcode_label_wizard.py. Selain itu, diperlukan berkas __init__.py untuk memuat model tersebut.
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/models/__init__.py
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/models/barcode_label_wizard.pyIsi berkas __init__.py sebagai berikut.
# file: stock_barcode_label/models/__init__.py
from . import barcode_label_wizardSelanjutnya, isi berkas model wizard. Contoh berikut menggunakan model transient yang akan digunakan untuk menghasilkan report label.
# file: stock_barcode_label/models/barcode_label_wizard.py
from odoo import models, fields, api
class BarcodeLabelWizard(models.TransientModel):
_name = "barcode.label.wizard"
_description = "Wizard Cetak Label Barcode"
product_ids = fields.Many2many(
comodel_name="product.product",
string="Produk",
help="Pilih produk yang akan dicetak label barcodenya."
)
label_per_product = fields.Integer(
string="Jumlah Label per Produk",
default=1,
help="Jumlah label yang dicetak untuk setiap produk."
)
@api.constrains("label_per_product")
def _check_label_per_product(self):
for wizard in self:
if wizard.label_per_product < 1:
wizard.label_per_product = 1
def action_print_labels(self):
self.ensure_one()
products = self.product_ids
if not products:
products = self.env["product.product"].search([])
return self.env.ref(
"stock_barcode_label.action_report_barcode_label"
).report_action(self, data={
"product_ids": products.ids,
"label_per_product": self.label_per_product,
})Model di atas menyediakan pilihan produk dan jumlah label. Apabila pengguna tidak memilih produk, modul dapat diperluas agar mengambil produk berdasarkan kriteria tertentu, namun pada contoh ini asumsi utamanya adalah produk dipilih secara eksplisit.
Membuat Menu Aksi dan Tampilan Wizard
Tampilan wizard dibuat dalam berkas XML di direktori wizard. Pertama, siapkan berkas inisialisasi.
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/wizard/__init__.py
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/wizard/barcode_print_wizard_view.xml__init__.py untuk direktori wizard dapat dibiarkan kosong, karena hanya berisi berkas tampilan.
# file: stock_barcode_label/wizard/__init__.py
# file ini sengaja dibiarkan kosongSelanjutnya, isi berkas barcode_print_wizard_view.xml dengan tampilan wizard dan action untuk membukanya.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_barcode_label_wizard_form" model="ir.ui.view">
<field name="name">barcode.label.wizard.form</field>
<field name="model">barcode.label.wizard</field>
<field name="arch" type="xml">
<form string="Cetak Label Barcode">
<group>
<field name="product_ids" widget="many2many_tags"/>
<field name="label_per_product"/>
</group>
<footer>
<button string="Cetak" type="object"
name="action_print_labels" class="btn-primary"/>
<button string="Batal" class="btn-secondary"
special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="action_barcode_label_wizard" model="ir.actions.act_window">
<field name="name">Cetak Label Barcode</field>
<field name="res_model">barcode.label.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem id="menu_stock_barcode_root"
name="Barcode Stok"
parent="stock.menu_stock_root"/>
<menuitem id="menu_stock_barcode_print"
name="Cetak Label Barcode"
parent="menu_stock_barcode_root"
action="action_barcode_label_wizard"/>
</odoo>Menu Barcode Stok akan muncul di bawah menu utama inventori. Dari menu tersebut, pengguna dapat membuka wizard untuk memilih produk dan mencetak label barcode.
Untuk menambahkan cepat akses dari tampilan produk, modul juga dapat menambahkan tombol tindakan pada formulir produk. Hal ini dilakukan dengan menambahkan berkas tampilan di direktori views, misalnya product_views.xml.
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/views/product_views.xmlIsi berkas tersebut sebagai berikut.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_product_form_barcode_button" model="ir.ui.view">
<field name="name">product.product.form.barcode.button</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<xpath expr="//header" position="inside">
<button name="%(action_barcode_label_wizard)d"
string="Cetak Label Barcode"
type="action"
class="btn-secondary"/>
</xpath>
</field>
</record>
</odoo>Dengan konfigurasi ini, tombol cetak label barcode akan muncul di bagian atas formulir produk, sehingga memudahkan petugas gudang mencetak label untuk produk tertentu.
Membuat Report QWeb Label Barcode
Report QWeb bertugas mengatur tampilan label barcode ketika dicetak atau diekspor ke PDF. Ukuran label dapat disesuaikan dengan kertas atau stiker yang digunakan di lapangan. Pada contoh sederhana, setiap label berisi nama produk, kode internal, dan barcode.
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/report/barcode_label_report.xmlIsi berkas tersebut dengan contoh berikut.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<report
id="action_report_barcode_label"
string="Label Barcode Produk"
model="barcode.label.wizard"
report_type="qweb-pdf"
file="stock_barcode_label.barcode_label_template"
name="stock_barcode_label.barcode_label_template"
/>
<template id="barcode_label_template">
<t t-call="web.basic_layout">
<t t-set="products"
t-value="env['product.product'].browse(docids)"/>
<div class="page">
<div t-foreach="o.env['product.product'].browse(o.env.context.get('product_ids', []))"
t-as="product">
<div style="border: 1px solid #000; padding: 4px; margin: 4px; width: 200px;">
<div>
<strong>
<t t-esc="product.name"/>
</strong>
</div>
<div>
Kode: <t t-esc="product.default_code or ''"/>
</div>
<div>
<span t-if="product.barcode">
<t t-esc="product.barcode"/>
</span>
</div>
<div t-if="product.barcode">
<img t-att-src="'/report/barcode/?type=EAN13&value=%s&width=300&height=50' % product.barcode"
style="margin-top: 4px;"/>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>Contoh di atas menggunakan layanan barcode bawaan Odoo untuk menampilkan gambar barcode pada report. Nilai type dapat disesuaikan dengan jenis barcode yang digunakan, selama nilai tersebut didukung oleh sistem. Pengaturan ukuran label, jarak, serta tata letak dapat dimodifikasi agar sesuai dengan stiker yang digunakan.
Untuk mencetak beberapa label per produk, konfigurasi report dapat dikembangkan agar mengulangi tampilan label berdasarkan nilai label_per_product yang diteruskan melalui data report. Hal ini memerlukan penyesuaian pada template dan logika pengiriman data, yang dapat dikembangkan lebih lanjut sesuai kebutuhan.
Menambahkan Fitur Scan Barcode Sederhana
Fitur pemindaian barcode yang sederhana dapat berupa layar khusus yang menampilkan kolom untuk memasukkan atau memindai barcode, kemudian menampilkan informasi produk yang cocok. Pemindai akan mengirimkan kode ke kolom input tersebut, sehingga sistem dapat melakukan pencarian.
Pertama, buat berkas tampilan barcode_scan_view.xml pada direktori views.
sudo -u odoo touch /opt/odoo/custom-addons/stock_barcode_label/views/barcode_scan_view.xmlIsi berkas tersebut dengan tampilan berikut.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_barcode_scan_form" model="ir.ui.view">
<field name="name">barcode.scan.form</field>
<field name="model">barcode.label.wizard</field>
<field name="arch" type="xml">
<form string="Scan Barcode Produk">
<group>
<field name="product_ids" readonly="1"/>
</group>
</form>
</field>
</record>
</odoo>Untuk skenario nyata, modul dapat diperluas dengan model khusus yang memiliki field karakter sebagai input barcode dan logika untuk mencari produk ketika nilai tersebut diisi. Namun, bahkan tanpa tampilan khusus, Odoo sudah mendukung pencarian produk dengan barcode pada sejumlah tampilan, sehingga pemindai dapat langsung digunakan pada form atau daftar produk.
Jika diperlukan, pengembang dapat menambahkan model baru, misalnya barcode.scan.session, dengan field kode barcode dan tombol untuk mencari produk. Pada contoh ini, pendekatan yang diambil tetap sederhana dan difokuskan pada fungsi pencetakan label.
Instalasi Modul Barcode Stok di Server Odoo
Setelah seluruh berkas modul dibuat, langkah berikutnya adalah memasang modul pada server Odoo yang sudah berjalan. Proses ini berlangsung dalam beberapa tahap, yaitu memastikan hak akses berkas, memuat ulang layanan Odoo, dan menginstal modul melalui antarmuka Odoo.
Langkah hak akses berkas
Pastikan seluruh berkas modul dimiliki oleh user Odoo dan memiliki izin yang memadai.
sudo chown -R odoo:odoo /opt/odoo/custom-addons/stock_barcode_labelMemuat ulang layanan Odoo
Agar Odoo mengenali modul baru, layanan perlu dimuat ulang. Perintah berikut dijalankan sebagai user yang memiliki hak sudo.
sudo systemctl restart odoo
sudo systemctl status odooPastikan status layanan menunjukkan bahwa Odoo berjalan normal. Jika terdapat kesalahan, tinjau log yang ditulis ke jurnal sistem atau berkas log Odoo.
Instalasi modul melalui antarmuka Odoo
Setelah layanan berjalan, masuk ke antarmuka web Odoo menggunakan browser. Langkah umum untuk memasang modul kustom sebagai berikut.
- Masuk ke Odoo sebagai pengguna dengan hak administrasi.
- Buka menu Aplikasi.
- Aktifkan mode pengembang jika diperlukan dan muat ulang daftar modul.
- Cari modul dengan nama Stock Barcode Label.
- Pilih modul tersebut dan tekan tombol untuk memasangnya.
Apabila konfigurasi addons path dan hak akses sudah benar, modul akan muncul dan dapat diinstal tanpa kendala. Setelah terpasang, menu Barcode Stok akan tersedia di modul inventori, dan tombol cetak label barcode akan muncul di formulir produk.
Pengujian Cetak dan Scan Barcode
Pengujian berperan penting untuk memastikan bahwa modul bekerja sesuai harapan dan aman digunakan di lingkungan operasional. Beberapa langkah pengujian yang dapat dilakukan antara lain sebagai berikut.
Pengujian cetak label satuan
- Buka modul produk.
- Pilih satu produk yang telah memiliki nilai barcode.
- Tekan tombol Cetak Label Barcode pada bagian atas formulir produk.
- Isi wizard dengan jumlah label yang diinginkan.
- Jalankan proses cetak dan pastikan report menampilkan kode produk, nama, dan barcode dengan benar.
Pengujian cetak label massal
- Buka menu Barcode Stok dan pilih menu Cetak Label Barcode.
- Pilih beberapa produk yang ingin dicetak labelnya.
- Tentukan jumlah label untuk setiap produk.
- Jalankan proses cetak dan periksa hasilnya.
Pengujian pemindaian barcode
- Pastikan setiap label barcode dicetak dengan kualitas yang dapat terbaca oleh pemindai.
- Gunakan pemindai barcode yang telah terhubung ke komputer atau perangkat terminal.
- Lakukan pemindaian pada kolom pencarian produk di Odoo.
- Pastikan produk yang bersesuaian muncul secara otomatis.
Pada tahap lanjut, modul dapat dikembangkan agar menyediakan layar khusus pemindaian dengan ringkasan stok, lokasi gudang, dan kemungkinan integrasi dengan proses mutasi stok. Pengujian menyeluruh diperlukan setiap kali modul dikembangkan lebih lanjut.
Pertimbangan Produksi dan Praktik Baik
Ketika modul barcode stok dipindahkan ke lingkungan produksi, terdapat beberapa praktik baik yang patut dipertimbangkan.
- Pemisahan lingkungan. Gunakan lingkungan pengujian atau pementasan untuk mencoba modul sebelum digunakan oleh pengguna akhir di lingkungan operasional.
- Pencadangan berkala. Lakukan pencadangan basis data dan berkas konfigurasi sehingga label dan data stok dapat dipulihkan jika terjadi insiden.
- Dokumentasi internal. Susun panduan penggunaan modul untuk petugas gudang, termasuk prosedur mencetak label, meletakkan label di rak atau produk, serta cara memindai barcode.
- <stron