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;
|
|||
|
|
}
|
|||
|
|
}
|