diff --git a/app/controllers/management/spending_proposals_controller.rb b/app/controllers/management/spending_proposals_controller.rb new file mode 100644 index 000000000..3a17d86b1 --- /dev/null +++ b/app/controllers/management/spending_proposals_controller.rb @@ -0,0 +1,40 @@ +class Management::SpendingProposalsController < Management::BaseController + + before_action :check_verified_user + + def new + @spending_proposal = SpendingProposal.new + end + + def create + @spending_proposal = SpendingProposal.new(spending_proposal_params) + @spending_proposal.author = managed_user + + if @spending_proposal.save_with_captcha + redirect_to management_spending_proposal_path(@spending_proposal), notice: t('flash.actions.create.notice', resource_name: t("activerecord.models.spending_proposal", count: 1)) + else + render :new + end + end + + def show + @spending_proposal = SpendingProposal.find(params[:id]) + end + + private + + def spending_proposal_params + params.require(:spending_proposal).permit(:title, :description, :external_url, :geozone_id, :terms_of_service, :captcha, :captcha_key) + end + + def check_verified_user + unless current_user.level_two_or_three_verified? + redirect_to management_document_verifications_path, alert: t("management.spending_proposals.alert.unverified_user") + end + end + + def current_user + managed_user + end + +end diff --git a/app/views/management/spending_proposals/new.html.erb b/app/views/management/spending_proposals/new.html.erb new file mode 100644 index 000000000..c04c81b03 --- /dev/null +++ b/app/views/management/spending_proposals/new.html.erb @@ -0,0 +1,10 @@ +
+ + <%= render '/shared/print' %> + +
+

<%= t("management.spending_proposals.create") %>

+ <%= render "spending_proposals/form", form_url: management_spending_proposals_url %> +
+ +
diff --git a/app/views/management/spending_proposals/show.html.erb b/app/views/management/spending_proposals/show.html.erb new file mode 100644 index 000000000..babe5cf2e --- /dev/null +++ b/app/views/management/spending_proposals/show.html.erb @@ -0,0 +1,3 @@ +<%= render '/shared/print' %> + +<%= render template: 'spending_proposals/show' %> \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 0e31c1261..f29d4e781 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -400,7 +400,7 @@ en: unauthorized: default: You do not have permission to access this page. manage: - all: You do not have permission to carry out the action '%{action}' on %{subject}. + all: "You do not have permission to carry out the action '%{action}' on %{subject}." users: show: deleted: Deleted diff --git a/config/locales/es.yml b/config/locales/es.yml index cbd7c5789..4c5a3b675 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -86,7 +86,7 @@ es: debate_title: Título del debate tags_instructions: Etiqueta este debate. Puedes elegir entre nuestras propuestas o introducir las que desees. tags_label: Temas - tags_placeholder: Escribe las etiquetas que desees separadas por coma (',') + tags_placeholder: "Escribe las etiquetas que desees separadas por coma (',')" index: featured_debates: Destacados filter_topic: @@ -261,7 +261,7 @@ es: proposal_video_url_note: Puedes añadir un enlace a YouTube o Vimeo tags_instructions: Etiqueta esta propuesta. Puedes elegir entre nuestras sugerencias o introducir las que desees. tags_label: Temas - tags_placeholder: Escribe las etiquetas que desees separadas por una coma (',') + tags_placeholder: "Escribe las etiquetas que desees separadas por una coma (',')" index: featured_proposals: Destacadas filter_topic: @@ -400,7 +400,7 @@ es: unauthorized: default: No tienes permiso para acceder a esta página. manage: - all: No tienes permiso para realizar la acción '%{action}' sobre %{subject}. + all: "No tienes permiso para realizar la acción '%{action}' sobre %{subject}." users: show: deleted: Eliminado diff --git a/config/locales/management.en.yml b/config/locales/management.en.yml index 7ea1dc876..7d8a9f12e 100644 --- a/config/locales/management.en.yml +++ b/config/locales/management.en.yml @@ -40,6 +40,7 @@ en: create_proposal: Create proposal print_proposals: Print proposals support_proposals: Support proposals + create_spending_proposal: Create spending proposal title: Management users: Users permissions: @@ -58,6 +59,10 @@ en: create_proposal: Create proposal print: print_button: Print + spending_proposals: + alert: + unverified_user: User is not verified + create: Create spending proposal sessions: signed_out: Signed out successfully. signed_out_managed_user: User session signed out successfully. diff --git a/config/locales/management.es.yml b/config/locales/management.es.yml index c219b68f4..5c1fe68d9 100644 --- a/config/locales/management.es.yml +++ b/config/locales/management.es.yml @@ -40,6 +40,7 @@ es: create_proposal: Crear propuesta print_proposals: Imprimir propuestas support_proposals: Apoyar propuestas + create_spending_proposal: Crear propuesta de gasto title: Gestión users: Usuarios permissions: @@ -58,6 +59,10 @@ es: create_proposal: Crear propuesta print: print_button: Imprimir + spending_proposals: + alert: + unverified_user: Este usuario no está verificado + create: Crear propuesta de gasto sessions: signed_out: Has cerrado la sesión correctamente. signed_out_managed_user: Se ha cerrado correctamente la sesión del usuario. diff --git a/config/routes.rb b/config/routes.rb index d0fa9f576..8228aade6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -225,6 +225,8 @@ Rails.application.routes.draw do get :print end end + + resources :spending_proposals, only: [:new, :create, :show] end # Example of regular route: diff --git a/spec/features/management/spending_proposals_spec.rb b/spec/features/management/spending_proposals_spec.rb new file mode 100644 index 000000000..52ea36801 --- /dev/null +++ b/spec/features/management/spending_proposals_spec.rb @@ -0,0 +1,54 @@ +require 'rails_helper' + +feature 'Spending Proposals' do + + background do + login_as_manager + end + + context "Create" do + + scenario 'Creating spending proposals on behalf of someone' do + user = create(:user, :level_two) + login_managed_user(user) + + click_link "Create spending proposal" + + within(".account-info") do + expect(page).to have_content "Identified as" + expect(page).to have_content "#{user.username}" + expect(page).to have_content "#{user.email}" + expect(page).to have_content "#{user.document_number}" + end + + fill_in 'spending_proposal_title', with: 'Build a park in my neighborhood' + fill_in 'spending_proposal_description', with: 'There is no parks here...' + fill_in 'spending_proposal_external_url', with: 'http://moarparks.com' + fill_in 'spending_proposal_captcha', with: correct_captcha_text + check 'spending_proposal_terms_of_service' + + click_button 'Create' + + expect(page).to have_content 'Spending proposal created successfully.' + + expect(page).to have_content 'Build a park in my neighborhood' + expect(page).to have_content 'There is no parks here...' + expect(page).to have_content 'All city' + expect(page).to have_content 'http://moarparks.com' + expect(page).to have_content user.name + expect(page).to have_content I18n.l(SpendingProposal.last.created_at.to_date) + + expect(current_path).to eq(management_spending_proposal_path(SpendingProposal.last)) + end + + scenario "Should not allow unverified users to create spending proposals" do + user = create(:user) + login_managed_user(user) + + click_link "Create spending proposal" + + expect(page).to have_content "User is not verified" + end + end + +end \ No newline at end of file