196 lines
5.7 KiB
PHP
196 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Project extends Model
|
|
{
|
|
protected $fillable = [
|
|
'reference',
|
|
'name',
|
|
'description',
|
|
'creator_id',
|
|
'status',
|
|
'project_image_path',
|
|
'address',
|
|
'province',
|
|
'country',
|
|
'postal_code',
|
|
'latitude',
|
|
'longitude',
|
|
'icon',
|
|
'start_date',
|
|
'deadline',
|
|
'company_id',
|
|
// Agrega cualquier otro campo nuevo aquí
|
|
];
|
|
|
|
public function folders() {
|
|
return $this->hasMany(Folder::class);
|
|
}
|
|
|
|
public function currentFolder()
|
|
{
|
|
return $this->belongsTo(Folder::class);
|
|
}
|
|
|
|
public function documents() {
|
|
return $this->hasMany(Document::class);
|
|
}
|
|
|
|
public function rootFolders()
|
|
{
|
|
return $this->folders()->whereNull('parent_id')->with('children');
|
|
}
|
|
|
|
public function creator()
|
|
{
|
|
return $this->belongsTo(User::class, 'creator_id');
|
|
}
|
|
|
|
public function managers()
|
|
{
|
|
return $this->belongsToMany(User::class, 'project_managers');
|
|
}
|
|
|
|
public function users()
|
|
{
|
|
return $this->belongsToMany(User::class, 'project_users');
|
|
}
|
|
|
|
|
|
public function scopeFilter(Builder $query, array $filters)
|
|
{
|
|
$query->when($filters['search'] ?? false, function($query, $search) {
|
|
$query->where(function($query) use ($search) {
|
|
$query->where('name', 'like', "%{$search}%")
|
|
->orWhere('description', 'like', "%{$search}%");
|
|
});
|
|
});
|
|
|
|
// Agrega más filtros según necesites
|
|
/*
|
|
$query->when($filters['status'] ?? false, function($query, $status) {
|
|
$query->where('status', $status);
|
|
});
|
|
*/
|
|
}
|
|
|
|
public function categories()
|
|
{
|
|
return $this->belongsToMany(Category::class);
|
|
}
|
|
|
|
public function company()
|
|
{
|
|
return $this->belongsTo(Company::class);
|
|
}
|
|
|
|
// Agregar estas relaciones al modelo Project
|
|
public function codingConfig()
|
|
{
|
|
return $this->hasOne(ProjectCodingConfig::class);
|
|
}
|
|
|
|
public function documentStatuses()
|
|
{
|
|
//return $this->hasMany(ProjectDocumentStatus::class);
|
|
}
|
|
|
|
public function defaultStatus()
|
|
{
|
|
//return $this->hasOne(ProjectDocumentStatus::class)->where('is_default', true);
|
|
}
|
|
|
|
// Método para inicializar la configuración
|
|
public function initializeSettings()
|
|
{
|
|
// Crear configuración de codificación si no existe
|
|
if (!$this->codingConfig) {
|
|
$this->codingConfig()->create([
|
|
'format' => '[PROJECT]-[TYPE]-[YEAR]-[SEQUENCE]',
|
|
'next_sequence' => 1,
|
|
'year_format' => 'Y',
|
|
'separator' => '-',
|
|
'sequence_length' => 4,
|
|
'auto_generate' => true,
|
|
]);
|
|
}
|
|
|
|
// Crear estados predeterminados si no existen
|
|
/*
|
|
if ($this->documentStatuses()->count() === 0) {
|
|
$defaultStatuses = [
|
|
[
|
|
'name' => 'Borrador',
|
|
'slug' => 'draft',
|
|
'color' => '#6b7280', // Gris
|
|
'order' => 1,
|
|
'is_default' => true,
|
|
'allow_upload' => true,
|
|
'allow_edit' => true,
|
|
'allow_delete' => true,
|
|
'requires_approval' => false,
|
|
'description' => 'Documento en proceso de creación',
|
|
],
|
|
[
|
|
'name' => 'En Revisión',
|
|
'slug' => 'in_review',
|
|
'color' => '#f59e0b', // Ámbar
|
|
'order' => 2,
|
|
'is_default' => false,
|
|
'allow_upload' => false,
|
|
'allow_edit' => false,
|
|
'allow_delete' => false,
|
|
'requires_approval' => true,
|
|
'description' => 'Documento en proceso de revisión',
|
|
],
|
|
[
|
|
'name' => 'Aprobado',
|
|
'slug' => 'approved',
|
|
'color' => '#10b981', // Verde
|
|
'order' => 3,
|
|
'is_default' => false,
|
|
'allow_upload' => false,
|
|
'allow_edit' => false,
|
|
'allow_delete' => false,
|
|
'requires_approval' => false,
|
|
'description' => 'Documento aprobado',
|
|
],
|
|
[
|
|
'name' => 'Rechazado',
|
|
'slug' => 'rejected',
|
|
'color' => '#ef4444', // Rojo
|
|
'order' => 4,
|
|
'is_default' => false,
|
|
'allow_upload' => true,
|
|
'allow_edit' => true,
|
|
'allow_delete' => false,
|
|
'requires_approval' => false,
|
|
'description' => 'Documento rechazado',
|
|
],
|
|
[
|
|
'name' => 'Archivado',
|
|
'slug' => 'archived',
|
|
'color' => '#8b5cf6', // Violeta
|
|
'order' => 5,
|
|
'is_default' => false,
|
|
'allow_upload' => false,
|
|
'allow_edit' => false,
|
|
'allow_delete' => false,
|
|
'requires_approval' => false,
|
|
'description' => 'Documento archivado',
|
|
],
|
|
];
|
|
|
|
foreach ($defaultStatuses as $status) {
|
|
//$this->documentStatuses()->create($status);
|
|
}
|
|
}*/
|
|
|
|
return $this;
|
|
}
|
|
}
|