105 lines
2.5 KiB
PHP
105 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
|
|
|
class Sewa extends Model
|
|
{
|
|
use HasFactory, SoftDeletes;
|
|
|
|
protected $fillable = [
|
|
'user_id',
|
|
'paket_id',
|
|
'kota_id',
|
|
'ongkir',
|
|
'tanggal_mulai',
|
|
'tanggal_selesai',
|
|
'lokasi',
|
|
'catatan',
|
|
'total_harga',
|
|
'status',
|
|
'bukti_pembayaran',
|
|
'tanggal_pembayaran',
|
|
'jenis_jaminan',
|
|
'foto_jaminan',
|
|
'nominal_pembayaran'
|
|
];
|
|
|
|
protected $casts = [
|
|
'tanggal_mulai' => 'datetime',
|
|
'tanggal_selesai' => 'datetime',
|
|
'tanggal_pembayaran' => 'datetime',
|
|
];
|
|
|
|
protected $dates = [
|
|
'tanggal_mulai',
|
|
'tanggal_selesai',
|
|
'tanggal_pembayaran',
|
|
'deleted_at'
|
|
];
|
|
|
|
// Relasi dengan User
|
|
public function user()
|
|
{
|
|
return $this->belongsTo(User::class);
|
|
}
|
|
|
|
// Relasi dengan Paket
|
|
public function paket()
|
|
{
|
|
return $this->belongsTo(Paket::class);
|
|
}
|
|
|
|
// Relasi dengan PaketOngkirKota
|
|
public function kota()
|
|
{
|
|
return $this->belongsTo(PaketOngkirKota::class, 'kota_id');
|
|
}
|
|
|
|
public function chats()
|
|
{
|
|
return $this->hasMany(Chat::class);
|
|
}
|
|
|
|
// Accessor untuk status yang lebih mudah dibaca
|
|
public function getStatusLabelAttribute()
|
|
{
|
|
return match($this->status) {
|
|
'pending' => 'Menunggu Konfirmasi',
|
|
'disetujui' => 'Disetujui',
|
|
'ditolak' => 'Ditolak',
|
|
'selesai' => 'Selesai',
|
|
'dibatalkan' => 'Dibatalkan',
|
|
default => ucfirst($this->status)
|
|
};
|
|
}
|
|
|
|
// Accessor untuk total durasi sewa dalam hari
|
|
public function getDurasiSewaAttribute()
|
|
{
|
|
return $this->tanggal_mulai->diffInDays($this->tanggal_selesai) + 1;
|
|
}
|
|
|
|
// Scope untuk mencari sewa berdasarkan status
|
|
public function scopeStatus($query, $status)
|
|
{
|
|
return $query->where('status', $status);
|
|
}
|
|
|
|
// Scope untuk sewa yang aktif
|
|
public function scopeAktif($query)
|
|
{
|
|
return $query->whereIn('status', ['disetujui'])
|
|
->where('tanggal_selesai', '>=', now());
|
|
}
|
|
|
|
// Scope untuk riwayat sewa
|
|
public function scopeRiwayat($query)
|
|
{
|
|
return $query->whereIn('status', ['selesai', 'dibatalkan', 'ditolak'])
|
|
->orWhere('tanggal_selesai', '<', now());
|
|
}
|
|
}
|