/** * 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)); }
/** * 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); }