Beispiel #1
0
 /**
  * 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;
 }
Beispiel #2
0
 /**
  * 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()]);
 }
Beispiel #3
0
 /**
  * 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();
 }