123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace App\Models;
- use App\Http\Requests\IndexHelper;
- use App\Models\Enums\AssetACL;
- use App\Models\Scopes\CompanyScope;
- use EloquentFilter\Filterable;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Database\Eloquent\Factories\HasFactory;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\SoftDeletes;
- use Illuminate\Support\Facades\Auth;
- use App\Models\Enums\DisplayIndexObjectType;
- /**
- * @method static \Illuminate\Database\Eloquent\Builder allowed()
- */
- class Asset extends Model
- {
- use HasFactory, Filterable,SoftDeletes,IndexHelper;
- protected $fillable = [
- "name", "code", "description", "company_id", "status", "created_by",
- "owner", "address", "group_id", "geo_address_code", "acl",
- "whitelist", "latitude", "longitude","parent_id", "path",
- "equity_interest","developer","date_completed","total_floor_area","contact_person","contact_phone","contact_email","property","building_type_description","area_unit"
- ];
- protected $casts = [
- 'created_at' => 'datetime:Y-m-d H:i:s',
- 'updated_at' => 'datetime:Y-m-d H:i:s',
- ];
- protected static function booted(): void
- {
- static::addGlobalScope(new CompanyScope);
- static::creating(function (Asset $asset){
- $type =DisplayIndexObjectType::ASSET;
- $displayIndex = IndexHelper::getObjectMaxIndex($type);
- $asset->display_id =$displayIndex;
- });
- }
- public function scopeAllowed(Builder $query): void
- {
- $query->where(function (Builder $query) {
- return $query->where('acl', AssetACL::CUSTOM->value)->where('whitelist', 'like', '%,' . Auth::id() . ',%');
- })->orWhere(function (Builder $query) {
- return $query->where('acl', AssetACL::PRIVATE->value)->where('created_by', Auth::id());
- });
- }
- public function children(){
- return $this->hasMany(Asset::class ,'parent_id');
- }
- public function parent(){
- return $this->belongsTo(Asset::class ,'parent_id');
- }
- public function requirementGroups(){
- return $this->hasMany(RequirementGroup::class ,'asset_id');
- }
- public function requirements(){
- return $this->hasMany(Requirement::class ,'asset_id');
- }
- public function plans(){
- return $this->hasMany(Plan::class ,'asset_id');
- }
- public function projects(){
- return $this->belongsToMany(Project::class,'project_asset');
- }
- //获取子级需求数量
- public function getTotalRequirementsCountAttribute()
- {
- $childIds = [];
- Asset::where('path','like','%,'.$this->id.',%')->get('id')->each(function ($id)use (&$childIds){
- $childIds[]=$id['id'];
- });
- return Requirement::whereIn('asset_id',$childIds)->count();
- }
- //获取子级计划数量
- public function getTotalPlansCountAttribute()
- {
- $childIds = [];
- Asset::where('path','like','%,'.$this->id.',%')->get('id')->each(function ($id)use (&$childIds){
- $childIds[]=$id['id'];
- });
- return Plan::whereIn('asset_id',$childIds)->count();
- }
- public function library(){
- return $this->hasMany(Library::class ,'asset_id')->where('type', 'asset');
- }
- public function createdBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo
- {
- return $this->belongsTo(User::class, 'created_by');
- }
- public function byOwner(): \Illuminate\Database\Eloquent\Relations\BelongsTo
- {
- return $this->belongsTo(User::class, 'owner');
- }
- public function assetGroup(): \Illuminate\Database\Eloquent\Relations\BelongsTo
- {
- return $this->belongsTo(AssetGroup::class, 'group_id');
- }
- public function projectRequirementsGroup(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
- {
- return $this->belongsToMany(RequirementGroup::class, 'project_requirement');
- }
- }
|