65 lines
2.4 KiB
PHP
65 lines
2.4 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use App\Models\User;
|
||
use App\Services\LatePenaltyService;
|
||
use Carbon\Carbon;
|
||
use Illuminate\Console\Command;
|
||
use Morilog\Jalali\Jalalian;
|
||
|
||
class SendDailyLateReport extends Command
|
||
{
|
||
protected $signature = 'late:daily-report {--date=}';
|
||
|
||
protected $description = 'Send daily late-penalty report to admins via Bale';
|
||
|
||
public function handle(LatePenaltyService $service): int
|
||
{
|
||
$date = $this->option('date')
|
||
? Carbon::parse($this->option('date'))->startOfDay()
|
||
: Carbon::yesterday()->startOfDay();
|
||
|
||
$start = $date->copy()->startOfDay();
|
||
$end = $date->copy()->endOfDay();
|
||
$jalali = Jalalian::fromCarbon($date)->format('Y/m/d');
|
||
|
||
$entries = $service->firstEntriesBetween($start, $end)
|
||
->filter(fn ($att) => (int) ($att->late_minutes ?? 0) > 0 || (int) ($att->daily_fine_amount ?? 0) > 0)
|
||
->values();
|
||
|
||
if ($entries->isEmpty()) {
|
||
$message = "📋 گزارش تأخیر روزانه\nتاریخ: {$jalali}\n\nامروز تأخیر مشمول جریمه ثبت نشده است.";
|
||
$service->sendToAdmins($message);
|
||
$this->info('Daily late report sent (empty).');
|
||
|
||
return self::SUCCESS;
|
||
}
|
||
|
||
$lines = ["📋 گزارش تأخیر روزانه", "تاریخ: {$jalali}", ""];
|
||
$totalFine = 0;
|
||
|
||
foreach ($entries as $att) {
|
||
$name = $service->userName($att->user_identity);
|
||
$enter = Carbon::parse($att->entered_at)->format('H:i');
|
||
$late = (int) $att->late_minutes;
|
||
$fineMin = (int) $att->daily_fine_minutes;
|
||
$fine = (int) $att->daily_fine_amount;
|
||
$totalFine += $fine;
|
||
|
||
$lines[] = "• {$name}";
|
||
$lines[] = " ورود: {$enter} | تأخیر: {$late} دقیقه";
|
||
$lines[] = $fineMin > 0
|
||
? " جریمه روزانه: {$fineMin} دقیقه × " . number_format(LatePenaltyService::FINE_PER_MINUTE) . " = " . $service->formatAmount($fine)
|
||
: " جریمه روزانه: ۰ (داخل ارفاق ۱۵ دقیقهای)";
|
||
$lines[] = "";
|
||
}
|
||
|
||
$lines[] = "جمع جریمه روز: " . $service->formatAmount($totalFine);
|
||
$service->sendToAdmins(implode("\n", $lines));
|
||
$this->info('Daily late report sent.');
|
||
|
||
return self::SUCCESS;
|
||
}
|
||
}
|