Commit 14319a1428a1e2b10c9a21f1b9aa75fd4699496d
1 parent
59edcdd4
Exists in
master
and in
23 other branches
ActionItem266: reimplementing addition of products by enterprises
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1653 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
5 changed files
with
78 additions
and
1 deletions
Show diff stats
app/controllers/my_profile/manage_products_controller.rb
| ... | ... | @@ -12,6 +12,8 @@ class ManageProductsController < ApplicationController |
| 12 | 12 | end |
| 13 | 13 | |
| 14 | 14 | def new |
| 15 | + @current_category = ProductCategory.top_level_for(environment).first | |
| 16 | + @categories = @current_category.nil? ? [] : @current_category.children | |
| 15 | 17 | @product = @profile.products.build(params[:product]) |
| 16 | 18 | @product.build_image unless @product.image |
| 17 | 19 | if request.post? |
| ... | ... | @@ -26,6 +28,8 @@ class ManageProductsController < ApplicationController |
| 26 | 28 | |
| 27 | 29 | def edit |
| 28 | 30 | @product = @profile.products.find(params[:id]) |
| 31 | + @current_category = @product.product_category | |
| 32 | + @categories = @current_category.nil? ? [] : @current_category.children | |
| 29 | 33 | if request.post? |
| 30 | 34 | if @product.update_attributes(params[:product]) |
| 31 | 35 | flash[:notice] = _('Product succesfully updated') |
| ... | ... | @@ -46,5 +50,11 @@ class ManageProductsController < ApplicationController |
| 46 | 50 | redirect_back_or_default :action => 'show', :id => @product |
| 47 | 51 | end |
| 48 | 52 | end |
| 53 | + | |
| 54 | + def update_subcategories | |
| 55 | + @current_category = ProductCategory.find(params[:id]) | |
| 56 | + @categories = @current_category.children | |
| 57 | + render :partial => 'subcategories' | |
| 58 | + end | |
| 49 | 59 | |
| 50 | 60 | end | ... | ... |
app/views/manage_products/_form.rhtml
| ... | ... | @@ -5,7 +5,11 @@ |
| 5 | 5 | <%= display_form_field( _('Price:'), f.text_field(:price) ) %> |
| 6 | 6 | <%= display_form_field( _('Description:'), f.text_area(:description) ) %> |
| 7 | 7 | <%= display_form_field( _('Image:'), file_field_tag( "product[image_builder][uploaded_data]" ) ) %> |
| 8 | - <%= display_form_field( _('category:'), f.select( :product_category_id,ProductCategory.find(:all).map{|pc|[pc.name,pc.id]}, {:include_blank => true} )) %> | |
| 8 | + | |
| 9 | + <div id='subcategories'> | |
| 10 | + <%= render :partial => 'subcategories' %> | |
| 11 | + </div> | |
| 12 | + | |
| 9 | 13 | <% button_bar do %> |
| 10 | 14 | <%= submit_button('save', (mode == 'new' ? _('Create product') : _('Save changes')), :cancel => {:action => 'index'} ) %> |
| 11 | 15 | <% end %> | ... | ... |
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +<p><%= _('Current category:') %></p> | |
| 2 | +<% | |
| 3 | + categories = [@current_category] | |
| 4 | + categories.push(@current_category) while @current_category and @current_category = @current_category.parent | |
| 5 | +%> | |
| 6 | +<%= categories.compact.reverse.map{|i| link_to(i.name, {}, :class => 'select-current-category-link')}.join(' → ') %> | |
| 7 | + | |
| 8 | +<% unless @categories.empty? %> | |
| 9 | + <p><%= _('Select a subcategory:') %></p> | |
| 10 | +<% end %> | |
| 11 | +<% for category in @categories do %> | |
| 12 | + <%= link_to_remote category.name, { | |
| 13 | + :update => "subcategories", | |
| 14 | + :url => { :action => "update_subcategories", :id => category.id }, | |
| 15 | + :loaded => visual_effect(:highlight, "subcategories") }, | |
| 16 | + :class => 'select-subcategory-link' | |
| 17 | + %> | |
| 18 | +<% end %> | ... | ... |
test/functional/manage_products_controller_test.rb
| ... | ... | @@ -103,5 +103,39 @@ class ManageProductsControllerTest < Test::Unit::TestCase |
| 103 | 103 | assert Product.find_by_name('test product') |
| 104 | 104 | end |
| 105 | 105 | end |
| 106 | + | |
| 107 | + should 'show current category' do | |
| 108 | + environment = Environment.default | |
| 109 | + category1 = ProductCategory.create!(:name => 'Category 1', :environment => environment) | |
| 110 | + category2 = ProductCategory.create!(:name => 'Category 2', :environment => environment, :parent => category1) | |
| 111 | + category3 = ProductCategory.create!(:name => 'Category 3', :environment => environment, :parent => category2) | |
| 112 | + category4 = ProductCategory.create!(:name => 'Category 4', :environment => environment, :parent => category3) | |
| 113 | + get :new, :profile => @enterprise.identifier | |
| 114 | + assert_tag :tag => 'p', :content => /Current category:/, :sibling => { :tag => 'a', :content => /#{category1.name}/ } | |
| 115 | + end | |
| 116 | + | |
| 117 | + should 'show subcategories list' do | |
| 118 | + environment = Environment.default | |
| 119 | + category1 = ProductCategory.create!(:name => 'Category 1', :environment => environment) | |
| 120 | + category2 = ProductCategory.create!(:name => 'Category 2', :environment => environment, :parent => category1) | |
| 121 | + get 'new', :profile => @enterprise.identifier | |
| 122 | + assert !assigns(:categories).empty? | |
| 123 | + assert_tag :tag => 'p', :content => /Select a subcategory:/, :sibling => { :tag => 'a', :attributes => { :href => '#' }, :content => /#{category2.name}/ } | |
| 124 | + end | |
| 125 | + | |
| 126 | + should 'update subcategories' do | |
| 127 | + environment = Environment.default | |
| 128 | + category1 = ProductCategory.create!(:name => 'Category 1', :environment => environment) | |
| 129 | + category2 = ProductCategory.create!(:name => 'Category 2', :environment => environment, :parent => category1) | |
| 130 | + get 'update_subcategories', :profile => @enterprise.identifier, :id => category1.id | |
| 131 | + assert_tag :tag => 'a', :attributes => { :href => '#' }, :content => /#{category2.name}/ | |
| 132 | + end | |
| 133 | + | |
| 134 | + should 'not show subcategories list when no subcategories' do | |
| 135 | + environment = Environment.default | |
| 136 | + category1 = ProductCategory.create!(:name => 'Category 1', :environment => environment) | |
| 137 | + get 'update_subcategories', :profile => @enterprise.identifier, :id => category1.id | |
| 138 | + assert_no_tag :tag => 'p', :content => 'Select a subcategory:' | |
| 139 | + end | |
| 106 | 140 | |
| 107 | 141 | end | ... | ... |