151 lines
5.2 KiB
Python
151 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Check MO status dan buat MO test jika perlu
|
|
"""
|
|
|
|
import xmlrpc.client
|
|
|
|
ODOO_URL = "http://localhost:8070"
|
|
ODOO_DB = "manukanjabung"
|
|
ODOO_USERNAME = "admin"
|
|
ODOO_PASSWORD = "admin"
|
|
|
|
def main():
|
|
print("=" * 70)
|
|
print("CHECK MO STATUS")
|
|
print("=" * 70)
|
|
|
|
try:
|
|
common = xmlrpc.client.ServerProxy(f'{ODOO_URL}/xmlrpc/2/common')
|
|
uid = common.authenticate(ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD, {})
|
|
|
|
if not uid:
|
|
print("❌ Gagal autentikasi")
|
|
return
|
|
|
|
models = xmlrpc.client.ServerProxy(f'{ODOO_URL}/xmlrpc/2/object')
|
|
print(f"✅ Terkoneksi sebagai User ID: {uid}\n")
|
|
|
|
# Check all MO states
|
|
print("📊 MO by State:")
|
|
print("-" * 70)
|
|
|
|
states = ['draft', 'confirmed', 'progress', 'done', 'cancel']
|
|
|
|
for state in states:
|
|
count = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'search_count',
|
|
[[('state', '=', state)]]
|
|
)
|
|
|
|
icon = "✅" if count > 0 else " "
|
|
print(f" {icon} {state.upper()}: {count} MO")
|
|
|
|
if count > 0 and count <= 5:
|
|
# Show some examples
|
|
mo_ids = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'search',
|
|
[[('state', '=', state)]],
|
|
{'limit': 5}
|
|
)
|
|
|
|
mos = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'read',
|
|
[mo_ids],
|
|
{'fields': ['name', 'product_id', 'product_qty', 'state']}
|
|
)
|
|
|
|
for mo in mos:
|
|
prod_name = mo.get('product_id', [False, 'N/A'])[1]
|
|
print(f" - {mo['name']}: {prod_name} ({mo['product_qty']})")
|
|
|
|
print()
|
|
|
|
# Check total MO
|
|
total_count = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'search_count',
|
|
[[]]
|
|
)
|
|
|
|
print(f" TOTAL: {total_count} MO")
|
|
|
|
# Suggest action
|
|
print("\n" + "=" * 70)
|
|
print("REKOMENDASI:")
|
|
print("=" * 70)
|
|
|
|
confirmed_count = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'search_count',
|
|
[[('state', '=', 'confirmed')]]
|
|
)
|
|
|
|
if confirmed_count == 0:
|
|
print("\n⚠️ Tidak ada MO dengan state 'confirmed'")
|
|
print("\nUntuk test API update-with-consumptions, Anda perlu:")
|
|
print("1. Buat MO baru di Odoo")
|
|
print("2. Confirm MO tersebut (button 'Confirm')")
|
|
print("3. Pastikan MO punya raw materials dengan equipment code")
|
|
print("\nATAU")
|
|
print("\nUpdate MO yang sudah ada ke state 'confirmed'")
|
|
|
|
# Check if there are draft MOs
|
|
draft_count = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'search_count',
|
|
[[('state', '=', 'draft')]]
|
|
)
|
|
|
|
if draft_count > 0:
|
|
print(f"\n💡 Ada {draft_count} MO dalam state 'draft'")
|
|
print(" Anda bisa confirm salah satunya untuk test")
|
|
|
|
confirm = input("\nConfirm MO pertama? (y/n): ").strip().lower()
|
|
|
|
if confirm == 'y':
|
|
mo_ids = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'search',
|
|
[[('state', '=', 'draft')]],
|
|
{'limit': 1}
|
|
)
|
|
|
|
if mo_ids:
|
|
mo_id = mo_ids[0]
|
|
|
|
# Confirm MO
|
|
result = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'action_confirm',
|
|
[[mo_id]]
|
|
)
|
|
|
|
mo = models.execute_kw(
|
|
ODOO_DB, uid, ODOO_PASSWORD,
|
|
'mrp.production', 'read',
|
|
[[mo_id]],
|
|
{'fields': ['name', 'state']}
|
|
)[0]
|
|
|
|
print(f"\n✅ MO {mo['name']} berhasil di-confirm!")
|
|
print(f" State: {mo['state']}")
|
|
print("\nSekarang bisa test API dengan:")
|
|
print(" python test_mo_consumption_api.py")
|
|
else:
|
|
print(f"\n✅ Ada {confirmed_count} MO dalam state 'confirmed'")
|
|
print("\nAnda bisa langsung test API dengan:")
|
|
print(" python test_mo_consumption_api.py")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|