Kaynağa Gözat

removed relationship between product and multiple categories

chemi ledon 7 yıl önce
ebeveyn
işleme
4492761008

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 1
app/controllers/cash_outs_controller.rb


+ 5 - 11
app/controllers/products_controller.rb

@@ -12,11 +12,9 @@ class ProductsController < ApplicationController
 
   before_action :set_product, only: [:show, :edit, :update, :destroy]
   before_action :set_product_id, only: [:list_prices, :list_prices_variants, :edit_variants, :update_variants, :edit_from_purchase, :update_from_purchase, :update_status]
-  before_action :get_categories, only: [:create, :update]
   before_action :get_attrs, only: [:show, :edit, :update]
   before_action :get_filters, only: [:index, :show, :edit, :new]
 
-  skip_before_action :get_categories, only:  [:edit_from_purchase]
   # GET /products
   # GET /products.json
   def index
@@ -96,6 +94,7 @@ class ProductsController < ApplicationController
       @product.is_parent = true
     end
     message = 'El producto ' + @product.sku + ' fue creado.'
+    @product.category_id = params[:sub_category_id].present? ? params[:sub_category_id] : params[:product][:category_id]
     @product.audit_comment = message
 
     respond_to do |format|
@@ -145,6 +144,9 @@ class ProductsController < ApplicationController
       @product.skip_sku_validation = true
       @product.is_parent = params[:product][:presentation] == 'true' ? true : false
       message = 'El producto ' + @product.sku + ' fue modificado.'
+      if params[:sub_category_id].present?
+        params[:product][:category_id] = params[:sub_category_id]
+      end
       @product.audit_comment = message
       if @product.update(product_params)
         if @product.is_parent
@@ -342,15 +344,7 @@ class ProductsController < ApplicationController
 
   # Never trust parameters from the scary internet, only allow the white list through.
   def product_params
-    params.require(:product).permit(:sku, :name, :description, :price_base, :price_sale, :img_product, :img_product_cache, :presentation, :inventory, :unit_id, :content, :status, :categorias, :category_ids, :include_purchase_tax, :include_sale_tax, :barcode, :is_in_dollars, :price_base_dollars, size_list: [], color_list: [], style_list: [], available_products_attributes: [:id, :price_sale])
-  end
-
-  def get_categories
-    @categories = Array.new
-    unless params[:product][:category_ids].blank?
-      @categories << Category.find(params[:product][:category_ids])
-      @product.categories = @categories
-    end
+    params.require(:product).permit(:sku, :name, :description, :price_base, :price_sale, :img_product, :img_product_cache, :presentation, :inventory, :unit_id, :content, :status, :category_id, :sub_category_id, :include_purchase_tax, :include_sale_tax, :barcode, :is_in_dollars, :price_base_dollars, size_list: [], color_list: [], style_list: [], available_products_attributes: [:id, :price_sale])
   end
 
   def save_pre_purchase(product)

+ 2 - 2
app/controllers/reports_controller.rb

@@ -68,9 +68,9 @@ class ReportsController < ApplicationController
       @end_date = DateTime.parse(params[:end_date]).in_time_zone(Time.zone).end_of_day + 1.days
       @sales =
         if params[:pointsale].blank?
-          Sale.joins(:products, products: :categories).where.not(status: 1).where(created_at: @start_date..@end_date).order("id DESC")
+          Sale.joins(:products, products: :category).where.not(status: 1).where(created_at: @start_date..@end_date).order("id DESC")
         else
-          Pointsale.find(params[:pointsale]).sales.joins(:products, products: :categories).where.not(status: 1).where(created_at: @start_date..@end_date).order("id DESC")
+          Pointsale.find(params[:pointsale]).sales.joins(:products, products: :category).where.not(status: 1).where(created_at: @start_date..@end_date).order("id DESC")
         end
       categories = Category.find(params[:subcategory].present? ? params[:subcategory] : params[:category]) if params[:category].present?
       @sales = @sales.where(categories: { id: [categories.id, categories.children.ids].flatten }) if categories.present?

+ 3 - 3
app/controllers/sales_controller.rb

@@ -389,14 +389,14 @@ class SalesController < ApplicationController
     if params[:pointsale_id].present?
       @pointsale = Pointsale.find(params[:pointsale_id])
       @incomes_in_period = @pointsale.cash_registers_moves.joins(:sale).where(move_type: '1', created_at: start_date..end_date)
-      @sales = @pointsale.sales.joins(:products, products: :categories).includes(:user, :seller).activas.where(created_at: start_date..end_date).order("id DESC")
+      @sales = @pointsale.sales.joins(:products, products: :category).includes(:user, :seller).activas.where(created_at: start_date..end_date).order("id DESC")
     else
       @incomes_in_period = CashRegistersMove.joins(:sale).where(move_type: '1', created_at: start_date..end_date)
-      @sales = Sale.joins(:products, products: :categories).includes(:user, :seller).activas.where(created_at: start_date..end_date).order("id DESC")
+      @sales = Sale.joins(:products, products: :category).includes(:user, :seller).activas.where(created_at: start_date..end_date).order("id DESC")
     end
 
     if category.present?
-      @sales = @sales.where(categories: { id: ids })
+      @sales = @sales.where(category: { id: ids })
       @incomes_in_period = @incomes_in_period.where(sale_id: @sales.ids)
     end
 

+ 5 - 7
app/datatables/available_products_datatable.rb

@@ -20,27 +20,25 @@ class AvailableProductsDatatable
   def data
     if params[:table] == 'in_pointsale'
       products.map do |available|
-        category = available.product.categories[0]
         {
           'DT_RowId' => "available_#{available.id}",
           '0' => '<input class="form-control checkboxes" type="checkbox"/>',
           '1' => available.product.sku,
           '2' => get_display_name(available.product),
-          '3' => (category.parent_id.zero? ? category.category : category.parent.category),
-          '4' => (category.parent_id != 0 ? category.category : ' '),
+          '3' => (available.product.category.parent_id.zero? ? available.product.category.category : available.product.category.parent.category),
+          '4' => (available.product.category.parent_id != 0 ? available.product.category.category : ' '),
           '5' => available.stock
         }.compact.reject { |_k, v| v.nil? }
       end
     else
       products.map do |product|
-        category = product.categories[0]
         {
           'DT_RowId' => "product_#{product.id}",
           '0' => '<input class="form-control checkboxes" type="checkbox"/>',
           '1' => product.sku,
           '2' => get_display_name(product),
-          '3' => (category.parent_id.zero? ? category.category : category.parent.category),
-          '4' => (category.parent_id != 0 ? category.category : ' '),
+          '3' => (product.category.parent_id.zero? ? product.category.category : product.category.parent.category),
+          '4' => (product.category.parent_id != 0 ? product.category.category : ' '),
           '5' => number_to_currency(product.price_sale, precision: 2)
         }.compact.reject { |_k, v| v.nil? }
       end
@@ -65,7 +63,7 @@ class AvailableProductsDatatable
         AvailableProduct.joins(:product, :categories).activos.where(pointsale_id: params[:id]).activos
       else
         products_in_pointsale = @pointsale.products.activos_children.pluck(:id)
-        Product.joins(:categories).activos_children.where.not(id: products_in_pointsale).order('products.name')
+        Product.joins(:category).activos_children.where.not(id: products_in_pointsale).order('products.name')
       end
 
     products = products.page(page).per_page(per_page)

+ 2 - 2
app/datatables/products_datatable.rb

@@ -31,7 +31,7 @@ private
       arr << dollar_price(product) if @current_user.usertype == "A" || @current_user.usertype == "SS"
       arr << [
                 product_price(product, product_available),
-                product.categories[0].category,
+                product.category.category,
                 product.active? ? "<i class='fa fa-check fa-2 font-green'></i>" : "<i class='fa fa-times fa-2 font-red'></i>",
                 get_actions(product, product_available)
               ]
@@ -74,7 +74,7 @@ private
       if @current_user.usertype == 'G'
         Product.activos_children
       else
-        Product.vigentes_parents.includes(:categories)
+        Product.vigentes_parents.includes(:category)
       end
     products = products.page(page).per_page(per_page)
     unless params[:busqueda].blank?

+ 4 - 6
app/datatables/stock_by_pointsale_datatable.rb

@@ -22,14 +22,12 @@ class StockByPointsaleDatatable
   def data
     stock.map do |available|
       img = available.product.img_product? ? available.product.img_product.url(:small) : "/images/small/missing.png"
-      category = available.categories[0]
-
       if @current_user.usertype == 'C'
         [
           (image_tag img),
           get_display_name(available.product),
-          (category.parent_id.zero? ? category.category : category.parent.category),
-          (category.parent_id != 0 ? category.category : ' '),
+          (available.product.category.parent_id.zero? ? available.product.category.category : available.product.category.parent.category),
+          (available.product.category.parent_id != 0 ? available.product.category.category : ' '),
           available.stock.round,
           "<h3> $#{get_price_sale(available.product)} </h3>"
         ].compact
@@ -37,8 +35,8 @@ class StockByPointsaleDatatable
         arr = [
           (image_tag img),
           get_display_name(available.product),
-          (category.parent_id.zero? ? category.category : category.parent.category),
-          (category.parent_id != 0 ? category.category : ' '),
+          (available.product.category.parent_id.zero? ? available.product.category.category : available.product.category.parent.category),
+          (available.product.category.parent_id != 0 ? available.product.category.category : ' '),
           available.stock_min.round,
           available.stock_max.round,
           available.stock.round

+ 4 - 5
app/datatables/stocks_datatable.rb

@@ -28,15 +28,14 @@ class StocksDatatable
   def data
     stock.map do |available|
       img = available.product.img_product? ? available.product.img_product.url(:small) : "/images/small/missing.png"
-      category = available.product.categories[0]
       {
         'DT_RowId' => "availableProduct_#{available.id}",
         '0' => '<input class="form-control checkboxes" type="checkbox"/>',
         '1' => (image_tag img),
         '2' => available.product.sku,
         '3' => available.product.name + '<br>' + available.product.display_attributes,
-        '4' => (category.parent_id.zero? ? category.category : category.parent.category),
-        '5' => (category.parent_id != 0 ? category.category : ' '),
+        '4' => (available.product.category.parent_id.zero? ? available.product.category.category : available.product.category.parent.category),
+        '5' => (available.product.category.parent_id != 0 ? available.product.category.category : ' '),
         '6' => (@showcolumns == "minMax" ? available.stock_min : available.stock),
         '7' => (@showcolumns == "minMax" ? available.stock_max : nil)
       }.compact.reject { |_k, v| v.nil? }
@@ -50,9 +49,9 @@ class StocksDatatable
   def fetch_stock
     stock =
       if @current_user.usertype == 'S'
-        WarehouseStock.activos.includes(:product, :categories).where(warehouse_id: @current_user.warehouse_id).order('products.name')
+        WarehouseStock.activos.includes(:product, :category).where(warehouse_id: @current_user.warehouse_id).order('products.name')
       else
-        AvailableProduct.activos.includes(:product, :categories).where(pointsale_id: @current_user.pointsale_id.present? ? @current_user.pointsale_id : params[:pointsale]).order('products.name')
+        AvailableProduct.activos.includes(:product, :category).where(pointsale_id: @current_user.pointsale_id.present? ? @current_user.pointsale_id : params[:pointsale]).order('products.name')
       end
     stock = stock.page(page).per_page(per_page)
     stock = stock.where("products.sku ilike :search or products.name ilike :search", search: "%#{params[:busqueda]}%").order('products.name') unless params[:busqueda].blank?

+ 1 - 1
app/models/category.rb

@@ -1,6 +1,6 @@
 class Category < ActiveRecord::Base
   ##--- Associaciones
-  has_and_belongs_to_many :products
+  has_many :products, -> { where "products.status = 1" }
   belongs_to :parent, class_name: "Category"
   has_many :children, -> { where "categories.status!= 0" }, class_name: "Category", foreign_key: 'parent_id'
 

+ 13 - 22
app/models/product.rb

@@ -5,8 +5,7 @@ require 'barby/outputter/png_outputter'
 class Product < ActiveRecord::Base
   ##--- Asociaciones
   belongs_to :unit
-  # belongs_to :category
-  has_and_belongs_to_many :categories
+  belongs_to :category
 
   has_and_belongs_to_many :pointsales, join_table: :available_products
 
@@ -44,17 +43,17 @@ class Product < ActiveRecord::Base
   validates :price_sale,
             presence: { message: "Debe capturar el precio de venta del producto." },
             numericality: { greater_than: 0.00 }
-  # validate :category_has_subcats, on: [:create, :update]
+  validate :category_has_subcats, on: [:create, :update]
 
   def valid_categories
     categories.count > 0
   end
 
-  # def category_has_subcats
-  #   if category.present? && category.parent_id.zero? && category.children.present?
-  #     errors.add(:category_id, "Seleccione una sublínea.")
-  #   end
-  # end
+  def category_has_subcats
+    if category.present? && category.parent_id.zero? && category.children.present?
+      errors.add(:category_id, "Seleccione una sublínea.")
+    end
+  end
 
   def small_img
     if img_product?
@@ -79,8 +78,12 @@ class Product < ActiveRecord::Base
   end
 
   def get_promotion
-    category_id = categories[0].parent.present? ? categories[0].parent.id : categories[0].id
-    category_array = [category_id, categories.ids].flatten
+    category_array = if category.parent.present?
+      [category.parent.id, Category.activos.where("parent_id = ?", category.parent.id).pluck(:id)].flatten
+    else
+      [category_id]
+    end
+
     product_ids = [id, parent_id]
     promos = Promotion.where("product_id IN (?) OR category_id IN (?)", product_ids, category_array).order("percent, id DESC").vigentes.first
   end
@@ -208,7 +211,6 @@ class Product < ActiveRecord::Base
           @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
           attributes_json = {}
 
           if combination.is_a?(Array)
@@ -359,7 +361,6 @@ class Product < ActiveRecord::Base
         @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
         @products_variant.barcode = ''
         attrs_json = {}
         if combination.is_a?(Array)
@@ -498,15 +499,5 @@ class Product < ActiveRecord::Base
     end
     puts "TERMINÉ, generé: #{counter} imagenes de barcode"
   end
-
-  def self.set_category_id
-    @products = Product.all
-
-    @products.each do |product|
-      product.category_id = product.categories[0].id
-      product.skip_sku_validation = true
-      product.save
-    end
-  end
 end
 

+ 1 - 1
app/views/available_products/index.html.erb

@@ -73,7 +73,7 @@
                           <td> <input type="checkbox" class="checkboxes" value="1" /> </td>
                           <td><%= product.sku %></td>
                           <td><%= product.name %> | <%= product.display_attributes %> </td>
-                          <td><%= product.categories.map { |cat| cat.category }.join(", ") %></td>
+                          <td><%= product.category.category %></td>
                         </tr>
                       <% end %>
                     </tbody>

+ 8 - 9
app/views/available_products/stock_by_pointsale.pdf.erb

@@ -8,12 +8,12 @@
 
 	<% if sub_category.present? %>
 		<h4 style="margin-top:5px;margin-bottom:5px;">Sublínea: <%= Category.find(sub_category).category %> </h4>
-	<% end %>	
+	<% end %>
 
 	<% if search.present? %>
 		<h4 style="margin-top:5px;margin-bottom:5px;">Busqueda: <%= search %> </h4>
-	<% end %>	
-	
+	<% end %>
+
 </header>
 <table style="width:100% !important">
 	<thead>
@@ -26,21 +26,20 @@
 	</thead>
 	<tbody>
 		<% stock.each do |ap| %>
-			<% category = ap.categories[0] %>
 			<tr class="border-1-px">
-				<td> 
+				<td>
 				    <strong> <%= ap.product.name %> </strong>
 				    &nbsp;<%= ap.product.display_attributes %>
-			    </td>	    
-				<td> <%= category.parent_id == 0 ? category.category : category.parent.category %> </td>
-				<td> <%= category.parent_id != 0 ? category.category : ' ' %> </td>
+			    </td>
+				<td> <%= ap.product.category.parent_id == 0 ? ap.product.category.category : ap.product.category.parent.category %> </td>
+				<td> <%= ap.product.category.parent_id != 0 ? ap.product.category.category : ' ' %> </td>
 				<td class="text-center"> <%= ap.stock %> </td>
 			</tr>
 		<% end %>
 	</tbody>
 </table>
 
- 
+
 
 
 

+ 77 - 82
app/views/products/_form.html.erb

@@ -105,36 +105,35 @@
 					</div>
 				</div>
 
+				<%
+					@category = nil
+					@subcategory = nil
+					@prompt = 'Seleccione'
+					@disabled = true
+					if @product.category.present? && @product.category.parent_id == 0
+					@category = @product.category
+					@disabled = false
+					elsif @product.category.present? && @product.category.parent_id != 0
+					@category = Category.find(@product.category.parent_id)
+					@subcategory = @product.category
+					@disabled = false
+					end
+				%>
 				<div class="form-group">
-					<%
-						@category = nil
-						@subcategory = nil;
-						@prompt = 'Seleccione'
-						@disabled = true
-						if @product.categories[0].present? && @product.categories[0].parent_id == 0
-							@category = @product.categories[0]
-							@prompt = ''
-						elsif @product.categories[0].present?
-							@category = Category.find(@product.categories[0].parent_id)
-							@subcategory = @product.categories[0]
-							@disabled = false
-						end
-					%>
-					<%= label_tag :categorias, "Líneas de producto", {:class=>"col-md-3 control-label"} do %>Líneas de producto
-						<span class="required">*</span>
+					<%= f.label :category_id, "Líneas de producto", { class: "col-md-3 control-label" } do %>Líneas de producto
+					<span class="required">*</span>
 					<% end %>
 					<div class="col-md-4">
-							<%= select_tag 'categorias',
-								options_from_collection_for_select(Category.activos_padre, 'id', 'category',
-									:selected => (@category.id unless @category.nil?)),
-									{:include_blank => "Seleccione", :class => 'form-control'} %>
+						<%= f.collection_select(:category_id, Category.activos_padre, :id, :category, options = { include_blank: "Seleccione", selected: (@category.present? ? @category.id : @prompt ) }, class: "form-control select2", onchange: "getSubCategories($(this).val())") %>
 					</div>
 				</div>
 				<div class="form-group">
-					<%= f.label :category_ids, "Sublinea del producto", {:class=>"col-md-3 control-label"}   %>
+					<%= f.label :sub_category_id, "Sublíneas de producto", { class: "col-md-3 control-label" } do %>Sublínea de producto
+					<span class="required">*</span>
+					<% end %>
 					<div class="col-md-4">
-						<%= f.collection_select(:category_ids, @category.nil? ? {} : Category.where(:parent_id => @category.id), :id, :category , options ={:include_blank => @prompt, :selected => (@subcategory.id unless @subcategory.nil?) }, :class => "form-control", :disabled => @disabled) %>
-						<%= f.hidden_field :category_ids, {:id => 'subcategory_hidden'}%>
+						<%= collection_select("", :sub_category_id, (@category.present? ? Category.activos.where(parent_id: @category.id) : {}), :id, :category, options = { prompt: "Seleccione", selected: (@subcategory.id if @subcategory.present?) }, html_options = { class: 'form-control select2 select2-allow-clear-todas' }) %>
+						<%= hidden_field_tag :subcategory_hidden, (@subcategory.id if @subcategory.present?) %>
 					</div>
 				</div>
 				<div class="form-group">
@@ -355,36 +354,37 @@
     $('#variantes').html(variantes);
   }
 
-  $('#categorias').on('change', function() {
-    $('#product_sku').val('');
-    if($('#categorias').val()) {
-      $.ajax({
-        type: "get",
-        url:  '/getcategories/' + $(this).val(),
-        dataType: 'json',
-        success: function(data) {
-          $('#product_category_ids').empty();
-          if(data.length > 0) {
-            $('#product_category_ids').attr('disabled', false);
-            $('#product_category_ids').append("<option selected value='0'>Seleccione</option>")
-          } else {
-            $('#product_category_ids').attr('disabled', true);
-            $('#subcategory_hidden').val($('#categorias').val());
-            $('#product_category_ids').append("<option selected value='" + $('#categorias').val() +"'></option>")
-          }
-          for(i in data){
-            $('#product_category_ids').append("<option value='" + data[i].id +"'>" + data[i].category+ "</option>")
-          }
-          fillSKU();
-        }
-      });
-    }
-  });
+	function getSubCategories(value) {
+		$('#_sub_category_id').html('');
+		$('#_sub_category_id').select2("destroy").select2({ placeholder: 'Seleccione'});
+		$('#_sub_category_id').select2('val', null);
+		if($('#product_category_id').val()) {
+			$.ajax({
+				type: "get",
+				url: '/getcategories/' + value,
+				dataType: 'json',
+				success: function(data) {
+					if(data.length > 0) {
+						$('#_sub_category_id').append('<option></option>')
+						for(i in data) {
+						$('#_sub_category_id').append("<option value='" + data[i].id + "'>" + data[i].category + "</option>")
+						}
+						$('#_sub_category_id').select2({ placeholder: 'Seleccione'});
+						$('#_sub_category_id').attr('disabled', false);
+					} else {
+						$('#_sub_category_id').attr('disabled', true);
+						$('#subcategory_hidden').val($('#product_category_id').val());
+					}
+					fillSKU();
+				}
+			});
+		}
+	}
 
-  $('#product_category_ids').on('change', function() {
-    $('#subcategory_hidden').val($(this).val());
-    fillSKU();
-  });
+	$('#_sub_category_id').on('change', function() {
+		$('#subcategory_hidden').val($(this).val());
+		fillSKU();
+	});
 
   $('#product_price_base').on('input', function() {
     getSalePrice($(this));
@@ -406,39 +406,34 @@
 
 
   function getProductId() {
-    $('#categorias').attr('disabled', true);
-    $.ajax({
-      type: "get",
-      url:  '/get_max_product_id',
-      dataType: 'json',
-      success: function(data) {
-        $('#categorias').attr('disabled', false);
-        var sku = $('#product_sku').val();
-        if(sku.length && !$('#idproduct').val()) {
-          $('#product_sku').val(sku + "-" + data);
-        } else {
-          $('#product_sku').val(sku + "-" + $('#idproduct').val());
-        }
-      },
-    });
+		$('#product_category_id').attr('disabled', true);
+		var category_id = $('#_sub_category_id').val() ? $('#_sub_category_id').val() : $('#product_category_id').val();
+		$.ajax({
+			type: "get",
+			url:  '/get_max_product_id',
+			dataType: 'json',
+			data: {
+				category_id: category_id
+			},
+			success: function(data) {
+				$('#product_category_id').attr('disabled', false);
+				var sku = $('#product_sku').val();
+				$('#product_sku').val(sku + "-" + data);
+			}
+		});
   }
 
   function fillSKU() {
-    var sku = $('#product_sku').val();
-    if(sku.length <= 3) {
-      $('#product_sku').val($('#categorias option:selected').text().substring(0,3).toUpperCase());
-      getProductId();
-    }
-
-    sku = $('#product_sku').val();
-    if(sku.length >= 3 && $('#product_category_ids').val() != "0") {
-      var subcategory = $('#product_category_ids option:selected').text();
-      if(subcategory){
-        $('#product_sku').val(sku.substring(0,3) + '-' + subcategory.replace(regex, '').substring(0,3).toUpperCase());
-        getProductId();
-      }
-    }
-  }
+    var category = $('#product_category_id option:selected').text().substring(0,3).toUpperCase();
+    $('#product_sku').val(category);
+    if($('#_sub_category_id').val()) {
+			var subcategory = $('#_sub_category_id option:selected').text();
+			if(subcategory) {
+				$('#product_sku').val(category + '-' + subcategory.replace(regex, '').substring(0,3).toUpperCase());
+			}
+		}
+    getProductId();
+	}
 
   function validateBarcode(barcode) {
     $.ajax({

+ 2 - 5
app/views/products/edit_variants.html.erb

@@ -76,12 +76,9 @@
 												<div class="col-md-8 value"> <% if @product.inventory %> <span class="label label-success"> Si</span>  <% else %> <span class="label label-danger"> No</span> <% end %> </div>
 											</div>
 											<div class="row static-info">
-												<div class="col-md-4 name"> Categorías: </div>
+												<div class="col-md-4 name"> Categoría: </div>
 												<div class="col-md-8 value">
-													<% @product.categories.each_with_index do |cat, index| %>
-														<% if index > 0 %>  <br> <% end %>
-														<span class="badge badge-default badge-roundless" > <%= cat.category %> </span>
-													<% end %>
+													<span class="badge badge-default badge-roundless"> <%= @product.category.category %> </span>
 												</div>
 											</div>
 											<% if current_user.usertype == "A" || current_user.usertype == "SS" %>

+ 2 - 5
app/views/products/show.html.erb

@@ -122,12 +122,9 @@
 														<div class="col-md-8 value"> <% if @product.inventory %> <span class="label label-success"> Si</span>  <% else %> <span class="label label-danger"> No</span> <% end %> </div>
 													</div>
 													<div class="row static-info">
-														<div class="col-md-4 name"> Categorías: </div>
+														<div class="col-md-4 name"> Categoría: </div>
 														<div class="col-md-8 value">
-															<%  @product.categories.each_with_index do |cat, index| %>
-																<% if index > 0 %>  <br> <% end %>
-																<span class="badge badge-default badge-roundless" > <%= cat.category %> </span>
-															<% end %>
+															<span class="badge badge-default badge-roundless"> <%= @product.category.category %> </span>
 														</div>
 													</div>
 													<% if current_user.usertype == "A" || current_user.usertype == "SS" %>

+ 2 - 3
app/views/reports/_min_max.html.erb

@@ -1,10 +1,9 @@
-<% category = available.product.categories[0] %>
 <tr>
   <td><%= key += 1 %></td>
   <td><%= available.product.full_display %></td>
   <td><%= number_to_currency(available.product.price_base, precision: 2) %></td>
-  <td><%= category.parent_id.zero? ? category.category : category.parent.category %></td>
-  <td><%= category.category %></td>
+  <td><%= available.product.category.parent_id.zero? ? available.product.category.category : available.product.category.parent.category %></td>
+  <td><%= available.product.category.category %></td>
   <td class="success"><%= quantity = calculate_restock(available) %></td>
   <td><%= number_to_currency((quantity * available.product.price_base), precision: 2) %></td>
 </tr>

+ 2 - 3
app/views/reports/min_max.html.erb

@@ -74,13 +74,12 @@
                 <tbody>
                   <% total = 0 %>
                   <% @products.each_with_index do |available, key| %>
-                    <% category = available.product.categories[0] %>
                     <tr>
                       <td><%= key += 1 %></td>
                       <td><%= available.product.full_display %></td>
                       <td><%= number_to_currency(available.product.price_base, precision: 2) %></td>
-                      <td><%= category.parent_id.zero? ? category.category : category.parent.category %></td>
-                      <td><%= category.category %></td>
+                      <td><%= available.product.category.parent_id.zero? ? available.product.category.category : available.product.category.parent.category %></td>
+                      <td><%= available.product.category.parent_id != 0 ? available.product.category.category : ' ' %></td>
                       <td class="success"><%= quantity = calculate_restock(available) %></td>
                       <td><%= number_to_currency((quantity * available.product.price_base), precision: 2) %></td>
                     </tr>

+ 2 - 1
db/schema.rb

@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20180905183025) do
+ActiveRecord::Schema.define(version: 20181122030513) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -446,6 +446,7 @@ ActiveRecord::Schema.define(version: 20180905183025) do
     t.boolean  "is_in_dollars",                                                 default: false
     t.decimal  "price_base_dollars",                   precision: 10, scale: 2
     t.string   "img_product"
+    t.integer  "category_id"
   end
 
   add_index "products", ["unit_id"], name: "index_products_on_unit_id", using: :btree

BIN
erd.pdf