Bug openbravo: complete document tetap bisa dilakukan meski periode sudah closed/never opened.

ada bug pada openbravo yang cukup konyol, yaitu complete document tetap bisa dilakukan meski periode akuntansi sudah closed atau never opened. simak blog post openbravo tutorial berikut ini untuk mencari tahu apa penyebabnya dan bagaimana penyelesaiannya.

penyebab dari bug openbravo ini ada 2. pertama, secara tidak langsung bug ini dikarenakan penggunaan pl/sql atau stored procedure secara masif. hal ini menyebabkan kita terbatasi dengan gaya pemrograman yang prosedural, bukan OOP. kedua, secara langsung bug ini dikarenakan adanya kesalahan logika dalam validasi buka/tutup periode akuntansi. kesalahan logika ini terjadi dengan induksi matematika sebagai berikut:

  1. jika transaksi dilakukan pada organisasi bukan BULE (business unit or legal entity), maka cari induk organisasi yang tipenya BULE.
  2. jika sudah dapat, maka cari kalender fiskal yang link dengan organisasi BULE dari langkah 1.
  3. validasi open/close periode akuntasi dari kalender fiskal dari langkah 2.

sepintas tidak ada masalah dengan logika diatas. bug openbravo ini baru muncul ketika kita membuat sturkut organisasi berikut:

  • group perusahaan (tipe: legal entity without accounting. kalendar fiskal: null)
    • PT A dalam group perusahaan (tipe: organization. kalendar fiskal: PT A)
    • PT B dalam group perusahaan (tipe: organization. kalendar fiskal: PT B)

dengan struktur organisasi diatas, proses transaksi berjalan normal, tetapi kita complete dokumen, openbravo gagal mendapatkan organisasi mana yang memiliki kalender fiskal, ditambah pula jika tidak dapat organisasi yang dimaksud, tidak dilempar sebagai exception. akibatnya proses completion dilakukan.

alternatif perbaikan #1: merubah logika dalam mencari organisasi yang memiliki kalender fiscal (ingat langkah 1). dari pada mencari organsiasi BULE, lebih tepat mencari organisasi calendar owner. langkah ini sudah di support openbravo karena openbravo sudah memiliki stored procedue ad_org_getcalendarowner.

namun, saya lebih suka alternatif perbaikan #2: saya ubah dari database secara langsung dimana group perushaan menjadi tipe organization, sedangkan PT A atau PT B menjadi legal with accounting. cara ini memang cara kasar, tapi sekali kerja langsung selesai. apa yang mendorong saya melakukan hal ini? tentu saja terkait dengan keterbatasan procedural language yang tidak support OOP. sehingga kalau saya rubah stored procedure yang satu, saya juga harus merubah stored procedure yang lain, sebab bug ini tidak hanya melibatkan 1 stored procedure.

sejauh ini, cara kasar yang saya lakukan masih sehat-sehat saja.

happy coding with openbravo!

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s