/** * Test numberOfBills method works. */ public function test_number_of_bills() { $this->actingAs($this->user)->assertEquals(2, CampaignStatistics::numberOfBills($this->campaign->number, $this->campaign->year)); }
/** * Return details about number of bills in given campaigns compared. * * @param array $campaign * @param array $campaignToCompare * @return array */ public static function detailsAboutNumberOfBills($campaign, $campaignToCompare) { $campaignBills = CampaignStatistics::numberOfBills($campaign['number'], $campaign['year']); $campaignToCompareBills = CampaignStatistics::numberOfBills($campaignToCompare['number'], $campaignToCompare['year']); $translationData = ['campaign_number' => $campaign['number'], 'campaign_year' => $campaign['year'], 'bills' => $campaignBills, 'other_campaign_number' => $campaignToCompare['number'], 'other_campaign_year' => $campaignToCompare['year']]; $baseOutput = ['number_of_bills' => $campaignBills, 'number_of_bills_in_campaign_to_compare' => $campaignToCompareBills, 'number_of_bills_label' => trans('statistics.details_about_number_of_bills_label', ['campaign_number' => $campaign['number'], 'campaign_year' => $campaign['year']]), 'number_of_bills_in_campaign_to_compare_label' => trans('statistics.details_about_number_of_bills_label', ['campaign_number' => $campaignToCompare['number'], 'campaign_year' => $campaignToCompare['year']])]; // Handle case when both campaigns have no bills if ($campaignBills <= 0 && $campaignToCompareBills <= 0) { $output = ['message' => trans('statistics.details_about_number_of_bills_equal_trend', $translationData), 'title' => trans('statistics.details_about_number_of_bills_equal_trend_title')]; return array_merge($output, $baseOutput); } // Handle case when only first campaign contain bills if ($campaignBills > 0 && $campaignToCompareBills <= 0) { $translationData['plus'] = $campaignBills; $output = ['message' => trans('statistics.details_about_number_of_bills_up_trend', $translationData), 'title' => trans('statistics.details_about_number_of_bills_up_trend_title', ['percent' => 100])]; return array_merge($output, $baseOutput); } // Handle case when only campaign to compare contains bills if ($campaignBills <= 0 && $campaignToCompareBills > 0) { $translationData['minus'] = $campaignToCompareBills; $output = ['message' => trans('statistics.details_about_number_of_bills_down_trend', $translationData), 'title' => trans('statistics.details_about_number_of_bills_down_trend_title', ['percent' => 100])]; return array_merge($output, $baseOutput); } // Calculate difference and make sure is always positive $difference = $campaignBills - $campaignToCompareBills; if ($difference < 0) { $difference *= -1; } $divider = $campaignBills; if ($divider < $campaignToCompareBills) { $divider = $campaignToCompareBills; } $percent = number_format($difference * 100 / $divider, 2); // Handle case when first campaign have more bills if ($campaignBills > $campaignToCompareBills) { $translationData['plus'] = $difference; $output = ['message' => trans('statistics.details_about_number_of_bills_up_trend', $translationData), 'title' => trans('statistics.details_about_number_of_bills_up_trend_title', ['percent' => $percent])]; } else { if ($campaignBills < $campaignToCompareBills) { // Handle case when campaign to compare have more bills $translationData['minus'] = $difference; $output = ['message' => trans('statistics.details_about_number_of_bills_down_trend', $translationData), 'title' => trans('statistics.details_about_number_of_bills_down_trend_title', ['percent' => $percent])]; } else { $output = ['message' => trans('statistics.details_about_number_of_bills_equal_trend', $translationData), 'title' => trans('statistics.details_about_number_of_bills_equal_trend_title')]; } } return array_merge($output, $baseOutput); }