2016-03-25 01:18:05 -07:00
< ? php
2021-06-10 13:15:52 -07:00
2016-03-25 01:18:05 -07:00
namespace App\Models ;
2016-12-26 15:17:46 -08:00
use App\Helpers\Helper ;
2018-07-16 14:13:07 -07:00
use App\Models\Traits\Searchable ;
2021-06-10 13:19:27 -07:00
use Illuminate\Database\Eloquent\Factories\HasFactory ;
2016-03-25 01:18:05 -07:00
use Illuminate\Database\Eloquent\Model ;
use Illuminate\Database\Eloquent\SoftDeletes ;
use Watson\Validating\ValidatingTrait ;
2016-04-07 13:21:09 -07:00
/**
* Model for Asset Maintenances .
*
* @ version v1 . 0
*/
2016-03-25 01:18:05 -07:00
class AssetMaintenance extends Model implements ICompanyableChild
{
2021-06-10 13:17:44 -07:00
use HasFactory ;
2016-03-25 01:18:05 -07:00
use SoftDeletes ;
use CompanyableChildTrait ;
2016-06-16 19:22:07 -07:00
use ValidatingTrait ;
2023-12-07 11:36:12 -08:00
2016-03-25 01:18:05 -07:00
protected $table = 'asset_maintenances' ;
protected $rules = [
'asset_id' => 'required|integer' ,
'supplier_id' => 'required|integer' ,
'asset_maintenance_type' => 'required' ,
'title' => 'required|max:100' ,
'is_warranty' => 'boolean' ,
2023-12-07 11:36:12 -08:00
'start_date' => 'required|date_format:Y-m-d' ,
'completion_date' => 'date_format:Y-m-d|nullable' ,
2016-12-19 11:04:28 -08:00
'notes' => 'string|nullable' ,
2021-06-10 13:15:52 -07:00
'cost' => 'numeric|nullable' ,
2016-03-25 01:18:05 -07:00
];
2023-12-07 11:36:12 -08:00
/**
* The attributes that are mass assignable .
*
* @ var array
*/
protected $fillable = [
'title' ,
'asset_id' ,
'supplier_id' ,
'asset_maintenance_type' ,
'is_warranty' ,
'start_date' ,
2023-12-08 00:58:45 -08:00
'completion_date' ,
2023-12-07 11:36:12 -08:00
'asset_maintenance_time' ,
'notes' ,
'cost' ,
];
2018-07-16 14:13:07 -07:00
use Searchable ;
2021-06-10 13:15:52 -07:00
2018-07-16 14:13:07 -07:00
/**
* The attributes that should be included when searching the model .
2021-06-10 13:15:52 -07:00
*
2018-07-16 14:13:07 -07:00
* @ var array
*/
2024-02-14 01:59:10 -08:00
protected $searchableAttributes =
[
'title' ,
'notes' ,
'asset_maintenance_type' ,
'cost' ,
'start_date' ,
'completion_date'
];
2018-07-16 14:13:07 -07:00
/**
* The relations and their attributes that should be included when searching the model .
2021-06-10 13:15:52 -07:00
*
2018-07-16 14:13:07 -07:00
* @ var array
*/
2018-08-01 18:24:52 -07:00
protected $searchableRelations = [
2024-02-14 01:59:10 -08:00
'asset' => [ 'name' , 'asset_tag' , 'serial' ],
2018-08-01 18:24:52 -07:00
'asset.model' => [ 'name' , 'model_number' ],
2024-01-08 14:22:35 -08:00
'asset.supplier' => [ 'name' ],
2024-02-14 01:59:10 -08:00
'asset.assetstatus' => [ 'name' ],
2024-01-10 05:16:07 -08:00
'supplier' => [ 'name' ],
2018-08-01 18:24:52 -07:00
];
2018-07-16 14:13:07 -07:00
2016-03-25 01:18:05 -07:00
public function getCompanyableParents ()
{
2021-06-10 13:15:52 -07:00
return [ 'asset' ];
2016-03-25 01:18:05 -07:00
}
/**
2021-06-10 13:15:52 -07:00
* getImprovementOptions
*
* @ return array
* @ author Vincent Sposato < vincent . sposato @ gmail . com >
* @ version v1 . 0
*/
2016-03-25 01:18:05 -07:00
public static function getImprovementOptions ()
{
return [
2016-07-10 21:07:59 -07:00
trans ( 'admin/asset_maintenances/general.maintenance' ) => trans ( 'admin/asset_maintenances/general.maintenance' ),
trans ( 'admin/asset_maintenances/general.repair' ) => trans ( 'admin/asset_maintenances/general.repair' ),
2018-04-04 17:33:02 -07:00
trans ( 'admin/asset_maintenances/general.upgrade' ) => trans ( 'admin/asset_maintenances/general.upgrade' ),
2022-09-01 08:21:02 -07:00
trans ( 'admin/asset_maintenances/general.pat_test' ) => trans ( 'admin/asset_maintenances/general.pat_test' ),
2019-01-24 15:17:33 -08:00
trans ( 'admin/asset_maintenances/general.calibration' ) => trans ( 'admin/asset_maintenances/general.calibration' ),
2022-08-02 20:19:43 -07:00
trans ( 'admin/asset_maintenances/general.software_support' ) => trans ( 'admin/asset_maintenances/general.software_support' ),
trans ( 'admin/asset_maintenances/general.hardware_support' ) => trans ( 'admin/asset_maintenances/general.hardware_support' ),
trans ( 'admin/asset_maintenances/general.configuration_change' ) => trans ( 'admin/asset_maintenances/general.configuration_change' ),
2016-03-25 01:18:05 -07:00
];
}
2016-12-26 15:17:46 -08:00
public function setIsWarrantyAttribute ( $value )
{
2016-12-29 14:02:18 -08:00
if ( $value == '' ) {
2016-12-26 15:17:46 -08:00
$value = 0 ;
}
$this -> attributes [ 'is_warranty' ] = $value ;
}
/**
* @ param $value
*/
public function setCostAttribute ( $value )
{
2023-03-29 00:56:34 -07:00
$value = Helper :: ParseCurrency ( $value );
if ( $value == 0 ) {
2016-12-26 15:17:46 -08:00
$value = null ;
}
$this -> attributes [ 'cost' ] = $value ;
}
/**
* @ param $value
*/
public function setNotesAttribute ( $value )
{
2016-12-29 14:02:18 -08:00
if ( $value == '' ) {
2016-12-26 15:17:46 -08:00
$value = null ;
}
$this -> attributes [ 'notes' ] = $value ;
}
/**
* @ param $value
*/
public function setCompletionDateAttribute ( $value )
{
2021-06-10 13:15:52 -07:00
if ( $value == '' || $value == '0000-00-00' ) {
2016-12-26 15:17:46 -08:00
$value = null ;
}
$this -> attributes [ 'completion_date' ] = $value ;
}
2016-03-25 01:18:05 -07:00
/**
2021-06-10 13:15:52 -07:00
* asset
* Get asset for this improvement
*
* @ return mixed
* @ author Vincent Sposato < vincent . sposato @ gmail . com >
* @ version v1 . 0
*/
2016-03-25 01:18:05 -07:00
public function asset ()
{
2021-06-10 13:16:56 -07:00
return $this -> belongsTo ( \App\Models\Asset :: class , 'asset_id' )
2016-03-25 01:18:05 -07:00
-> withTrashed ();
}
2016-06-22 17:04:47 -07:00
/**
* Get the admin who created the maintenance
*
* @ return mixed
* @ author A . Gianotto < snipe @ snipe . net >
* @ version v3 . 0
*/
2024-09-19 09:01:48 -07:00
public function adminuser ()
2016-06-22 17:04:47 -07:00
{
2021-06-10 13:16:56 -07:00
return $this -> belongsTo ( \App\Models\User :: class , 'user_id' )
2016-06-22 17:04:47 -07:00
-> withTrashed ();
}
2016-03-25 01:18:05 -07:00
public function supplier ()
{
2021-06-10 13:16:56 -07:00
return $this -> belongsTo ( \App\Models\Supplier :: class , 'supplier_id' )
2016-03-25 01:18:05 -07:00
-> withTrashed ();
}
/**
2021-06-10 13:15:52 -07:00
* -----------------------------------------------
* BEGIN QUERY SCOPES
* -----------------------------------------------
**/
2016-06-22 17:04:47 -07:00
2022-06-14 16:11:43 -07:00
/**
* Query builder scope to order on a supplier
*
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param string $order Order
*
* @ return \Illuminate\Database\Query\Builder Modified query builder
*/
public function scopeOrderBySupplier ( $query , $order )
{
return $query -> leftJoin ( 'suppliers as suppliers_maintenances' , 'asset_maintenances.supplier_id' , '=' , 'suppliers_maintenances.id' )
-> orderBy ( 'suppliers_maintenances.name' , $order );
}
2024-02-14 01:59:10 -08:00
2018-03-05 16:26:40 -08:00
/**
* Query builder scope to order on asset tag
*
2018-08-01 18:24:52 -07:00
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param string $order Order
2018-03-05 16:26:40 -08:00
*
2018-08-01 18:24:52 -07:00
* @ return \Illuminate\Database\Query\Builder Modified query builder
2018-03-05 16:26:40 -08:00
*/
public function scopeOrderByTag ( $query , $order )
{
return $query -> leftJoin ( 'assets' , 'asset_maintenances.asset_id' , '=' , 'assets.id' )
-> orderBy ( 'assets.asset_tag' , $order );
}
/**
* Query builder scope to order on asset tag
*
2018-08-01 18:24:52 -07:00
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param string $order Order
2018-03-05 16:26:40 -08:00
*
2018-08-01 18:24:52 -07:00
* @ return \Illuminate\Database\Query\Builder Modified query builder
2018-03-05 16:26:40 -08:00
*/
public function scopeOrderByAssetName ( $query , $order )
{
return $query -> leftJoin ( 'assets' , 'asset_maintenances.asset_id' , '=' , 'assets.id' )
-> orderBy ( 'assets.name' , $order );
}
2024-02-14 01:59:10 -08:00
/**
* Query builder scope to order on serial
*
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param string $order Order
*
* @ return \Illuminate\Database\Query\Builder Modified query builder
*/
public function scopeOrderByAssetSerial ( $query , $order )
{
return $query -> leftJoin ( 'assets' , 'asset_maintenances.asset_id' , '=' , 'assets.id' )
-> orderBy ( 'assets.serial' , $order );
}
/**
* Query builder scope to order on status label name
*
* @ param \Illuminate\Database\Query\Builder $query Query builder instance
* @ param text $order Order
*
* @ return \Illuminate\Database\Query\Builder Modified query builder
*/
public function scopeOrderStatusName ( $query , $order )
{
return $query -> join ( 'assets as maintained_asset' , 'asset_maintenances.asset_id' , '=' , 'maintained_asset.id' )
-> leftjoin ( 'status_labels as maintained_asset_status' , 'maintained_asset_status.id' , '=' , 'maintained_asset.status_id' )
-> orderBy ( 'maintained_asset_status.name' , $order );
}
2024-09-19 09:01:48 -07:00
/**
* Query builder scope to order on the user that created it
*/
public function scopeOrderByCreatedBy ( $query , $order )
{
return $query -> leftJoin ( 'users as admin_sort' , 'asset_maintenances.created_by' , '=' , 'admin_sort.id' ) -> select ( 'asset_maintenances.*' ) -> orderBy ( 'admin_sort.first_name' , $order ) -> orderBy ( 'admin_sort.last_name' , $order );
}
2016-03-25 01:18:05 -07:00
}