Files
GSB-Construction/Modules/MaterialLogistics/app/Models/Warehouse.php

57 lines
1.3 KiB
PHP

<?php
namespace Modules\MaterialLogistics\Models;
use App\Traits\HasPublicIdentifier;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Modules\MaterialLogistics\Enums\WarehouseType;
use Modules\ProjectManagement\Models\Project;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Warehouse extends Model
{
use HasPublicIdentifier;
protected $fillable = [
'project_id', 'name', 'code', 'address', 'type', 'status',
];
protected function casts(): array
{
return [
'type' => WarehouseType::class,
];
}
public function stock(): HasMany
{
return $this->hasMany(WarehouseStock::class);
}
public function movements(): HasMany
{
return $this->hasMany(InventoryMovement::class);
}
public function getTotalValueAttribute(): float
{
return $this->stock->sum(fn (WarehouseStock $s) => (float) $s->quantity * (float) $s->unit_cost);
}
public function getItemCountAttribute(): int
{
return $this->stock()->where('quantity', '>', 0)->count();
}
public function scopeActive($query)
{
return $query->where('status', 'active');
}
public function project(): BelongsTo
{
return $this->belongsTo(Project::class);
}
}