예제 #1
0
 /**
  * Test totalBillsPrice method.
  */
 public function test_total_bills_price()
 {
     // Add one product to first bill
     $product = factory(\App\Product::class)->create(['user_id' => $this->user->id]);
     $billProduct = factory(\App\BillProduct::class)->create(['bill_id' => $this->bill->id, 'product_id' => $product->id]);
     // Add two products to the second bill
     $applicationProduct = factory(\App\ApplicationProduct::class)->create();
     $secondProduct = factory(\App\Product::class)->create(['user_id' => $this->user->id]);
     $billApplicationProduct = factory(\App\BillApplicationProduct::class)->create(['bill_id' => $this->bill->id, 'product_id' => $applicationProduct->id]);
     $secondBillProduct = factory(\App\BillProduct::class)->create(['bill_id' => $this->bill->id, 'product_id' => $secondProduct->id]);
     // Calculate the expected total bills price
     $expectedTotalBillsPrice = $billProduct->final_price + $billApplicationProduct->final_price + $secondBillProduct->final_price;
     $this->actingAs($this->user)->assertEquals($expectedTotalBillsPrice, CampaignStatistics::totalBillsPrice($this->campaign->number, $this->campaign->year));
 }
예제 #2
0
 /**
  * Return details about sales after two campaigns are compared.
  *
  * @param array $campaign
  * @param array $campaignToCompare
  * @return array
  */
 public static function detailsAboutSales($campaign, $campaignToCompare)
 {
     $campaignSales = CampaignStatistics::totalBillsPrice($campaign['number'], $campaign['year']);
     $campaignToCompareSales = CampaignStatistics::totalBillsPrice($campaignToCompare['number'], $campaignToCompare['year']);
     $translationData = ['campaign_number' => $campaign['number'], 'campaign_year' => $campaign['year'], 'sales' => $campaignSales, 'other_campaign_number' => $campaignToCompare['number'], 'other_campaign_year' => $campaignToCompare['year']];
     $baseOutput = ['sales' => $campaignSales, 'sales_in_campaign_to_compare' => $campaignToCompareSales, 'sales_label' => trans('statistics.details_about_sales_label', ['campaign_number' => $campaign['number'], 'campaign_year' => $campaign['year']]), 'sales_in_campaign_to_compare_label' => trans('statistics.details_about_sales_label', ['campaign_number' => $campaignToCompare['number'], 'campaign_year' => $campaignToCompare['year']])];
     // Handle case when both campaigns have no sales
     if ($campaignSales <= 0 && $campaignToCompareSales <= 0) {
         $output = ['message' => trans('statistics.details_about_sales_equal_trend', $translationData), 'title' => trans('statistics.details_about_sales_equal_trend_title')];
         return array_merge($output, $baseOutput);
     }
     // Handle case when only first campaign have sales
     if ($campaignSales > 0 && $campaignToCompareSales <= 0) {
         $translationData['plus'] = $campaignSales;
         $output = ['message' => trans('statistics.details_about_sales_up_trend', $translationData), 'title' => trans('statistics.details_about_sales_up_trend_title', ['percent' => 100])];
         return array_merge($output, $baseOutput);
     }
     // Handle case when only campaign to compare have sales
     if ($campaignSales <= 0 && $campaignToCompareSales > 0) {
         $translationData['minus'] = $campaignToCompareSales;
         $output = ['message' => trans('statistics.details_about_sales_down_trend', $translationData), 'title' => trans('statistics.details_about_sales_down_trend_title', ['percent' => 100])];
         return array_merge($output, $baseOutput);
     }
     // Calculate difference and make sure is always positive
     $difference = number_format($campaignSales - $campaignToCompareSales, 2);
     if ($difference < 0) {
         $difference = number_format($difference * -1, 2);
     }
     $divider = $campaignSales;
     if ($campaignSales < $campaignToCompareSales) {
         $divider = $campaignToCompareSales;
     }
     // Calculate percent
     $percent = number_format($difference * 100 / $divider, 2);
     // Handle case when first campaign have more sales
     if ($campaignSales > $campaignToCompareSales) {
         $translationData['plus'] = $difference;
         $translationData['sales'] = $campaignSales;
         $output = ['message' => trans('statistics.details_about_sales_up_trend', $translationData), 'title' => trans('statistics.details_about_sales_up_trend_title', ['percent' => $percent])];
     } else {
         if ($campaignSales < $campaignToCompareSales) {
             $translationData['minus'] = $difference;
             $translationData['sales'] = $campaignSales;
             $output = ['message' => trans('statistics.details_about_sales_down_trend', $translationData), 'title' => trans('statistics.details_about_sales_down_trend_title', ['percent' => $percent])];
         } else {
             $output = ['message' => trans('statistics.details_about_sales_equal_trend', $translationData), 'title' => trans('statistics.details_about_sales_equal_trend_title', ['percent' => $percent])];
         }
     }
     return array_merge($output, $baseOutput);
 }