/** * Test numberOfClients methods works as expected. */ public function test_number_of_clients() { $this->actingAs($this->user)->assertEquals(2, CampaignStatistics::numberOfClients($this->campaign->number, $this->campaign->year)); }
/** * Details about number of clients after comparing given campaigns. * * @param array $campaign * @param array $campaignToCompare * @return array */ public static function detailsAboutNumberOfClients($campaign, $campaignToCompare) { $campaignClients = CampaignStatistics::numberOfClients($campaign['number'], $campaign['year']); $campaignToCompareClients = CampaignStatistics::numberOfClients($campaignToCompare['number'], $campaignToCompare['year']); $translationData = ['campaign_number' => $campaign['number'], 'campaign_year' => $campaign['year'], 'clients' => $campaignClients, 'other_campaign_number' => $campaignToCompare['number'], 'other_campaign_year' => $campaignToCompare['year']]; $baseOutput = ['number_of_clients' => $campaignClients, 'number_of_clients_in_campaign_to_compare' => $campaignToCompareClients, 'number_of_clients_label' => trans('statistics.details_about_number_of_clients_label', ['campaign_number' => $campaign['number'], 'campaign_year' => $campaign['year']]), 'number_of_clients_in_campaign_to_compare_label' => trans('statistics.details_about_number_of_clients_label', ['campaign_number' => $campaignToCompare['number'], 'campaign_year' => $campaignToCompare['year']])]; // Handle case when both campaigns have no clients if ($campaignClients <= 0 && $campaignToCompareClients <= 0) { $translationData['clients'] = $campaignClients; $output = ['message' => trans('statistics.details_about_number_of_clients_equal_trend', $translationData), 'title' => trans('statistics.details_about_number_of_clients_equal_trend_title')]; return array_merge($output, $baseOutput); } // Handle case when only first campaign have clients who ordered if ($campaignClients > 0 && $campaignToCompareClients <= 0) { $translationData['clients'] = $campaignClients; $translationData['plus'] = $campaignClients; $output = ['message' => trans('statistics.details_about_number_of_clients_up_trend', $translationData), 'title' => trans('statistics.details_about_number_of_clients_up_trend_title', ['percent' => 100])]; return array_merge($output, $baseOutput); } // Handle case when only campaign to compare have clients who ordered if ($campaignClients <= 0 && $campaignToCompareClients > 0) { $translationData['clients'] = $campaignClients; $translationData['minus'] = $campaignToCompareClients; $output = ['message' => trans('statistics.details_about_number_of_clients_down_trend', $translationData), 'title' => trans('statistics.details_about_number_of_clients_down_trend_title', ['percent' => 100])]; return array_merge($output, $baseOutput); } // Calculate difference and make sure is always positive $difference = $campaignClients - $campaignToCompareClients; if ($difference < 0) { $difference *= -1; } $divider = $campaignClients; if ($divider < $campaignToCompareClients) { $divider = $campaignToCompareClients; } $percent = number_format($difference * 100 / $divider, 2); // First campaign have more clients if ($campaignClients > $campaignToCompareClients) { $translationData['plus'] = $difference; $output = ['message' => trans('statistics.details_about_number_of_clients_up_trend', $translationData), 'title' => trans('statistics.details_about_number_of_clients_up_trend_title', ['percent' => $percent])]; } else { if ($campaignClients < $campaignToCompareClients) { $translationData['minus'] = $difference; $output = ['message' => trans('statistics.details_about_number_of_clients_down_trend', $translationData), 'title' => trans('statistics.details_about_number_of_clients_down_trend_title', ['percent' => $percent])]; } else { $output = ['message' => trans('statistics.details_about_number_of_clients_equal_trend', $translationData), 'title' => trans('statistics.details_about_number_of_clients_equal_trend_title')]; } } return array_merge($output, $baseOutput); }