2017-05-22 21:32:22 -07:00
< ? php
2017-05-23 02:48:51 -07:00
namespace App\Models ;
2017-05-22 21:32:22 -07:00
use App\Http\Traits\UniqueUndeletedTrait ;
use Illuminate\Database\Eloquent\Model ;
use Log ;
use Watson\Validating\ValidatingTrait ;
use Illuminate\Database\Eloquent\SoftDeletes ;
use App\Models\SnipeModel ;
use App\Models\User ;
class Department extends SnipeModel
{
/**
* Whether the model should inject it ' s identifier to the unique
* validation rules before attempting validation . If this property
* is not set in the model it will default to true .
*
* @ var boolean
*/
protected $injectUniqueIdentifier = true ;
use ValidatingTrait , UniqueUndeletedTrait ;
protected $rules = [
2017-05-23 02:48:51 -07:00
'name' => 'required|max:255' ,
2017-05-22 21:32:22 -07:00
'user_id' => 'required' ,
2017-05-23 02:48:51 -07:00
'location_id' => 'numeric|nullable' ,
'company_id' => 'numeric|nullable' ,
2017-05-23 02:49:00 -07:00
'manager_id' => 'numeric|nullable' ,
2017-05-22 21:32:22 -07:00
];
/**
* The attributes that are mass assignable .
*
* @ var array
*/
protected $fillable = [
'user_id' ,
'name' ,
'location_id' ,
'company_id' ,
'manager_id' ,
'notes' ,
];
public function company ()
{
return $this -> belongsTo ( '\App\Models\Company' , 'company_id' );
}
/**
* Even though we allow allow for checkout to things beyond users
* this method is an easy way of seeing if we are checked out to a user .
* @ return mixed
*/
public function users ()
{
return $this -> hasMany ( '\App\Models\User' , 'department_id' );
}
2017-05-23 02:48:51 -07:00
/**
* Return the manager in charge of the dept
* @ return mixed
*/
public function manager ()
{
return $this -> belongsTo ( '\App\Models\User' , 'manager_id' );
}
public function location ()
{
return $this -> belongsTo ( '\App\Models\Location' , 'location_id' );
}
/**
* Query builder scope to search on text
*
* @ param Illuminate\Database\Query\Builder $query Query builder instance
* @ param text $search Search term
*
* @ return Illuminate\Database\Query\Builder Modified query builder
*/
public function scopeTextsearch ( $query , $search )
{
return $query -> where ( 'name' , 'LIKE' , " % $search % " )
-> orWhere ( 'notes' , 'LIKE' , " % $search % " );
}
2018-02-21 05:04:20 -08:00
/**
* Query builder scope to order on location name
*
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param text $order Order
*
* @ return \Illuminate\Database\Query\Builder Modified query builder
*/
public function scopeOrderLocation ( $query , $order )
{
return $query -> leftJoin ( 'locations as department_location' , 'departments.location_id' , '=' , 'department_location.id' ) -> orderBy ( 'department_location.name' , $order );
}
/**
* Query builder scope to order on manager name
*
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param text $order Order
*
* @ return \Illuminate\Database\Query\Builder Modified query builder
*/
public function scopeOrderManager ( $query , $order )
{
return $query -> leftJoin ( 'users as department_user' , 'departments.manager_id' , '=' , 'department_user.id' ) -> orderBy ( 'department_user.first_name' , $order ) -> orderBy ( 'department_user.last_name' , $order );
}
2017-05-23 02:48:51 -07:00
2017-05-22 21:32:22 -07:00
}