Browse Source

search by variant in assign products to pointsale

jose miguel 7 years ago
parent
commit
6cb88647cf

+ 31 - 23
app/datatables/available_products_datatable.rb

@@ -1,12 +1,12 @@
 class AvailableProductsDatatable
-  delegate :params,:fa_icon, :available_products_path, to: :@view
-  
+  delegate :params, :fa_icon, :available_products_path, to: :@view
+
   def initialize(view, pointsale)
     @view = view
     @pointsale = pointsale
   end
 
-  def as_json(options = {})
+  def as_json(*)
     {
       sEcho: params[:sEcho].to_i,
       iTotalRecords: @pointsale.products.activos_children.size,
@@ -15,39 +15,39 @@ class AvailableProductsDatatable
     }
   end
 
-private
+  private
 
   def data
     if params[:table] == 'in_pointsale'
-      products.map do | available |
+      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,          
+          '1' => available.product.sku,
           '2' => get_display_name(available.product),
-          '3' => (category.parent_id == 0 ? category.category : category.parent.category),
+          '3' => (category.parent_id.zero? ? category.category : category.parent.category),
           '4' => (category.parent_id != 0 ? category.category : ' '),
           '5' => available.stock
-        }.compact.reject { |k, v| v.nil? } 
+        }.compact.reject { |_k, v| v.nil? }
       end
 
     else
-      products.map do | product |
+      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 == 0 ? category.category : category.parent.category),
+          '2' => get_display_name(product),
+          '3' => (category.parent_id.zero? ? category.category : category.parent.category),
           '4' => (category.parent_id != 0 ? category.category : ' ')
-        }.compact.reject { |k, v| v.nil? } 
+        }.compact.reject { |_k, v| v.nil? }
       end
     end
   end
 
-  def get_display_name(product) 
+  def get_display_name(product)
     name = "<label style='margin-bottom:0px'><strong>#{product.name}</strong></label> <br>"
 
     if product.display_attributes.present?
@@ -55,13 +55,13 @@ private
     end
 
     if product.barcode.present?
-      name += "<i class='fa fa-barcode'></i>: #{product.barcode} <br>" 
+      name += "<i class='fa fa-barcode'></i>: #{product.barcode} <br>"
     end
 
     if product.description.present?
       name += "Descripción: #{product.description}"
     end
-    return name
+    name
   end
 
   def products
@@ -69,23 +69,32 @@ private
   end
 
   def fetch_products
-
     if params[:table] == 'in_pointsale'
-      products = AvailableProduct.activos.where(:pointsale_id => params[:id]).activos
+      products = AvailableProduct.activos.where(pointsale_id: params[:id]).activos
     else
       products_in_pointsale = @pointsale.products.activos_children.pluck(:id)
-      products = Product.activos_children.where.not(id: products_in_pointsale)      
+      products = Product.activos_children.where.not(id: products_in_pointsale)
     end
 
     products = products.page(page).per_page(per_page)
-    unless params[:busqueda].blank?
-      products = products.where("products.sku ilike :search or products.name ilike :search", search: "%#{params[:busqueda]}%").order('products.name')
+    search = params[:busqueda]
+    name_searched = if search.include? ':'
+                      search[0, search.index(':') - 1]
+                    else
+                      search
+                    end
+    unless search.blank?
+      products = products.where("products.sku ilike :search or products.name ilike :search", search: "%#{name_searched}%").order('products.name')
+      if search.include? ':'
+        attribute = search[search.index(':') + 1, search.length]
+        products = products.where('attributes_json ilike :attribute', attribute: "%#{attribute}%")
+      end
     end
     products
   end
 
   def page
-    params[:start].to_i/per_page + 1
+    params[:start].to_i / per_page + 1
   end
 
   def per_page
@@ -100,5 +109,4 @@ private
   def sort_direction
     params[:sSortDir_0] == "desc" ? "desc" : "asc"
   end
-
-end
+end

+ 1 - 1
app/models/product.rb

@@ -52,7 +52,7 @@ class Product < ActiveRecord::Base
   ##--- Tipo de vistas / consultas
   scope :vigentes, -> { where("status != 0").order(" status ASC, name ASC") }
   scope :activos, -> { where("status = 1").order(" name ASC") }
-  scope :activos_children, -> { where("status = 1 and is_parent = false ").order("name ASC") }
+  scope :activos_children, -> { where("status = 1 and is_parent = false ").order("products.name ASC") }
   scope :vigentes_parents, -> { where("status != 0 and parent_id IS NULL ").order(" status ASC, name ASC") }
   scope :name_sku_barcode_like, ->(name) { where("status = 1 and is_parent = false and (name ilike ? or sku ilike ? or barcode ilike ?)", "%#{name}%", "%#{name}%", "%#{name}%").order("name") }
   scope :name_sku_barcode_attribute_like, ->(name, attribute) { where("status = 1 and is_parent = false and (name ilike ? or sku ilike ? or barcode ilike ?) and attributes_json ilike ?", "%#{name}%", "%#{name}%", "%#{name}%", "%#{attribute}%").order("name") }

+ 7 - 2
app/views/pointsales/_assign_delete_prods.html.erb

@@ -45,7 +45,10 @@
 											<div class="col-md-12">
 												<div class="note note-success">
 													<h4>Productos disponibles para asignar al punto de venta</h4>
-													<p> En esta tabla se muestran todos los productos disponibles para asignarse al punto de venta para vender. </p>
+													<p> En esta tabla se muestran todos los productos disponibles para asignarse al punto de venta para vender.</p><br>
+													<p> Para hacer una busqueda avanzada utiliza el siguiente formato, nombre del producto :atributo a buscar<br>
+														ejemplo. <strong>blusa :verde</strong> (Solo se puede buscar un atributo, ya sea estilo, talla ó color).
+													</p>
 												</div>
 											</div>
 											<div class="col-md-12">
@@ -79,7 +82,9 @@
 											<div class="col-md-12">
 												<div class="note note-success">
 													<h4>Productos asignados al punto de venta</h4>
-													<p> En esta tabla se muestran todos los productos que se han asignado al punto de venta para vender. </p>
+													<p> En esta tabla se muestran todos los productos que se han asignado al punto de venta para vender. </p><br>
+													<p> Para hacer una busqueda avanzada utiliza el siguiente formato, nombre del producto :atributo a buscar<br>
+														ejemplo. <strong>blusa :verde</strong> (Solo se puede buscar un atributo, ya sea estilo, talla ó color).
 												</div>
 											</div>
 											<div class="col-md-12">