<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Service extends Model
{
use HasFactory;
use SoftDeletes;
protected $fillable = [
"garansi",
"pelanggan_id",
"pengguna_id",
"teknisi_id",
"sale_id",
"no_service",
"merk",
"tipe",
"kerusakan",
"deskripsi",
"kelengkapan",
"kelengkapan_unit",
"fungsi_tombol",
"arus_charger",
"kondisi_layar",
"status",
"imei1",
"imei2",
"tanggal",
"tanggal_selesai",
"status",
"biaya",
"uang_bayar",
"metode_bayar",
"status_pembayaran",
"color",
"lama_pemakaian",
"status_service",
"status_pesan",
"riwayat_servis",
"status_transaksi",
"pin",
"pola",
"sales_out",
"kasir_out",
"jam_selesai",
"jam_mulai",
"follow_up",
"bukti_transfer_dp",
"catatan_teknisi",
];
public function pelanggan()
{
return $this->belongsTo(Pelanggan::class)->withDefault([
'nama_pelanggan'=>'-'
]);
}
public function pengguna(): BelongsTo
{
return $this->belongsTo(Pengguna::class, 'pengguna_id', 'id')->withDefault([
'nama_pengguna'=>'-'
]);
}
// public function teknisi()
// {
// return $this->belongsTo(Teknisi::class)->withDefault([
// 'nama_teknisi'=>'-'
// ]);
// }
public function teknisi()
{
return $this->belongsTo(Pengguna::class,'teknisi_id')->withDefault([
'nama_teknisi'=>'-',
'nama_pengguna'=>'-'
]);
}
public function sales(): BelongsTo
{
return $this->belongsTo(Pengguna::class, 'sale_id', 'id')->withDefault([
'nama_pengguna'=>'-'
]);
}
public function detail()
{
return $this->hasMany(DetailService::class);
}
public function sparepart_luar()
{
return $this->hasMany(SparepartLuar::class);
}
public function pembayaran_service()
{
return $this->hasMany(PembayaranService::class);
}
public function refund()
{
return $this->hasMany(refund::class);
}
public function getTotalJualSparepartAttribute()
{
$total = 0;
$total_sl = 0;
foreach ($this->detail as $d) {
$total += $d->total_sparepart;
}
foreach ($this->sparepart_luar as $sl) {
$total_sl += $sl->total_sparepart;
}
$totalFinal = $total + $total_sl;
return $totalFinal;
}
public function getTotalJualSparepartDalamAttribute()
{
$total = 0;
foreach ($this->detail as $d) {
$total += $d->total_sparepart;
}
return $total;
}
public function getTotalJualSparepartLuarAttribute()
{
$total_sl = 0;
foreach ($this->sparepart_luar as $sl) {
$total_sl += $sl->total_sparepart;
}
return $total_sl;
}
public function getTotalModalSparepartAttribute()
{
$total = 0;
foreach ($this->detail as $d) {
$total += $d->modal_sparepart;
}
return $total;
}
public function getTotalModalSparepartLuarAttribute()
{
$total = 0;
foreach ($this->sparepart_luar as $sl) {
$total += $sl->modal_sparepart;
}
return $total;
}
public function getGrandTotalAttribute()
{
$total = 0;
$total_SL = 0;
foreach ($this->detail as $d) {
$total += $d->total_sparepart;
}
foreach ($this->sparepart_luar as $SL) {
$total += $SL->total_sparepart;
}
$biaya = $this->biaya;
return $total + $biaya + $total_SL;
}
public function getTotalPembayaranServiceAttribute()
{
$total = 0;
foreach ($this->pembayaran_service as $pembayaran_service) {
$total += $pembayaran_service->uang_bayar;
}
return $total + $this->uang_bayar;
}
public function getStatusLunasAttribute()
{
if ($this->biaya != 0) {
if ($this->total_pembayaran_service < $this->grand_total) {
return "Belum Lunas";
} else if ($this->total_pembayaran_service >= $this->grand_total) {
return "Sudah Lunas";
}
} else if ($this->biaya == 0) {
return "Belum Ditanggapi";
}
}
public function getStatusPembayaranLabelAttribute()
{
$status_pembayaran = "";
switch ($this->status_pembayaran) {
case "belum_ditanggapi":
$status_pembayaran = "Belum Ditanggapi";
break;
case "belum_lunas":
$status_pembayaran = "Belum Lunas";
break;
case "lunas":
$status_pembayaran = "Lunas";
break;
}
return $status_pembayaran;
}
public function getTotalSparepartTokoAttribute()
{
$total = 0;
foreach ($this->detail as $d) {
if ($d->sparepart->kategoriItem->nama_kategori == "Sparepart") {
$total += $d->sparepart->harga_item;
}
}
return $total;
}
public function getTotalSparepartLuarAttribute()
{
$total = 0;
foreach ($this->detail as $d) {
if ($d->sparepart->kategoriItem->nama_kategori == "Sparepart Luar") {
$total += $d->sparepart->harga_item;
}
}
return $total;
}
public function scopeCari($query, $name)
{
return $query->whereHas("pelanggan", function ($q) use ($name) {
$q->where("nama_pelanggan", "like", "%" . $name . "%")->orWhere("no_service", $name)->orWhere("telp_pelanggan", "like", "%" . $name . "%");
});
}
public function scopeJenis($query, $request)
{
return $query->whereHas('detail.sparepart', function ($query) use ($request) {
$query->where('jenis_item_id', $request);
});
}
public function scopeTanggal($query, $begin, $end)
{
return $query->whereBetween("tanggal", [$begin->format('Y-m-d'), $end->format('Y-m-d')]);
}
public function scopeCreated($query, $begin, $end)
{
return $query->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')]);
}
public function scopeSelesai($query, $begin, $end)
{
return $query->whereBetween("tanggal_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')]);
}
public static function boot()
{
parent::boot();
self::deleting(function ($service) {
$service->detail()->each(function ($detail) {
$detail->delete();
});
$service->sparepart_luar()->each(function ($sparepart_luar) {
$sparepart_luar->delete();
});
$service->pembayaran_service()->each(function ($pembayaran_service) {
$pembayaran_service->delete();
});
$service->refund()->each(function ($refund) {
$refund->delete();
});
});
}
public function tokos()
{
return $this->morphToMany(Toko::class, 'tokoable', 'tokoables', 'tokoable_id', 'toko_id')
->where('tokoable_type', Service::class);
}
public function scopeFilterToko($query, $toko_id = null)
{
if ($toko_id == null) {
return $query->whereHas("tokos", function ($q) {
$q->whereIn('tokos.id',auth()->user()->role->tokos->pluck('id')->toArray() ?? []);
});
} else {
return $query->whereHas("tokos", function ($q)use ($toko_id) {
$q->where('tokos.id',$toko_id);
});
}
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]