Bismillah.., Segala puji milik Allah. Yang mana kita patut memuji-Nya, yang mana kita harapkan pertolongan-Nya dan kita harapkan ampunan-Nya. Serta sepatutnya kita berlindung diri kepada-Nya dari segala keburukan diri dan kejelekan perbuatan yang ada pada diri kita. Siapa yang diberi hidayah oleh Allah maka tidak ada yang mampu menyesatkannya dan siapa yang disesatkan oleh Allah maka tidak akan ada yang dapat memberikan hidayah. Sebelumnya Saya juga bersaksi bahwa tidak ada tuhan (yang berhak disembah) selain Allah semata yang tidak ada sekutu bagi-Nya dan saya bersaksi bahwa Nabi Muhammad Shalallahu'alaihi wa sallam adalah hamba dan utusan-Nya.
Selanjutnya saya ucapkan Ahlan wa sahlan wa Baarokallohu fiikum jamii'an bagi para pembaca blog ini dan tidak lupa juga saya berdo'a semoga seluruh kaum muslimin yang sedang sakit diberikan kesehatan dan yang sehat selalu dijaga oleh Allah azza wa jalla dan selalu diberikan hidayah islam dan diatas sunnah Nabi kita (Muhammad). Aamiin..!. Untuk kali ini saya masih akan membahas dari bahasan explore yang saya dapatkan sebelumnya mengenai ODOO, tetapi untuk pembahasan kali ini merupakan pembahasan dari kebalikannya. Jika sebelumnya saya membahas cara pengambilan data JSON, maka kali ini saya akan membuat endpoint dan data JSON agar bisa cosume secara public maupun private, Hal ini tergantung dari kebuuhan anda masing-masing.
Sebelumnya ada, anda harus menyiapkan dan memastikan aplikasi Postman sudah anda install sebagai uji coba kita, untuk mengetahui dan memastikan kita berhasil membuat endpoint dan data JSON. Dan selanjutnya saya akan mencoba membuat Data JSON dari object product.product untuk di consume secara public. Adapun caranya, anda bisa mengikuti langkah-langkah berikut ini:
1. Untuk langkah pertama pada Folder Controllers pada file python (.py) tambahkan beberapa library tambahan
from odoo import models, fields, api
from odoo import http, _from odoo.http import request, routeimportrequests
from math import sin, cos, sqrt, atan2, radians
2. Buat Sebuah @route pada Class Controller untuk membuat endpointnya
class GetProductProduct(http.Controller): @route(route=['/get_product_product'], methods=['POST'], type='json', auth='public',
csrf=False) def get_product_product(self, **kwargs): result = {} params = request.httprequest.args body = request.jsonrequest
page = int(params.get('page', 1)) limit = int(params.get('limit', 100)) offset = (page - 1) * limit if limit else 0 order = 'id asc' domain = []
product_id = body.get('id', False) if product_id:
domain += [('id', 'in', product_id)] product = count = False product, count = request.env['product.product'].sudo().get_product_product( domain=domain, limit=limit, offset=offset, order=order) result = {} meta = { 'total_item': count, 'total_page': math.ceil(count / limit) if limit else 1 } result['result'] = product result['meta'] = meta return result
csrf=False)
domain += [('id', 'in', product_id)]
Ket:
- Pada @route:
route=['/get_product_product'], ini digunakan untuk endpoint yang nantinya kita panggil melalui postman untuk ujicoba.
methods=['POST'], ini bisa diganti dengan GET/POST sesuai dengan kebutuhannya. Saya disini menggunakan POST karena nantinya saya bikin params untuk filter data yg didapat.
type='json', ini merupakan tipe data hasil respon yang nantinya akan ditampilkan.
auth='public', ini bisa diganti dengan user/public. public digunakan untuk jika data ingin di consume secara public, dan user digunakan jika data ingin di consume secara private.
- product_id = body.get('id', False), digunakan untuk pembuatan params yang nantinya sebagai variabel dalam memfilter data yang
didapatkan
3. Kemudian buatlah sebuah Method get_product_product() Pada Class Product yang meng-inherit ke object 'product.product'
'purchse_ok',
'type',
'categ_id',
'lst_price',
'standard_price',
'uom_id',
'uom_po_id',
Ket:
- Variabel read_list=['.......'], merupakan fields yang ada pada obejct 'product.product' yang nantinya kita tampilkan. dan nantinya kita panggil
dengan ORM odoo dengan method read().
Untuk Selanjut kita loop data dengan memberika kondisi jika ada fields Many2one, maka kita akan menampilkan nilai dari id dan name. Dan silahkan uji coba dengan menggunakan postman sebelumnya kita install. Dan maka hasilnya:
Dan ini hasil jika kita memfilter dengan memasukkan id = [1,2]:
Jazakakumullahu khoiron katsiron..