'New', self::FULFILLMENT_CONFIRMED => 'Confirmed', self::FULFILLMENT_PREPARING => 'Preparing', self::FULFILLMENT_READY => 'Ready', self::FULFILLMENT_DELIVERED => 'Delivered', self::FULFILLMENT_CANCELLED => 'Cancelled', ]; public const PLATFORM_FEE_RATE = 0.035; protected $fillable = [ 'pay_order_id', 'qr_code_id', 'user_id', 'customer_name', 'customer_email', 'customer_phone', 'items', 'amount_ghs', 'platform_fee_ghs', 'merchant_amount_ghs', 'status', 'fulfillment_status', 'payment_reference', 'paid_at', 'metadata', ]; protected $casts = [ 'items' => 'array', 'amount_ghs' => 'decimal:2', 'platform_fee_ghs' => 'decimal:2', 'merchant_amount_ghs' => 'decimal:2', 'metadata' => 'array', 'paid_at' => 'datetime', ]; public function fulfillmentLabel(): string { return self::FULFILLMENT_STATUSES[$this->fulfillment_status ?? self::FULFILLMENT_NEW] ?? ucfirst((string) $this->fulfillment_status); } public function qrCode(): BelongsTo { return $this->belongsTo(QrCode::class); } public function merchant(): BelongsTo { return $this->belongsTo(User::class, 'user_id'); } }