Example #1
0
 /**
  * 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);
 }