use App\Helper;
use App\Mail\WeeklyReport;
use App\Models\Space;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendWeeklyReports implements ShouldQueue
{
//
public function handle()
{
$spaces = Space::all();
$week = date('W');
$lastWeekDate = date('Y-m-d', strtotime('-7 days'));
$currentDate = date('Y-m-d');
foreach ($spaces as $space) {
$totalSpent = DB::select('
SELECT SUM(amount) AS foo
FROM spendings
WHERE space_id = ? AND happened_on >= ? AND happened_on <= ?
', [$space->id, $lastWeekDate, $currentDate])[0]->foo;
$largestSpendingWithTag = DB::select('
SELECT spendings.amount AS amount, tags.name AS tag_name
FROM spendings
INNER JOIN tags ON spendings.tag_id = tags.id
WHERE spendings.space_id = ?
AND spendings.happened_on >= ?
AND spendings.happened_on <= ?
AND spendings.tag_id IS NOT NULL
ORDER BY spendings.amount DESC LIMIT 1', [$space->id, $lastWeekDate, $currentDate]);
foreach ($space->users as $user) {
if (Helper::arePlansEnabled() && $user->plan === 'standard') {
continue;
}
if ($user->weekly_report) {
Mail::to($user->email)->queue(new WeeklyReport(
$space,
$week,
$totalSpent,
$largestSpendingWithTag
));
}
}
}
}
}