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; } }