Prechádzať zdrojové kódy

[Issue #24] Haggle percent acts as maximum; added switch to enable/disable haggling

Jacqueline Maldonado 7 rokov pred
rodič
commit
381d32ad15

+ 15 - 13
app/controllers/pos_configs_controller.rb

@@ -3,7 +3,7 @@ class PosConfigsController < ApplicationController
   ##--- Breadcrum_rails
   add_breadcrumb I18n.t("breadcrumbs." + controller_name), :pos_configs_path
 
-  before_action :set_pos_config, only: [:show, :edit, :update, :destroy]
+  before_action :set_pos_config, only: [:update, :destroy]
 
   # GET /pos_configs
   # GET /pos_configs.json
@@ -15,9 +15,10 @@ class PosConfigsController < ApplicationController
   # POST /pos_configs.json
   def create
     @pos_config = PosConfig.new(pos_config_params)
+    @pos_config.skip_haggle_percent = true if params[:pos_config][:enable_haggle] == "false"
     respond_to do |format|
       if @pos_config.save
-        format.html { redirect_to root_path, notice: 'Configuración de parametros generales guardada correctamente.' }
+        format.html { redirect_to root_path, notice: 'Configuración de parámetros generales guardada correctamente.' }
         format.json { render :show, status: :created, location: @pos_config }
       else
         format.html { render action: "index" }
@@ -29,10 +30,11 @@ class PosConfigsController < ApplicationController
   # PATCH/PUT /pos_configs/1
   # PATCH/PUT /pos_configs/1.json
   def update
+    @pos_config.skip_haggle_percent = true if params[:pos_config][:enable_haggle] == "false"
     respond_to do |format|
-      @pos_config.audit_comment = "Se actualizó parametros generales"
+      @pos_config.audit_comment = "Se actualizaron los parámetros generales"
       if @pos_config.update(pos_config_params)
-        format.html { redirect_to root_path, notice: 'Configuración de parametros generales guardada correctamente.' }
+        format.html { redirect_to root_path, notice: 'Configuración de parámetros generales guardada correctamente.' }
         format.json { render :show, status: :ok, location: @pos_config }
       else
         format.html { render action: "index" }
@@ -42,14 +44,14 @@ class PosConfigsController < ApplicationController
   end
 
   private
-    # Use callbacks to share common setup or constraints between actions.
-    def set_pos_config
-      @pos_config = PosConfig.first
-    end
+  # Use callbacks to share common setup or constraints between actions.
+  def set_pos_config
+    @pos_config = PosConfig.first
+  end
 
-    # Never trust parameters from the scary internet, only allow the white list through.
-    def pos_config_params
-      params[:pos_config]
-        params.require(:pos_config).permit(:cancel_partial_payment, :refund_sale, :days_cancel_sale, :days_cancel_purchase, :tax_percent, :time_zone, :gain_margin, :ticket_description, :reserve_sale_percent, :days_cancel_reserved, :commission_percent, :ticket_footer, :ticket_img, :ticket_img_cache, :haggle_in_sale_percent)
-    end
+  # Never trust parameters from the scary internet, only allow the white list through.
+  def pos_config_params
+    params[:pos_config]
+    params.require(:pos_config).permit(:cancel_partial_payment, :refund_sale, :days_cancel_sale, :days_cancel_purchase, :tax_percent, :time_zone, :gain_margin, :ticket_description, :reserve_sale_percent, :days_cancel_reserved, :commission_percent, :ticket_footer, :ticket_img, :ticket_img_cache, :haggle_in_sale_percent, :enable_haggle)
+  end
 end

+ 5 - 5
app/models/pos_config.rb

@@ -1,14 +1,14 @@
 class PosConfig < ActiveRecord::Base
-
-  	##--- Llevar registro de Actividad del usuario
+  ##--- Llevar registro de Actividad del usuario
 	audited
 
+	attr_accessor :skip_haggle_percent
+
 	mount_uploader :ticket_img, ImageUploader
 
 	#has_attached_file :ticket_img, :styles => { :medium => "250x80>", :thumb => "50x50>" }, :default_url => "/images/:style/missing.png"
 	#validates_attachment_content_type :ticket_img, :content_type => /\Aimage\/.*\Z/
 
-
 	validates_presence_of :cancel_partial_payment, message: "Debe especificar los días para cancelar un abono."
 	validates_presence_of :refund_sale, message: "Debe especificar los días para la devolución de una venta."
 	validates_presence_of :days_cancel_sale, message: "Debe especificar los días para modificar/cancelar una venta."
@@ -18,7 +18,7 @@ class PosConfig < ActiveRecord::Base
 	validates_presence_of :gain_margin, message: "Debe especificar el porcentaje de ganancia tendrán a los productos."
 	validates_presence_of :reserve_sale_percent, message: "Debe especificar el porcentaje para realizar un apartado."
 	validates_presence_of :days_cancel_reserved, message: "Debe especificar los días para cancelar un apartado."
-	validates_presence_of :haggle_in_sale_percent, message: "Debe especificar el porcentaje regateo a aplicar en las ventas."
+	# validates_presence_of :haggle_in_sale_percent, message: "Debe especificar el porcentaje regateo a aplicar en las ventas.", unless: :skip_haggle_percent
+	validates_numericality_of :haggle_in_sale_percent, greater_than: 0.00, message: "El porcentaje de regateo debe ser mayor a 0", unless: :skip_haggle_percent
 	validates_presence_of :commission_percent, message: "Debe especificar el porcentaje por comisión de venta."
-
 end

+ 70 - 56
app/views/pos_configs/_form.html.erb

@@ -1,4 +1,4 @@
-<%= form_for(@pos_config, :html => {:class=>"form-horizontal"}) do |f| %>
+<%= form_for(@pos_config, :html => { class: "form-horizontal" }) do |f| %>
 <div class="portlet-body form">
   <% if @pos_config.errors.any? %>
     <div class="alert alert-danger">
@@ -7,117 +7,123 @@
   <% end %>
   <div class="form-body">
     <div class="row">
-      <div class="col-md-11">
+      <div class="col-md-11 col-sm-12">
         <div class="form-group">
-          <%= f.label :cancel_partial_payment,  {:class=>"col-md-3 control-label"} do %>Días para cancelar abono
+          <%= f.label :cancel_partial_payment, { class: "col-md-3 col-sm-6 control-label" } do %>Días para cancelar abono
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :cancel_partial_payment, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1 col-sm-3">
+            <%= f.number_field :cancel_partial_payment, { class: "form-control input-xsmall" } %>
           </div>
-        </div>
-        <div class="form-group">
-          <%= f.label :refund_sale,  {:class=>"col-md-3 control-label"} do %>Días para aceptar devolución
+          <%= f.label :refund_sale, { class: "col-md-3 col-sm-6 control-label" } do %>Días para aceptar devolución
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :refund_sale, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1 col-sm-3">
+            <%= f.number_field :refund_sale, { class: "form-control input-xsmall" } %>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :days_cancel_sale,  {:class=>"col-md-3 control-label"} do %>Días para cancelar venta
+          <%= f.label :days_cancel_sale, { class: "col-md-3 col-sm-6 control-label" } do %>Días para cancelar venta
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :days_cancel_sale, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1 col-sm-3">
+            <%= f.number_field :days_cancel_sale, { class: "form-control input-xsmall" } %>
           </div>
-        </div>
-        <div class="form-group">
-          <%= f.label :days_cancel_purchase,  {:class=>"col-md-3 control-label"} do %>Días para cancelar compra
+          <%= f.label :days_cancel_purchase, { class: "col-md-3 col-sm-6 control-label"} do %>Días para cancelar compra
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :days_cancel_purchase, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1 col-sm-3">
+            <%= f.number_field :days_cancel_purchase, { class: "form-control input-xsmall" } %>
           </div>
         </div>
-
         <div class="form-group">
-          <%= f.label :reserve_sale_percent,  {:class=>"col-md-3 control-label"} do %>Porcentaje para realizar apartado
+          <%= f.label :reserve_sale_percent, { class: "col-md-3 col-sm-6 control-label" } do %>Porcentaje para realizar apartado
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :reserve_sale_percent, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1 col-sm-3">
+            <%= f.number_field :reserve_sale_percent, { class: "form-control input-xsmall" } %>
           </div>
-        </div>
-        <div class="form-group">
-          <%= f.label :days_cancel_reserved,  {:class=>"col-md-3 control-label"} do %>Días para cancelar apartado
+          <%= f.label :days_cancel_reserved, { class: "col-md-3 control-label" } do %>Días para cancelar apartado
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :days_cancel_reserved, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1">
+            <%= f.number_field :days_cancel_reserved, { class: "form-control input-xsmall" } %>
           </div>
         </div>
-
-
         <div class="form-group">
-          <%= f.label :tax_percent,  {:class=>"col-md-3 control-label"} do %>IVA a aplicar
+          <%= f.label :tax_percent, { class: "col-md-3 control-label" } do %>IVA a aplicar
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :tax_percent, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1">
+            <%= f.number_field :tax_percent, { class: "form-control input-xsmall" } %>
           </div>
-        </div>
-        <div class="form-group">
-          <%= f.label :time_zone,  {:class=>"col-md-3 control-label"} do %>Zona horaria
+          <%= f.label :commission_percent, { class: "col-md-3 control-label" } do %>Porcentaje por comisión de venta
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones, {}, {:class => 'form-control select2 input-large'} %>
+          <div class="col-md-1">
+            <%= f.number_field :commission_percent, { class: "form-control input-xsmall" } %>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :gain_margin,  {:class=>"col-md-3 control-label"} do %>Porcentaje de margen de ganancia
+          <%= f.label :gain_margin, { class: "col-md-3 control-label" } do %>Porcentaje de margen de ganancia
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :gain_margin, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1">
+            <%= f.number_field :gain_margin, { class: "form-control input-xsmall" } %>
+          </div>
+          <%= f.label :enable_haggle, { class: "col-md-3 control-label" } do %> ¿Permitir regateo en ventas? <span class="required">*</span><% end %>
+          <div class="col-md-1">
+            <%= f.check_box(:enable_haggle,
+              {
+                class: "make-switch",
+                data: {
+                  on_color: "success",
+                  off_color: "danger",
+                  on_text: "Si",
+                  off_text: "No"
+                }
+              }, "true","false"
+            ) %>
+            <%= f.hidden_field :enable_haggle %>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :haggle_in_sale_percent,  {:class=>"col-md-3 control-label"} do %>Porcentaje de regateo para ventas
-            <span class="required">*</span>
-          <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :haggle_in_sale_percent, {:class=>"form-control input-large" }  %>
+          <div id="haggle_div" class="<%= 'hidden' unless @pos_config.enable_haggle %>">
+            <%= f.label :haggle_in_sale_percent, { class: "col-md-3 control-label" } do %>Porcentaje máximo de regateo para ventas
+              <span class="required">*</span>
+            <% end %>
+            <div class="col-md-3">
+              <%= f.number_field :haggle_in_sale_percent, { class: "form-control input-xsmall" } %>
+            </div>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :commission_percent,  {:class=>"col-md-3 control-label"} do %>Porcentaje por comisión de venta
+          <%= f.label :time_zone, { class: "col-md-3 control-label" } do %>Zona horaria
             <span class="required">*</span>
           <% end %>
-          <div class="col-md-9">
-            <%= f.number_field :commission_percent, {:class=>"form-control input-large" }  %>
+          <div class="col-md-1">
+            <%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones, {}, {:class => 'form-control select2 input-large' } %>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :ticket_description,  {:class=>"col-md-3 control-label"} do %>Encabezado para tickets
+          <%= f.label :ticket_description, { class: "col-md-3 control-label" } do %>Encabezado para tickets
             <span class="required">*</span>
           <% end %>
           <div class="col-md-7">
-            <%= f.text_area :ticket_description, { :class=>"form-control", :rows => 5} %>
+            <%= f.text_area :ticket_description, { class: "form-control", rows: 5 } %>
             <span class="help-block">Si no se especifica un encabezado para cada uno de los puntos de venta, se usará este de manera general.</span>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :ticket_footer,  {:class=>"col-md-3 control-label"} do %>Pie de página para tickets
+          <%= f.label :ticket_footer, { class: "col-md-3 control-label" } do %>Pie de página para tickets
             <span class="required">*</span>
           <% end %>
           <div class="col-md-7">
-            <%= f.text_area :ticket_footer, { :class=>"form-control", :rows => 5} %>
+            <%= f.text_area :ticket_footer, { class: "form-control", rows: 5 } %>
           </div>
         </div>
         <div class="form-group">
-          <%= f.label :ticket_img, "Imagen para el ticket", {:class=>"col-md-3 control-label"} %>
+          <%= f.label :ticket_img, "Imagen para el ticket", { class: "col-md-3 control-label"} %>
           <div class="col-md-9">
             <div class="fileinput fileinput-new" data-provides="fileinput">
               <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
@@ -132,7 +138,7 @@
                 <span class="btn default btn-file">
                   <span class="fileinput-new"> Seleccione imagen </span>
                   <span class="fileinput-exists"> Cambiar </span>
-                  <%= f.file_field :ticket_img, {:class=>"default"} %>
+                  <%= f.file_field :ticket_img, { class: "default"} %>
                   <%= f.hidden_field :ticket_img_cache %>
                 </span>
                 <a href="javascript:;" class="btn red fileinput-exists" data-dismiss="fileinput"> Borrar </a>
@@ -146,8 +152,8 @@
   <div class="form-actions">
     <div class="row">
       <div class="col-md-offset-1 col-md-9">
-        <%= f.submit 'Guardar', {:class=>"btn green"} %>
-        <%= link_to 'Cancelar', root_path, {:class=>"btn default"} %>
+        <%= f.submit 'Guardar', { class: "btn green" } %>
+        <%= link_to 'Cancelar', root_path, { class: "btn default" } %>
       </div>
     </div>
   </div>
@@ -158,4 +164,12 @@
     App.init();
   });
 
+  $('input[name="pos_config[enable_haggle]"]').on('switchChange.bootstrapSwitch', function(event, state) {
+    if (state) {
+      $("#haggle_div").removeClass("hidden");
+    } else {
+      $("#haggle_div").addClass("hidden");
+    }
+    $('input[name="pos_config[enable_haggle]"]').val(state);
+  });
 </script>

+ 2 - 2
app/views/pos_configs/index.html.erb

@@ -31,13 +31,13 @@
                 <div class="portlet-title">
                   <div class="caption">
                     <i class="fa fa-fw fa-cog"></i>
-                    <span class="caption-subject bold uppercase">Parametros generales para los puntos de venta</span>
+                    <span class="caption-subject bold uppercase">Párametros generales para los puntos de venta</span>
                   </div>
                 </div>
                 <%= render 'form' %>
               </div>
             </div>
-          </div>                       
+          </div>
         </div>
         <!-- END PAGE CONTENT INNER -->
       </div>

+ 1 - 1
app/views/pre_sales/_pre_sale.html.erb

@@ -19,7 +19,7 @@
   <td><%= pre_sale.discount %></td>
   <td><%= pre_sale.total %></td>
   <td style="width:5%">
-    <% if pre_sale.haggle == 0 %>
+    <% if @pos_config.enable_haggle? && pre_sale.haggle == 0 %>
       <%= link_to add_sale_haggle_path(pre_sale), :remote => true, :class => "btn btn-icon-only btn-primary hagglebutton", :title=>"Agregar regate" do %>
         <i class="fa fa-tag"></i>
       <% end %>

+ 65 - 58
app/views/sales/_add_haggle.html.erb

@@ -1,73 +1,80 @@
-<!-- BEGIN FORM-->
-<%= form_for(@pre_sale, url: create_haggle_path(@pre_sale), :remote => true, :html => {:class=>"form-horizontal"}) do |f| %>
+<%= form_for(@pre_sale, url: create_haggle_path(@pre_sale), remote: true, html: { class: "form-horizontal", id: "haggle_form" }) do |f| %>
 <div class="portlet-body form">
-    <% if @pre_sale.errors.any? %>
-        <div class="alert alert-danger">
-            <strong>Tiene <%= pluralize(@product.errors.count, "error") %> no se puede guardar el descuento a producto.</strong><br>
+  <% if @pre_sale.errors.any? %>
+    <div class="alert alert-danger">
+      <strong>Tiene <%= pluralize(@product.errors.count, "error") %> no se puede guardar el descuento a producto.</strong><br>
+    </div>
+  <% end %>
+  <div class="form-body">
+    <div class="row">
+      <div class="col-md-12">
+        <p style="margin-top:0px;">
+          Producto: <strong> <%= @pre_sale.product.name %> </strong> <br>
+          Cantidad: <strong> <%= @pre_sale.quantity %> </strong> <br>
+          Importe: <strong> <%= number_to_currency(@pre_sale.total, precision: 2) %> MXN </strong>
+        </p>
+        <h4 class="form-section"></h4>
+        <div class="note note-success">
+          <p> <strong>NOTA: </strong>Sólo se puede aplicar descuento de una manera, ya sea en porcentaje o cantidad fija.</p>
+          <p>* Las cantidades recomendadas que se muestran son en base al porcentaje establecido en la configuración.</p>
         </div>
-    <% end %>
-    <div class="form-body">
-        <div class="row">
-            <div class="col-md-12">
-                <p style="margin-top:0px;">
-                    Producto: <strong> <%= @pre_sale.product.name  %> </strong> <br>
-                    Cantidad: <strong> <%= @pre_sale.quantity %> </strong> <br>
-                    Importe: <strong> <%= number_to_currency(@pre_sale.total, precision: 2) %> MXN </strong>
-                </p>
-                <h4 class="form-section"></h4>
-                <div class="note note-success">
-                    <p> <strong>NOTA: </strong>Solo se puede aplicar descuento de una manera, ya sea en porcentaje o cantidad fija.</p>
-
-                    <p>* Las cantidades recomendadas que se muestran son en base al porcentaje establecido en la configuración.</p>
-                </div>
-                <div class="form-group">
-                   <%= label_tag :haggle,  {:class=>"col-md-4 control-label"} do %>Porcentaje a aplicar <% end %>
-                    <div class="col-md-6">
-                        <div class="input-group">
-                            <%= number_field_tag :haggle_percent, '', class: "form-control input-mask_decimal", min:0, max:100, step: "any" %>
-                            <span class="input-group-addon"> % </span>
-                        </div>
-                        <span class="help-block">Recomendado: <strong><%= @haggle_percent %></strong> %</span>
-                    </div>
-                </div>
-                <div class="form-group">
-                   <%= label_tag :haggle,  {:class=>"col-md-4 control-label"} do %>Cantidad a descontar <% end %>
-                    <div class="col-md-6">
-                        <div class="input-group">
-                            <span class="input-group-addon"> $ </span>
-                            <%= number_field_tag :haggle_quantity, '', class: "form-control input-mask_decimal", step: "any" %>
-                            <span class="input-group-addon"> MXN </span>
-                        </div>
-                        <span class="help-block">Recomendado: <strong><%= number_to_currency(@suggested_haggle, precision: 2) %></strong></span>
-                    </div>
-                </div>
+        <div class="form-group">
+          <%= label_tag :haggle, { class: "col-md-4 control-label" } do %>Porcentaje a aplicar <% end %>
+          <div class="col-md-6">
+            <div class="input-group">
+              <%= number_field_tag :haggle_percent, '', class: "form-control input-mask_decimal", min: 0, max: 100, step: "any" %>
+              <span class="input-group-addon"> % </span>
+            </div>
+            <span class="help-block">Recomendado: <strong><%= @haggle_percent %></strong> %</span>
+          </div>
+        </div>
+        <div class="form-group">
+          <%= label_tag :haggle, { class: "col-md-4 control-label" } do %>Cantidad a descontar <% end %>
+          <div class="col-md-6">
+            <div class="input-group">
+              <span class="input-group-addon"> $ </span>
+              <%= number_field_tag :haggle_quantity, '', class: "form-control input-mask_decimal", step: "any" %>
+              <span class="input-group-addon"> MXN </span>
             </div>
+            <span class="help-block">Recomendado: <strong><%= number_to_currency(@suggested_haggle, precision: 2) %></strong></span>
+          </div>
         </div>
+      </div>
     </div>
+  </div>
 </div>
 <div class="form-actions">
-    <h4 class="form-section"> </h4>
-    <div class="row">
-        <div class="col-md-12">
-            <button type="submit" class="btn green"  id="submit_btn">Aplicar descuento</button>
-            <button type="button" class="btn default" onclick="cerrarDialog()">Cerrar</button>
-        </div>
+  <h4 class="form-section"> </h4>
+  <div class="row">
+    <div class="col-md-12">
+      <button type="button" class="btn green" id="submit_btn" onclick="submitForm()">Aplicar descuento</button>
+      <button type="button" class="btn default" onclick="cerrarDialog()">Cerrar</button>
     </div>
+  </div>
 </div>
 <% end %>
 <script>
-    $('#haggle_quantity, #haggle_percent').on('input', function() {
-        if($(this).attr('id') == 'haggle_percent') {
-            $('#haggle_quantity').val('');
-        } else {
-            $('#haggle_percent').val('');
-        }
-    });
+  $('#haggle_quantity, #haggle_percent').on('input', function() {
+    if($(this).attr('id') == 'haggle_percent') {
+      $('#haggle_quantity').val('');
+    } else {
+      $('#haggle_percent').val('');
+    }
+  });
 
-    function cerrarDialog() {
-        $('#dialog').modal('toggle');
+  function submitForm() {
+    var max_percent = <%= @haggle_percent %>;
+    var max_quantity = <%= @suggested_haggle.to_f %>;
+    var quantity = $('#haggle_quantity').val();
+    var percent = $('#haggle_percent').val();
+    if((quantity == "" && percent <= max_percent && percent > 0) || (percent == "" && quantity <= max_quantity && quantity > 0)) {
+      $("#haggle_form").submit();
+    } else {
+      toastr["error"]("No puede agregar un descuento que sobrepase el descuento recomendado, y debe indicar el criterio de descuento a aplicar");
     }
+  }
 
+  function cerrarDialog() {
+    $('#dialog').modal('toggle');
+  }
 </script>
-
-

+ 5 - 0
db/migrate/20180727152745_add_enable_haggle_to_pos_config.rb

@@ -0,0 +1,5 @@
+class AddEnableHaggleToPosConfig < ActiveRecord::Migration
+  def change
+    add_column :pos_configs, :enable_haggle, :boolean, default: true
+  end
+end

+ 28 - 48
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: 20171211222709) do
+ActiveRecord::Schema.define(version: 20180727152745) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -135,7 +135,6 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.decimal  "received",                        precision: 10, scale: 2
     t.decimal  "change",                          precision: 10, scale: 2
     t.integer  "products_return_id"
-    t.integer  "deposit_id"
     t.integer  "credit_payment_id"
   end
 
@@ -229,20 +228,6 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.integer  "is_public",                                         default: 0
   end
 
-  create_table "deposits", force: :cascade do |t|
-    t.integer  "open_cash_register_id"
-    t.decimal  "quantity",              default: 0.0, null: false
-    t.integer  "user_id"
-    t.integer  "status",                default: 1,   null: false
-    t.datetime "created_at",                          null: false
-    t.datetime "updated_at",                          null: false
-    t.string   "observations"
-    t.string   "deposit_code",                        null: false
-  end
-
-  add_index "deposits", ["open_cash_register_id"], name: "index_deposits_on_open_cash_register_id", using: :btree
-  add_index "deposits", ["user_id"], name: "index_deposits_on_user_id", using: :btree
-
   create_table "expenses", force: :cascade do |t|
     t.integer  "expensesconcept_id"
     t.integer  "open_cash_register_id"
@@ -329,9 +314,9 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.string   "name"
     t.string   "address"
     t.text     "notes"
-    t.integer  "status",                     default: 1
-    t.datetime "created_at",                             null: false
-    t.datetime "updated_at",                             null: false
+    t.integer  "status",                                              default: 1
+    t.datetime "created_at",                                                        null: false
+    t.datetime "updated_at",                                                        null: false
     t.text     "prefix"
     t.string   "img_pointsale_file_name"
     t.string   "img_pointsale_content_type"
@@ -339,6 +324,7 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.datetime "img_pointsale_updated_at"
     t.string   "ticket_footer"
     t.string   "img_pointsale"
+    t.decimal  "haggle_percent",             precision: 10, scale: 2, default: 0.0
   end
 
   create_table "pos_configs", force: :cascade do |t|
@@ -347,10 +333,10 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.integer  "days_cancel_sale"
     t.integer  "days_cancel_purchase"
     t.decimal  "tax_percent"
-    t.string   "time_zone",               limit: 255,                          default: "", null: false
+    t.string   "time_zone",               limit: 255,                          default: "",   null: false
     t.decimal  "gain_margin"
-    t.datetime "created_at",                                                                null: false
-    t.datetime "updated_at",                                                                null: false
+    t.datetime "created_at",                                                                  null: false
+    t.datetime "updated_at",                                                                  null: false
     t.text     "ticket_description"
     t.integer  "days_cancel_reserved"
     t.decimal  "reserve_sale_percent",                precision: 10, scale: 2
@@ -362,7 +348,7 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.datetime "ticket_img_updated_at"
     t.integer  "haggle_in_sale_percent"
     t.string   "ticket_img"
-    t.boolean  "print_ticket"
+    t.boolean  "enable_haggle",                                                default: true
   end
 
   create_table "pre_purchases", force: :cascade do |t|
@@ -375,10 +361,10 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.decimal  "amount",                                default: 0.0, null: false
     t.decimal  "tax",                                   default: 0.0, null: false
     t.decimal  "total",                                 default: 0.0, null: false
+    t.integer  "quantity",                              default: 0,   null: false
     t.integer  "warehouse_id"
     t.decimal  "price_base",   precision: 10, scale: 2
     t.decimal  "exchange",     precision: 10, scale: 2
-    t.decimal  "quantity",     precision: 10, scale: 2
   end
 
   create_table "pre_sales", force: :cascade do |t|
@@ -386,18 +372,17 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.integer  "user_id"
     t.integer  "open_cash_register_id"
     t.integer  "product_id"
-    t.datetime "created_at",                                                               null: false
-    t.datetime "updated_at",                                                               null: false
+    t.datetime "created_at",                                                             null: false
+    t.datetime "updated_at",                                                             null: false
     t.integer  "sale_type",             limit: 2
-    t.decimal  "amount",                                                   default: 0.0,   null: false
-    t.decimal  "tax",                                                      default: 0.0,   null: false
-    t.decimal  "discount",                                                 default: 0.0,   null: false
-    t.decimal  "total",                                                    default: 0.0,   null: false
+    t.decimal  "amount",                                                   default: 0.0, null: false
+    t.decimal  "tax",                                                      default: 0.0, null: false
+    t.decimal  "discount",                                                 default: 0.0, null: false
+    t.decimal  "total",                                                    default: 0.0, null: false
+    t.integer  "quantity",                                                 default: 0,   null: false
     t.integer  "special_price_id"
     t.decimal  "unit_price",                      precision: 10, scale: 2
     t.decimal  "haggle",                          precision: 10, scale: 2, default: 0.0
-    t.decimal  "quantity",                        precision: 10, scale: 2,                 null: false
-    t.boolean  "is_adjustment",                                            default: false
   end
 
   create_table "pre_transfers", force: :cascade do |t|
@@ -458,7 +443,6 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.boolean  "is_in_dollars",                                                 default: false
     t.decimal  "price_base_dollars",                   precision: 10, scale: 2
     t.string   "img_product"
-    t.decimal  "gain_margin",                          precision: 10, scale: 2, default: 0.0
   end
 
   add_index "products", ["unit_id"], name: "index_products_on_unit_id", using: :btree
@@ -521,13 +505,13 @@ ActiveRecord::Schema.define(version: 20171211222709) do
   create_table "purchase_details", force: :cascade do |t|
     t.integer  "purchase_id"
     t.integer  "product_id"
+    t.integer  "quantity"
     t.decimal  "price",       precision: 10, scale: 2, default: 0.0, null: false
     t.decimal  "amount",      precision: 10, scale: 2, default: 0.0, null: false
     t.datetime "created_at",                                         null: false
     t.datetime "updated_at",                                         null: false
     t.integer  "status",                               default: 1,   null: false
     t.decimal  "tax",                                                null: false
-    t.decimal  "quantity",    precision: 10, scale: 2
   end
 
   add_index "purchase_details", ["product_id"], name: "index_purchase_details_on_product_id", using: :btree
@@ -555,20 +539,19 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.integer  "customer_id"
     t.integer  "user_id"
     t.integer  "open_cash_register_id"
-    t.decimal  "amount",                          precision: 10, scale: 2, default: 0.0,   null: false
-    t.decimal  "tax",                             precision: 10, scale: 2, default: 0.0,   null: false
-    t.decimal  "discount",                        precision: 10, scale: 2, default: 0.0,   null: false
-    t.decimal  "total",                           precision: 10, scale: 2, default: 0.0,   null: false
-    t.integer  "status",                                                   default: 1,     null: false
-    t.date     "date_sale",                                                                null: false
-    t.datetime "created_at",                                                               null: false
-    t.datetime "updated_at",                                                               null: false
+    t.decimal  "amount",                          precision: 10, scale: 2, default: 0.0, null: false
+    t.decimal  "tax",                             precision: 10, scale: 2, default: 0.0, null: false
+    t.decimal  "discount",                        precision: 10, scale: 2, default: 0.0, null: false
+    t.decimal  "total",                           precision: 10, scale: 2, default: 0.0, null: false
+    t.integer  "status",                                                   default: 1,   null: false
+    t.date     "date_sale",                                                              null: false
+    t.datetime "created_at",                                                             null: false
+    t.datetime "updated_at",                                                             null: false
     t.integer  "saletype",              limit: 2
     t.integer  "seller_id"
     t.string   "sale_code"
     t.date     "expiration_date"
     t.string   "credit_note"
-    t.boolean  "is_adjustment_sale",                                       default: false
   end
 
   add_index "sales", ["customer_id"], name: "index_sales_on_customer_id", using: :btree
@@ -610,7 +593,6 @@ ActiveRecord::Schema.define(version: 20171211222709) do
     t.integer  "status",       default: 1, null: false
     t.datetime "created_at",               null: false
     t.datetime "updated_at",               null: false
-    t.integer  "user_id"
   end
 
   add_index "sellers", ["pointsale_id"], name: "index_sellers_on_pointsale_id", using: :btree
@@ -744,10 +726,8 @@ ActiveRecord::Schema.define(version: 20171211222709) do
   create_table "units", force: :cascade do |t|
     t.string   "unit"
     t.integer  "status"
-    t.datetime "created_at",                     null: false
-    t.datetime "updated_at",                     null: false
-    t.string   "abbreviation"
-    t.boolean  "can_be_divided", default: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
   end
 
   create_table "users", force: :cascade do |t|