commission overrides in org Settings page
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* Centralized commission resolution — 4-level hierarchy:
|
||||
* Job Override → Individual Override → Role Override → Org Default
|
||||
*/
|
||||
export function resolveCommission({
|
||||
jobOverride,
|
||||
userId,
|
||||
userCommissionOverrides = [],
|
||||
orgMembers = [],
|
||||
roleCommissionOverrides = [],
|
||||
orgCommissionDefaults = {},
|
||||
}) {
|
||||
// Level 1: Job Override (highest priority)
|
||||
if (jobOverride) {
|
||||
return { source: 'job', type: jobOverride.type, rate: Number(jobOverride.rate) || 0 };
|
||||
}
|
||||
|
||||
// Level 2: Individual User Override
|
||||
if (userId) {
|
||||
const userOverride = userCommissionOverrides.find(o => o.enabled && o.userId === userId);
|
||||
if (userOverride) {
|
||||
return { source: 'user', type: userOverride.type, rate: Number(userOverride.rate) || 0 };
|
||||
}
|
||||
}
|
||||
|
||||
// Level 3: Role Override
|
||||
if (userId) {
|
||||
const member = orgMembers.find(m => m.userId === userId);
|
||||
if (member) {
|
||||
const roleOverride = roleCommissionOverrides.find(o => o.enabled && o.roleKey === member.roleKey);
|
||||
if (roleOverride) {
|
||||
return { source: 'role', type: roleOverride.type, rate: Number(roleOverride.rate) || 0, roleKey: member.roleKey };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Level 4: Org Default (lowest priority)
|
||||
return { source: 'org', type: orgCommissionDefaults.type, rate: Number(orgCommissionDefaults.rate) || 0 };
|
||||
}
|
||||
|
||||
export function findAssignedUserRoleKey(userId, orgMembers = []) {
|
||||
if (!userId) return null;
|
||||
const member = orgMembers.find(m => m.userId === userId);
|
||||
return member?.roleKey || null;
|
||||
}
|
||||
Reference in New Issue
Block a user