2017-06-12 17:39:03 -07:00
< ? php
2021-06-10 13:17:44 -07:00
namespace Database\Factories ;
2017-06-12 17:39:03 -07:00
use App\Models\Asset ;
2017-08-31 11:14:21 -07:00
use App\Models\AssetModel ;
2024-04-16 16:58:28 -07:00
use App\Models\CustomField ;
2021-12-02 16:14:45 -08:00
use App\Models\Location ;
2023-03-14 13:24:50 -07:00
use App\Models\Statuslabel ;
2021-12-02 16:14:45 -08:00
use App\Models\Supplier ;
2023-03-14 11:34:58 -07:00
use App\Models\User ;
2023-08-16 00:47:12 -07:00
use Carbon\CarbonImmutable ;
2021-06-10 13:19:27 -07:00
use Illuminate\Database\Eloquent\Factories\Factory ;
2017-06-12 17:39:03 -07:00
2021-06-10 13:17:44 -07:00
class AssetFactory extends Factory
{
/**
* The name of the factory ' s corresponding model .
*
* @ var string
*/
protected $model = Asset :: class ;
/**
* Define the model ' s default state .
*
* @ return array
*/
public function definition ()
{
return [
'name' => null ,
2023-03-16 17:08:18 -07:00
'model_id' => AssetModel :: factory (),
2023-02-07 16:17:05 -08:00
'rtd_location_id' => Location :: factory (),
2023-03-02 13:41:52 -08:00
'serial' => $this -> faker -> uuid (),
2023-03-14 13:24:50 -07:00
'status_id' => function () {
2024-10-28 04:37:17 -07:00
// $status = Statuslabel::factory()->create(); dd($status) ;
return Statuslabel :: where ( 'status_type' , 'deployable' ) -> first () ? ? Statuslabel :: factory () -> create ([ 'name' => 'Ready to Deploy' , 'status_type' => 'deployable' ]) -> id ;
2023-03-14 13:24:50 -07:00
},
2024-09-17 14:16:41 -07:00
'created_by' => User :: factory () -> superuser (),
2021-06-10 13:17:44 -07:00
'asset_tag' => $this -> faker -> unixTime ( 'now' ),
'notes' => 'Created by DB seeder' ,
2023-02-23 13:39:05 -08:00
'purchase_date' => $this -> faker -> dateTimeBetween ( '-1 years' , 'now' , date_default_timezone_get ()) -> format ( 'Y-m-d' ),
2021-06-10 13:17:44 -07:00
'purchase_cost' => $this -> faker -> randomFloat ( 2 , '299.99' , '2999.99' ),
2023-11-28 19:19:19 -08:00
'order_number' => ( string ) $this -> faker -> numberBetween ( 1000000 , 50000000 ),
2023-02-07 16:17:05 -08:00
'supplier_id' => Supplier :: factory (),
2021-06-10 13:17:44 -07:00
'requestable' => $this -> faker -> boolean (),
'assigned_to' => null ,
'assigned_type' => null ,
'next_audit_date' => null ,
'last_checkout' => null ,
2024-03-19 13:34:59 -07:00
'asset_eol_date' => null
2021-06-10 13:17:44 -07:00
];
}
2023-07-25 15:41:55 -07:00
public function configure ()
{
return $this -> afterMaking ( function ( Asset $asset ) {
2023-07-29 11:45:39 -07:00
// calculates the EOL date most of the time, but sometimes sets a random date so we have some explicits
// the explicit boolean gets set in the saving() method on the observer
2023-07-25 15:41:55 -07:00
$asset -> asset_eol_date = $this -> faker -> boolean ( 5 )
2023-08-16 00:47:12 -07:00
? CarbonImmutable :: parse ( $asset -> purchase_date ) -> addMonths ( rand ( 0 , 20 )) -> format ( 'Y-m-d' )
: CarbonImmutable :: parse ( $asset -> purchase_date ) -> addMonths ( $asset -> model -> eol ) -> format ( 'Y-m-d' );
2023-07-25 15:41:55 -07:00
});
2023-08-16 00:47:12 -07:00
}
2021-06-10 13:17:44 -07:00
public function laptopMbp ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Macbook Pro 13"' ) -> first () ? ? AssetModel :: factory () -> mbp13Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopMbpPending ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Macbook Pro 13"' ) -> first () ? ? AssetModel :: factory () -> mbp13Model ();
},
2023-03-14 13:24:50 -07:00
'status_id' => function () {
return Statuslabel :: where ( 'name' , 'Pending' ) -> first () ? ? Statuslabel :: factory () -> pending () -> make ([ 'name' => 'Pending' ]);
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopMbpArchived ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Macbook Pro 13"' ) -> first () ? ? AssetModel :: factory () -> mbp13Model ();
},
2023-03-14 13:24:50 -07:00
'status_id' => function () {
return Statuslabel :: where ( 'name' , 'Archived' ) -> first () ? ? Statuslabel :: factory () -> archived () -> make ([ 'name' => 'Archived' ]);
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopAir ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Macbook Air' ) -> first () ? ? AssetModel :: factory () -> mbpAirModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopSurface ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Surface' ) -> first () ? ? AssetModel :: factory () -> surfaceModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopXps ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'XPS 13' ) -> first () ? ? AssetModel :: factory () -> xps13Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopSpectre ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Spectre' ) -> first () ? ? AssetModel :: factory () -> spectreModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopZenbook ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'ZenBook UX310' ) -> first () ? ? AssetModel :: factory () -> zenbookModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function laptopYoga ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Yoga 910' ) -> first () ? ? AssetModel :: factory () -> yogaModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function desktopMacpro ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'iMac Pro' ) -> first () ? ? AssetModel :: factory () -> macproModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function desktopLenovoI5 ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Lenovo Intel Core i5' ) -> first () ? ? AssetModel :: factory () -> lenovoI5Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function desktopOptiplex ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'OptiPlex' ) -> first () ? ? AssetModel :: factory () -> optiplexModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function confPolycom ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'SoundStation 2' ) -> first () ? ? AssetModel :: factory () -> polycomModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function confPolycomcx ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Polycom CX3000 IP Conference Phone' ) -> first () ? ? AssetModel :: factory () -> polycomcxModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function tabletIpad ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'iPad Pro' ) -> first () ? ? AssetModel :: factory () -> ipadModel ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function tabletTab3 ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Tab3' ) -> first () ? ? AssetModel :: factory () -> tab3Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
2021-07-21 15:12:27 -07:00
public function phoneIphone11 ()
2021-06-10 13:17:44 -07:00
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'iPhone 11' ) -> first () ? ? AssetModel :: factory () -> iphone11Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
2021-07-21 15:12:27 -07:00
public function phoneIphone12 ()
2021-06-10 13:17:44 -07:00
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'iPhone 12' ) -> first () ? ? AssetModel :: factory () -> iphone12Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function ultrafine ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Ultrafine 4k' ) -> first () ? ? AssetModel :: factory () -> ultrafine ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function ultrasharp ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Ultrasharp U2415' ) -> first () ? ? AssetModel :: factory () -> ultrasharp ();
},
2021-06-10 13:17:44 -07:00
];
});
}
2024-02-13 12:03:27 -08:00
public function assignedToUser ( User $user = null )
2023-03-21 09:54:55 -07:00
{
2024-02-13 12:03:27 -08:00
return $this -> state ( function () use ( $user ) {
2023-03-21 09:54:55 -07:00
return [
2024-02-13 12:03:27 -08:00
'assigned_to' => $user -> id ? ? User :: factory (),
2023-03-21 09:54:55 -07:00
'assigned_type' => User :: class ,
2024-02-13 13:17:02 -08:00
'last_checkout' => now () -> subDay (),
2023-03-21 09:54:55 -07:00
];
});
}
2024-07-05 00:21:18 -07:00
public function assignedToLocation ( Location $location = null )
2023-03-21 09:54:55 -07:00
{
2024-07-05 00:21:18 -07:00
return $this -> state ( function () use ( $location ) {
2023-03-21 09:54:55 -07:00
return [
2024-07-05 00:21:18 -07:00
'assigned_to' => $location -> id ? ? Location :: factory (),
2023-03-21 09:54:55 -07:00
'assigned_type' => Location :: class ,
];
});
}
public function assignedToAsset ()
{
return $this -> state ( function () {
return [
'model_id' => 1 ,
'assigned_to' => Asset :: factory (),
'assigned_type' => Asset :: class ,
];
});
}
2021-06-10 13:17:44 -07:00
public function requiresAcceptance ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Macbook Pro 13' ) -> first () ? ? AssetModel :: factory () -> mbp13Model ();
},
2021-06-10 13:17:44 -07:00
];
});
}
public function deleted ()
{
return $this -> state ( function () {
return [
2023-03-14 13:56:25 -07:00
'model_id' => function () {
return AssetModel :: where ( 'name' , 'Macbook Pro 13' ) -> first () ? ? AssetModel :: factory () -> mbp13Model ();
},
2021-06-10 13:17:44 -07:00
'deleted_at' => $this -> faker -> dateTime (),
];
});
}
2023-06-22 12:36:43 -07:00
public function requestable ()
{
return $this -> state ([ 'requestable' => true ]);
}
public function nonrequestable ()
{
return $this -> state ([ 'requestable' => false ]);
}
2024-03-19 13:34:59 -07:00
public function noPurchaseOrEolDate ()
{
return $this -> afterCreating ( function ( Asset $asset ) {
$asset -> update ([
'purchase_date' => null ,
'asset_eol_date' => null
]);
2024-03-20 11:16:36 -07:00
});
}
2024-04-23 11:57:59 -07:00
2024-04-16 16:58:28 -07:00
public function hasEncryptedCustomField ( CustomField $field = null )
2024-04-15 10:46:11 -07:00
{
2024-04-16 16:58:28 -07:00
return $this -> state ( function () use ( $field ) {
return [
'model_id' => AssetModel :: factory () -> hasEncryptedCustomField ( $field ),
];
2024-04-16 12:36:13 -07:00
});
2024-04-15 10:46:11 -07:00
}
2024-05-01 14:12:56 -07:00
public function hasMultipleCustomFields ( array $fields = null ) : self
{
return $this -> state ( function () use ( $fields ) {
return [
'model_id' => AssetModel :: factory () -> hasMultipleCustomFields ( $fields ),
];
});
}
2024-02-13 17:04:53 -08:00
/**
* This allows bypassing model level validation if you want to purposefully
* create an asset in an invalid state . Validation is turned back on
* after the model is created via the factory .
* @ return AssetFactory
*/
public function canBeInvalidUponCreation ()
{
return $this -> afterMaking ( function ( Asset $asset ) {
$asset -> setValidating ( false );
}) -> afterCreating ( function ( Asset $asset ) {
$asset -> setValidating ( true );
2024-03-19 13:34:59 -07:00
});
}
2021-06-10 13:17:44 -07:00
}