Resetting Sequence by Scheduling a Job

Bismillah ..

Pada pertemuan kali ini saya akan mengangkat issue yang berkaitan dengan cara mereset sequence (nomor urut) suatu object (misal: Purchase Order) secara berkala setiap bulan. Kasus ini berdasarkan topik yang berada pada group OpenERP Indonesia di aplikasi Telegram, untuk bergabung silahkan merujuk pada halaman ini.

Seperti kita ketahui, OpenERP menyediakan fitur Sequence pada setiap transaksi object-object terkait, pada fitur Sequence kita bisa menentukan nomor urut terakhir, format nomor transaksi baik suffix maupun prefix dan sebagainya. Sering kali, user membutuhkan ‘action’ untuk mereset nomor urut menjadi 1 kembali seiring datangnya awal bulan.

Untuk solusi issue tersebut, OpenERP juga telah menyediakan fitur yang bernama Scheduler. Scheduler bisa kita akses pada menu Setting -> Technical -> Scheduler -> Scheduled Actions. Untuk selanjutnya kita praktekan cara membuatnya.

Sebenarnya dari menu tersebut kita hanya bisa membuat data-data dari schedule yang akan kita buat seperti execution date, interval, dll. Akan tetapi pada form tersebut kita tidak bisa mendefinikan method yang berisi rincian dari job yang kita inginkan. Olehkarna itu kita membutuhkan modul untuk mendefiniskannya. Silahkan membuat modul openerp seperti biasa lalu tuliskan code berikut pada file python anda :


from osv import osv

class QueueResetter(osv.osv):
    _name = "queue.resetter"

    def reset_queue(self, cr, uid, ids=False, context={}):
        # Membuat variabel object sequence
        obj_sequence = self.pool.get('ir.sequence')
        
        # Mencari id object yang sequencenya ingin kita reset 
        seq_id = obj_sequence.search(cr, uid, [('code', '=', 'purchase.order')]) 
        
        # Reset sequence berdasarkan id diatas
        obj_sequence.write(cr, uid, seq_id, {'number_next_actual': 1})
        return True
    
QueueResetter()

Seperti penjelasan diatas, sebenarnya yang kita butuhkan hanyalah sebuah method yang berisi tentang rincian job yang akan dijalankan schedulenya. Olehkarna itu code diatas cukup sederhana dan simple. Method diatas berfungsi untuk melakukan reset nomor urut pada tranksaksi Purchase Order menjadi 1 kembali.

Selain dengan menggunakan menu schedule diatas, kita juga dapat membuat sebuah scheduler menggunakan code xml dibawah ini :


<openerp>
	
	<data noupdate="1">
        <record id="ir_cron_queue_cleaner" model="ir.cron">
            <field name="name">Queue Cleaner</field>
            <field name="interval_number">1</field>
            <field name="interval_type">months</field>
            <field name="numbercall">-1</field>
            <field name="nextcall">2014-04-30 17:01:17</field>
            <field eval="True" name="doall"/>
            <field eval="'queue.resetter'" name="model"/>
            <field eval="'reset_queue'" name="function"/>
            <field eval="'()'" name="args"/>
        </record>
	</data>
	
</openerp>

Pada code xml diatas ada beberapa parameter tag data yang mungkin agak asing bagi kita yaitu noupdate yang bernilai “1”. Parameter tersebut bertujuan untuk menjalankan code dibawahnya ketika modul tersebut HANYA diinstal pertama kali pada database. Hal ini seperti ini kita jumpai juga pada xml CoA (Chart of Account). Karna hal semua itu dibutuhkan ‘sekali seumur hidup’ 🙂

Intinya dari code xml adalah membuat data/record. Pada code diatas jika kita rinci menjadi sebagai berikut :

name (Name) = Nama dari scheduler
interval_number (Interval Number) = Kelipatan pengulangan scheduler (nilainya angka)
interval_type (Interval Unit) = Kelipatan jenis pengulangan scheduler (nilainya day, week, month, dll)
numbercall (Number of Calls) = Jumlah pengulangan scheduler dijalankan (input -1 untuk selamanya)
nextcall (Next Execution Date) = Tanggal eksekusi scheduler dijalankan
doall (Repeat Missed) = Jika diinput True (Centang), maka scheduler yang gagal dijalankan akan kembali dijalankan pada saat server di restart
model (Object) = Object method yang akan dijalankan scheduler
function (Method) = Nama method yang akan dijalankan scheduler

Alhamdulillah akhirnya kita bisa membuat sebuah scheduler untuk mereset nomor transaksi Purchase Order secara berkala. Kritik dan saran yang membangun sangat diharapkan. Selamat mencoba …

Advertisements

2 thoughts on “Resetting Sequence by Scheduling a Job

  1. Alhamdulillah….akhirnya menemukan tutorial openerp versi rodja fm…eh…indonesia.Jazakallohu khoiron katsiro..

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