1. 新增 HasDisplayFlowId trait,提供 display_flow_id accessor:僅顯示時剝除 flow_id 開頭的機台序號前綴,DB 仍存完整 serial+flow_id 唯一值供去重/冪等/對帳判斷。 2. Order 與 Invoice 兩 Model 套用此 trait。 3. 訂單詳情面板 (order-detail-panel) 與發票匯出 (SalesController) 改顯示 display_flow_id,呈現乾淨易讀的機台流水號。 4. accessor 具防禦性:機台關聯為 null 或舊的未前綴資料皆原樣顯示,不誤剝。 5. 新增測試驗證 display_flow_id 正確剝除序號前綴且 DB 值維持完整。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
68 lines
1.9 KiB
PHP
68 lines
1.9 KiB
PHP
<?php
|
||
|
||
namespace App\Models\Transaction;
|
||
|
||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||
use Illuminate\Database\Eloquent\Model;
|
||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||
use App\Traits\TenantScoped;
|
||
use App\Traits\HasDisplayFlowId;
|
||
|
||
class Invoice extends Model
|
||
{
|
||
// TenantScoped:自動以登入者 company_id 過濾(含 route-model binding 與列表查詢),
|
||
// 防止跨公司讀取/操作他人發票。console(佇列 Job / reconcile 命令)會自動跳過 scope,
|
||
// 系統身分仍可跨公司開立/對帳。
|
||
use HasFactory, SoftDeletes, TenantScoped, HasDisplayFlowId;
|
||
|
||
protected $fillable = [
|
||
'company_id',
|
||
'order_id',
|
||
'machine_id',
|
||
'flow_id',
|
||
'invoice_no',
|
||
'status',
|
||
'relate_number',
|
||
'amount',
|
||
'carrier_id',
|
||
'invoice_date',
|
||
'machine_time',
|
||
'last_checked_at',
|
||
'retry_count',
|
||
'voided_at',
|
||
'void_reason',
|
||
'remark',
|
||
'random_number',
|
||
'love_code',
|
||
'rtn_code',
|
||
'rtn_msg',
|
||
'metadata',
|
||
];
|
||
|
||
protected $casts = [
|
||
'amount' => 'decimal:2',
|
||
'invoice_date' => 'date',
|
||
'machine_time' => 'datetime',
|
||
'last_checked_at' => 'datetime',
|
||
'voided_at' => 'datetime',
|
||
'retry_count' => 'integer',
|
||
'metadata' => 'array',
|
||
];
|
||
|
||
// 發票狀態常數
|
||
public const STATUS_PENDING = 'pending'; // 已送出綠界、尚未確認
|
||
public const STATUS_ISSUED = 'issued'; // 已開立成功
|
||
public const STATUS_FAILED = 'failed'; // 綠界回失敗,待補開
|
||
public const STATUS_VOID = 'void'; // 已作廢
|
||
|
||
public function order()
|
||
{
|
||
return $this->belongsTo(Order::class);
|
||
}
|
||
|
||
public function machine()
|
||
{
|
||
return $this->belongsTo(\App\Models\Machine\Machine::class);
|
||
}
|
||
}
|