<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
use HasFactory;
protected $fillable = [
'pengguna_id',
'kategori_item_id',
'jenis_item_id',
'nama_item',
'harga_item',
'biaya_item',
'tipe_jual',
'sku',
'lacak_stok',
'stok',
'stok_gudang',
'warna_item',
'bentuk_item',
'durasi_garansi',
'ket_waktu',
'gambar_item',
'pakai_notif',
'stok_minimal',
'merk_id'
];
public function kategoriItem()
{
return $this->belongsTo(KategoriItem::class)->withDefault([
'nama_kategori' => 'Tidak Ada'
]);
}
public function jenis_item()
{
return $this->belongsTo(JenisItem::class);
}
public function merk()
{
return $this->belongsTo(Merk::class);
}
public function detailServis()
{
return $this->hasMany(DetailService::class, 'item_id', 'id');
}
public function detailTransaksiBarangRusak()
{
return $this->hasMany(DetailTransaksiBarangRusak::class, 'item_id', 'id');
}
public function detail_pembelians()
{
return $this->hasMany(DetailPembelian::class, 'item_id', 'id');
}
public function getMarginHargaAttribute()
{
//margin harga dalam persen
if ($this->harga_item == 0) {
return 0;
}
return ($this->biaya_item - $this->harga_item) / $this->harga_item * 100;
}
public function detail_retur_penjualan()
{
return $this->hasMany(DetailReturPenjualan::class);
}
public function detail_retur_pembelian()
{
return $this->hasMany(DetailReturPembelian::class);
}
public function detail_garansi(){
return $this->hasMany(DetailGaransi::class);
}
public function detail_kirim_supplier(){
return $this->hasMany(DetailKirimSupplier::class);
}
public function getTotalReturPenjualanAttribute()
{
$detail_retur_penjualan = $this->detail_retur_penjualan;
$total = 0;
foreach ($detail_retur_penjualan as $data) {
$total += $data->qty;
}
return $total;
}
public function scopeKategori($query, $name)
{
return $query->where("kategori_item_id", $name);
}
public function scopeJenis($query, $name)
{
return $query->where("jenis_item_id", $name);
}
public function scopeSupplier($query, $name)
{
return $query->whereHas('detail_pembelians.pembelian',function($w)use($name){
$w->where('supplier_id',$name);
});
}
public function scopeMerk($query, $name)
{
return $query->whereHas('detailServis.service',function($w)use($name){
$w->where('merk',$name);
});
}
public function scopeCari($query, $name)
{
return $query->where("nama_item", "like", "%" . $name . "%");
}
public function scopeTanggal($query, $begin, $end)
{
return $query->whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')]);
}
public function stok_item_tokos()
{
return $this->hasMany(StokItemToko::class, 'item_id', 'id');
}
public function getStatusStokAttribute(){
$status = "Kosong";
if($this->stok <= $this->stok_minimal && $this->stok > 0){
$status = "Mau Habis";
} else if($this->stok > $this->stok_minimal) {
$status = "Tersedia";
}
return $status;
}
public function getStokTotalAttribute(){
return $this->stok + $this->stok_tertahan;
}
public function getStokTersediaAttribute(){
return $this->stok;
}
public function getStokTertahanAttribute(){
if(!$this->detailServis){
return 0;
}
return $this->detailServis()->whereHas('service',function($w){
$w->where('status_transaksi','proses');
})->sum('jumlah');
}
public function getStokReturPenjualanAttribute(){
if(!$this->detail_retur_penjualan){
return 0;
}
return $this->detail_retur_penjualan->whereNotNull('status_item')->sum('qty');
}
public function getStokReturPembelianAttribute(){
if(!$this->detail_retur_pembelian){
return 0;
}
return $this->detail_retur_pembelian->whereNotNull('status_item')->sum('qty');
}
public function getStokGaransiAttribute(){
if(!$this->detail_garansi){
return 0;
}
return $this->detail_garansi->sum('qty');
}
public function getStokRusakAttribute(){
if(!$this->detailTransaksiBarangRusak){
return 0;
}
return $this->detailTransaksiBarangRusak->sum('qty');
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]