ldc-portsalaries/app/Models/Site.php
2022-06-17 12:44:51 +02:00

241 lines
6.8 KiB
PHP

<?php
namespace App\Models;
use App\Enums\Role;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Kwaadpepper\CrudPolicies\Enums\CrudAction;
use Kwaadpepper\CrudPolicies\Enums\CrudType;
use Kwaadpepper\CrudPolicies\Traits\IsCrudModel;
class Site extends Model
{
use HasFactory;
use IsCrudModel;
protected $crudLabelColumn = 'name';
protected $crudValueColumn = 'id';
protected $fillable = [
'url',
'name',
'email_contact',
'address',
'city',
'postcode',
'latitude',
'longitude',
'societe_id'
];
public function __construct($attributes = [])
{
self::$editableProperties = [
'url' => [
'label' => trans('Url'),
'type' => CrudType::string(),
'validate' => [
'url',
'max:255'
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::view(),
CrudAction::create(),
CrudAction::update()
]
],
'name' => [
'label' => trans('Nom'),
'type' => CrudType::string(),
'validate' => [
'string',
'max:255'
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::viewAny(),
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'email_contact' => [
'label' => trans('Email de contact'),
'type' => CrudType::email(),
'required' => true,
'nullable' => false,
'validate' => [
'max:255'
],
'actions' => [
CrudAction::viewAny(),
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'address' => [
'label' => trans('Adresse'),
'type' => CrudType::string(),
'validate' => [
'string',
'max:255'
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'city' => [
'label' => trans('Ville'),
'type' => CrudType::string(),
'validate' => [
'string',
'max:70'
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'postcode' => [
'label' => trans('Code postal'),
'type' => CrudType::string(),
'validate' => [
'string',
'max:10'
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'latitude' => [
'label' => trans('Latitude'),
'type' => CrudType::float(),
'validate' => [
'numeric',
'between:-89.99,90'
],
'rules' => [
'min' => -89.99,
'max' => 90,
'step' => 0.01
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'longitude' => [
'label' => trans('Longitude'),
'type' => CrudType::float(),
'validate' => [
'numeric',
'between:-179.99,180.00',
],
'rules' => [
'min' => -179.99,
'max' => 180,
'step' => 0.01
],
'actions' => [
CrudAction::view(),
CrudAction::create(),
CrudAction::update(),
]
],
'societe_id' => [
'label' => trans('Societe'),
'type' => CrudType::belongsTo(),
'belongsTo' => Societe::class,
'actions' => [
CrudAction::viewAny(),
CrudAction::view()
]
]
];
if (auth('web')->user() and auth('web')->user()->role->equals(Role::admin())) {
self::$editableProperties['societe_id']['actions'][] = CrudAction::create();
self::$editableProperties['societe_id']['actions'][] = CrudAction::update();
}
parent::__construct($attributes);
}
protected static function booted()
{
static::deleted(function (self $model) {
User::whereSelectedSiteId($model->id)->get()
->map(function (User $user) {
$user->selected_site_id = null;
});
});
}
/**
* Has one Societe
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function societe()
{
return $this->belongsTo(Societe::class);
}
/**
* Has many Employee
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function employees()
{
return $this->hasMany(Employee::class);
}
/**
* Belongs To Many Sites
*
* @return \Illuminate\Database\Eloquent\Relations\belongsToMany
*/
public function users()
{
return $this->belongsToMany(User::class, 'user_site');
}
/**
* Has many Flash
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function flashes()
{
return $this->hasMany(Flash::class);
}
/**
* Has many Sondage
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function sondages()
{
return $this->hasMany(Sondage::class);
}
}