Ringkasan Fungsi pada Package Odoo-await

Feb 27, 2025
6 min read
Widodo
Widodo
Author

Share This Article

Ringkasan Fungsi pada Package Odoo-await

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, seperti ODOO_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, seperti ODOO_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, seperti ODOO_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, seperti ODOO_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, seperti ODOO_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, misalnya res.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 dari body 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, misalnya res.partner.
    • recordId: ID dari record yang ingin dibaca.
    • fields: Array dari nama field yang akan dibaca, misalnya ['name', 'email'].
  • Sumber: recordId biasanya berasal dari params URL dan fields bisa berasal dari query.
  • 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, misalnya res.partner.
    • recordId: ID dari record yang ingin diperbarui.
    • params: Data baru yang ingin diperbarui pada record tersebut.
  • Sumber: recordId berasal dari params URL, dan params berasal dari body.
  • 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, misalnya res.partner.
    • recordId: ID dari record yang akan dihapus.
  • Sumber: recordId berasal dari params 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 dari query 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 seperti limit atau offset.
  • Sumber: domain, fields, dan opts berasal dari query.
  • 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, seperti required.
  • Sumber: attributes bisa berasal dari query.
  • 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, seperti action_post untuk memposting invoice.
    • recordId: ID record yang akan dikenakan aksi.
  • Sumber: recordId berasal dari params 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!