예제 #1
0
 /**
  * Test numberOfBills method works.
  */
 public function test_number_of_bills()
 {
     $this->actingAs($this->user)->assertEquals(2, CampaignStatistics::numberOfBills($this->campaign->number, $this->campaign->year));
 }
예제 #2
0
 /**
  * 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);
 }