diff --git a/app/Http/Controllers/.prettierrc b/app/Http/Controllers/.prettierrc new file mode 100644 index 0000000..222861c --- /dev/null +++ b/app/Http/Controllers/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/app/Http/Controllers/Admin/.prettierrc b/app/Http/Controllers/Admin/.prettierrc new file mode 100644 index 0000000..222861c --- /dev/null +++ b/app/Http/Controllers/Admin/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/app/Http/Controllers/Admin/MainRoleSkillsController.php b/app/Http/Controllers/Admin/MainRoleSkillsController.php index 915cd63..2de963a 100644 --- a/app/Http/Controllers/Admin/MainRoleSkillsController.php +++ b/app/Http/Controllers/Admin/MainRoleSkillsController.php @@ -95,20 +95,29 @@ public function create() public function store(StoreMainRoleSkills $request) { - $create = []; - foreach ($request['skills'] as $skill) { - $create[] = [ - 'main_role_id' => $request['main_role_id'], - 'skill_id' => $skill['skill_id'], - 'scored_id' => $skill['scored_id'], - 'created_at' => now(), - 'updated_at' => now(), - ]; - } + try { + $create = []; + foreach ($request['skills'] as $skill) { + $create[] = [ + 'main_role_id' => $request['main_role_id'], + 'skill_id' => $skill['skill_id'], + 'scored_id' => $skill['scored_id'], + 'created_at' => now(), + 'updated_at' => now(), + ]; + } - MainRoleSkills::insert($create); + MainRoleSkills::insert($create); - return $this->index(); + return $this->index(); + + } catch (\Illuminate\Database\QueryException $e) { + // Si hay error de restricción única + if ($e->getCode() === '23000') { + return back()->withErrors(['skills' => 'Una o más habilidades ya están asignadas a este rol.']); + } + throw $e; + } } public function update(UpdateMainRoleSkills $request, MainRoleSkills $mainRoleSkills) diff --git a/database/migrations/2025_07_02_162405_create_main_role_skills_table.php b/database/migrations/2025_07_02_162405_create_main_role_skills_table.php index 8216eb7..936726a 100644 --- a/database/migrations/2025_07_02_162405_create_main_role_skills_table.php +++ b/database/migrations/2025_07_02_162405_create_main_role_skills_table.php @@ -17,6 +17,8 @@ public function up(): void $table->foreignId('skill_id')->constrained('skills')->onDelete('cascade'); $table->foreignId('scored_id')->constrained('scores')->onDelete('cascade'); $table->timestamps(); + + $table->unique(['main_role_id', 'skill_id']); }); } diff --git a/resources/js/Components/App/SkillAssignment.vue b/resources/js/Components/App/SkillAssignment.vue index 150c693..1c24276 100644 --- a/resources/js/Components/App/SkillAssignment.vue +++ b/resources/js/Components/App/SkillAssignment.vue @@ -11,7 +11,7 @@ const props = defineProps({ required: true, }, skills: { - type: Array, // Ya filtradas por departamento + type: Array, required: true, }, scores: { @@ -35,16 +35,16 @@ const todos = ref([]); function addTodo() { if (skillId.value && scoredId.value) { const selectedSkill = props.skills.find( - skill => skill.id === (skillId.value.id || skillId.value) + (skill) => skill.id === (skillId.value.id || skillId.value) ); const selectedScore = props.scores.find( - score => score.id === (scoredId.value.id || scoredId.value) + (score) => score.id === (scoredId.value.id || scoredId.value) ); if (selectedSkill && selectedScore) { // Verificar que no esté duplicada const isDuplicate = todos.value.some( - todo => todo.skill_id === selectedSkill.id + (todo) => todo.skill_id === selectedSkill.id ); if (!isDuplicate) { @@ -86,9 +86,13 @@ const submitForm = () => {

Asignar Habilidades al Rol: {{ selectedMainRole.name }}

-

- Departamento: {{ selectedDepartment.name }} -

+

Departamento: {{ selectedDepartment.name }}

+ +
+ {{ form.errors.skills }}
@@ -132,10 +136,14 @@ const submitForm = () => {
-
+
No hay habilidades agregadas