Browse Source

Fixed error in products form when editing product without children

Jacqueline Maldonado 7 years ago
parent
commit
08ed56aab8
2 changed files with 419 additions and 443 deletions
  1. 418 442
      app/views/products/_form.html.erb
  2. 1 1
      app/views/products/edit.html.erb

+ 418 - 442
app/views/products/_form.html.erb

@@ -1,465 +1,441 @@
 <!-- BEGIN FORM-->
-<%= form_for(@product, :html => {:class=>"form-horizontal"}) do |f| %>
-	<div class="portlet-body form" id="products_form">
-		<% if @product.errors.any? %>
-			<div class="alert alert-danger">
-				<strong>Tiene <%= pluralize(@product.errors.count, "error") %> no se puede guardar el producto</strong><br>
-			</div>
-		<% end %>
-		<div class="form-body">
-			<input type="text" class="hidden" value="<%= @product.id %>" id="idproduct">
-			<h4 class="form-section">Información general</h4>
-			<div class="row">
-				<div class="col-md-7">
-					<%= hidden_field_tag :gain_margin, @pos_config.gain_margin %>
-					<%= hidden_field_tag :tax_percent, @pos_config.tax_percent %>
-					<div class="form-group">
-						<%= f.label :sku, {:class=>"col-md-3 control-label"} do %>SKU <span class="required">*</span>
-						<% end %>
-						<div class="col-md-9">
-							<div class="input-icon">
-								<i class="fa fa-tag"></i>
-								<%= f.text_field :sku, {:class=>"form-control input-medium", :readonly => true } %>
-							</div>
-							<span class="help-block">El SKU se genera automaticamente en base a la linea y sublinea seleccionadas. </span>
-						</div>
-					</div>
-					<div class="form-group">
-						<%= f.label :barcode, {:class=>"col-md-3 control-label"} do %> Codigo de barras <span class="required">*</span>
-						<% end %>
-						<div class="col-md-9">
-							<div class="input-icon">
-								<i class="fa fa-barcode"></i>
-								<%= f.text_field :barcode, {:class=>"form-control input-medium", :readonly => true } %>
-							</div>
-							<span class="help-block">Para indicar el codigo de barras, debe de escanearlo. </span>
-						</div>
-					</div>
-					<div class="form-group">
-						<%= f.label :name, "Producto", {:class=>"col-md-3 control-label"} do %>Nombre
-							<span class="required">*</span>
-						<% end %>
-						<div class="col-md-9">
-							<%= f.text_field :name, {:class=>"form-control"} %>
-						</div>
-					</div>
-					<div class="form-group">
-						<%= f.label :description, "Descripción", {:class=>"col-md-3 control-label"} %>
-						<div class="col-md-9">
-							<%= f.text_area :description, {:class=>"form-control"} %>
-						</div>
-					</div>
-					<div class="form-group">
-						<%= 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.vigentes, :id, :unit, {:prompt => "Seleccione"}, {:class => "form-control input-medium"}   %>
-						</div>
-					</div>
-				</div>
-				<div class="col-md-5">
-					<div class="form-group">
-						<%= f.label :img_product, "Imagen producto", {:class=>"col-md-5 control-label"} %>
-						<div class="col-md-7">
-							<div class="fileinput fileinput-new" data-provides="fileinput">
-								<div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
-									<% if @product.img_product? %>
-										<%= image_tag @product.img_product %>
-									<% else %>
-										<%= image_tag "no-image.png" %>
-									<% end %>
-								</div>
-								<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;"> </div>
-								<div>
-									<span class="btn default btn-file">
-										<span class="fileinput-new"> Seleccione imagen </span>
-										<span class="fileinput-exists"> Cambiar </span>
-										<%= f.file_field :img_product, {:class=>"default"} %>
-										<%= f.hidden_field :img_product_cache %>
-									</span>
-									<a href="javascript:;" class="btn red fileinput-exists" data-dismiss="fileinput"> Borrar </a>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-			<h4 class="form-section">Información del producto</h4>
-			<div class="row">
-				<div class="form-group ">
-					<%= f.label :inventory, "¿Se maneja inventario de este producto?", {:class=>"col-md-3 control-label"} do %>¿Este producto tendrá inventario?
-						<span class="required">*</span>
-					<% end %>
-					<div class="col-md-9">
-						<%= f.check_box(:inventory,
-							{
-								class: "make-switch",
-								data: {
-									on_color: "success",
-									off_color: "danger",
-									on_text: "Si",
-									off_text: "No"
-								}
-							}, "true","false"
-						) %>
-					</div>
-				</div>
-
-				<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>
-					<% 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'} %>
-					</div>
-				</div>
-				<div class="form-group">
-					<%= f.label :category_ids, "Sublinea del producto", {:class=>"col-md-3 control-label"}   %>
-					<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'}%>
-					</div>
-				</div>
-				<div class="form-group">
-					<%= f.label :include_purchase_tax, "¿Incluir IVA en compra?", {:class=>"col-md-3 control-label"} do %> ¿Incluir IVA en compra?
-						<span class="required">*</span>
-					<% end %>
-					<div class="col-md-9">
-						<%= f.check_box(:include_purchase_tax,
-							{
-								class: "make-switch",
-								data: {
-									on_color: "success",
-									off_color: "danger",
-									on_text: "Si",
-									off_text: "No"
-								}
-							}, "1","0"
-						) %>
-					</div>
-				</div>
-				<div class="form-group">
-					<%= f.label :include_sale_tax, "¿Incluir IVA en venta?", {:class=>"col-md-3 control-label"} do %> ¿Incluir IVA en venta?
-						<span class="required">*</span>
-					<% end %>
-					<div class="col-md-9">
-						<%= f.check_box(:include_sale_tax,
-							{
-								class: "make-switch",
-								data: {
-									on_color: "success",
-									off_color: "danger",
-									on_text: "Si",
-									off_text: "No"
-								}
-							}, "1","0"
-						) %>
-					</div>
-				</div>
-				<div class="form-group">
-					<%= f.label :is_in_dollars, "¿Se compra en dolares?", {:class=>"col-md-3 control-label"} do %> ¿Se compra en dolares?
-						<span class="required">*</span>
-					<% end %>
-					<div class="col-md-9">
-						<%= f.check_box(:is_in_dollars,
-							{
-								class: "make-switch",
-								data: {
-									on_color: "success",
-									off_color: "danger",
-									on_text: "Si",
-									off_text: "No"
-								}
-							}, "true","false"
-						) %>
-					</div>
-				</div>
-				<div class="form-group inventory">
-					<%= f.label :price_base_dollars, "Precio de compra neto", {:class=>"col-md-3 control-label"} %>
-					<div class="col-md-3">
-
-						<div class="input-group <%=(@product.persisted? && @product.is_in_dollars?) ? '' : 'hidden' %>" id="price_base_usd_div">
-							<span class="input-group-addon"> $ </span>
-							<%= f.text_field :price_base_dollars, {:class=>"form-control mask_decimal"} %>
-							<span class="input-group-addon"> USD </span>
-						</div>
-
-						<div class="input-group <%=(@product.persisted? && !@product.is_in_dollars?) ? '' : 'hidden' %>" id="price_base_mxn_div">
-							<span class="input-group-addon"> $ </span>
-							<%= f.text_field :price_base, {:class=>"form-control mask_decimal"} %>
-							<span class="input-group-addon"> MXN </span>
-						</div>
-
-					</div>
-				</div>
-				<div class="form-group inventory">
-					<%= f.label :price_sale, "Precio de venta base", {:class=>"col-md-3 control-label"} do %> Precio de venta base
-						<span class="required">*</span>
-					<% end %>
-					<div class="col-md-3">
-						<div class="input-group">
-							<span class="input-group-addon"> $ </span>
-							<%= f.text_field :price_sale, {:class=>"form-control mask_decimal"} %>
-							<span class="input-group-addon"> MXN </span>
-						</div>
-					</div>
-					<div class="col-md-6">
-						<span class="help-block">El precio de venta base será calculado de acuerdo al porcentaje de utilidad especificado, solo en en caso de especificar el precio de compra neto.</span>
-					</div>
-				</div>
-				<div class="form-group">
-					<%= f.label :presentation, "¿El producto tiene variantes?", {:class=>"col-md-3 control-label"} do %>¿El producto tiene variantes?
-						<span class="required">*</span>
-					<% end %>
-					<div class="col-md-9">
-						<%= f.check_box(:presentation,
-							{
-								class: "make-switch",
-								data: {
-									on_color: "success",
-									off_color: "danger",
-									on_text: "Si",
-									off_text: "No"
-								},
-								readonly: @with_presentation
-							}, "true","false"
-						) %>
-					</div>
-				</div>
-			</div>
-			<h4 class="form-section presentaciones">Variantes</h4>
-			<div class="row presentaciones">
-				<% if @product.persisted? %>
-				<div class="col-md-9 col-md-offset-3">
-					<%= render 'products_children' %>
-				</div>
-				<% else %>
-				<div class="col-md-9 col-md-offset-3">
-					<div class="alert alert-warning hidden">
-						Son <strong id="variantes"></strong> variantes del producto.
-					</div>
-				</div>
-				<div class="form-group ">
-					<%= f.label :size_list, "Tallas", {:class=>"col-md-3 control-label"} %>
-					<div class="col-md-9">
-						<%= f.collection_select(:size_list, @product.size_list, :to_s, :to_s, { :include_blank => false }, {:class=>"form-control input-medium", 'data-role'=>'tagsinput', :multiple => true} ) %>
-						<span class="help-block">Ingrese las diferentes tallas, separandolas con coma (,). </span>
-					</div>
-				</div>
-				<div class="form-group ">
-					<%= f.label :color_list, "Colores", {:class=>"col-md-3 control-label"} %>
-					<div class="col-md-9">
-						<%= f.collection_select(:color_list, @product.color_list, :to_s, :to_s, { :include_blank => false }, {:class=>"form-control input-medium", 'data-role'=>'tagsinput', :multiple => true} ) %>
-						<span class="help-block">Ingrese los diferentes colores, separandolos con coma (,). </span>
-					</div>
-				</div>
-				<div class="form-group ">
-					<%= f.label :style_list, "Estilos", {:class=>"col-md-3 control-label"} %>
-					<div class="col-md-9">
-						<%= f.collection_select(:style_list, @product.style_list, :to_s, :to_s, { :include_blank => false }, {:class=>"form-control input-medium", 'data-role'=>'tagsinput', :multiple => true} ) %>
-						<span class="help-block">Ingrese los diferentes estilos, separandolos con coma (,). </span>
-					</div>
-				</div>
-				<%= hidden_field_tag :variants %>
-				<% end %>
-			</div>
-		</div>
-		<div class="form-actions">
-			<div class="row">
-				<div class="col-md-offset-3 col-md-9">
-					<%= f.submit 'Guardar', {:class=>"btn green"} %>
-					<%= link_to 'Cancelar', products_path(:filter => @filter, :current_page => @current_page), {:class=>"btn default"} %>
-				</div>
-			</div>
-		</div>
-	</div>
+<%= form_for(@product, html: { class: "form-horizontal" }) do |f| %>
+  <div class="portlet-body form" id="products_form">
+    <% if @product.errors.any? %>
+      <div class="alert alert-danger">
+        <strong>Tiene <%= pluralize(@product.errors.count, "error") %> no se puede guardar el producto</strong><br>
+      </div>
+    <% end %>
+    <div class="form-body">
+      <input type="text" class="hidden" value="<%= @product.id %>" id="idproduct">
+      <h4 class="form-section">Información general</h4>
+      <div class="row">
+        <div class="col-md-7">
+          <%= hidden_field_tag :gain_margin, @pos_config.gain_margin %>
+          <%= hidden_field_tag :tax_percent, @pos_config.tax_percent %>
+          <div class="form-group">
+            <%= f.label :sku, { class: "col-md-3 col-sm-2 control-label" } do %>SKU <span class="required">*</span>
+            <% end %>
+            <div class="col-md-9 col-sm-4">
+              <div class="input-icon">
+                <i class="fa fa-tag"></i>
+                <%= f.text_field :sku, { class: "form-control input-medium", readonly: true } %>
+              </div>
+              <span class="help-block">El SKU se genera automáticamente en base a la línea y sublínea seleccionadas. </span>
+            </div>
+          </div>
+          <div class="form-group">
+            <%= f.label :barcode, { class: "col-md-3 col-sm-2 control-label" } do %> Código de barras <span class="required">*</span> <% end %>
+            <div class="col-md-9 col-sm-4">
+              <div class="input-icon">
+                <i class="fa fa-barcode"></i>
+                <%= f.text_field :barcode, { class: "form-control input-medium", readonly: true } %>
+              </div>
+              <span class="help-block">Para indicar el código de barras, debe escanearlo. </span>
+            </div>
+          </div>
+          <div class="form-group">
+            <%= f.label :name, "Producto", { class: "col-md-3 col-sm-2 control-label" } do %>Nombre <span class="required">*</span> <% end %>
+            <div class="col-md-9 col-sm-4">
+              <%= f.text_field :name, { class: "form-control input-large" } %>
+            </div>
+          </div>
+          <div class="form-group">
+            <%= f.label :description, "Descripción", { class: "col-md-3 col-sm-2 control-label" } %>
+            <div class="col-md-9 col-sm-4">
+              <%= f.text_area :description, { class: "form-control input-large" } %>
+            </div>
+          </div>
+          <div class="form-group">
+            <%= f.label :unit_id, "Unidad de medida", { class: "col-md-3 col-sm-2 control-label" } do %>Unidad de medida <span class="required">*</span> <% end %>
+            <div class="col-md-9 col-sm-4">
+              <%= f.collection_select :unit_id, Unit.vigentes, :id, :unit, { prompt: "Seleccione" }, { class: "form-control input-medium" } %>
+            </div>
+          </div>
+        </div>
+        <div class="col-md-5">
+          <div class="form-group">
+            <%= f.label :img_product, "Imagen producto", { class: "col-md-5 col-sm-2 control-label" } %>
+            <div class="col-md-7 col-sm-4">
+              <div class="fileinput fileinput-new" data-provides="fileinput">
+                <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
+                  <% if @product.img_product? %>
+                    <%= image_tag @product.img_product %>
+                  <% else %>
+                    <%= image_tag "no-image.png" %>
+                  <% end %>
+                </div>
+                <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;"> </div>
+                <div>
+                  <span class="btn default btn-file">
+                    <span class="fileinput-new"> Seleccione imagen </span>
+                    <span class="fileinput-exists"> Cambiar </span>
+                    <%= f.file_field :img_product, { class: "default" } %>
+                    <%= f.hidden_field :img_product_cache %>
+                  </span>
+                  <a href="javascript:;" class="btn red fileinput-exists" data-dismiss="fileinput"> Borrar </a>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <h4 class="form-section">Información del producto</h4>
+      <div class="row">
+        <div class="form-group ">
+          <%= f.label :inventory, "¿Se maneja inventario de este producto?", { class: "col-md-3 col-sm-3 control-label" } do %>¿Este producto tendrá inventario? <span class="required">*</span> <% end %>
+          <div class="col-md-9 col-sm-2">
+            <%= f.check_box(:inventory,
+              {
+                class: "make-switch",
+                data: {
+                  on_color: "success",
+                  off_color: "danger",
+                  on_text: "Si",
+                  off_text: "No"
+                }
+              }, "true","false"
+            ) %>
+          </div>
+        </div>
+        <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 col-sm-3 control-label" } do %>Líneas de producto <span class="required">*</span> <% end %>
+          <div class="col-md-4 col-sm-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' } %>
+          </div>
+        </div>
+        <div class="form-group">
+          <%= f.label :category_ids, "Sublinea del producto", { class: "col-md-3 col-sm-3 control-label" }   %>
+          <div class="col-md-4 col-sm-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' } %>
+          </div>
+        </div>
+        <div class="form-group">
+          <%= f.label :include_purchase_tax, "¿Incluir IVA en compra?", { class: "col-md-3 col-sm-3 control-label" } do %> ¿Incluir IVA en compra? <span class="required">*</span> <% end %>
+          <div class="col-md-9 col-sm-2">
+            <%= f.check_box(:include_purchase_tax,
+              {
+                class: "make-switch",
+                data: {
+                  on_color: "success",
+                  off_color: "danger",
+                  on_text: "Si",
+                  off_text: "No"
+                }
+              }, "1","0"
+            ) %>
+          </div>
+        </div>
+        <div class="form-group">
+          <%= f.label :include_sale_tax, "¿Incluir IVA en venta?", { class: "col-md-3 col-sm-3 control-label" } do %> ¿Incluir IVA en venta? <span class="required">*</span> <% end %>
+          <div class="col-md-9 col-sm-2">
+            <%= f.check_box(:include_sale_tax,
+              {
+                class: "make-switch",
+                data: {
+                  on_color: "success",
+                  off_color: "danger",
+                  on_text: "Si",
+                  off_text: "No"
+                }
+              }, "1","0"
+            ) %>
+          </div>
+        </div>
+        <div class="form-group">
+          <%= f.label :is_in_dollars, "¿Se compra en dólares?", { class: "col-md-3 col-sm-3 control-label" } do %> ¿Se compra en dólares? <span class="required">*</span> <% end %>
+          <div class="col-md-9 col-sm-2">
+            <%= f.check_box(:is_in_dollars,
+              {
+                class: "make-switch",
+                data: {
+                  on_color: "success",
+                  off_color: "danger",
+                  on_text: "Si",
+                  off_text: "No"
+                }
+              }, "true","false"
+            ) %>
+          </div>
+        </div>
+        <div class="form-group inventory">
+          <%= f.label :price_base_dollars, "Precio de compra neto", { class: "col-md-3 col-sm-3 control-label" } %>
+          <div class="col-md-3 col-sm-3">
+            <div class="input-group <%= (@product.persisted? && @product.is_in_dollars?) ? '' : 'hidden' %>" id="price_base_usd_div">
+              <span class="input-group-addon"> $ </span>
+              <%= f.text_field :price_base_dollars, { class: "form-control mask_decimal" } %>
+              <span class="input-group-addon"> USD </span>
+            </div>
+            <div class="input-group <%= (@product.persisted? && !@product.is_in_dollars?) ? '' : 'hidden' %>" id="price_base_mxn_div">
+              <span class="input-group-addon"> $ </span>
+              <%= f.text_field :price_base, { class: "form-control mask_decimal" } %>
+              <span class="input-group-addon"> MXN </span>
+            </div>
+          </div>
+        </div>
+        <div class="form-group inventory">
+          <%= f.label :price_sale, "Precio de venta base", { class: "col-md-3 col-sm-3 control-label" } do %> Precio de venta base
+            <span class="required">*</span>
+          <% end %>
+          <div class="col-md-3 col-sm-3">
+            <div class="input-group">
+              <span class="input-group-addon"> $ </span>
+              <%= f.text_field :price_sale, { class: "form-control mask_decimal" } %>
+              <span class="input-group-addon"> MXN </span>
+            </div>
+          </div>
+          <div class="col-md-6 col-sm-6">
+            <span class="help-block">El precio de venta base será calculado de acuerdo al porcentaje de utilidad especificado, sólo en caso de especificar el precio de compra neto.</span>
+          </div>
+        </div>
+        <div class="form-group">
+          <%= f.label :presentation, "¿El producto tiene variantes?", { class: "col-md-3 col-sm-3 control-label" } do %>¿El producto tiene variantes?
+            <span class="required">*</span>
+          <% end %>
+          <div class="col-md-9 col-sm-2">
+            <%= f.check_box(:presentation,
+              {
+                class: "make-switch",
+                data: {
+                  on_color: "success",
+                  off_color: "danger",
+                  on_text: "Si",
+                  off_text: "No"
+                },
+                readonly: @with_presentation
+              }, "true", "false"
+            ) %>
+          </div>
+        </div>
+      </div>
+      <h4 class="form-section presentaciones">Variantes</h4>
+      <div class="row presentaciones">
+        <% if @product.persisted? %>
+        <div class="col-md-offset-2 col-md-9 col-sm-offset-2 col-sm-9">
+          <%= render 'products_children' %>
+        </div>
+        <% else %>
+        <div class="col-md-9 col-md-offset-3">
+          <div class="alert alert-warning hidden">
+            Son <strong id="variantes"></strong> variantes del producto.
+          </div>
+        </div>
+        <div class="form-group ">
+          <%= f.label :size_list, "Tallas", { class: "col-md-3 control-label" } %>
+          <div class="col-md-9">
+            <%= f.collection_select(:size_list, @product.size_list, :to_s, :to_s, { include_blank: false }, { class: "form-control input-medium", 'data-role'=>'tagsinput', multiple: true }) %>
+            <span class="help-block">Ingrese las diferentes tallas, separándolas con coma (,) </span>
+          </div>
+        </div>
+        <div class="form-group ">
+          <%= f.label :color_list, "Colores", { class: "col-md-3 control-label" } %>
+          <div class="col-md-9">
+            <%= f.collection_select(:color_list, @product.color_list, :to_s, :to_s, { include_blank: false }, { class: "form-control input-medium", 'data-role'=>'tagsinput', multiple: true }) %>
+            <span class="help-block">Ingrese los diferentes colores, separándolos con coma (,) </span>
+          </div>
+        </div>
+        <div class="form-group ">
+          <%= f.label :style_list, "Estilos", { class: "col-md-3 control-label" } %>
+          <div class="col-md-9">
+            <%= f.collection_select(:style_list, @product.style_list, :to_s, :to_s, { include_blank: false }, { class: "form-control input-medium", 'data-role'=>'tagsinput', multiple: true }) %>
+            <span class="help-block">Ingrese los diferentes estilos, separándolos con coma (,) </span>
+          </div>
+        </div>
+        <%= hidden_field_tag :variants %>
+        <% end %>
+      </div>
+    </div>
+    <div class="form-actions">
+      <div class="row">
+        <div class="col-md-offset-3 col-md-9">
+          <%= f.submit 'Guardar', { class: "btn green" } %>
+          <%= link_to 'Cancelar', products_path(filter: @filter, current_page: @current_page), { class: "btn default" } %>
+        </div>
+      </div>
+    </div>
+  </div>
 <% end %>
 <script type="text/javascript">
-	var timeout = null;
-	var regex = /[a,e,i,o,u]/gi;
-	var skuEdit = "";
-
-	$(document).on('page:change', function() {
+  var timeout = null;
+  var regex = /[a,e,i,o,u]/gi;
+  var skuEdit = "";
 
-		App.init();
+  $(document).on('page:change', function() {
+    App.init();
+    $('.fileinput').fileinput();
+    <% if @product.barcode.blank? %>
+      $('body').barcodeListener().on('barcode.valid', function(e, code) {
+        if($('#product_barcode').length > 0) {
+          $('#product_barcode').val(code);
+          validateBarcode(code);
+        }
+      });
+    <% end %>
 
-		$('.fileinput').fileinput();
+    presentaciones();
+    <% if @product.children.present? %>
+      getVariants();
+    <% end %>
+    showPriceBaseInput(<%= @product.is_in_dollars? %>);
 
-		<% if @product.barcode.blank? %>
-			$('body').barcodeListener().on('barcode.valid', function(e, code) {
-				if($('#product_barcode').length > 0) {
-					$('#product_barcode').val(code);
-					validateBarcode(code);
-				}
-			});
-		<% end %>
+    $(document).on("cut copy paste",'form#new_product .presentaciones input[type=text]', function(e) {
+      // evitar que se pueda copiar y pegar en los inputs de los tags de variantes
+      e.preventDefault();
+    });
+  });
 
-		presentaciones();
-		getVariants();
-		showPriceBaseInput(<%= @product.is_in_dollars? %>);
+  $('#product_size_list').on('change', function(event) { getVariants(); });
+  $('#product_color_list').on('change', function(event) { getVariants(); });
+  $('#product_style_list').on('change', function(event) { getVariants(); });
 
+  function presentaciones(){
+    if ($('#product_presentation').is(':checked')){
+      $('.presentaciones').removeClass('hidden');
+    } else {
+      $('.presentaciones').addClass('hidden');
+    }
+  }
 
-		$(document).on("cut copy paste",'form#new_product .presentaciones input[type=text]',function(e) {
-			// evitar que se pueda copiar y pegar en los inputs de los tags de variantes
-			e.preventDefault();
-		});
-	});
+  $('#product_presentation').on('switchChange.bootstrapSwitch', function(event, state) {
+    presentaciones();
+  });
 
-	$('#product_size_list').on('change', function(event) { getVariants(); });
-	$('#product_color_list').on('change', function(event) { getVariants(); });
-	$('#product_style_list').on('change', function(event) { getVariants(); });
+  function getVariants(){
+    sizes = $('#product_size_list').tagsinput('items');
+    colors = $('#product_color_list').tagsinput('items');
+    styles = $('#product_style_list').tagsinput('items');
 
-	function presentaciones(){
-		if ($('#product_presentation').is(':checked')){
-			$('.presentaciones').removeClass('hidden');
-		}
-		else{ $('.presentaciones').addClass('hidden'); }
-	}
+    variantes = (sizes.length > 0 ? sizes.length : 1)
+      * (colors.length > 0 ? colors.length : 1 )
+      * (styles.length > 0 ? styles.length : 1);
+    $('#variants').html(variantes);
+    $('.alert-warning').removeClass('hidden');
+    $('#variantes').html(variantes);
+  }
 
-	$('#product_presentation').on('switchChange.bootstrapSwitch', function(event, state) {
-		presentaciones();
-	});
+  $('#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 getVariants(){
-		sizes = $('#product_size_list').tagsinput('items');
-		colors = $('#product_color_list').tagsinput('items');
-		styles = $('#product_style_list').tagsinput('items');
+  $('#product_category_ids').on('change', function() {
+    $('#subcategory_hidden').val($(this).val());
+    fillSKU();
+  });
 
-		variantes = (sizes.length > 0 ? sizes.length : 1)
-			* (colors.length > 0 ? colors.length : 1 )
-				* (styles.length > 0 ? styles.length : 1);
-		$('#variants').html(variantes);
-		$('.alert-warning').removeClass('hidden');
-		$('#variantes').html(variantes);
-	}
+  $('#product_price_base').on('input', function() {
+    getSalePrice($(this));
+  });
 
-	$('#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();
-				}
-			});
-		}
-	});
+  $('#product_is_in_dollars').on('switchChange.bootstrapSwitch', function(event, state) {
+    showPriceBaseInput(state);
+  });
 
-	$('#product_category_ids').on('change', function() {
-		$('#subcategory_hidden').val($(this).val());
-		fillSKU();
-	});
+  function getSalePrice(input){
+    clearTimeout(timeout);
+    timeout = setTimeout(function () {
+      var gainMargin = parseFloat($('#gain_margin').val());
+      var purchasePrice = parseFloat(input.val());
+      var gain = (gainMargin / 100) * purchasePrice
+      $('#product_price_sale').val( (purchasePrice + gain).toFixed(2) );
+    }, 500);
+  }
 
-	$('#product_price_base').on('input', function() {
-		getSalePrice($(this));
-	});
 
-	$('#product_is_in_dollars').on('switchChange.bootstrapSwitch', function(event, state) {
-		showPriceBaseInput(state);
-	});
+  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());
+        }
+      },
+    });
+  }
 
-	function getSalePrice(input){
-		clearTimeout(timeout);
-		timeout = setTimeout(function () {
-			var gainMargin = parseFloat($('#gain_margin').val());
-			var purchasePrice = parseFloat(input.val());
-			var gain = (gainMargin / 100) * purchasePrice
-			$('#product_price_sale').val( (purchasePrice + gain).toFixed(2) );
-		}, 500);
-	}
+  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();
+      }
+    }
+  }
 
-	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());
-				}
-			},
-		});
-	}
+  function validateBarcode(barcode) {
+    $.ajax({
+      type: "get",
+      url: '/validate_unique_barcode/' + barcode,
+      dataType: 'script',
+      success: function(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();
-			}
-		}
-	}
-
-	function validateBarcode(barcode) {
-		$.ajax({
-			type: "get",
-			url:  '/validate_unique_barcode/' + barcode,
-			dataType: 'script',
-			success: function(data) {
-			}
-		});
-	}
-
-	function showPriceBaseInput(state) {
-		//true es en dolares, false en pesos
-		if (state) {
-		$('#price_base_usd_div').removeClass('hidden');
-		$('#price_base_mxn_div').addClass('hidden');
-		$('#product_price_base').val('');
-		 <% unless @product.persisted? %>
-			$('#product_price_sale').val('');
-		 <% end %>
-		} else {
-		$('#price_base_mxn_div').removeClass('hidden');
-		$('#price_base_usd_div').addClass('hidden');
-		$('#product_price_base_dollars').val('');
-		}
-	}
+  function showPriceBaseInput(state) {
+    //true es en dolares, false en pesos
+    if (state) {
+    $('#price_base_usd_div').removeClass('hidden');
+    $('#price_base_mxn_div').addClass('hidden');
+    $('#product_price_base').val('');
+     <% unless @product.persisted? %>
+      $('#product_price_sale').val('');
+     <% end %>
+    } else {
+    $('#price_base_mxn_div').removeClass('hidden');
+    $('#price_base_usd_div').addClass('hidden');
+    $('#product_price_base_dollars').val('');
+    }
+  }
 </script>
-

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

@@ -17,7 +17,7 @@
 			<!-- BEGIN PAGE CONTENT BODY -->
 			<div class="page-content">
 				<div class="container-fluid">
-					<%= link_to  products_path(:filter => @filter, :current_page => @current_page), {:class=>"fr-space btn blue-hoki "} do %>
+					<%= link_to  products_path(:filter => @filter, :current_page => @current_page), {:class=>"fr-space btn blue-hoki pull-right margin-bottom-10"} do %>
 						<i class="fa fa-angle-left "></i>
 						Regresar
 					<% end %>