/** * Return number of bills, number user sold products, total price and total discount. * * @return array */ public static function billData() { // Build an array with all user bill ids $billIds = []; $bills = Bill::select('id')->where('user_id', Auth::user()->id)->get(); foreach ($bills as $bill) { $billIds[] = $bill->id; } $data = ['sold_products' => BillApplicationProduct::whereIn('bill_id', $billIds)->count() + BillProduct::whereIn('bill_id', $billIds)->count(), 'bills' => count($billIds), 'total_price' => BillApplicationProduct::whereIn('bill_id', $billIds)->sum('final_price') + BillProduct::whereIn('bill_id', $billIds)->sum('final_price')]; $data['total_discount'] = BillApplicationProduct::whereIn('bill_id', $billIds)->sum('price') + BillProduct::whereIn('bill_id', $billIds)->sum('price') - $data['total_price']; return $data; }
/** * Make ajax request to get paginated bills */ public function testBillsPagination() { $numberOfBills = 10; // Generate one user $user = factory(App\User::class)->create(); // Generate one client $client = $user->clients()->save(factory(App\Client::class)->make()); // Generate bills for ($i = 0; $i < $numberOfBills; $i++) { $user->bills()->save(factory(App\Bill::class)->make(['client_id' => $client->id])); } // Paginate results and compare with json response $pagination = Bill::select('bills.id', 'bills.campaign_number', 'bills.campaign_year', 'bills.payment_term', 'bills.other_details', 'clients.name as client_name')->where('bills.user_id', $user->id)->orderBy('bills.created_at', 'desc')->join('clients', function ($join) { $join->on('bills.client_id', '=', 'clients.id'); })->paginate(10); $this->actingAs($user)->get('/bills/get')->seeJson(['total' => $pagination->total(), 'per_page' => $pagination->perPage(), 'current_page' => $pagination->currentPage(), 'last_page' => $pagination->lastPage(), 'next_page_url' => $pagination->nextPageUrl(), 'prev_page_url' => $pagination->previousPageUrl()]); }
/** * Return bills that contain given product. * * @param int $productId * @param bool $paidBill * @param bool $isCustomProduct * @return array */ private static function billsThatContainProduct($productId, $paidBill = false, $isCustomProduct = false) { $billIds = []; if ($paidBill) { $paidBill = 1; } else { $paidBill = 0; } // Query in function of product type if ($isCustomProduct) { $billProducts = BillProduct::where('product_id', $productId)->get(); } else { $billProducts = BillApplicationProduct::where('product_id', $productId)->get(); } // Make sure products are returned if (!$billProducts) { return []; } // Build array with bill ids foreach ($billProducts as $billProduct) { $billIds[] = $billProduct->bill_id; } return Bill::select('bills.*', 'clients.name as client_name', 'campaigns.year as campaign_year', 'campaigns.number as campaign_number')->leftJoin('clients', 'bills.client_id', '=', 'clients.id')->leftJoin('campaigns', 'campaigns.id', '=', 'bills.campaign_id')->whereIn('bills.id', $billIds)->where('bills.user_id', Auth::user()->id)->where('bills.paid', $paidBill)->get(); }