28 Agustus 2017

Advanced Routing (Push and Procurement Rules) Part 1

Bismillahirrahmaanirrahiim

Udah lama mau share feature ini...
Karena rada lama juga belajar memahami feature routing.. rada lemot untuk bisa sampai bener2 memahaminya...

Oke, langsung aja ya...
Apa itu Push Rules?
Apa itu Procurement Rules?

Sebelumnya harus setting apa sajakah?
Setelah instal module Inventory, 2 hal yang penting untuk di-check adalah sebagai berikut.
Yang pertama, supaya bisa create lebih dari 1 warehouse, dan yang ke-2 untuk meng-aktifkan feature Advanced Routing.






Kalau kita lihat di menu Inventory / Configurations / Routes / Routes, by default hanya akan ada 3 routes berikut:











Mari bedah Make to Order.
















Applicable On, dengan priority:
  • Product Categories 
  • Products
  • Warehouses
Contoh suatu Sales Order generate Delivery order dari lokasi A --> Customer (dengan warehouse A) 
dengan produk XYZ
  1. maka dia akan cek dulu, apakah category dari XYZ diset suatu routes. Jika ada, maka ambil rules dari kategori tersebut.
  2. Jika tidak ada, dia akan cari apakah ada route yang diset untuk produk XYZ (di form product) 
  3. Jika tidak ada, maka akan cari route dari warehouse A si Delivery Order.
Dan jika tidak ada dari ke-3 hal di atas yang ada rule nya... maka akan search dari default rule. yaitu rule yang tidak di-assign ke Routes manapun.

Di manakah default rule nya? Kalau kita set technical mode on (debug mode), kita akan menemukan menu Global Procurement Rules. By default gak ada datanya.

btw kesimpulan ini saya dapat, setelah membaca function _search_suitable_rule di module stock











Lalu kembali lagi ke Make to Order route di atas. Kalau kita lihat baru ada Procurement Rules ya.
Coba kita lihat isinya






















Bagaimana cara bacanya? 
Rules di atas memiliki arti:
Jika ada permintaan di lokasi Procurement, maka akan meminta dari lokasi Source Location dengan cara  Move Supply Method = Create Procurement yang akan membua Stock.picking dengan type Picking Type

Maksudnya?

Jika ada permintaan di lokasi Customer (Sales Order), maka akan membuat Procurement Order dengan lokasi source WH/Stock  --> dan ini berarti, harusnya akan melakukan sesuatu (entah Pembelian atau Manufacturing Order) dengan tujuan pengadaan stock di lokasi WH/Stock.

Duuh bingung...
Oke... kita coba aja ya bikin 1 produk baru dengan route Make to Order
















Karena masih baru, maka stock masih kosong ya..
Lalu kita buat Sales Order dengan item Produk A sebanyak 10 pcs, maka saat confirm Sales Quotation, yang terjadi adalah:

  1. Dibuat Procurement Order dengan Procurement Location = Customers dan Rule WH: Stock -> CustomersMTO yang diambil dari route Make to Order. Procurement order ini akan otomatis running dan membuat stock.picking (2)
  2. Karena itu akan dibuat stock.picking (delivery order) dengan source location WH/Stock dan destination Customers
  3. Karena rule  WH: Stock -> CustomersMTO memiliki Move Supply Method = Create Procurement, maka akan dibuat juga Procurement Order dengan Procurement Location = WH/Stock. Nah apa yang terjadi ketika procurement order ini running?
    Sudah pasti akan masuk ke Procurement Exceptions. Loh kenapa?
    Ya karena tidak bisa menemukan rule dengan procurement location WH/Stock


Terus bagaimana? 
Hmmm setelah saya instal modul Purchases, ada 1 route baru yaitu Buy dengan Procurement Rules berikut:
























Artinya adalah, ketika ada Procurement di location WH/Stock, maka akan langsung membuat Purchase Order (Action Buy) dengan Picking Type My Company: Receipts.
Kalau gitu kita coba assign aja Route tersebut ke Warehouse aja (bukan ke produk lagi).













Nah kita pilih warehouse My Company ya
maka coba kita manual klik Run Procurement, maka... pasti akan ada exception lagi 
Walah apa lagi? 
















Sudah bisa tebak kan kenapa bisa ada exception. Yaa.. karena rule nya Buy tapi belum diset Vendor nya. Kita set dulu ya di Product























Kemudian Run Procurement kembali, maka sudah bisa dipastikan akan dibuat 1 dokumen Purchase Order dengan posisi Draft





















Ehmmm jadi... kesimpulan dari atas sampai sini mengenai Procurement Rules adalah.
Suatu Rules untuk melakukan pengadaan suatu barang di lokasi tertentu, yang biasanya di trigger dari suatu Sales Order atau picking manual atau manual procurement order.
Dan Faktanya, ketika kita COnfirm Sales Order, yang dilakukan adalah create Procurement Order, bukan langsung buat Delivery Order.

Beda halnya dengan Purchase Order, akan dibuat langsung Incoming Shipment.

Ehh tapii, saya gak pernah set apapun deh di routing, dan otomatis akan create Delivery Order.
Oke.. mari cari semua route yang Procurement Location nya lokasi Customers.. Pasti ada... dan dalam case database saya ini hanya 1.. Lalu coba non-aktifkan. 
Maka ketika confirm Sales Order, PASTI tidak akan terbuat Delivery Order, dan akan masuk ke Procurement Exception, karena tidak ada route dengan Procurement Location = Customers

Jadi jika kita mau buat suatu route otomatis dari lokasi A -> B -> C -> Customers
maka setidaknya harus ada 3 Procurement rules, dengan detail berikut:
1. Procurement Location: Customers, Source Location: C, Move Supply Method: Create Procurement
2. Procurement Location: C, Source Location: B, Move Supply Method: Create Procurement
3. Procurement Location: B, Source Location: A, Move Supply Method: Take From Stock


Demikian.. 
Segini dulu yaa...
kapan2 kalau ada waktu lanjut lagii
test

17 Mei 2017

Gagal Upgrade/Instal Module --> Hapus Database, addons, modul, atau bagaimana?

Bismillahirrahmaanirrahiim

Hai hai semua... haha udah nyaris 1 tahun ini blog gak diisi.
Kali ini mau share troubleshooting yang sering terjadi dan bikin stress...

Pernahkah, habis update suatu modul custom Odoo, lalu pas Upgrade di Odoo gagal? Sering lah
Nah terus bukan cuma gagal, tapiii merembet ke modul custom lain? dan itu bisa banyaak...
Yaudah cancel Upgrade aja siii? yaaa kalau bisa, lah kalau akhirnya tahu2 kita logout terus gak bisa masuk sama sekali, dan lihat di lognya error nya itu di modul yang bahkan gak pernah kita sentuh, gak jelas, dan intinya mentok lah mau ngapain lagi..

Terus, akhirnya apa yang terfikirkan, ahhhhh hapus aja databasenya, ehh hapus aja modul nya, bahkan sampe instal ulang odoo nya...... waduuuuuuwww
jangan!!
capek ah, dan wasting time.
Dan itu yang saya lakukan pada zaman dahulu... hehe

Sampai akhirnya menemukan cara yang lebih manusiawi.
Misal kita mau upgrade modul X, lalu gagal dan pas kita lihat di list modul ada modul A, B, C, D yang ikutan statusnya to upgrade (kalau emang masih bisa masuk ke list view modules :P)

Terus apa solusinya.
Masuk ke database, pakai pgAdmin or psql atau apapun lah...

Bisa coba cek pakai query, modul2 apa yang statusnya to upgrade
select id, name from ir_module_module where state='to upgrade';

pasti bisa nemu data berikut
id, name
100, A
101, B
102, C
103, D
120, X

Nah ketahuan kan modul2 apa yang berpengaruh ...
terus diapain? Yaa dibenerin lah satu2.. hehe .. itu kalau lagi banyak waktu, kalau lagi buru2 diapain?

Yasudah, reset aja statusnya. Jadi?? *installed*

Yep gunakan query berikut
update ir_module_module set state='installed' where state='to upgrade';

Selesai.........
Insya Allah yang tadinya gak bisa login, bisa masuk lagi..
Kemudian, benerin deh modulnya...
bersihin...
itu terjadi biasanya karena modulnya gak clean... buggy intinya mah..

Ohya kalau misal errornya terjadi saat mau instal modul baru

update statusnya dari to install menjadi uninstalled

Demikian.. smeoga bermanfaat :)


As usual, cmiiw ya :)