Browse Source

make possible to add variants when the product is presentation = false

jose miguel 7 years ago
parent
commit
e0fb63d9c9

+ 3 - 1
app/controllers/products_controller.rb

@@ -83,7 +83,8 @@ class ProductsController < ApplicationController
 
   # GET /products/1/edit
   def edit
-    @with_presentation = true
+    has_variants = @product.children.any?
+    @with_presentation = has_variants ? true : false # si aun no tiene variantes, permitir clickear el switch
   end
 
   # POST /products
@@ -132,6 +133,7 @@ class ProductsController < ApplicationController
   def update
     respond_to do |format|
       @product.skip_sku_validation = true
+      @product.is_parent = params[:product][:presentation] == 'true' ? true : false
       message = 'El producto ' + @product.sku + ' fue modificado.'
       @product.audit_comment = message
       if @product.update(product_params)

+ 47 - 43
app/models/product.rb

@@ -276,61 +276,65 @@ class Product < ActiveRecord::Base
     end
   end
 
+  # rubocop:disable Metrics/BlockLength
   def save_new_attributes(new_sizes, new_colors, new_styles)
-    combinations = Array.new
-    attributes = Array.new
+    Thread.new do
+      combinations = Array.new
+      attributes = Array.new
 
-    unless new_sizes.nil?
-      new_sizes.each do |s|
-        size_list.add(s.to_s)
-        save(validate: false)
+      unless new_sizes.nil?
+        new_sizes.each do |s|
+          size_list.add(s.to_s)
+          save(validate: false)
+        end
       end
-    end
-    unless new_colors.nil?
-      new_colors.each do |s|
-        color_list.add(s.to_s)
-        save(validate: false)
+      unless new_colors.nil?
+        new_colors.each do |s|
+          color_list.add(s.to_s)
+          save(validate: false)
+        end
       end
-    end
-    unless new_styles.nil?
-      new_styles.each do |s|
-        style_list.add(s.to_s)
-        save(validate: false)
+      unless new_styles.nil?
+        new_styles.each do |s|
+          style_list.add(s.to_s)
+          save(validate: false)
+        end
       end
-    end
 
-    combinations = get_combinations(combinations, attributes)
-    # self.save(:validate: false)
-    combinations.each_with_index do |combination, index|
-      attributes = {}
-      if combination.is_a?(Array)
-        combination.each do |c|
-          attributes = assign_attributes_to_variant(c, id, attributes)
+      combinations = get_combinations(combinations, attributes)
+      # self.save(:validate: false)
+      combinations.each_with_index do |combination, index|
+        attributes = {}
+        if combination.is_a?(Array)
+          combination.each do |c|
+            attributes = assign_attributes_to_variant(c, id, attributes)
+          end
+        else
+          attributes = assign_attributes_to_variant(combination, id, attributes)
         end
-      else
-        attributes = assign_attributes_to_variant(combination, id, attributes)
-      end
 
-      next unless children.where("attributes_json = ?", attributes.to_json).select(:id).first.nil?
-      # if children.where("attributes_json = ?", attributes.to_json).select(:id).first.nil?
-      @products_variant = Product.new
-      @products_variant = dup
-      @products_variant.parent_id = id
-      @products_variant.is_parent = false
-      @products_variant.sku = sku + (index + 1).to_s + "A"
-      @products_variant.category_ids = category_ids
-      attrs_json = {}
-      if combination.is_a?(Array)
-        combination.each do |attrib|
-          attrs_json = @products_variant.assign_attributes_to_variant(attrib, id, attrs_json)
+        next unless children.where("attributes_json = ?", attributes.to_json).select(:id).first.nil?
+        # if children.where("attributes_json = ?", attributes.to_json).select(:id).first.nil?
+        @products_variant = Product.new
+        @products_variant = dup
+        @products_variant.parent_id = id
+        @products_variant.is_parent = false
+        @products_variant.sku = sku + (index + 1).to_s + "A"
+        @products_variant.category_ids = category_ids
+        attrs_json = {}
+        if combination.is_a?(Array)
+          combination.each do |attrib|
+            attrs_json = @products_variant.assign_attributes_to_variant(attrib, id, attrs_json)
+          end
+        else
+          attrs_json = @products_variant.assign_attributes_to_variant(combination, id, attrs_json)
         end
-      else
-        attrs_json = @products_variant.assign_attributes_to_variant(combination, id, attrs_json)
+        @products_variant.attributes_json = attributes.to_json
+        @products_variant.save(validate: false)
       end
-      @products_variant.attributes_json = attributes.to_json
-      @products_variant.save(validate: false)
     end
   end
+  # rubocop:enable Metrics/BlockLength
 
   def children
     Product.where("parent_id = ? and status != 0 ", id)

+ 1 - 1
app/views/products/_form.html.erb

@@ -53,7 +53,7 @@
 						<%= f.label :unit_id, "Unidad de medida", {:class=>"col-md-3 control-label"} do %>Unidad de medida <span class="required">*</span>
 						<% end %>
 						<div class="col-md-9">
-							<%= f.collection_select :unit_id, Unit.all, :id, :unit, {:prompt => "Seleccione"}, {:class => "form-control input-medium"}   %>
+							<%= f.collection_select :unit_id, Unit.vigentes, :id, :unit, {:prompt => "Seleccione"}, {:class => "form-control input-medium"}   %>
 						</div>
 					</div>
 				</div>

+ 3 - 6
app/views/products/edit_variants.html.erb

@@ -104,7 +104,7 @@
 												Son <strong id="variantes"></strong> variantes del producto.
 											</div>
 										</div>
-										<% if @product.sizes.count > 0 %>
+
 										<div class="form-group ">
 											<%= label_tag :size_list, "Tallas", {:class=>"col-md-3 control-label"} %>
 											<div class="col-md-9 div_sizes">
@@ -116,8 +116,7 @@
 												<%= hidden_field_tag "new_size_list", @product.sizes.to_json.to_s %>
 											</div>
 										</div>
-										<% end %>
-										<% if @product.colors.count > 0 %>
+
 										<div class="form-group ">
 											<%= label_tag :color_list, "Colores", {:class=>"col-md-3 control-label"} %>
 											<div class="col-md-9 div_colors">
@@ -129,8 +128,7 @@
 												<%= hidden_field_tag "new_color_list", @product.colors.to_json %>
 											</div>
 										</div>
-										<% end %>
-										<% if @product.styles.count > 0 %>
+
 										<div class="form-group ">
 											<%= label_tag :style_list, "Estilos", {:class=>"col-md-3 control-label"} %>
 											<div class="col-md-9 div_styles">
@@ -142,7 +140,6 @@
 												<%= hidden_field_tag "new_style_list", @product.styles.to_json %>
 											</div>
 										</div>
-										<% end %>
 										<hr>
 										<div class="form-actions">
 											<div class="row">