Bismillahirrahmaanirrahiim
Dear all, mohon maaf untuk komen2 yang belum sempat saya jawab.
DIkarenakan kondisi saya yang baru punya baby (udah 2 bulan sii), jadi gak sempet update2 blog ini..
Jadi, kalau ada pertanyaan, bisa email saya saja yaa..
ke siti.mawaddah@gmail.com
Terima kasih banyakk
Blog ini dibuat untuk membagi sedikit ilmu OpenERP yang saya miliki... Semoga bermanfaat :-)
11 Desember 2013
29 Agustus 2013
Contoh Penggunaan attribut on_change dalam fields
Bismillahirrahmaanirrahiim
Tadi pagi ada yang email nanya sehubungan dengan attribut on_change..
Monggo dicoba.. ini blind code sii.. saya gak nyobain ... mudah2an gak ada yang salah...
kalau ada yang salah baru saya cobain :D
Contoh:
kita punya 3 field dengan tipe char:
field1
field2
field3
dan 1 field yang diharapkan berisi gabungan dari ketiga field di atas. Sebutlah nama fieldnya:
field_gab
Jadi contoh:
di form kita isi field berikut:
field1 = "aku"
field2 = "adalah"
field3 = "saya"
maka harapannya field_gab akan otomatis berisi: "aku adalah saya" dan perubahan isi dari ke-3 field akan otomatis meng-update field_gab tersebut.
bagaimana caranya?
manfaatkan attribut on_change
jadi di form view kita set atribut dari ke-4 field di atas.
Tadi pagi ada yang email nanya sehubungan dengan attribut on_change..
Monggo dicoba.. ini blind code sii.. saya gak nyobain ... mudah2an gak ada yang salah...
kalau ada yang salah baru saya cobain :D
Contoh:
kita punya 3 field dengan tipe char:
field1
field2
field3
dan 1 field yang diharapkan berisi gabungan dari ketiga field di atas. Sebutlah nama fieldnya:
field_gab
Jadi contoh:
di form kita isi field berikut:
field1 = "aku"
field2 = "adalah"
field3 = "saya"
maka harapannya field_gab akan otomatis berisi: "aku adalah saya" dan perubahan isi dari ke-3 field akan otomatis meng-update field_gab tersebut.
bagaimana caranya?
manfaatkan attribut on_change
jadi di form view kita set atribut dari ke-4 field di atas.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<field name="field1" on_change="onchange_fields(field1, field2, field3, field_gab)"/> | |
<field name="field2" on_change="onchange_fields(field1, field2, field3, field_gab)"/> | |
<field name="field3" on_change="onchange_fields(field1, field2, field3, field_gab)"/> | |
<field name="field_gab" on_change="onchange_fields(field1, field2, field3, field_gab)"/> |
kemudian di pythonnya kita buat method onchange_fields:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def onchange_date_name(self, cr, uid, ids, field1, field2, field3, field4, field_gab, context=None): | |
v = { | |
'field_gab': (field1 or '') + ' ' + (field2 or '') + ' ' + (field3 or ''), | |
} | |
return {'value': v} |
udah deh selesai.. cona direstart dan diupgrade modulnya...
ohya kenapa field_gab musti ditambahkan on_change juga?
agar tidak dimungkinkan dilakukan perubahan terhadap field tersebut...
jadi field_gab isinya tetap konsisiten gabungan dari ke-3 field sebelumnya..
semoga bermanfaat...
ohya kenapa field_gab musti ditambahkan on_change juga?
agar tidak dimungkinkan dilakukan perubahan terhadap field tersebut...
jadi field_gab isinya tetap konsisiten gabungan dari ke-3 field sebelumnya..
semoga bermanfaat...
26 Juli 2013
[Extra] Koneksi Database MySQL dengan Python
Bismillahirrahmaanirrahiim
Selesai dehhhh
referensi: http://www.tutorialspoint.com/python/python_database_access.htm
- Pastikan sudah mengintal package libmysqlclient-dev dengan:
apt-get install libmysqlclient-dev - DOwnload modul MySQLdb. DOwnload dari sini
- Instal modul tersebut dengan cara (Pastikan login sebagai root ya):
$ gunzip MySQL-python-1.2.2.tar.gz $ tar -xvf MySQL-python-1.2.2.tar $ cd MySQL-python-1.2.2 $ python setup.py build $ python setup.py install
- Coba deh buat satu script seperti berikut (contoh: test.py):
import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","password","nama_database" ) # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("SELECT VERSION()") # Fetch a single row using fetchone() method. data = cursor.fetchone() print "Database version : %s " % data # disconnect from server db.close()
- Terus test deh...
python test.py
Hasilnyaaaaaaaaa
root@mawaddah-Aspire-4750:/home/mawaddah# python test.py
Database version : 5.1.66-0ubuntu0.11.10.3
Selesai dehhhh
referensi: http://www.tutorialspoint.com/python/python_database_access.htm
26 Mei 2013
[Extra] Download and/or Read Directly a File from FTP with Python
Bismillahirrahmaanirrahiim
See this script below:
Hope this help
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Reader: | |
def __init__(self): | |
self.data = "" | |
def __call__(self,s): | |
self.data += s | |
ftp = ftplib.FTP("localhost") | |
ftp.login("username", "password") | |
#change ftp directory | |
ftp.cwd("MyJobs/dELTA_PROJECT/ftp") | |
filenames = [] | |
ftp.retrlines('NLST', filenames.append) | |
#download to local folder | |
for filename in filenames: | |
if filename.endswith(".csv"): | |
local_filename = os.path.join('/tmp/', '__tmp_'+filename) | |
file = open(local_filename, 'wb') | |
ftp.retrbinary('RETR '+ filename, file.write) | |
file.close() | |
#read directly | |
for filename in filenames: | |
if filename.endswith(".csv"): | |
r = Reader() | |
ftp.retrbinary('RETR '+ filename, r) | |
_logger.info (r.data) | |
ftp.close() |
12 Mei 2013
Dasar-Dasar Kustomisasi OpenERP: Menambahkan field/kolom baru
Bismillahirrahmaanirrahiim
Contoh, kebutuhan untuk menambahkan nama proyek yang berhubungan dengan expense karyawan
kalau ada 2 file misal hr_expense_expense.py, dan keduanya digunakan ya tambahin lagi aja
__openerp__.py
Kodenya seperti berikut ini:
-
'name': menunjukkan nama modulnya
'depends': menunjukkan modul yang terkait dengan custom modul ini. yaitu hr_expense
'data': file yang akan diikutsertakan dalam proses, bisa file xml untuk view atau file csv sebagai contoh data.
Dalam hal ini hanya file hr_expense_view.xml
'category': free text untuk memudahkan kita mencari modul yang kita sudah buat di list modul OpenERP
-
-
Untuk bagian ini, kita tentukan dulu di awal field Project itu mau dimunculkan di mana saja?
di form saja, atau juga di tree dan search view
untuk saat ini kita tambahkan di form dan tree saja yaa
hmm semuanya aja deh ...
yang perlu kita cari pertama kalo adalah model view di file asli hr_expense/hr_expense_view.xml
cari nama object yang sesuai yaitu hr.expense.expense
sudah ketemu?
ya kita perhatikan
record id="view_expenses_tree" untuk tree view
record id="view_expenses_form" untuk form view
untuk yang pertama tree... sekali lagi kita perlu membuat inheritance model seperti ini:
atribut model: diisi dengan nama object (nama tabel)yang bersesuaian
atribut inherit_id: diisi dengan "nama_modul_asli.id_view_parent"
karena itu kita isi dengan "hr_expense.view_expenses_tree"
nah kemudian di dalam tag dg atribut arch, kita tentukan posisi field baru yang dibuat
Kalau dilihat model view_expense_tree, kita tentukan posisi field smcus_project_name ada setelah field employee_id (Employee)
karena itu kita buat
<field name="employee_id" position="after">
Kalau sudah, kita gabungkan tree dan form
ke dalam 1 file hr_expense_view.xml berikut ini:
-
Selanjutnya pastikan sudah save semua file
Restart openerp server dengan perintah:
sudo /etc/init.d/openerp restart
Instal modul baru, dengan cara:
Selanjutnya, selamat bereksperimen dengan sejumlah dokumentasi yang ada...
Semoga bermanfaat
Contoh, kebutuhan untuk menambahkan nama proyek yang berhubungan dengan expense karyawan
Maka yang perlu kita cari tahu pertama kali adalah, ada di modul apakah form tersebut.
Tentunya ada di modul hr_expense dengan tabel di database hr_expense_expense
di modul hr_expense, yang perlu diperhatikan adalah file python hr_expense.py tempat definisi tabel dan proses-proses yang terjadi.
dan file xml untuk mendefinisikan tampilan form tersebut.
terus.... kita ubahkah kedua file tersebut? BIG NO!!
Biarkan modul tersebut apa adanya, jangan menambah, mengubah, menghapus, apapun di situ...
hmm biasanya siii saya cuma menambahkan _logger.. untuk debug kalo ada bugs...
Lalu apa yang kita lakukan?
Kita buat satu modul baru ..
contoh: smcus_hr_expense
apa itu smcus? yaa ini hanya initial nama saya saja sm(siti mawaddah) cus (custom)
jadi untuk mempermudah mencari modul2 hasil custom kita...
SO, kita buat folder baru di dalam folder addons
terus diisi apa aja nih..
karena saya bilang ini dasar-dasar... maka cukup 4 file saja:
- __init__.py
- __openerp__.py
- hr_expense.py
- hr_expense_view.xml
__init__.py
isinya apa nih?
cukup 1 baris:
import hr_expensehr_expense menunjukkan nama file python yang akan digunakan yaitu hr_expense.py
kalau ada 2 file misal hr_expense_expense.py, dan keduanya digunakan ya tambahin lagi aja
import hr_expense
import hr_expense_expense
__openerp__.py
Kodenya seperti berikut ini:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
'name': 'Custom HR Expense', | |
'version': '1.0', | |
'depends': ['hr_expense'], | |
'author': 'Siti Mawaddah', | |
'description': """ | |
add custom field to hr expense | |
""", | |
'website': 'http://www.berbagiopenerp.blogspot.com', | |
'category': 'Custom Siti Mawaddah', | |
'sequence': 1, | |
'data': [ | |
'hr_expense_view.xml', | |
], | |
'auto_install': False, | |
'installable': True, | |
'application': False, | |
} |
'name': menunjukkan nama modulnya
'depends': menunjukkan modul yang terkait dengan custom modul ini. yaitu hr_expense
'data': file yang akan diikutsertakan dalam proses, bisa file xml untuk view atau file csv sebagai contoh data.
Dalam hal ini hanya file hr_expense_view.xml
'category': free text untuk memudahkan kita mencari modul yang kita sudah buat di list modul OpenERP
hr_expense.py
Di awal kita menentukan bahwa kita mau tambahkan field project, maka kita tambahkan di dictionary _columns seperti ini
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from openerp import netsvc | |
from openerp.osv import fields, osv | |
from openerp.tools.translate import _ | |
class hr_expense_expense(osv.osv): | |
_inherit = 'hr.expense.expense' | |
_columns = { | |
'smcus_project_name': fields.char('Project', required=False), | |
} | |
_defaults = { | |
'smcus_project_name': 'N/A' | |
} | |
hr_expense_expense() |
Perhatikan baris
_inherit = 'hr.expense.expense'
'hr.expense.expense' menunjukkan nama object yang diinherit...
Kalau kita cek di class parent nya... ada di hr_expense/hr_expense.py seperti ini:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class hr_expense_expense(osv.osv): | |
... | |
_name = "hr.expense.expense" | |
_inherit = ['mail.thread'] | |
_description = "Expense" | |
_order = "id desc" | |
... | |
_columns = { | |
'name': fields.char('Description', size=128, required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), | |
'id': fields.integer('Sheet ID', readonly=True), | |
'date': fields.date('Date', select=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), | |
'journal_id': fields.many2one('account.journal', 'Force Journal', help = "The journal used when the expense is done."), | |
'employee_id': fields.many2one('hr.employee', "Employee", required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), | |
'user_id': fields.many2one('res.users', 'User', required=True), | |
'date_confirm': fields.date('Confirmation Date', select=True, help="Date of the confirmation of the sheet expense. It's filled when the button Confirm is pressed."), | |
'date_valid': fields.date('Validation Date', select=True, help="Date of the acceptation of the sheet expense. It's filled when the button Accept is pressed."), | |
'user_valid': fields.many2one('res.users', 'Validation By', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), | |
'account_move_id': fields.many2one('account.move', 'Ledger Posting'), | |
'line_ids': fields.one2many('hr.expense.line', 'expense_id', 'Expense Lines', readonly=True, states={'draft':[('readonly',False)]} ), | |
'note': fields.text('Note'), | |
'amount': fields.function(_amount, string='Total Amount', digits_compute=dp.get_precision('Account')), | |
'voucher_id': fields.many2one('account.voucher', "Employee's Receipt"), | |
'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), | |
'department_id':fields.many2one('hr.department','Department', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}), | |
'company_id': fields.many2one('res.company', 'Company', required=True), | |
'state': fields.selection([ | |
('draft', 'New'), | |
('cancelled', 'Refused'), | |
('confirm', 'Waiting Approval'), | |
('accepted', 'Approved'), | |
('done', 'Done'), | |
], | |
'Status', readonly=True, track_visibility='onchange', | |
help='When the expense request is created the status is \'Draft\'.\n It is confirmed by the user and request is sent to admin, the status is \'Waiting Confirmation\'.\ | |
\nIf the admin accepts it, the status is \'Accepted\'.\n If a receipt is made for the expense request, the status is \'Done\'.'), | |
} | |
_defaults = { | |
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.employee', context=c), | |
'date': fields.date.context_today, | |
'state': 'draft', | |
'employee_id': _employee_get, | |
'user_id': lambda cr, uid, id, c={}: id, | |
'currency_id': _get_currency, | |
} | |
... | |
hr_expense_expense() |
di file parent nama object ditunjukkan pada baris
_name = 'hr.expense.expense'
sedangkan nama class boleh tidak sama dengan nama class parent
untuk dictionary _columns di parent object terdiri dari sejumlah field dengan berbagai variasi type.
Selanjutnya anda dapat mempelajari masing-masing type yang dapat digunakan
dengan mempelajari openerp development doc di
atau bisa langsung cek aja di folder instalasi openerp
biasanya ada di /opt/openerp/openerp/doc
cukup lengkap kok
untuk dict _defaults digunakan untuk menentukan nilai default dari setiap field...
kalau tidak perlu ya dikosongkan saja
hr_expense_view.xml
Untuk bagian ini, kita tentukan dulu di awal field Project itu mau dimunculkan di mana saja?
di form saja, atau juga di tree dan search view
untuk saat ini kita tambahkan di form dan tree saja yaa
hmm semuanya aja deh ...
yang perlu kita cari pertama kalo adalah model view di file asli hr_expense/hr_expense_view.xml
cari nama object yang sesuai yaitu hr.expense.expense
sudah ketemu?
ya kita perhatikan
record id="view_expenses_tree" untuk tree view
record id="view_expenses_form" untuk form view
untuk yang pertama tree... sekali lagi kita perlu membuat inheritance model seperti ini:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<record id="smcus_hr_expense_tree" model="ir.ui.view"> | |
<field name="name">smcus.hr.expense.tree</field> | |
<field name="model">hr.expense.expense</field> | |
<field name="inherit_id" ref="hr_expense.view_expenses_tree"/> | |
<field name="arch" type="xml"> | |
<field name="employee_id" position="after"> | |
<field name="smcus_project_name"/> | |
</field> | |
</field> | |
</record> |
atribut model: diisi dengan nama object (nama tabel)yang bersesuaian
atribut inherit_id: diisi dengan "nama_modul_asli.id_view_parent"
karena itu kita isi dengan "hr_expense.view_expenses_tree"
nah kemudian di dalam tag dg atribut arch, kita tentukan posisi field baru yang dibuat
Kalau dilihat model view_expense_tree, kita tentukan posisi field smcus_project_name ada setelah field employee_id (Employee)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<record id="view_expenses_tree" model="ir.ui.view"> | |
<field name="name">hr.expense.expense.tree</field> | |
<field name="model">hr.expense.expense</field> | |
<field name="arch" type="xml"> | |
<tree string="Expenses" colors="blue:state=='draft'"> | |
<field name="employee_id"/> | |
<field name="department_id" invisible="1"/> | |
<field name="date"/> | |
<field name="user_id" invisible="1"/> | |
<field name="name"/> | |
<field name="currency_id" groups="base.group_multi_currency"/> | |
<field name="amount"/> | |
<field name="state"/> | |
</tree> | |
</field> | |
</record> |
karena itu kita buat
<field name="employee_id" position="after">
<field name="smcus_project_name"/>
</field>
position dapat diisi "before" (posisi sebelum field bersangkutan) dan "replace" (menimpa field)
untuk model form
Kita tentukan posisinya ada di bawah field currency
maka kita buat model view berikut ini:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<record id="smcus_hr_expense_form" model="ir.ui.view"> | |
<field name="name">smcus.hr.expense.form</field> | |
<field name="model">hr.expense.expense</field> | |
<field name="inherit_id" ref="hr_expense.view_expenses_form"/> | |
<field name="arch" type="xml"> | |
<field name="currency_id" position="after"> | |
<field name="smcus_project_name"/> | |
</field> | |
</field> | |
</record> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<openerp> | |
<data> | |
<record id="smcus_hr_expense_tree" model="ir.ui.view"> | |
<field name="name">smcus.hr.expense.tree</field> | |
<field name="model">hr.expense.expense</field> | |
<field name="inherit_id" ref="hr_expense.view_expenses_tree"/> | |
<field name="arch" type="xml"> | |
<field name="employee_id" position="after"> | |
<field name="smcus_project_name"/> | |
</field> | |
</field> | |
</record> | |
<record id="smcus_hr_expense_form" model="ir.ui.view"> | |
<field name="name">smcus.hr.expense.form</field> | |
<field name="model">hr.expense.expense</field> | |
<field name="inherit_id" ref="hr_expense.view_expenses_form"/> | |
<field name="arch" type="xml"> | |
<field name="currency_id" position="after"> | |
<field name="smcus_project_name"/> | |
</field> | |
</field> | |
</record> | |
</data> | |
</openerp> |
Selanjutnya pastikan sudah save semua file
Restart openerp server dengan perintah:
sudo /etc/init.d/openerp restart
Instal modul baru, dengan cara:
- Login sebagai admin
- Masuk ke menu Settings > Update Modules List, agar modul baru kita terdaftar di daftar modul di menu Settings > Installed Modules
- Cari modul baru yang kita buat yaitu smcus_hr_expense
Klik install - Maka kita cek di menu Human Resources > Expenses > Expenses
Selesai dehh
Selanjutnya, selamat bereksperimen dengan sejumlah dokumentasi yang ada...
Semoga bermanfaat
17 Februari 2013
Record Rules: Membatasi Hak Akses terhadap Record tertentu
Bismillahirrahmaanirrahiim
Contoh kasus:
Kebutuhan untuk membuat user Sales hanya bisa akses data customer yang dibuat sendiri oleh sales tersebut atau customer yang diset si Sales sebagai Salesperson dari customer tersebut.
Contoh kasus:
Kebutuhan untuk membuat user Sales hanya bisa akses data customer yang dibuat sendiri oleh sales tersebut atau customer yang diset si Sales sebagai Salesperson dari customer tersebut.
Masuk ke menu Settings > Technical > Security > Record Rules
Tambahkan rules baru:
Untuk user Sales Own Leads: hanya bisa akses data customer yang dibuat sendiri oleh user atau customer dg Salesperson user tersebut.
Lihat contoh di image berikut.
Penjelasan:
1. nama rule
2. pilih object / nama tabel: ketikkan res.partner untuk mendapatkan tabel Partner
3. definisi aturan:
hanya yg dibuat sendiri oleh user: create_uid=user.id
salesperson customer adalah user: user_id=user.id
4. Nama group, jika tidak pilih maka rule berlaku global (untuk semua user)
Cek di menu: Settings > Users > Groups
lihat di group Sales Own Leads, maka di tab RUles akan muncul Record Rules baru.
Selanjutnya user di Group Sales Own Leads hanya bisa lihat customer yang dibuat sendiri oleh si user atau yg salesperson dari customer tsb adalah user tsb.
Selain di group Sales Own Leads,
juga harus disetting Record Rules untuk group Sales All Leads
karena group Sales All Leads inherit semua rules dari Sales Own Leads.
Jadi kita definisikan Record Rules: All Customer
bisa akses semua data customer. Lihat di gambar berikut:
Kemudian, dikarenakan setiap membuat data user otomatis dibuat partner terpisah. Sedangkan partner dari user tersebut tidak masuk ke dalam rules:
hanya yg dibuat sendiri oleh user: create_uid=user.id
salesperson customer adalah user: user_id=user.id
Sehingga data user malah tidak bisa diakses sendiri oleh Sales tersebut.
Maka untuk setting awal, setiap partner user diset Salesperson = user tersebut.
Demikan,
semoga bermanfaat..... ^^
14 Februari 2013
Definisi Fiscal Position
Bismillahirrahmaanirrahiim
Kemudian untuk customer tersebut, diset default
Fiscal Position Special for Schneider
Menu: Accounting > Configuration > Taxes >
Fiscal Positions
Tujuan fungsi ini adalah me-replace Pajak dan
Account dari setiap produk yang sudah diset secara default ketika
membuat Sales Order/ Purchase Order/ Customer Invoice/Supplier
Invoice
Contoh:
Produk A memiliki income account: Penjualan
Lain-Lain
dan Sale Tax: PPN 10%
Kemudian didefinisikan Fiscal Position untuk
Customer ABC yang sudah ditentukan bahwa semua penjualan ke customer
tersebut akan dimapping ke account Penjualan Customer ABC dengan tax
PPN 10% - Include
Sehingga ketika akan membuat Customer Invoice,
maka Account dan Tax dari setiap item akan direplace dengan tax dan
account yang ditentukan di Fiscal Position
24 Januari 2013
Uncaught TypeError: Cannot read property 'message_subtype_data' of undefined
Bismillahirrahmaanirrahiim
Sering mendapatkan error message seperti judul di atas ketika pakai OpenERP versi 7.0??
Error ini ada di setiap form yg ada fasilitas message dan follower di bagian bawah. sepeti
Sales Order, Purchase Order dan lain sebagainya.......
Test nya begini.
Masuk ke menu Sales Quotation,
buka salah satu record,
lalu click tombol Create untuk membuat record baru,
maka muncul deh error berikut.
Memang tidak akan membuat miss functionalitas.. tapi kan mengganggu banget, setiap create record baru muncul pop up error message tsb
Setelah mabok semaleman sampe pagi, debug sana sini dengan kata kunci 'message_subtype_data' (terimakasih kepada pembuat tools Grep :D)
akhirnya saya menemukan kunci masalahanya.
Coba cek di file addons/mail/static/src/js/mail_follower.js
lihat di method
display_subtypes:function (data) {
var self = this;
var subtype_list_ul = this.$('.oe_subtype_list');
subtype_list_ul.empty();
var records = data[this.view.datarecord.id || this.view.dataset.ids[0]].message_subtype_data;
var nb_subtype = 0;
_(records).each(function (record) {nb_subtype++;});
if (nb_subtype > 1) {
_(records).each(function (record, record_name) {
record.name = record_name;
record.followed = record.followed || undefined;
$(session.web.qweb.render('mail.followers.subtype', {'record': record})).appendTo( self.$('.oe_subtype_list') );
});
}
},
Sering mendapatkan error message seperti judul di atas ketika pakai OpenERP versi 7.0??
Error ini ada di setiap form yg ada fasilitas message dan follower di bagian bawah. sepeti
Sales Order, Purchase Order dan lain sebagainya.......
Test nya begini.
Masuk ke menu Sales Quotation,
buka salah satu record,
lalu click tombol Create untuk membuat record baru,
maka muncul deh error berikut.
Memang tidak akan membuat miss functionalitas.. tapi kan mengganggu banget, setiap create record baru muncul pop up error message tsb
Setelah mabok semaleman sampe pagi, debug sana sini dengan kata kunci 'message_subtype_data' (terimakasih kepada pembuat tools Grep :D)
akhirnya saya menemukan kunci masalahanya.
Coba cek di file addons/mail/static/src/js/mail_follower.js
lihat di method
display_subtypes:function (data) {
var self = this;
var subtype_list_ul = this.$('.oe_subtype_list');
subtype_list_ul.empty();
var records = data[this.view.datarecord.id || this.view.dataset.ids[0]].message_subtype_data;
var nb_subtype = 0;
_(records).each(function (record) {nb_subtype++;});
if (nb_subtype > 1) {
_(records).each(function (record, record_name) {
record.name = record_name;
record.followed = record.followed || undefined;
$(session.web.qweb.render('mail.followers.subtype', {'record': record})).appendTo( self.$('.oe_subtype_list') );
});
}
},
Lihat yang saya highlight..
di situ ada kebutuhan untuk mendapatkan id record..
tapii.. karena yang kita lakukan adalah membuat record baru, maka tentu saja id tersebut tidak akan didapatkan alias 'Undefined'
Cek lagi errornya:
Uncaught TypeError: Cannot read property 'message_subtype_data' of undefined
Jadi... kita handle di sini deehh...
tambahkan if clause seperti berikut ini
display_subtypes:function (data) {
var self = this;
var subtype_list_ul = this.$('.oe_subtype_list');
subtype_list_ul.empty();
if (this.view.datarecord.id>0) {
var records = data[this.view.datarecord.id || this.view.dataset.ids[0]].message_subtype_data;
var nb_subtype = 0;
_(records).each(function (record) {nb_subtype++;});
if (nb_subtype > 1) {
_(records).each(function (record, record_name) {
record.name = record_name;
record.followed = record.followed || undefined;
$(session.web.qweb.render('mail.followers.subtype', {'record': record})).appendTo( self.$('.oe_subtype_list') );
});
}
}
},
Udah deh... jadi initinya adalah si script ingin mendapatkan data message dan follower dari form tsb.
Tapi, karena memang ini adalah data baru, maka tentunya kita buat pengecualian... karena memang belum ada data message dan follower nya kaan..
Sudah deh...
logout OpenERP nya, login kembali
trus coba lagi deh test case di atas:
Masuk ke menu Sales Quotation,
buka salah satu record,
lalu click tombol Create untuk membuat record baru,
makamuncul deh error tersebut. error tersebut tidak akan muncul lagi,
Nah begitu saja...
Mohon dicek ulang yaa..
Mudah2an bener2 sudah solved masalahnya....
Jangan lupa setelah ubah file js nya, logout dan login kembali untuk melihat perubahan..
Demikan.. semoga bermanfaat
buka salah satu record,
lalu click tombol Create untuk membuat record baru,
maka
Nah begitu saja...
Mohon dicek ulang yaa..
Mudah2an bener2 sudah solved masalahnya....
Jangan lupa setelah ubah file js nya, logout dan login kembali untuk melihat perubahan..
Demikan.. semoga bermanfaat
10 Januari 2013
tidak bisa reset password
Bismillahirrahmaanirrahiim
Saat admin reset password untuk user tertentu, seharusnya akan terkirim otomatis email ke user tersebut,
tapi ternyata gagal dengan Warning:
Cannot send email: no outgoing email server configured.\nYou can configure it under Settings/General Settings
ehehehe ternyata ada package yg ketinggalan saat instal di awal
yaitu .............. python-jinja2
yuukk marii install
Saat admin reset password untuk user tertentu, seharusnya akan terkirim otomatis email ke user tersebut,
tapi ternyata gagal dengan Warning:
Cannot send email: no outgoing email server configured.\nYou can configure it under Settings/General Settings
ehehehe ternyata ada package yg ketinggalan saat instal di awal
yaitu .............. python-jinja2
yuukk marii install
05 Januari 2013
Setup thousand separator
Bismillahirrahmaanirrahiim
Untuk view angka dengan separator seperti 165,000,500
Itu konfigurasinya ada di translation.
Bisa cek juga di menu berikut:
Cek di separator format nya dan thousand separator nya yaa
Untuk view angka dengan separator seperti 165,000,500
Itu konfigurasinya ada di translation.
Bisa cek juga di menu berikut:
Cek di separator format nya dan thousand separator nya yaa
No such external ID currently defined in the system: product.product_product_consultant
Bismillahirrahmaanirrahiim
Jadi, ini error yg saya dapat ketika setup modul sales di menu Settings..
Cari dan mencari..
solusinya adalah:
temukan file addons/product/product_data.xml
ganti baris:
<data noupdate="1">
Jadi, ini error yg saya dapat ketika setup modul sales di menu Settings..
Cari dan mencari..
solusinya adalah:
temukan file addons/product/product_data.xml
ganti baris:
<data noupdate="1">
menjadi
<data>
Lalu upgrade modul product
Sekian....
04 Januari 2013
Script auto run OpenERP 7.0
Bismillahirrahmaanirrahiim
#!/bin/sh
### BEGIN INIT INFO
# Provides: openerp-server
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Enterprise Resource Management software
# Description: Open ERP is a complete ERP and CRM software.
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/openerp/openerp-7.0/openerp-server
NAME=openerp-server7
DESC=openerp-server7
CONFIG=/etc/openerp-server.conf
LOGFILE=/var/log/openerp/openerp-server-7.log
USER=openerp
test -x ${DAEMON} || exit 0
set -e
case "${1}" in
start)
echo -n "Starting ${DESC}: "
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=${CONFIG} \
--logfile=${LOGFILE}
echo "${NAME}."
;;
stop)
echo -n "Stopping ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
echo "${NAME}."
;;
restart|force-reload)
echo -n "Restarting ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
sleep 1
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=${CONFIG} \
--logfile=${LOGFILE}
echo "${NAME}."
;;
*)
N=/etc/init.d/${NAME}
echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
---
Kemudian save sebagai misalkan openerp7 di /etc/init.d/
pastikan bisa dijalankan
/etc/init.d/openerp7 start untuk menyalakan
/etc/init.d/openerp7 stop untuk mematikan
/etc/init.d/openerp7 restart untuk restart
kalau yakin sudah berhasil lakukan perintah berikut untuk memastikan bisa auto start setiap PC dinyalakan
cd /etc/init.d/
sudo update-rc.d openerp7 defaults
#!/bin/sh
### BEGIN INIT INFO
# Provides: openerp-server
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Enterprise Resource Management software
# Description: Open ERP is a complete ERP and CRM software.
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/openerp/openerp-7.0/openerp-server
NAME=openerp-server7
DESC=openerp-server7
CONFIG=/etc/openerp-server.conf
LOGFILE=/var/log/openerp/openerp-server-7.log
USER=openerp
test -x ${DAEMON} || exit 0
set -e
case "${1}" in
start)
echo -n "Starting ${DESC}: "
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=${CONFIG} \
--logfile=${LOGFILE}
echo "${NAME}."
;;
stop)
echo -n "Stopping ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
echo "${NAME}."
;;
restart|force-reload)
echo -n "Restarting ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
sleep 1
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=${CONFIG} \
--logfile=${LOGFILE}
echo "${NAME}."
;;
*)
N=/etc/init.d/${NAME}
echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
---
Kemudian save sebagai misalkan openerp7 di /etc/init.d/
pastikan bisa dijalankan
/etc/init.d/openerp7 start untuk menyalakan
/etc/init.d/openerp7 stop untuk mematikan
/etc/init.d/openerp7 restart untuk restart
kalau yakin sudah berhasil lakukan perintah berikut untuk memastikan bisa auto start setiap PC dinyalakan
cd /etc/init.d/
sudo update-rc.d openerp7 defaults
01 Januari 2013
Instal Modul Baru di OpenERP 7.0
Bismillahirrahmaanirrahiim
Hmm OpenERP 7.0 memang perubahannya cukup drastis..
COntoh sederhana, biasanya di OpenERP 6.* kita dapat melihat langsung menu "Update Modules List" di bawah menu "Modules"
tapii di OpenERP7.0, tidak muncul secara default,
Jadi apa yg harus dilakukan?
Masuk ke menu Users
Edit user Administrator
Click tab "Access Rights"
Click checkbox "Technical Features"
Lalu Save, kemudian Logout... dan login kembali,,
maka di menu Settings baru deh muncul sub menu Update Module List dll nya...
Begitu dehhhh
Smeoga membantu
~udah gk konsen mau tiddur
Hmm OpenERP 7.0 memang perubahannya cukup drastis..
COntoh sederhana, biasanya di OpenERP 6.* kita dapat melihat langsung menu "Update Modules List" di bawah menu "Modules"
tapii di OpenERP7.0, tidak muncul secara default,
Jadi apa yg harus dilakukan?
Masuk ke menu Users
Edit user Administrator
Click tab "Access Rights"
Click checkbox "Technical Features"
Lalu Save, kemudian Logout... dan login kembali,,
maka di menu Settings baru deh muncul sub menu Update Module List dll nya...
Begitu dehhhh
Smeoga membantu
~udah gk konsen mau tiddur
Langganan:
Postingan (Atom)