# Step 1 verification — Direct Order wizard onchange + hold guard fixes. W = env['fp.direct.order.wizard'] ISD = env['fp.invoice.strategy.default'] P = env['res.partner'] target = P.browse(2529) # 2CM INNOVATIVE print('Test 1 — customer with NO invoice strategy default:') ISD.search([('partner_id', '=', target.id)]).unlink() w = W.new({'partner_id': target.id}) w._onchange_partner_id() print(f' invoice_strategy={w.invoice_strategy}, payment_term={w.payment_term_id.name if w.payment_term_id else None}') print('\nTest 2 — customer WITH strategy default but NO payment_term:') isd = ISD.create({'partner_id': target.id, 'default_strategy': 'net_terms'}) w = W.new({'partner_id': target.id}) w._onchange_partner_id() print(f' invoice_strategy={w.invoice_strategy} (expect: net_terms)') print(f' payment_term={w.payment_term_id.name if w.payment_term_id else None}') isd.unlink() print('\nTest 3 — customer with strategy + deposit + payment_term:') pt = env['account.payment.term'].search([], limit=1) isd = ISD.create({ 'partner_id': target.id, 'default_strategy': 'deposit', 'default_deposit_percent': 50.0, 'payment_term_id': pt.id, }) w = W.new({'partner_id': target.id}) w._onchange_partner_id() print(f' invoice_strategy={w.invoice_strategy} (expect: deposit)') print(f' deposit_percent={w.deposit_percent} (expect: 50.0)') print(f' payment_term={w.payment_term_id.name} (expect: {pt.name})') isd.unlink() print('\nTest 4 — account-hold warning fires on partner change:') target.x_fc_account_hold = True w = W.new({'partner_id': target.id}) result = w._onchange_partner_id() warning = (result or {}).get('warning') print(f' warning title: {warning.get("title") if warning else None}') print(f' warning msg: {(warning.get("message") or "")[:100] if warning else None}') print('\nTest 5 — account-hold blocks action_create_order:') w = W.create({'partner_id': target.id, 'po_pending': True}) # add one line so the line check passes part = env['fp.part.catalog'].search([], limit=1) coating = env['fp.coating.config'].search([], limit=1) env['fp.direct.order.line'].create({ 'wizard_id': w.id, 'part_catalog_id': part.id, 'coating_config_id': coating.id, 'quantity': 1, 'unit_price': 10.0, }) try: w.action_create_order() print(' ❌ HELD CUSTOMER CREATED ORDER — guard failed') except Exception as e: print(f' ✓ blocked: {str(e)[:120]}') target.x_fc_account_hold = False env.cr.commit()