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(); } }
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 store(Request $request) { $elem = new Goat(); $type = $request->type; $elem->bid = $request->businessId; if ($type == 'G') { $this->validate($request, ['businessId' => 'required', 'goalDescription' => 'required|min:10|max:300']); $elem->goal_type = 'B'; $elem->type = $type; $elem->description = $request->goalDescription; $elem->priority = null; $elem->due_date = null; $elem->budget = null; $elem->parent_id = null; $elem->complete = null; $elem->department_id = null; $elem->save(); } elseif ($type == 'O') { $this->validate($request, ['businessId' => 'required', 'goalId' => 'required', 'objectiveDescription' => 'required|min:10|max:300']); $elem->type = $type; $elem->goal_type = 'B'; $elem->description = $request->objectiveDescription; $elem->priority = null; $elem->due_date = null; $elem->budget = null; $elem->parent_id = $request->goalId; $elem->complete = null; $elem->department_id = null; $elem->save(); } elseif ($type == 'A') { $this->validate($request, ['businessId' => 'required', 'goalId' => 'required', 'objId' => 'required', 'actionDescription' => 'required|min:10|max:300', 'endDate' => 'required|date', 'leadName' => 'required']); $elem->type = $type; $elem->goal_type = 'B'; $elem->description = $request->actionDescription; $elem->priority = $request->priority; $elem->due_date = $request->endDate; $elem->budget = null; $elem->parent_id = $request->objId; $elem->complete = null; $elem->department_id = Auth::user()->leadOf()->first()->id; $elem->save(); if ($request->leadName === null && $request->collaboratorName === null) { } elseif ($request->leadName === null) { $collabs = array_fill_keys($request->collaboratorName, ['user_role' => 'C']); $elem->userLeads()->sync($collabs); } elseif ($request->collaboratorName === null) { $leads = array_fill_keys($request->leadName, ['user_role' => 'L']); $elem->userLeads()->sync($leads); } else { $leads = array_fill_keys($request->leadName, ['user_role' => 'L']); $collabs = array_fill_keys($request->collaboratorName, ['user_role' => 'C']); $elem->userLeads()->sync($leads + $collabs); } } else { $this->validate($request, ['businessId' => 'required', 'goalId' => 'required', 'objId' => 'required', 'actionId' => 'required', 'taskDescription' => 'required|min:10|max:300', 'endDate' => 'required|date', 'leadName' => 'required']); $elem->type = $type; $elem->goal_type = 'B'; $elem->description = $request->taskDescription; $elem->priority = $request->priority; $elem->due_date = $request->endDate; $elem->budget = null; $elem->parent_id = $request->actionId; $elem->complete = null; $elem->department_id = Auth::user()->leadOf()->first()->id; $elem->save(); if ($request->leadName === null && $request->collaboratorName === null) { return back(); } elseif ($request->leadName === null) { $collabs = array_fill_keys($request->collaboratorName, ['user_role' => 'C']); $elem->userLeads()->sync($collabs); } elseif ($request->collaboratorName === null) { $leads = array_fill_keys($request->leadName, ['user_role' => 'L']); $elem->userLeads()->sync($leads); } else { $leads = array_fill_keys($request->leadName, ['user_role' => 'L']); $collabs = array_fill_keys($request->collaboratorName, ['user_role' => 'C']); $elem->userLeads()->sync($leads + $collabs); } } return back(); }