Adding delay and penalty calculations
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user