Take agent role feature

jamesperet 10 jaren geleden
bovenliggende
commit
8e3a7f355a

+ 35 - 2
app/assets/stylesheets/missions.css.less

@@ -239,6 +239,7 @@
239 239
 
240 240
 .mission-agent-status {
241 241
 	height: 220px;
242
+	padding: 8px;
242 243
 }
243 244
 
244 245
 .open-agent-role {
@@ -246,7 +247,11 @@
246 247
 	text-align: center;
247 248
 }
248 249
 
249
-.open-agent-role p {
250
+.assigned-agent-role {
251
+	background-color: @bg-ligh-gray;
252
+}
253
+
254
+.mission-agent-status p.agent-description {
250 255
 	font-family: Helvetica-LightOblique;
251 256
 	font-size: 14px;
252 257
 	color: #1D1D26;
@@ -256,4 +261,32 @@
256 261
 .open-agent-role .btn-spacer {
257 262
 	padding-top: 55px;
258 263
 	padding-bottom: 70px;
259
-}
264
+}
265
+
266
+.mission-agent-status h4 {
267
+	margin-bottom: 2px;
268
+}
269
+
270
+.mission-agent-status p {
271
+	font-family: Avenir-Light;
272
+	font-size: 21px;
273
+	color: #1D1D26;
274
+	line-height: 29px;
275
+}
276
+
277
+.mission-agent-status p.agent-stats {
278
+	font-family: Avenir-Medium;
279
+	font-size: 14px;
280
+	color: #1D1D26;
281
+	line-height: 19px;
282
+}
283
+
284
+.agent-points {
285
+	font-size: 21px;
286
+	padding-right: 3px;
287
+}
288
+
289
+p.agent-stats i {
290
+	font-size: 30px;
291
+	padding-right: 10px;
292
+}

+ 16 - 0
app/controllers/missions_controller.rb

@@ -70,6 +70,22 @@ class MissionsController < ApplicationController
70 70
       format.json { head :no_content }
71 71
     end
72 72
   end
73
+  
74
+  def take_agent_role
75
+    mission = Mission.find(params[:id])
76
+    agent = mission.mission_agents.find(params[:agent])
77
+    candidate = MissionCandidate.create!(user: current_user, mission_agent: agent, status: 'closed', mode: 'take_agent_role')
78
+    agent.user = current_user
79
+    respond_to do |format|
80
+      if agent.save
81
+        format.html { redirect_to mission_agent_details_path(mission, agent), notice: (t 'mission.take_agent_profile_confirmation') }
82
+        format.json { head :no_content }
83
+      else
84
+        format.html { redirect_to mission_agent_details_path(mission, agent), alert: (t 'mission.take_agent_profile_error') }
85
+        format.json { render json: @mission.errors, status: :unprocessable_entity }
86
+      end
87
+    end
88
+  end
73 89
 
74 90
   private
75 91
     # Use callbacks to share common setup or constraints between actions.

+ 9 - 0
app/models/mission_agent.rb

@@ -7,4 +7,13 @@ class MissionAgent < ActiveRecord::Base
7 7
   
8 8
   accepts_nested_attributes_for :agent_steps, allow_destroy:true
9 9
   accepts_nested_attributes_for :mission_candidates
10
+  
11
+  def is_assigned
12
+    if self.mission_candidates.find_all_by_status(1).last == nil
13
+      return false
14
+    else
15
+      return true
16
+    end
17
+  end
18
+  
10 19
 end

+ 28 - 7
app/views/missions/show_agent_details.html.erb

@@ -21,10 +21,8 @@
21 21
 <%= content_tag(:div, class: 'container container-last') do %>
22 22
 	<%= content_tag(:div, class: 'row') do %>
23 23
 		<%= content_tag(:div, class: 'span12') do %>
24
-			<%= bootstrap_flash %>
25
-
26 24
 			<% # Page Content %>
27
-
25
+			<%= bootstrap_flash %>
28 26
 			<%= content_tag(:div, class: 'page-header page-header-type') do %>
29 27
 				<%= content_tag(:small, (t 'mission.agent')+':') %>
30 28
 				<%= content_tag(:h2) do %>
@@ -41,11 +39,34 @@
41 39
 			<%= @agent.briefing.html_safe %>
42 40
 		<% end %>
43 41
 		<%= content_tag(:div, class: 'span4') do %>
44
-			<%= content_tag(:div, class: 'mission-agent-status open-agent-role') do %>
45
-				<%= content_tag(:div, class: 'btn-spacer') do %>
46
-					<%= link_to (t 'mission.take_agent_role'), '#', class: 'btn btn-large' %>
42
+			<% if @agent.is_assigned %>
43
+				<%= content_tag(:div, class: 'mission-agent-status assigned-agent-role') do %>
44
+					<%= content_tag(:h4, (t 'mission.agent')+':') %>
45
+					<%= content_tag(:div, class: 'pull-left') do %>
46
+						<%= content_tag(:p, @agent.user.full_name) %>
47
+						<%= content_tag(:p, ('<i class="icon-mission"></i><span> ' + 5.to_s + ' ' + (t 'agent.missions_acomplished')).html_safe, class: 'agent-stats') %>
48
+						<%= content_tag(:p, ('<i class="icon-radar"></i><span> ' + 2.to_s + ' ' + (t 'agent.missions_directed')).html_safe, class: 'agent-stats') %>
49
+						<%= content_tag(:p, ('<span class="agent-points">' + 19.to_s + 'K</span> ' + (t 'agent.points')).html_safe, class: 'agent-stats') %>
50
+					<% end %>
51
+					<%= content_tag(:div, class: 'pull-right') do %>
52
+						<% if @agent.user.avatar.file != nil %>
53
+					    		<%= image_tag @agent.user.avatar.to_s, size: "115x115", :class => 'img-circle' %>
54
+					     <% else %>
55
+					    		<%= image_tag "user.png", size: "115x115", :class => 'img-circle' %>
56
+					     <% end %>
57
+					<% end %>
58
+					<%= content_tag(:div, '', class: 'clearfix') %>
59
+					<%= content_tag(:div, class: 'mission-agent-bio') do %>
60
+						<%= content_tag(:p, 'Hacker from São Paulo Brazil. Avalanche programer and Designer.', class: 'agent-description') %>
61
+					<% end %>
62
+				<% end %>
63
+			<% else %>
64
+				<%= content_tag(:div, class: 'mission-agent-status open-agent-role') do %>
65
+					<%= content_tag(:div, class: 'btn-spacer') do %>
66
+						<%= link_to (t 'mission.take_agent_role'), take_agent_role_path(@mission, @agent), class: 'btn btn-large' %>
67
+					<% end %>
68
+					<%= content_tag(:p, 'This agent role is open for the first user that apply for it.', class: 'agent-description') %>
47 69
 				<% end %>
48
-				<%= content_tag(:p, 'This agent role is open for the first user that apply for it.') %>
49 70
 			<% end %>
50 71
 		<% end %>
51 72
 	<% end %>

+ 1 - 1
app/views/missions/show_agents.html.erb

@@ -71,7 +71,7 @@
71 71
 						          <%= content_tag(:h4, (t 'mission.no_agent_selected')+'') %>
72 72
 							<% end %>
73 73
 							<%= content_tag(:div, class: 'thumbnail-open-agent-slot') do %>
74
-								<%= link_to (t 'mission.apply_for_position'), '#', class: 'btn' %>
74
+								<%= link_to (t 'mission.apply_for_position'), take_agent_role_path(@mission, agent), class: 'btn' %>
75 75
 							<% end %>
76 76
 						<% end %>
77 77
 					<% end %>

+ 1 - 0
config/routes.rb

@@ -25,6 +25,7 @@ Avalanche2::Application.routes.draw do
25 25
   resources :missions
26 26
   get '/missions/:id/agents', to: 'missions#show_agents', as: :mission_agents_list
27 27
   get 'missions/:id/agents/:agent', to: 'missions#show_agent_details', as: :mission_agent_details
28
+  get 'missions/:id/agents/:agent/take_agent_role', to: 'missions#take_agent_role', as: :take_agent_role
28 29
 
29 30
   # Admin Panel
30 31
   get "admin/dashboard" => "admin_panel#dashboard", :as => :admin_dashboard