user(); $start = now()->subDays(30); $end = $start->copy()->addDays(29); /** @var \Illuminate\Database\Eloquent\Collection */ $ledgers = Ledger::select(['date', 'sales', 'expenditure']) ->whereBetween('date', [$start->format('Y-m-d'), $end->format('Y-m-d')]) ->when( $employee->isAdministrator(), function ($query) use ($request) { if ($request->filled('store_id')) { return $query->where('store_id', $request->input('store_id')); } if (! $request->anyFilled(['province_code', 'city_code'])) { return; } $query->whereHas('store', function ($query) use ($request) { $request->whenFilled('province_code', fn ($code) => $query->where('region->provinceCode', $code)); $request->whenFilled('city_code', fn ($code) => $query->where('region->cityCode', $code)); }); }, fn ($query) => $query->where('store_id', $employee->store_id ?: 0), ) ->get() ->keyBy('date'); $data = []; do { $ledger = $ledgers->get( $date = $start->format('Y-m-d') ); $data[] = [ 'date' => $date, 'sales' => trim_zeros($ledger->sales ?? 0), 'expenditure' => trim_zeros($ledger->expenditure ?? 0), ]; $start->addDay(); } while ($start->lte($end)); return $data; } }