Rework user-interface for editing recurring tasks
This commit is contained in:
parent
a8a434ef7b
commit
a00e7c94be
7 changed files with 79 additions and 58 deletions
|
@ -1,21 +1,21 @@
|
|||
# encoding: utf-8
|
||||
class TasksController < ApplicationController
|
||||
#auto_complete_for :user, :nick
|
||||
|
||||
|
||||
def index
|
||||
@non_group_tasks = Task.non_group.includes(assignments: :user)
|
||||
@groups = Workgroup.includes(open_tasks: {assignments: :user})
|
||||
end
|
||||
|
||||
|
||||
def user
|
||||
@unaccepted_tasks = Task.unaccepted_tasks_for(current_user)
|
||||
@accepted_tasks = Task.accepted_tasks_for(current_user)
|
||||
end
|
||||
|
||||
|
||||
def new
|
||||
@task = Task.new(current_user_id: current_user.id)
|
||||
end
|
||||
|
||||
|
||||
def create
|
||||
@task = Task.new(params[:task])
|
||||
if params[:periodic]
|
||||
|
@ -27,19 +27,17 @@ class TasksController < ApplicationController
|
|||
render :template => "tasks/new"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def show
|
||||
@task = Task.find(params[:id])
|
||||
end
|
||||
|
||||
|
||||
def edit
|
||||
@task = Task.find(params[:id])
|
||||
@periodic = !!params[:periodic]
|
||||
@task.current_user_id = current_user.id
|
||||
if @task.periodic?
|
||||
flash.now[:alert] = I18n.t('tasks.edit.warning_periodic').html_safe
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def update
|
||||
@task = Task.find(params[:id])
|
||||
task_group = @task.periodic_task_group
|
||||
|
@ -61,7 +59,7 @@ class TasksController < ApplicationController
|
|||
render :template => "tasks/edit"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def destroy
|
||||
task = Task.find(params[:id])
|
||||
# Save user_ids to update apple statistics after destroy
|
||||
|
@ -76,7 +74,7 @@ class TasksController < ApplicationController
|
|||
|
||||
redirect_to tasks_url, :notice => I18n.t('tasks.destroy.notice')
|
||||
end
|
||||
|
||||
|
||||
# assign current_user to the task and set the assignment to "accepted"
|
||||
# if there is already an assignment, only accepted will be set to true
|
||||
def accept
|
||||
|
@ -88,23 +86,23 @@ class TasksController < ApplicationController
|
|||
end
|
||||
redirect_to user_tasks_path, :notice => I18n.t('tasks.accept.notice')
|
||||
end
|
||||
|
||||
|
||||
# deletes assignment between current_user and given task
|
||||
def reject
|
||||
Task.find(params[:id]).users.delete(current_user)
|
||||
redirect_to :action => "index"
|
||||
end
|
||||
|
||||
|
||||
def set_done
|
||||
Task.find(params[:id]).update_attribute :done, true
|
||||
redirect_to tasks_url, :notice => I18n.t('tasks.set_done.notice')
|
||||
end
|
||||
|
||||
|
||||
# Shows all tasks, which are already done
|
||||
def archive
|
||||
@tasks = Task.done.page(params[:page]).per(@per_page).order('tasks.updated_on DESC').includes(assignments: :user)
|
||||
end
|
||||
|
||||
|
||||
# shows workgroup (normal group) to edit weekly_tasks_template
|
||||
def workgroup
|
||||
@group = Group.find(params[:workgroup_id])
|
||||
|
|
|
@ -1,31 +1,11 @@
|
|||
- content_for :javascript do
|
||||
:javascript
|
||||
$(function() {
|
||||
$("#task_user_list").tokenInput("#{users_path(:format => :json)}", {
|
||||
crossDomain: false,
|
||||
prePopulate: $("#task_user_list").data("pre"),
|
||||
hintText: '#{escape_javascript(t('.search.hint'))}',
|
||||
noResultText: '#{escape_javascript(t('.search.noresult'))}',
|
||||
searchingText: '#{escape_javascript(t('.search.placeholder'))}',
|
||||
theme: 'facebook'
|
||||
});
|
||||
});
|
||||
|
||||
- content_for :sidebar do
|
||||
= render "shared/workgroup_members"
|
||||
|
||||
= simple_form_for @task do |f|
|
||||
= f.hidden_field :current_user_id
|
||||
= f.input :name
|
||||
= f.input :description, as: :text, input_html: {rows: 10}
|
||||
= f.input :duration, :as => :select, :collection => 1..3
|
||||
= f.input :user_list, :as => :string, :input_html => { 'data-pre' => @task.users.map(&:token_attributes).to_json }
|
||||
= f.input :required_users
|
||||
= f.association :workgroup
|
||||
= f.input :due_date, as: :date_picker
|
||||
= f.input :done
|
||||
.form-actions
|
||||
= f.submit class: 'btn btn-primary'
|
||||
- if @task.new_record? or @task.periodic?
|
||||
= f.submit t('.submit.periodic'), name: 'periodic', class: 'btn'
|
||||
= link_to t('ui.or_cancel'), :back
|
||||
= form.hidden_field :current_user_id
|
||||
= form.input :name
|
||||
= form.input :description, as: :text, input_html: {rows: 10}
|
||||
= form.input :duration, :as => :select, :collection => 1..3
|
||||
- unless local_assigns[:periodic]
|
||||
= form.input :user_list, :as => :string, :input_html => { 'data-pre' => form.object.users.map(&:token_attributes).to_json }
|
||||
= form.input :required_users
|
||||
= form.association :workgroup
|
||||
= form.input :due_date, as: :date_picker
|
||||
- unless local_assigns[:periodic]
|
||||
= form.input :done
|
||||
|
|
15
app/views/tasks/_form_sidebar.html.haml
Normal file
15
app/views/tasks/_form_sidebar.html.haml
Normal file
|
@ -0,0 +1,15 @@
|
|||
- content_for :javascript do
|
||||
:javascript
|
||||
$(function() {
|
||||
$("#task_user_list").tokenInput("#{users_path(:format => :json)}", {
|
||||
crossDomain: false,
|
||||
prePopulate: $("#task_user_list").data("pre"),
|
||||
hintText: '#{escape_javascript(t('.search.hint'))}',
|
||||
noResultText: '#{escape_javascript(t('.search.noresult'))}',
|
||||
searchingText: '#{escape_javascript(t('.search.placeholder'))}',
|
||||
theme: 'facebook'
|
||||
});
|
||||
});
|
||||
|
||||
- content_for :sidebar do
|
||||
= render "shared/workgroup_members"
|
|
@ -1,3 +1,15 @@
|
|||
- title t('.title')
|
||||
- title @periodic ? t('.title_periodic') : t('.title')
|
||||
|
||||
= render 'form'
|
||||
- if @task.periodic? && !@periodic
|
||||
.alert.alert-info= raw t('tasks.edit.warning_periodic')
|
||||
|
||||
= render 'form_sidebar'
|
||||
|
||||
= simple_form_for @task do |form|
|
||||
= render 'form', form: form, periodic: @periodic
|
||||
.form-actions
|
||||
- if @periodic
|
||||
= form.submit t('.submit_periodic'), name: 'periodic', class: 'btn btn-primary'
|
||||
- else
|
||||
= form.submit class: 'btn btn-primary'
|
||||
= link_to t('ui.or_cancel'), :back
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
- title t('.title')
|
||||
|
||||
= render 'form'
|
||||
= render 'form_sidebar'
|
||||
|
||||
= simple_form_for @task do |form|
|
||||
= render 'form', form: form, periodic: nil
|
||||
.form-actions
|
||||
= form.submit class: 'btn btn-primary'
|
||||
= form.submit t('.submit_periodic'), name: 'periodic', class: 'btn'
|
||||
= link_to t('ui.or_cancel'), :back
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
%dd= simple_format(@task.description)
|
||||
- if @task.due_date.present?
|
||||
%dt= heading_helper Task, :due_date
|
||||
%dd
|
||||
%dd
|
||||
= format_date(@task.due_date)
|
||||
- if @task.periodic?
|
||||
%i.icon-repeat{title: t('tasks.repeated')}
|
||||
|
@ -30,8 +30,14 @@
|
|||
- unless @task.done?
|
||||
= link_to t('.mark_done'), set_done_task_path(@task), method: :post, class: 'btn'
|
||||
= link_to t('ui.edit'), edit_task_path(@task), class: 'btn'
|
||||
= link_to t('ui.delete'), task_path(@task), :method => :delete, :data => {:confirm => t('.confirm_delete_single')},
|
||||
class: 'btn btn-danger'
|
||||
- if @task.periodic?
|
||||
= link_to t('.delete_group'), task_path(@task, periodic: true), method: :delete,
|
||||
:data => {confirm: t('.confirm_delete_group')}, class: 'btn btn-danger'
|
||||
= link_to edit_task_path(@task, periodic: true), class: 'btn' do
|
||||
%i.icon.icon-repeat
|
||||
= t('.edit_group')
|
||||
= link_to t('ui.delete'), task_path(@task), method: :delete, class: 'btn btn-danger',
|
||||
data: {confirm: @task.periodic? ? t('.confirm_delete_single_from_group') : t('.confirm_delete_single')}
|
||||
- if @task.periodic?
|
||||
= link_to task_path(@task, periodic: true), method: :delete, class: 'btn btn-danger',
|
||||
data: {confirm: t('.confirm_delete_group')} do
|
||||
%i.icon.icon-repeat
|
||||
= t('.delete_group')
|
||||
|
|
|
@ -1624,6 +1624,8 @@ en:
|
|||
notice: Task has been deleted
|
||||
edit:
|
||||
title: Edit task
|
||||
title_periodic: Edit periodic task
|
||||
submit_periodic: Save periodic task
|
||||
warning_periodic: "<strong>Warning:</strong> This task is part of a group of <em>weekly tasks</em>. When saving it will be excluded from the group and it will be converted to a <em>regular task</em>."
|
||||
error_not_found: No workgroup found
|
||||
form:
|
||||
|
@ -1631,8 +1633,6 @@ en:
|
|||
hint: Search for user
|
||||
noresult: No user found
|
||||
placeholder: Search ...
|
||||
submit:
|
||||
periodic: Save weekly task
|
||||
index:
|
||||
show_group_tasks: Show group tasks
|
||||
title: Tasks
|
||||
|
@ -1653,7 +1653,8 @@ en:
|
|||
new_task: Create new task
|
||||
pages: Pages
|
||||
new:
|
||||
title: Create new tasks
|
||||
title: Create new task
|
||||
submit_periodic: Create periodic task
|
||||
repeated: Task is repeated weekly
|
||||
set_done:
|
||||
notice: The state of the task has been updated
|
||||
|
@ -1661,7 +1662,9 @@ en:
|
|||
accept_task: Accept task
|
||||
confirm_delete_group: Really delete this and all subsequent tasks?
|
||||
confirm_delete_single: Are you sure you want to delete the task?
|
||||
confirm_delete_single_from_group: Are you sure you want to delete this task (and keep related periodic tasks)?
|
||||
delete_group: Delete task and subsequent
|
||||
edit_group: Edit periodic
|
||||
hours: "%{count}h"
|
||||
mark_done: Mark task as done
|
||||
reject_task: Reject task
|
||||
|
|
Loading…
Reference in a new issue