/** * Set the Sales Status based on the associated RLI's sales_stage * * @param Opportunity $bean * @param string $event * @param array $args */ public static function setSalesStatus(Opportunity $bean, $event, $args) { if (static::useRevenueLineItems() && $bean->ACLFieldAccess('sales_status', 'write')) { // we have a new bean so set the value to new and dump out if (empty($bean->fetched_row)) { $bean->sales_status = Opportunity::STATUS_NEW; return; } // Load forecast config so we have the sales_stage data. static::loadForecastSettings(); // we don't have a new row, so figure out what we need to set it to $closed_won = static::$settings['sales_stage_won']; $closed_lost = static::$settings['sales_stage_lost']; $won_rlis = count($bean->get_linked_beans('revenuelineitems', 'RevenueLineItems', array(), 0, -1, 0, "sales_stage in ('" . join("', '", $closed_won) . "')")); $lost_rlis = count($bean->get_linked_beans('revenuelineitems', 'RevenueLineItems', array(), 0, -1, 0, "sales_stage in ('" . join("', '", $closed_lost) . "')")); $total_rlis = count($bean->get_linked_beans('revenuelineitems', 'RevenueLineItems')); if ($total_rlis > $won_rlis + $lost_rlis || $total_rlis === 0) { // still in progress $bean->sales_status = Opportunity::STATUS_IN_PROGRESS; } else { // they are equal so if the total lost == total rlis then it's closed lost, // otherwise it's always closed won if ($lost_rlis == $total_rlis) { $bean->sales_status = Opportunity::STATUS_CLOSED_LOST; } else { $bean->sales_status = Opportunity::STATUS_CLOSED_WON; } } } }