[], 'total' => 0 ]; $dataPoints = [ [ 'Name' => 'Item Purchases', 'Points' => ['Purchases'] ], [ 'Name' => 'Sale of Goods', 'Points' => ['Sales', 'Commissions'] ], [ 'Name' => 'Group Payouts', 'Points' => ['Group Payouts'] ] ]; foreach($dataPoints as $dataPoint) { $newColumn = ['name' => $dataPoint['Name'], 'total' => 0]; foreach($dataPoint['Points'] as $transactionType) { $newColumn['total'] += Transaction::where('user_id', Auth::user()->id) ->where('transaction_type_id', TransactionType::IDFromType($transactionType)) ->where(function($query) use($request) { if(!$request->has('filter')) return $query; $now = Carbon::now(); switch($request->get('filter')) { case 'pastday': return $query->where('created_at', '>', $now->subDay()); case 'pastweek': return $query->where('created_at', '>', $now->subWeek()); case 'pastmonth': return $query->where('created_at', '>', $now->subMonth()); case 'pastyear': return $query->where('created_at', '>', $now->subYear()); default: return $query; } }) ->sum('delta'); } array_push($result['columns'], $newColumn); $result['total'] += $newColumn['total']; } return response($result); } public function userTransactions(Request $request) { $validator = Validator::make($request->all(), [ 'filter' => ['required', 'in:purchases,sales,commissions,grouppayouts'] ]); if($validator->fails()) return ValidationHelper::generateValidatorError($validator); $valid = $validator->valid(); $resultData = []; $transactionType = 0; switch($valid['filter']) { case 'purchases': $transactionType = TransactionType::where('name', 'Purchases')->first(); break; case 'sales': $transactionType = TransactionType::where('name', 'Sales')->first(); break; case 'commissions': $transactionType = TransactionType::where('name', 'Commissions')->first(); break; case 'grouppayouts': $transactionType = TransactionType::where('name', 'Group Payouts')->first(); break; } $transactions = Transaction::where(function($query) use($valid) { if($valid['filter'] == 'sales') return $query->where('seller_id', Auth::user()->id); return $query->where('user_id', Auth::user()->id); }) ->where('transaction_type_id', $transactionType->id) ->orderByDesc('id') ->cursorPaginate(30); $prevCursor = $transactions->previousCursor(); $nextCursor = $transactions->nextCursor(); foreach($transactions as $transaction) { $user = null; if($valid['filter'] != 'sales') $user = $transaction->seller; else $user = $transaction->user; $asset = null; if($transactionType->format != '') $asset = [ 'url' => route('shop.asset', ['asset' => $transaction->asset, 'assetName' => Str::slug($transaction->asset->name, '-')]), 'name' => $transaction->asset->name ]; array_push($resultData, [ 'date' => $transaction->created_at->isoFormat('lll'), 'member' => $user->userToJson(), 'description' => $transactionType->format, 'amount' => $transaction->delta, 'item' => $asset ]); } return response([ 'data' => $resultData, 'prev_cursor' => ($prevCursor ? $prevCursor->encode() : null), 'next_cursor' => ($nextCursor ? $nextCursor->encode() : null) ]); } }