57 lines
1.3 KiB
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);
|
|
}
|
|
}
|