Browse Source

added the posibility to add haggle (quantity or percent) in products return

Jose Miguel Ledon Nieblas 8 years ago
parent
commit
6d5b39e0a5

+ 33 - 0
app/controllers/products_returns_controller.rb

@@ -160,6 +160,28 @@ class ProductsReturnsController < ApplicationController
     render json: @object_totals
   end
 
+  def add_haggle
+    respond_to do |format|
+      @product_for_return = Product.find(params[:product_id])
+      @sale = Sale.find(params[:sale_id])
+      @object_totals = get_totals
+      @suggested_haggle = (@pos_config.haggle_in_sale_percent.to_f / 100) * (@object_totals['total'])
+      format.js
+    end
+  end
+
+  def create_haggle
+    respond_to do |format|
+      @product_for_return = Product.find(params[:product_id])
+      @sale = Sale.find(params[:sale_id])
+      @haggle_percent = params[:haggle_percent].present? ? params[:haggle_percent].to_f : nil
+      @haggle_quantity = params[:haggle_quantity].present? ? params[:haggle_quantity].to_f : nil
+      @object_totals = get_totals
+
+      format.js
+    end
+  end
+
   def print_receipt
     respond_to do |format|
       products_return = ProductsReturn.find(params[:products_return_id])
@@ -196,12 +218,23 @@ class ProductsReturnsController < ApplicationController
       obj['amount'] = obj['quantity'].to_i * obj['unit_price']
 
       obj['tax'] = 0.0
+
       if @product_for_return.include_sale_tax == 1
         obj['tax'] = ((PosConfig.first.tax_percent / 100) * obj['amount']).round(2)
       end
 
       obj['total'] = (obj['amount'] - obj['discount']) + obj['tax']
 
+      haggle = 0.0
+      if @haggle_percent.present?
+        haggle = (@haggle_percent / 100) * obj['total']
+      elsif @haggle_quantity.present?
+        haggle = @haggle_quantity
+      end
+
+      obj['discount'] += haggle
+      obj['total'] = (obj['amount'] - obj['discount']) + obj['tax']
+
       obj
     end
   end

+ 91 - 0
app/views/products_returns/_add_haggle.html.erb

@@ -0,0 +1,91 @@
+<div class="portlet-body form form-horizontal">
+    <div class="form-body">
+        <div class="row">
+            <div class="col-md-12">
+                <p style="margin-top:0px;">
+                    <%= hidden_field_tag 'product_id', @product_for_return.id %>
+                    <%= hidden_field_tag 'sale_id', @sale.id %>
+                    <%= hidden_field_tag 'quantity', @object_totals['quantity'] %>
+
+                    Producto: <strong> <%= @product_for_return.name  %> </strong> <br>
+                    Cantidad: <strong> <%= @object_totals['quantity']  %> </strong> <br>
+                    Importe: <strong> <%= number_to_currency(@object_totals['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 %>
+                            <span class="input-group-addon"> % </span>
+                        </div>
+                        <span class="help-block">Recomendado: <strong><%= @pos_config.haggle_in_sale_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" %>
+                            <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="button" class="btn green disabled" onclick="submit()" id="submit_btn">Aplicar descuento</button>
+            <button type="button" class="btn default" onclick="cerrarDialog()">Cerrar</button>
+        </div>
+    </div>
+</div>
+<script>
+
+    $('#haggle_quantity, #haggle_percent').on('input', function() {
+        if($(this).val()) {
+            if($(this).attr('id') == 'haggle_percent') {
+                $('#haggle_quantity').val('');
+            } else {
+                $('#haggle_percent').val('');
+            }
+            $('#submit_btn').removeClass('disabled');
+        } else {
+            $('#submit_btn').addClass('disabled');
+        }
+    });
+
+    function submit() {
+        $.ajax({
+            type: "POST",
+            url: "/create_products_return_haggle",
+            dataType: "script",
+            data: {
+                product_id: $('#product_id').val(),
+                sale_id: $('#sale_id').val(),
+                haggle_percent: $('#haggle_percent').val(),
+                haggle_quantity: $('#haggle_quantity').val(),
+                quantity: $('#quantity').val()
+
+            },
+            success: function(xhr, status, error) {}
+        });
+    }
+
+    function cerrarDialog() {
+        $('#dialog').modal('toggle');
+    }
+</script>
+
+

+ 4 - 0
app/views/products_returns/_form.html.erb

@@ -687,6 +687,10 @@
         var idText = input.closest('tr').attr('id');
         var product_id = idText.substring(idText.lastIndexOf('_') + 1, idText.length);
 
+        var linkForModal = input.closest('tr').find('td:eq(9)').find('a');
+        //reemplazar la cantidad en el href del a element que manda llamar el modal, para mostrar correctamente la cantidad
+        linkForModal.attr('href', linkForModal.prop('href').replace(/(quantity=).*?(&)/,'$1' + input.val() + '$2'));
+
         $.ajax({
           type: "get",
           url:  '/update_quantity_prod_return/',

+ 5 - 2
app/views/products_returns/_product_for_return.html.erb

@@ -24,9 +24,12 @@
   </td>
   <td>
     <%= number_to_currency(object_totals['total'], precision: 2) %>
-    <%= hidden_field_tag 'total', object_totals['total'] %> 
+    <%= hidden_field_tag 'total', object_totals['total'] %>
   </td>
   <td>
-    <button type="button" class="btn btn-icon-only btn-danger" onclick="deleteRow($(this))"><i class="fa fa-trash-o"></i></button>    
+    <button type="button" class="btn btn-icon-only btn-danger" onclick="deleteRow($(this))"><i class="fa fa-trash-o"></i></button>
+    <%= link_to add_products_return_haggle_path(product_id: product.id, quantity: object_totals['quantity'], sale_id: sale.id), :remote => true, :class => "btn btn-icon-only btn-primary hagglebutton", :title=>"Agregar regate" do %>
+      <i class="fa fa-tag"></i>
+    <% end %>
   </td>
 </tr>

+ 8 - 0
app/views/products_returns/add_haggle.js.erb

@@ -0,0 +1,8 @@
+$('#dialog h3.modal-title').html("<i class='fa fa-money'></i> Agregar descuento");
+$("#dialog .modal-body-content").html("<%= escape_javascript(render 'add_haggle') %>");
+$("#dialog").modal("show");
+
+// Set focus to the first element
+$('#dialog').on('shown.bs.modal', function () {
+  $('.first_input').focus();
+});

+ 2 - 2
app/views/products_returns/add_product_to_return.js.erb

@@ -1,9 +1,9 @@
 <% if  @product_for_return.present? %>
   var table = $('#change_for_product_table').DataTable();
-  var newRow = $('<%= j render partial: "product_for_return", locals: {product: @product_for_return, unit_price: @unit_price, object_totals: @object_totals} %>');
+  var newRow = $('<%= j render partial: "product_for_return", locals: {product: @product_for_return, sale: @sale, object_totals: @object_totals} %>');
   x = $('#change_for_product_table').dataTable();
   newRow.find('td:eq(0)').html(newRow.find('td:eq(0)').html().replace('#', x.fnGetData().length + 1));
   table.row.add(newRow).draw();
 <% else %>
   toastr["error"]("Error, No se encontró el producto.");
-<% end %>
+<% end %>

+ 23 - 0
app/views/products_returns/create_haggle.js.erb

@@ -0,0 +1,23 @@
+// var table = $('#change_for_product_table').DataTable();
+
+//  var data = table.rows().each(function () {
+//      console.log($(this).attr('id'));
+//  });
+
+$('#change_for_product_table tbody tr').each(function() {
+  trTxt = $(this).attr('id');
+  id = parseInt(trTxt.substring(trTxt.lastIndexOf('_') + 1, trTxt.length));
+  if (id == <%= @product_for_return.id %>) {
+    //iva
+    $(this).find('td:eq(6)').text("<%= number_to_currency(@object_totals['tax'], precision: 2) %>");
+    //discount
+    $(this).find('td:eq(7)').text("<%= number_to_currency(@object_totals['discount'], precision: 2) %>");
+    //total
+    text = "<%= number_to_currency(@object_totals['total'], precision: 2) %>" + "<input type='hidden' name='total' id='total' value=" + <%= @object_totals['total'] %> + ">"
+    $(this).find('td:eq(8)').html(text);
+
+    $(this).find(".hagglebutton").addClass("disabled").click(function(e){ e.preventDefault();});
+  }
+});
+$('#dialog').modal('toggle');
+calculateTotals();

+ 2 - 0
config/routes.rb

@@ -190,6 +190,8 @@ Rails.application.routes.draw do
   post 'add_product_to_return' => 'products_returns#add_product_to_return', defaults: { format: 'js' }, :as => "add_product_to_return"
   get 'update_quantity_prod_return' => 'products_returns#update_quantity_prod_return', :format => :json
   get 'print_return_receipt/:products_return_id' => 'products_returns#print_receipt', :as => 'print_return_receipt'
+  get 'add_products_return_haggle' => 'products_returns#add_haggle', :as => 'add_products_return_haggle'
+  post 'create_products_return_haggle' => 'products_returns#create_haggle', :as => 'create_products_return_haggle'
 
   root 'dashboard#index'
   get 'get_chart_data_for_dashboard' => 'dashboard#get_chart_data_for_dashboard'