Anons79 Mini Shell

Directory : /home/aplikasiposinfo/public_html/joglocell.fixmate.id/app/Models/
Upload File :
Current File : /home/aplikasiposinfo/public_html/joglocell.fixmate.id/app/Models/Service.php

<?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",
        'diskon',
        'diskon_persen',
        'diskon_poin'

    ];

    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->where(function ($w) use ($name) {
            $w->whereHas("pelanggan", function ($q) use ($name) {
                $q->where("nama_pelanggan", "like", "%" . $name . "%")->orWhere("telp_pelanggan", "like", "%" . $name . "%");
            })->orWhere("no_service", $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)
    {
        if ($begin->format('Y-m-d') == $end->format('Y-m-d')) {
            return $query->whereDate("tanggal", $begin->format('Y-m-d'));
        }
        return $query->whereBetween("tanggal", [$begin->format('Y-m-d'), $end->format('Y-m-d')]);
    }
    public function scopeCreated($query, $begin, $end)
    {
        if ($begin->format('Y-m-d') == $end->format('Y-m-d')) {
            return $query->whereDate("created_at", $begin->format('Y-m-d'));
        }
        return $query->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')]);
    }
    public function scopeSelesai($query, $begin, $end)
    {
        if ($begin->format('Y-m-d') == $end->format('Y-m-d')) {
            return $query->whereDate("tanggal_selesai", $begin->format('Y-m-d'));
        }
        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);
            });
        }
    }

    public function scopeWhereDateBetween($query, $fieldName, $rangeDate)
    {
        return $query->whereDate($fieldName, '>=', $rangeDate[0])->whereDate($fieldName, '<=', $rangeDate[1]);
    }

    public function referrrals()
    {
        return $this->morphToMany(ReferralPelanggan::class, 'referralable', 'referralables', 'referralable_id', 'referral_pelanggan_id');
    }

    public function reviews(){
        return $this->morphToMany(ReviewPelanggan::class, 'reviewable', 'reviewables', 'reviewable_id', 'review_pelanggan_id');
    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]