06 Desember 2014

Tentang Masalah Datetime - UTC OpenERP 7 & 8

Bismillahirrahmaanirrahiim

Hmm sulit sekali lepas dari kata OpenERP.. harusnya Odoo yaa hehe ..
iya ini tentang konsep datetime di OE 7 dan 8. hmm sebenarnya juga OE 6.1

Memang konsep ini dimulai sejak OE 6.1
Sedangkan di OE 6.0 masih "normal"

Maksudnya gimana nih?
Dulu di OE 6.0 kalau kita input datetime 06/12/2014 07:30:58
maka saat disimpan di database juga disimpan sebagai  06/12/2014 07:30:58

Sedangkan, mulai di OE 6.1 dst, maka akan disimpan di Postgre sebagai datetime yang dikembalikan ke basic UTC yaitu UTC+0 sesuai timezone masing-masing user

Di masing-masing user, ada preferences  untuk setting local timezone. Contoh saya set timezone Asia/Jakarta (UTC+7). Nah maka ketika saya input 06/12/2014 07:30:58 maka akan disimpan sebagai 06/12/2014 00:30:58
Sedangkan jika ada user lain di UTC-2 misalkan, dengan input yang sama maka akan disimpan sebagai 06/12/2014 09:30:58

Nope, ini BUKAN BUGS. Ini memang disain yang dibuat demikian.

Nah terus apa masalahnya?
toh nanti pas tampil tetap sesuai timezone yang dipilih tiap user?
betul... di web tentu akan tampil sesuai timezone kita... gak perduli dengan timezone yg kita set di laptop. semua hanya dipengaruhi timezone yg diset di masing-masing user. cmiiw

Masalahnya adalah ketika berhubungan dengan report.
Kalau kita buat report pakai RML standard, sudah ada solusinya, yaitu
pakai [[ formatLang(fielddatetime, datetime=True) ]]

Nah kalau pakai query misalnya, atau pakai browse biasa... maksudnya buat function di *.py untuk menghasilkan datetime sesuai timezone, nah itu yang jadi masalah...

Jadi ceritanya beberapa minggu lalu, saya dapat task untuk export data ke dalam xls. Saat itu saya menggunakan python-xlwt (HINT: xlsxwriter ternyata lebih powerful lho. Saya gak pake aeroo ya.. krn pada kenyataannya dengan langsung generate dengan xlwt/xlxwriter akan jauuuuuuuuuuuuh lebih cepat saat generate data banyak..

Lalu saya gunakan browse biasa kemudian read field datetime, maka akan keluar datetime dengan basic UTC. Dan si user yang request modul ini jadi protes, karena gak sesuai dengan timezone mereka...

yaudah pakai formatLang aja?
sayangnya hanya bisa dipakai di rml saja.. cmiiw

terus gimana?

Alhamdulillah, setelah ngubek2 src code dan gugling sana sini, dapatlah solusi ini...

jangan lupa import pytz nya ya...

Nah selanjutnya tinggal disesuaikan deh mau ambil timezone dari mana.
kalau di code tsb, diambil dari timezone user yg login.

kalau misalnya untuk lembur, mungkin disesuaikan dengan timezone masing2 karyawan. karena bisa jadi karyawan nya tersebar di penjuru dunia dengan berbagai variasi timezone.

Demikian
semoga bermanfaat
kalau ada yang salah mohon bantu koreksi yaa

terima kasih













05 Desember 2014

AttributeError: 'NoneType' object has no attribute '_table'

Bismillahirrahmaanirrahiim

Pernah mengalami error seperti judul di atas saat uninstal/upgrade modul??
hal tersebut terjadi karena ada 1 atau lebih modul yang lupa didaftarkan dalam informasi depends di __openerp__.py

    'depends': ['mro','account_asset','mi_fleet','hr'],



pastikan semua inheritance class yang kita buat, sudah didaftarkan nama modulnya di baris depends tersebut yaa.


penyebab lainnya, pastinya karena ada modul yang belum kita tambahkan di addons kita, tapi terdaftar di depends tersebut.
ini biasanya kejadian kalo kita abis pindahan server ... terus ada aja yg terlewat..





begitu.. sekian..
semoga membantu