65 lines
1.5 KiB
PHP
65 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\BiddingManagement\Models;
|
|
|
|
use App\Traits\HasPublicIdentifier;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
|
use Modules\ContractorManagement\Models\Contractor;
|
|
|
|
class BidInvitation extends Model
|
|
{
|
|
use HasPublicIdentifier;
|
|
|
|
protected $fillable = [
|
|
'bid_package_id', 'contractor_id', 'status',
|
|
'invited_at', 'responded_at', 'decline_reason',
|
|
];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'invited_at' => 'datetime',
|
|
'responded_at' => 'datetime',
|
|
];
|
|
}
|
|
|
|
public function package(): BelongsTo
|
|
{
|
|
return $this->belongsTo(BidPackage::class, 'bid_package_id');
|
|
}
|
|
|
|
public function contractor(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Contractor::class);
|
|
}
|
|
|
|
public function submission(): HasOne
|
|
{
|
|
return $this->hasOne(BidSubmission::class);
|
|
}
|
|
|
|
public function accept(): void
|
|
{
|
|
$this->update([
|
|
'status' => 'accepted',
|
|
'responded_at' => now(),
|
|
]);
|
|
}
|
|
|
|
public function decline(string $reason = null): void
|
|
{
|
|
$this->update([
|
|
'status' => 'declined',
|
|
'responded_at' => now(),
|
|
'decline_reason' => $reason,
|
|
]);
|
|
}
|
|
|
|
public function getHasSubmittedAttribute(): bool
|
|
{
|
|
return $this->submission()->exists();
|
|
}
|
|
}
|