// Lists the AD_Users attached to a merchant C_BPartner, for the "send login data" action on // the partner edit page. Only users linked to THIS bpartner via C_BPartner_ID are returned // (equivalent to models/c_bpartner/{id}?$expand=ad_user) — we deliberately do NOT pull every // user of the merchant's org, otherwise unrelated order/contact users from across the org show up. // // NOTE: returns each user's cleartext Password (this iDempiere instance stores/returns it on // the full record — $select strips it, a full fetch includes it). Admin-only surface. import refreshTokenHelper from "../../../utils/refreshTokenHelper" import forceLogoutHelper from "../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../utils/errorHandlingHelper" import fetchHelper from "../../../utils/fetchHelper" const handleFunc = async (event: any, authToken: any = null) => { let data: any = { users: [] } const token = authToken ?? await getTokenHelper(event) const query = getQuery(event) const bpartnerId = query?.bpartnerId if (!bpartnerId) return data const byId: Record = {} const addUsers = (records: any[]) => { for (const u of records || []) { if (!u?.id) continue byId[u.id] = { id: u.id, // iDempiere login name is AD_User.Name; fall back to Value. username: u.Name || u.Value || '', name: u.Name || '', // Greeting source: prefer Description, fall back to Name (see send-credentials). description: u.Description || '', value: u.Value || '', email: u.EMail || '', password: u.Password || '', hasPassword: !!u.Password, isLoginUser: !!u.Password, } } } // Only the users attached to this bpartner via C_BPartner_ID (full record → Password incl.). const res1: any = await fetchHelper(event, `models/ad_user?$filter=C_BPartner_ID eq ${bpartnerId} and IsActive eq true&$top=200`, 'GET', token, null) addUsers(res1?.records || []) data = { users: Object.values(byId), status: 200, message: '' } return data } export default defineEventHandler(async (event) => { let data: any = { users: [] } try { data = await handleFunc(event) } catch (err: any) { try { const authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch (error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, data) } } return data })