@@ -46,6 +46,7 @@ gem 'bootstrap-timepicker-rails' |
||
46 | 46 |
gem "bootstrap-switch-rails" |
47 | 47 |
gem 'jasny_bootstrap_extension_rails' |
48 | 48 |
gem 'simple_form' |
49 |
+gem "nested_form" |
|
49 | 50 |
gem 'bootstrap_form' |
50 | 51 |
gem 'friendly_id', '~> 5.0.0' |
51 | 52 |
gem 'devise' |
@@ -163,6 +163,7 @@ GEM |
||
163 | 163 |
multi_json (1.10.1) |
164 | 164 |
multi_test (0.1.1) |
165 | 165 |
multi_xml (0.5.5) |
166 |
+ nested_form (0.3.2) |
|
166 | 167 |
net-scp (1.2.1) |
167 | 168 |
net-ssh (>= 2.6.5) |
168 | 169 |
net-ssh (2.9.1) |
@@ -328,6 +329,7 @@ DEPENDENCIES |
||
328 | 329 |
letter_opener |
329 | 330 |
mini_magick |
330 | 331 |
mixpanel-ruby |
332 |
+ nested_form |
|
331 | 333 |
pg |
332 | 334 |
rails (= 4.0.4) |
333 | 335 |
rails-i18n (~> 4.0.0) |
@@ -79,8 +79,8 @@ class MissionsController < ApplicationController |
||
79 | 79 |
end |
80 | 80 |
|
81 | 81 |
def take_agent_role |
82 |
- mission = Mission.find(params[:id]) |
|
83 |
- agent = mission.mission_agents.find(params[:agent]) |
|
82 |
+ mission = Mission.friendly.find(params[:id]) |
|
83 |
+ agent = mission.mission_agents.friendly.find(params[:agent]) |
|
84 | 84 |
candidate = MissionCandidate.create!(user: current_user, mission_agent: agent, status: 'closed', mode: 'take_agent_role') |
85 | 85 |
agent.user = current_user |
86 | 86 |
respond_to do |format| |
@@ -93,6 +93,21 @@ class MissionsController < ApplicationController |
||
93 | 93 |
end |
94 | 94 |
end |
95 | 95 |
end |
96 |
+ |
|
97 |
+ def step_submission |
|
98 |
+ mission = Mission.friendly.find(params[:id]) |
|
99 |
+ agent = mission.mission_agents.friendly.find(params[:agent]) |
|
100 |
+ submission = StepSubmission.new(step_submission_params) |
|
101 |
+ respond_to do |format| |
|
102 |
+ if submission.save |
|
103 |
+ format.html { redirect_to mission_agent_details_path(mission, agent), notice: (t 'mission.step_submission_confirmation') } |
|
104 |
+ format.json { head :no_content } |
|
105 |
+ else |
|
106 |
+ format.html { redirect_to mission_agent_details_path(mission, agent), alert: (t 'mission.step_submission_error') } |
|
107 |
+ format.json { render json: @mission.errors, status: :unprocessable_entity } |
|
108 |
+ end |
|
109 |
+ end |
|
110 |
+ end |
|
96 | 111 |
|
97 | 112 |
private |
98 | 113 |
# Use callbacks to share common setup or constraints between actions. |
@@ -104,4 +119,9 @@ class MissionsController < ApplicationController |
||
104 | 119 |
def mission_params |
105 | 120 |
params.require(:mission).permit(:mission_agents_id, :title, :objective, :briefing, :owner_id, :status, :launched, :language, :cover_img, :slug, :end_date) |
106 | 121 |
end |
122 |
+ |
|
123 |
+ def step_submission_params |
|
124 |
+ params.require(:step_submission).permit(:agent_step_id, :validated, :validated_by_id, :date_validated, :created_at, :updated_at, :language, :cover_img, :slug, :end_date, :submission_contents_attributes => [:submission_content_id, :submission_type, :created_at, :updated_at, :submission_attributes => [:submission_content_id, :content, :accepted, :validation_id, :created_at, :updated_at]]) |
|
125 |
+ end |
|
126 |
+ |
|
107 | 127 |
end |
@@ -1,5 +1,7 @@ |
||
1 | 1 |
class StepSubmission < ActiveRecord::Base |
2 | 2 |
belongs_to :agent_step |
3 | 3 |
belongs_to :validated_by, :class_name => "User" |
4 |
- has_many :submission_contents |
|
4 |
+ has_many :submission_contents, :dependent => :destroy |
|
5 |
+ has_many :submissions, :through => :submission_contents |
|
6 |
+ accepts_nested_attributes_for :submission_contents, allow_destroy:true |
|
5 | 7 |
end |
@@ -1,4 +1,5 @@ |
||
1 | 1 |
class SubmissionContent < ActiveRecord::Base |
2 |
- belongs_to :agent_step |
|
2 |
+ belongs_to :step_submission |
|
3 | 3 |
belongs_to :submission, polymorphic: true |
4 |
+ accepts_nested_attributes_for :submission, allow_destroy:true |
|
4 | 5 |
end |
@@ -1,5 +1,4 @@ |
||
1 | 1 |
class SubmissionText < ActiveRecord::Base |
2 |
- belongs_to :submission_content |
|
3 |
- has_one :submission_content, as: :submission, dependent: :destroy |
|
4 | 2 |
belongs_to :validation |
3 |
+ has_one :submission_content, :as => :submission, dependent: :destroy |
|
5 | 4 |
end |
@@ -14,9 +14,19 @@ |
||
14 | 14 |
<% end %> |
15 | 15 |
<%= content_tag(:div, class: 'panel-body collapse', id: validation_id) do %> |
16 | 16 |
<%= content_tag(:div, class: 'panel-content') do %> |
17 |
+ |
|
18 |
+ <% # Form %> |
|
17 | 19 |
<%= content_tag(:div, class: "panel-text") do %> |
18 |
- <p>sdfsdfsdfsdfdsf</p> |
|
20 |
+ |
|
21 |
+ <%= f.fields_for :submission_contents, SubmissionContent.new, show_empty: true do |f| %> |
|
22 |
+ <%= f.alert_message "Please fix the errors below." %> |
|
23 |
+ <%= f.fields_for :submission_text, SubmissionText.new, show_empty: true do |f| %> |
|
24 |
+ <%= f.text_field :content %> |
|
25 |
+ <% end %> |
|
26 |
+ <% end %> |
|
27 |
+ |
|
19 | 28 |
<% end %> |
29 |
+ |
|
20 | 30 |
<% end %> |
21 | 31 |
<% end %> |
22 | 32 |
<% end %> |
@@ -75,24 +75,31 @@ |
||
75 | 75 |
<%= content_tag(:h4, ((t 'agent.tasks') + ':') ) %> |
76 | 76 |
<% # Steps %> |
77 | 77 |
<% @agent.agent_steps.order('step ASC').each do |step| %> |
78 |
- <%= content_tag(:div, class: 'panel panel-default') do %> |
|
79 |
- <%= content_tag(:div, class: 'panel-heading') do %> |
|
80 |
- <%= content_tag(:h3, class: 'panel-title') do %> |
|
81 |
- <%= content_tag(:span, step.step, class: 'task-number') %> |
|
82 |
- <a class="accordion-toggle" data-toggle="collapse" data-parent="#colapse_steps" href="#collapse_step_<%= step.step %>"> |
|
83 |
- <span class="caret"></span> |
|
84 |
- <%= content_tag(:span, step.title, class: 'task-text') %> |
|
85 |
- </a> |
|
78 |
+ <% step_submission = StepSubmission.new %> |
|
79 |
+ <%= bootstrap_nested_form_for(step_submission) do |f| %> |
|
80 |
+ <%= content_tag(:div, class: 'panel panel-default') do %> |
|
81 |
+ <%= content_tag(:div, class: 'panel-heading') do %> |
|
82 |
+ <%= content_tag(:h3, class: 'panel-title') do %> |
|
83 |
+ <%= content_tag(:span, step.step, class: 'task-number') %> |
|
84 |
+ <a class="accordion-toggle" data-toggle="collapse" data-parent="#colapse_steps" href="#collapse_step_<%= step.step %>"> |
|
85 |
+ <span class="caret"></span> |
|
86 |
+ <%= content_tag(:span, step.title, class: 'task-text') %> |
|
87 |
+ |
|
88 |
+ </a> |
|
89 |
+ <% if step.step_validations.count > 0 %> |
|
90 |
+ <%= f.button :submit, class: 'btn btn-small btn-success pull-right' %> |
|
91 |
+ <% end %> |
|
86 | 92 |
|
87 |
- <% end %> |
|
88 |
- <% end %> |
|
89 |
- <%= content_tag(:div, class: 'panel-body collapse', id: ('collapse_step_'+ step.step.to_s)) do %> |
|
90 |
- <%= content_tag(:div, class: "panel-content") do %> |
|
91 |
- <%= content_tag(:div, class: "panel-text") do %> |
|
92 |
- <%= step.description.html_safe %> |
|
93 | 93 |
<% end %> |
94 |
- <%= render :partial => 'step_submission', locals: {step: step} %> |
|
94 |
+ <% end %> |
|
95 |
+ <%= content_tag(:div, class: 'panel-body collapse', id: ('collapse_step_'+ step.step.to_s)) do %> |
|
96 |
+ <%= content_tag(:div, class: "panel-content") do %> |
|
97 |
+ <%= content_tag(:div, class: "panel-text") do %> |
|
98 |
+ <%= step.description.html_safe %> |
|
99 |
+ <% end %> |
|
100 |
+ <%= render :partial => 'step_submission', locals: {step: step, f: f, step_submission: step_submission} %> |
|
95 | 101 |
|
102 |
+ <% end %> |
|
96 | 103 |
<% end %> |
97 | 104 |
<% end %> |
98 | 105 |
<% end %> |
@@ -33,6 +33,9 @@ Avalanche2::Application.routes.draw do |
||
33 | 33 |
get 'dashboard' => 'agents#dashboard', as: :dashboard |
34 | 34 |
get 'agents' => 'agents#list', as: :agent_list |
35 | 35 |
get 'agent/:id' => 'agents#show', as: :show_agent |
36 |
+ |
|
37 |
+ # Steps |
|
38 |
+ post 'missions/:id/agents/:agent/step_submission' => 'missions#step_submission', as: :step_submissions |
|
36 | 39 |
|
37 | 40 |
# Admin Panel |
38 | 41 |
get "admin/dashboard" => "admin_panel#dashboard", :as => :admin_dashboard |
@@ -0,0 +1,6 @@ |
||
1 |
+class ChangeSubmissionContentsFromSubmissionContents < ActiveRecord::Migration |
|
2 |
+ def change |
|
3 |
+ remove_reference :submission_contents, :submission_content, index: true |
|
4 |
+ add_reference :submission_contents, :step_submission, index: true |
|
5 |
+ end |
|
6 |
+end |
@@ -11,7 +11,7 @@ |
||
11 | 11 |
# |
12 | 12 |
# It's strongly recommended that you check this file into your version control system. |
13 | 13 |
|
14 |
-ActiveRecord::Schema.define(version: 20150218012557) do |
|
14 |
+ActiveRecord::Schema.define(version: 20150219012955) do |
|
15 | 15 |
|
16 | 16 |
# These are extensions that must be enabled in order to support this database |
17 | 17 |
enable_extension "plpgsql" |
@@ -165,14 +165,14 @@ ActiveRecord::Schema.define(version: 20150218012557) do |
||
165 | 165 |
add_index "step_validations", ["agent_step_id"], name: "index_step_validations_on_agent_step_id", using: :btree |
166 | 166 |
|
167 | 167 |
create_table "submission_contents", force: true do |t| |
168 |
- t.integer "submission_content_id" |
|
169 | 168 |
t.integer "submission_id" |
170 | 169 |
t.string "submission_type" |
171 | 170 |
t.datetime "created_at" |
172 | 171 |
t.datetime "updated_at" |
172 |
+ t.integer "step_submission_id" |
|
173 | 173 |
end |
174 | 174 |
|
175 |
- add_index "submission_contents", ["submission_content_id"], name: "index_submission_contents_on_submission_content_id", using: :btree |
|
175 |
+ add_index "submission_contents", ["step_submission_id"], name: "index_submission_contents_on_step_submission_id", using: :btree |
|
176 | 176 |
|
177 | 177 |
create_table "submission_texts", force: true do |t| |
178 | 178 |
t.integer "submission_content_id" |