'integer', 'estimated_cost' => 'decimal:2', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * 状态常量 */ const STATUS_DRAFT = 'draft'; // 草稿 const STATUS_PENDING = 'pending'; // 审批中 const STATUS_APPROVED = 'approved'; // 已通过 const STATUS_REJECTED = 'rejected'; // 已拒绝 const STATUS_CANCELLED = 'cancelled'; // 已撤销 /** * 关联用户 */ public function user() { return $this->belongsTo(User::class, 'user_id'); } /** * 关联行程明细 */ public function itineraries() { return $this->hasMany(BusinessTripItinerary::class, 'business_trip_id'); } /** * 关联审批单 */ public function approvalOrder() { return $this->belongsTo(ApprovalOrder::class, 'approval_order_id'); } /** * 计算总天数 */ public function getDurationDays(): int { if (!$this->start_date || !$this->end_date) { return 0; } $start = \DateTime::createFromFormat('Y-m-d', $this->start_date); $end = \DateTime::createFromFormat('Y-m-d', $this->end_date); if (!$start || !$end) { return 0; } return $end->diff($start)->days + 1; } /** * 判断是否可以编辑 */ public function canEdit(): bool { return $this->status === self::STATUS_DRAFT; } /** * 判断是否可以提交 */ public function canSubmit(): bool { return $this->status === self::STATUS_DRAFT; } /** * 判断是否可以取消 */ public function canCancel(): bool { return $this->status === self::STATUS_PENDING; } }