ifnex/04_Laravel/app/Traits/Auditable.php
Kazem Alghasi 02c29db696 feat(core): implement order approval flow, credit system, and import invoicing
Introduce a comprehensive set of commercial features including a multi-step
order approval workflow, customer credit management, and specialized
import service invoicing.

Key changes:
- Implement `pending_approval` and `approved` shipment statuses to allow
  staff verification before customer payment.
- Add a credit system to `User` model with `credit_limit` and `credit_used`
  to manage customer balances and debts.
- Develop a new `importInvoice` PDF generation service following the
  "Sheet ENG Invoice" specification for import services.
- Add Filament resources for managing Audit Logs, Commitment Forms,
  Customer Credits, and Shipment Checklists.
- Implement staff-specific APIs for order approval/rejection and
  customer financial status monitoring.
- Integrate Kavenegar SMS service for mobile verification and notifications.
- Add bulk tracking import functionality via CSV/Excel.
- Update WordPress bridge assets (CSS/JS) to support the new multi-step
  order form UI and updated redirection logic.
- Update deployment configurations and documentation to reflect new
  production domains and feature sets.
2026-09-03 06:04:20 +03:30

38 lines
1.1 KiB
PHP

<?php
namespace App\Traits;
use App\Models\AuditLog;
use Illuminate\Database\Eloquent\Model;
trait Auditable
{
protected static function bootAuditable(): void
{
static::created(function (Model $model) {
AuditLog::log('created', $model, [], $model->getAttributes(), "ایجاد رکورد جدید");
});
static::updated(function (Model $model) {
$changes = $model->getChanges();
$original = $model->getOriginal();
// حذف فیلدهای زمانی از تغییرات
unset($changes['updated_at'], $original['updated_at']);
if (!empty($changes)) {
AuditLog::log('updated', $model, $original, $changes, "به‌روزرسانی رکورد");
}
});
static::deleted(function (Model $model) {
AuditLog::log('deleted', $model, $model->getAttributes(), [], "حذف رکورد");
});
}
public function getAuditableChanges(): array
{
return $this->getChanges();
}
}