Berikut adalah pembaruan yang lebih lengkap tentang penggunaan odoo-await
dalam NestJS. Saya juga telah menambahkan keterangan mengenai sumber data (apakah berasal dari body
, params
, atau query
) dalam fungsi yang disediakan.
Penggunaan odoo-await
di NestJS
1. baseUrl
- Keterangan: URL dasar dari server Odoo yang digunakan untuk koneksi.
- Contoh:
"https://yourdomain.odoo.com"
- Catatan: Pastikan untuk menyesuaikan dengan domain Odoo yang kamu miliki.
- Sumber: Biasanya berasal dari file
.env
sebagai variabel lingkungan, sepertiODOO_BASE_URL
.
2. port
- Keterangan: Nomor port untuk koneksi ke server Odoo. Jika tidak diberikan, Odoo akan memilih port default berdasarkan protokol.
- Contoh:
8069
(port default Odoo). - Catatan: Biasanya berasal dari file
.env
sebagai variabel lingkungan, sepertiODOO_PORT
.
3. db
- Keterangan: Nama database Odoo yang digunakan untuk koneksi.
- Contoh:
"odoo_db"
- Catatan: Nama database ini harus valid dan tersedia di server Odoo.
- Sumber: Biasanya berasal dari file
.env
sebagai variabel lingkungan, sepertiODOO_DB
.
4. username
- Keterangan: Nama pengguna untuk login ke Odoo.
- Contoh:
"admin"
- Catatan: Nama pengguna ini harus memiliki hak akses yang sesuai di database Odoo.
- Sumber: Biasanya berasal dari file
.env
sebagai variabel lingkungan, sepertiODOO_USERNAME
.
5. password
- Keterangan: Kata sandi untuk login menggunakan
username
yang diberikan. - Contoh:
"admin"
- Catatan: Sesuaikan dengan kata sandi pengguna Odoo yang digunakan.
- Sumber: Biasanya berasal dari file
.env
sebagai variabel lingkungan, sepertiODOO_PASSWORD
.
Metode dan Fungsi Utama di odoo-await
1. odoo.connect()
- Keterangan: Koneksi awal ke server Odoo menggunakan kredensial yang sudah disediakan.
- Contoh Penggunaan di NestJS:
async connectOdoo() { try { await this.odooProvider.connect(); console.log('Connected to Odoo'); } catch (error) { console.error('Error connecting to Odoo:', error); } }
2. odoo.create(model, params, externalId, moduleName)
- Keterangan: Membuat record baru di model yang ditentukan.
- Param:
model
: Nama model Odoo, misalnyares.partner
.params
: Data yang akan dibuat di model tersebut.externalId
: ID eksternal untuk referensi (opsional).moduleName
: Nama modul yang digunakan (opsional).
- Sumber:
params
biasanya berasal daribody
request API. - Contoh Penggunaan di NestJS:
@Post('create-partner') async createPartner(@Body() body: { name: string, email: string }) { const partner = await this.odooProvider.create('res.partner', { name: body.name, email: body.email, }); console.log('Created Partner:', partner); }
3. odoo.read(model, recordId, fields)
- Keterangan: Membaca data dari record yang ada berdasarkan ID.
- Param:
model
: Nama model yang akan dibaca, misalnyares.partner
.recordId
: ID dari record yang ingin dibaca.fields
: Array dari nama field yang akan dibaca, misalnya['name', 'email']
.
- Sumber:
recordId
biasanya berasal dariparams
URL danfields
bisa berasal dariquery
. - Contoh Penggunaan di NestJS:
@Get('partner/:id') async getPartnerInfo(@Param('id') partnerId: number, @Query('fields') fields: string[]) { const partner = await this.odooProvider.read('res.partner', partnerId, fields); console.log('Partner Info:', partner); }
4. odoo.update(model, recordId, params)
- Keterangan: Memperbarui record yang sudah ada berdasarkan ID.
- Param:
model
: Nama model yang akan diperbarui, misalnyares.partner
.recordId
: ID dari record yang ingin diperbarui.params
: Data baru yang ingin diperbarui pada record tersebut.
- Sumber:
recordId
berasal dariparams
URL, danparams
berasal daribody
. - Contoh Penggunaan di NestJS:
@Put('partner/:id') async updatePartner(@Param('id') partnerId: number, @Body() body: { street: string }) { const updated = await this.odooProvider.update('res.partner', partnerId, { street: body.street, }); console.log('Updated Partner:', updated); }
5. odoo.delete(model, recordId)
- Keterangan: Menghapus record berdasarkan ID.
- Param:
model
: Nama model yang akan dihapus, misalnyares.partner
.recordId
: ID dari record yang akan dihapus.
- Sumber:
recordId
berasal dariparams
URL. - Contoh Penggunaan di NestJS:
@Delete('partner/:id') async deletePartner(@Param('id') partnerId: number) { const deleted = await this.odooProvider.delete('res.partner', partnerId); console.log('Deleted Partner:', deleted); }
6. odoo.search(model, domain)
- Keterangan: Mencari record berdasarkan kriteria tertentu (domain).
- Param:
model
: Nama model yang akan dicari.domain
: Kondisi pencarian dalam format array, misalnya[['country_id', '=', 'US']]
.
- Sumber:
domain
biasanya berasal dariquery
untuk pencarian dinamis. - Contoh Penggunaan di NestJS:
@Get('search-partners') async searchPartners(@Query('country') country: string) { const partnerIds = await this.odooProvider.search('res.partner', [ ['country_id', '=', country], ]); console.log('Partner IDs in Country:', partnerIds); }
7. odoo.searchRead(model, domain, fields, opts)
- Keterangan: Mencari dan membaca data berdasarkan domain dan field tertentu.
- Param:
model
: Nama model yang akan dicari.domain
: Kondisi pencarian dalam format array.fields
: Array nama field yang ingin dibaca.opts
: Opsi tambahan sepertilimit
atauoffset
.
- Sumber:
domain
,fields
, danopts
berasal dariquery
. - Contoh Penggunaan di NestJS:
@Get('search-read-partners') async searchReadPartners(@Query() query: { country: string; limit: number }) { const partners = await this.odooProvider.searchRead( 'res.partner', [['country_id', '=', query.country]], ['name', 'city'], { limit: query.limit } ); console.log('Search Read Partners:', partners); }
8. odoo.getFields(model, attributes)
- Keterangan: Mengambil daftar field untuk model tertentu dengan atribut tertentu.
- Param:
model
: Nama model yang akan diambil field-nya.attributes
: Atribut field yang ingin diambil, sepertirequired
.
- Sumber:
attributes
bisa berasal dariquery
. - Contoh Penggunaan di NestJS:
@Get('partner-fields') async getPartnerFields(@Query('attributes') attributes: string[]) { const fields = await this.odooProvider.getFields('res.partner', attributes); console.log('Partner Fields:', fields); }
9. odoo.action(model, action, recordId)
- Keterangan: Menjalankan aksi pada record tertentu.
- Param:
model
: Nama model tempat aksi akan dijalankan.action
: Aksi yang akan dijalankan, sepertiaction_post
untuk memposting invoice.recordId
: ID record yang akan dikenakan aksi.
- Sumber:
recordId
berasal dariparams
URL. - Contoh Penggunaan di NestJS:
@Post('post-invoice/:id') async postInvoice(@Param('id') invoiceId: number) { const actionResult = await this.odooProvider.action('account.move', 'action_post', invoiceId); console.log('Invoice Action Result:', actionResult); }
Menggunakan odoo-await
di NestJS Provider
Berikut adalah Provider Odoo yang digunakan untuk menghubungkan dan melakukan operasi dengan server Odoo di NestJS:
import { Injectable } from '@nestjs/common';
import * as odoo from 'odoo-await';
@Injectable()
export class OdooProvider {
private readonly baseUrl = process.env.ODOO_BASE_URL;
private readonly port = parseInt(process.env.ODOO_PORT, 10) || 8069;
private readonly db = process.env.ODOO_DB;
private readonly username = process.env.ODOO_USERNAME;
private readonly password = process.env.ODOO_PASSWORD;
async connect() {
await odoo.connect({
baseUrl: this.baseUrl,
port: this.port,
db: this.db,
username: this.username,
password: this.password,
});
console.log('Connected to Odoo');
}
async create(model: string, params: object, externalId?: string, moduleName?: string) {
return await odoo.create(model, params, externalId, moduleName);
}
async read(model: string, recordId: number, fields: string[]) {
return await odoo.read(model, recordId, fields);
}
async update(model: string, recordId: number, params: object) {
return await odoo.update(model, recordId, params);
}
async delete(model: string, recordId: number) {
return await odoo.delete(model, recordId);
}
async search(model: string, domain: any) {
return await odoo.search(model, domain);
}
async searchRead(model: string, domain: any, fields: string[], opts: any) {
return await odoo.searchRead(model, domain, fields, opts);
}
async getFields(model: string, attributes: string[]) {
return await odoo.getFields(model, attributes);
}
async action(model: string, action: string, recordId: number) {
return await odoo.action(model, action, recordId);
}
}
Dengan implementasi ini, kita bisa melakukan berbagai operasi di Odoo melalui provider yang terintegrasi di NestJS.
Semoga penjelasan ini lebih jelas dan membantu dalam implementasi Odoo dengan NestJS!