Odoo’da OWL Kullanarak Yeni Bir View Oluşturmak
Odoo üzerinde yeni bir görünüm türü oluşturmak istediğimizde, modern Odoo web mimarisinin temelini oluşturan OWL framework yapısını kullanmamız gerekir.
Odoo, varsayılan olarak birçok hazır görünüm tipi sunar. Ancak bu görünümler Community ve Enterprise sürümleri arasında farklılık gösterebilir.
Odoo Community Sürümünde Bulunan Görünümler
Community sürümde varsayılan olarak aşağıdaki görünüm tipleri kullanılabilir:
List
Form
Kanban
Pivot
Graph
Activity
Calendar
Odoo Enterprise Sürümünde Ek Olarak Gelen Görünümler
Enterprise sürümde ise Community sürümdeki görünümlere ek olarak şu view tipleri de hazır olarak sunulur:
Gantt
Cohort
Map
Bazı projelerde bu standart görünümler ihtiyacı tam olarak karşılamayabilir. Özellikle özel dashboard ekranları, operasyonel takip panelleri veya farklı kullanıcı deneyimi gerektiren ekranlar için kendi özel görünüm tipimizi oluşturmamız gerekebilir.
Bu durumda yapılması gereken şey, OWL çatısını kullanarak özel bir view geliştirmek ve bu view tipini Odoo’nun view registry yapısına kaydetmektir.
Yeni Bir Odoo Modülü Oluşturmak
İlk adım olarak Odoo’nun scaffold komutu ile yeni bir modül oluşturabiliriz:
python3 odoo-bin scaffold my_custom_view path_of_the_addons_folder
Bu komut, my_custom_view adında yeni bir modül iskeleti oluşturur.
Yeni View Tipini Odoo’ya Tanıtmak
Odoo’da yeni bir view tipi kullanabilmek için öncelikle ir.ui.view modelini genişletmemiz gerekir.
Bunun için Python tarafında aşağıdaki gibi bir yapı oluşturabiliriz:
from odoo import fields, models
class View(models.Model):
_inherit = 'ir.ui.view'
type = fields.Selection(
selection_add=[('my_view', 'My View')]
)
def _get_view_info(self):
return {
'my_view': {
'icon': 'fa fa-coffee'
}
} | super()._get_view_info()
Modül Klasör Yapısı
OWL tarafındaki JavaScript, XML ve stil dosyalarını düzenli tutmak için aşağıdaki gibi bir klasör yapısı oluşturabiliriz:
my_custom_view/
├── models/
│ └── ir_ui_view.py
├── static/
│ └── src/
│ └── views/
│ └── my_view/
│ ├── my_view_controller.js
│ ├── my_view_renderer.js
│ ├── my_view_model.js
│ ├── my_view_arch_parser.js
│ └── my_view.xml
├── views/
│ └── my_view_templates.xml
├── __init__.py
└── __manifest__.py