public function storeGoat(Request $request, $parent_id) { $goat = new Goat(); $goat->parent_id = $parent_id; $goat->type = $goat->parent->type == 'G' ? 'O' : ($goat->parent->type == 'O' ? 'A' : 'T'); $goat->goal_type = $goat->parent->goal_type; $goat->bid = $goat->parent->bid; $goat->department_id = Auth::user()->leadOf()->first()->id; $goat->budget = null; $goat->description = $request->description; $goat->due_date = $request->due_date; $goat->priority = $request->priority; $goat->save(); $userCollabs = array(); $deptCollabs = array(); if ($request->collabs) { foreach ($request->collabs as $col) { if (strpos($col, 'user') !== false) { array_push($userCollabs, substr($col, 5)); } else { array_push($deptCollabs, substr($col, 5)); } } } $leads = array_fill_keys($request->leads ? $request->leads : array(), ['user_role' => 'L']); $collabs = array_fill_keys($userCollabs, ['user_role' => 'C']); $goat->userLeads()->sync($leads + $collabs); $goat->departmentCollaborators()->sync($deptCollabs); $this->createNewGoatChange($goat); return redirect('/view'); }
public function createChanges(Goat $goat, $department_id, $description, $success_measure, $leads, $userCollabs, $deptCollabs, $due_date, $priority) { if ($department_id != $goat->department_id) { $change = new \App\Change(); $change->change_type = 'L'; $change->description = 'Assigned to ' . Department::find($department_id)->name; $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } if ($description != $goat->description) { $change = new \App\Change(); $change->change_type = 'D'; $change->description = $description; $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } if ($success_measure != $goat->success_measure) { $change = new \App\Change(); $change->change_type = 'M'; $change->description = "Success Measure: " . $success_measure; $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } $newLeads = $leads ? $leads : array(); $curLeads = $goat->userLeads()->get()->map(function ($user) { return $user->id; })->toArray(); sort($newLeads); sort($curLeads); if ($newLeads != $curLeads) { if ($diff = array_diff($newLeads, $curLeads)) { $users = array_map(function ($id) { return User::findOrFail($id)->name(); }, $diff); $change = new \App\Change(); $change->change_type = 'L'; $change->description = "Added " . join(', ', $users); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } if ($diff = array_diff($curLeads, $newLeads)) { $users = array_map(function ($id) { return User::findOrFail($id)->name(); }, $diff); $change = new \App\Change(); $change->change_type = 'L'; $change->description = "Removed " . join(', ', $users); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } } $newCollaborators = $userCollabs ? $userCollabs : array(); $curCollaborators = $goat->userCollaborators()->get()->map(function ($user) { return $user->id; })->toArray(); sort($newCollaborators); sort($curCollaborators); if ($newCollaborators != $curCollaborators) { if ($diff = array_diff($newCollaborators, $curCollaborators)) { $users = array_map(function ($id) { return User::findOrFail($id)->name(); }, $diff); $change = new \App\Change(); $change->change_type = 'C'; $change->description = "Added " . join(', ', $users); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } if ($diff = array_diff($curCollaborators, $newCollaborators)) { $users = array_map(function ($id) { return User::findOrFail($id)->name(); }, $diff); $change = new \App\Change(); $change->change_type = 'C'; $change->description = "Removed " . join(', ', $users); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } } $newCollaborators = $deptCollabs ? $deptCollabs : array(); $curCollaborators = $goat->departmentCollaborators()->get()->map(function ($dept) { return $dept->id; })->toArray(); sort($newCollaborators); sort($curCollaborators); if ($newCollaborators != $curCollaborators) { if ($diff = array_diff($newCollaborators, $curCollaborators)) { $depts = array_map(function ($id) { return Department::findOrFail($id)->name; }, $diff); $change = new \App\Change(); $change->change_type = 'C'; $change->description = "Added " . join(', ', $depts); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } if ($diff = array_diff($curCollaborators, $newCollaborators)) { $depts = array_map(function ($id) { return Department::findOrFail($id)->name; }, $diff); $change = new \App\Change(); $change->change_type = 'C'; $change->description = "Removed " . join(', ', $depts); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } } if ($goat->due_date != $due_date) { $change = new \App\Change(); $change->change_type = 'T'; $change->description = "Changed from " . \Carbon\Carbon::parse($goat->due_date)->toDateString() . " to " . \Carbon\Carbon::parse($due_date)->toDateString(); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } if ($goat->priority != $priority) { $change = new \App\Change(); $change->change_type = 'P'; $change->description = "Changed from " . $this->priority_string($goat->priority) . " to " . $this->priority_string($priority); $change->goat_id = $goat->id; $change->user_id = Auth::user()->id; $change->save(); } }