public function action_logtimes($timestamp = null) { if (!Auth\Auth::has_access('timesheets.read')) { Fuel\Core\Session::set_flash('error', 'You do not have access to view timesheets'); Fuel\Core\Response::redirect('user'); } if (!$timestamp) { $timestamp = \Fuel\Core\Date::forge()->get_timestamp(); // today } if (Fuel\Core\Input::method() == 'POST') { try { // start a db transaction \Fuel\Core\DB::start_transaction(); // find all logs for this task for this day $date = date('Y-m-d', $timestamp); $starts = date('Y-m-d 00:00:00', $timestamp); $ends = date('Y-m-d 23:59:59', $timestamp); $project_task_logs = Model_Projecttasklog::find('all', array('related' => array('project_task'), 'where' => array(array('project_task.user_id', $this->current_user->id), array('task_started', 'BETWEEN', array($starts, $ends))))); foreach ($project_task_logs as $log) { $date_starts = date('Y-m-d', $timestamp); $date_ends = date('Y-m-d 23:59:59', $timestamp); if ($log->get_project_task()->user_id == $this->current_user->id) { if (in_array(strtotime($log->task_started), range(strtotime($date_starts), strtotime($date_ends)))) { // delete the logs $log->delete(); } } } // insert new logs if (Fuel\Core\Input::post('timeslots')) { $date = date('Y-m-d', $timestamp); $last_comment = ''; $last_task_id = ''; foreach (Fuel\Core\Input::post('timeslots') as $str) { $times = explode('_', $str); $is_billable = 0; $task_started = $date . ' ' . $times[0] . ':00'; $task_completed = $date . ' ' . $times[1] . ':00'; $project_task_id_array = Fuel\Core\Input::post('project_task_id'); $task_id = $project_task_id_array["'{$str}'"]; if (Fuel\Core\Input::post('comment_' . $str) != '') { $last_comment = Fuel\Core\Input::post('comment_' . $str); } if (intval(Fuel\Core\Input::post('is_billable_' . $str, '0')) == 1) { $is_billable = 1; } if (empty($task_id)) { $task_id = $last_task_id; } else { $last_task_id = $task_id; } if (empty($task_id)) { continue; // todo - display error } $task_log = Model_Projecttasklog::forge(array('project_task_id' => $task_id, 'comment' => $last_comment, 'task_started' => $task_started, 'task_completed' => $task_completed, 'is_billable' => $is_billable)); $task_log->save(); } } // commit to database \Fuel\Core\DB::commit_transaction(); \Fuel\Core\Session::set_flash('success', 'Time logs saved successfully.'); Fuel\Core\Response::redirect('user/timesheets/index/' . $timestamp); } catch (Exception $ex) { // rollback on error \Fuel\Core\DB::rollback_transaction(); \Fuel\Core\Session::set_flash('error', $ex->getMessage()); Fuel\Core\Response::redirect('user/timesheets/advanced/logtimes/' . $timestamp); } } $now = \Fuel\Core\Date::forge($timestamp)->format('mysql'); $day_starts = date('Y-m-d 00:00:00', strtotime($now)); $day_ends = date('Y-m-d 23:59:59', strtotime($now)); $today_logs = Model_Projecttasklog::find('all', array('related' => array('project_task', 'project_task.project', 'project_task.project_task_name', 'project_task.user'), 'where' => array(array('task_started', 'BETWEEN', array($day_starts, $day_ends)), array('project_task.user_id', $this->current_user->id)), 'order_by' => array(array('task_started', 'asc')))); // todo: use DB::query() instead $this->template->set_global('today_logs', $today_logs); $this->template->set_global('projects', Model_Project::find('all', array('order_by' => array(array('name', 'asc'))))); $this->template->set_global('timezones', Model_Timezone::find('all', array('order_by' => array(array('starts', 'asc'))))); $this->template->set_global('my_tasks', Model_Projecttask::find('all', array('where' => array(array('user_id', $this->current_user->id)), 'related' => array('project_task_name'), 'order_by' => array(array('project_task_description', 'asc'))))); $this->template->set_global('timestamp', $timestamp); $this->template->set_global('date', \Fuel\Core\Date::forge($timestamp)->format('mysql_date')); $this->template->title = 'Timesheets'; $this->template->content = View::forge('user/timesheets/advanced/_advanced_form'); }
/** * * @param type $timestamp */ public function action_logtimes($timestamp = null) { if (!Auth\Auth::has_access('timesheets.read')) { Fuel\Core\Session::set_flash('error', 'You do not have access to view timesheets'); Fuel\Core\Response::redirect('user'); } Fuel\Core\Response::redirect('user/timesheets/advanced/logtimes/' . $timestamp); $task_id = 0; try { if (Fuel\Core\Input::method() == 'GET') { $task_id = Fuel\Core\Input::get('id'); } else { if (Fuel\Core\Input::method() == 'POST') { $task_id = Fuel\Core\Input::post('id'); } } } catch (\Exception $ex) { $task_id = 0; } if (!($task = Model_Projecttask::find($task_id))) { Fuel\Core\Session::set_flash('error', 'Cannot find selected task # ' . $task_id); Fuel\Core\Response::redirect('user/timesheets'); } if ($timestamp == null || !is_numeric($timestamp) || intval($timestamp) <= 0) { $timestamp = strtotime(date('d M Y')); } if (Fuel\Core\Input::method() == 'POST') { try { // start a db transaction \Fuel\Core\DB::start_transaction(); // find all logs for this task for this day $date = date('Y-m-d', $timestamp); foreach ($task->project_task_logs as $log) { $date_starts = date('Y-m-d', $timestamp); $date_ends = date('Y-m-d 23:59:59', $timestamp); if (in_array(strtotime($log->task_started), range(strtotime($date_starts), strtotime($date_ends)))) { $id = $log->id; // delete the logs $log->delete(); } } // insert new logs if (Fuel\Core\Input::post('timeslots')) { $date = date('Y-m-d', $timestamp); $last_comment = ''; foreach (Fuel\Core\Input::post('timeslots') as $str) { $times = explode('_', $str); $is_billable = 0; $task_started = $date . ' ' . $times[0] . ':00'; $task_completed = $date . ' ' . $times[1] . ':00'; if (Fuel\Core\Input::post('comment_' . $str) != '') { $last_comment = Fuel\Core\Input::post('comment_' . $str); } if (intval(Fuel\Core\Input::post('is_billable_' . $str, '0')) == 1) { $is_billable = 1; } $task_log = Model_Projecttasklog::forge(array('project_task_id' => $task->id, 'comment' => $last_comment, 'task_started' => $task_started, 'task_completed' => $task_completed, 'is_billable' => $is_billable)); $task_log->save(); } } // commit to database \Fuel\Core\DB::commit_transaction(); \Fuel\Core\Session::set_flash('success', 'Time logs saved successfully.'); Fuel\Core\Response::redirect('user/timesheets/index/' . $timestamp); } catch (Exception $ex) { // rollback on error \Fuel\Core\DB::rollback_transaction(); \Fuel\Core\Session::set_flash('error', $ex->getMessage()); Fuel\Core\Response::redirect('user/timesheets/index/' . $timestamp); } } $user_id = $this->current_user->id; $view = View::forge('user/timesheets/logtimes'); $view->set_global('timestamp', $timestamp); $view->set_global('task', $task); $view->set_global('timezones', Model_Timezone::find('all')); $view->set_global('project_tasks', array_merge(array('0' => '- Select Task -'), \Fuel\Core\Arr::assoc_to_keyval(Model_Projecttask::find('all', array('where' => array(array('user_id', $user_id)))), 'id', 'project_task_description'))); $this->template->user_is_admin = $this->check_user_is_admin(); $this->template->title = 'Timesheets'; $this->template->content = $view; }