Explorar el Código

[Issue #74] Fixed discount; avoid duplicated pre sales when adding the same product again

Jacqueline Maldonado hace 7 años
padre
commit
bf6ad3f573

+ 44 - 79
app/controllers/pre_sales_controller.rb

@@ -1,51 +1,40 @@
 class PreSalesController < ApplicationController
   before_action :set_pre_sale, only: [:show, :edit, :update, :destroy]
 
-  # GET /pre_sales/new
-  def new; end
-
   # POST /pre_sales
   # POST /pre_sales.json
   def create
-    total_in_pre_sales = 0
-    @pre_sale = PreSale.new(pre_sale_params)
-    @pre_sale.user_id = current_user.id
-
-    # Sumar los totales de los presales en caso que exista.
-    PreSale.where(user_id: @pre_sale.user_id).each do |pre|
-      total_in_pre_sales = total_in_pre_sales + pre.total
+    @pre_sale = PreSale.find_by(product_id: params[:pre_sale][:product_id], user_id: current_user.id)
+    if @pre_sale.present? # si ya existe un pre sale con ese producto
+      @pre_sale.quantity += 1
+    else
+      @is_new = true
+      @pre_sale = PreSale.new(pre_sale_params)
+      @pre_sale.user_id = current_user.id
     end
 
+    total_in_pre_sales = PreSale.where(user_id: @pre_sale.user_id).sum(:total)
+
     #precio unitario
     @pre_sale.unit_price = @pre_sale.product.get_price_sale(OpenCashRegister.find(@pre_sale.open_cash_register_id).pointsale.id)
-
     @pre_sale.get_totals
-
     total_in_pre_sales += @pre_sale.total
 
     respond_to do |format|
       if has_enough_stock?(@pre_sale)
         #cuando la venta es a credito checar que el credito permita esta nueva venta
-        if @pre_sale.sale_type == "credit"
+        case @pre_sale.sale_type
+        when "credit" then
           debiting = @pre_sale.customer.get_debiting
-          if @pre_sale.customer.sale_approved?(debiting + total_in_pre_sales)
-            if @pre_sale.save
-              format.js
-            else
-              format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
-            end
+          if @pre_sale.customer.sale_approved?(debiting + total_in_pre_sales) && @pre_sale.save
+            format.js
           else
             @pre_sale.errors.add(:customer_id, "El cliente ya no tiene crédito disponible.")
             format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
-          end
-        elsif @pre_sale.sale_type == "cash"
-          if  @pre_sale.save
             format.js
-          else
-            format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
           end
-        elsif @pre_sale.sale_type == "reserved"
-          if  @pre_sale.save
+        when "cash", "reserved" then
+          if @pre_sale.save
             format.js
           else
             format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
@@ -62,34 +51,31 @@ class PreSalesController < ApplicationController
   # PATCH/PUT /pre_sales/1
   # PATCH/PUT /pre_sales/1.json
   def update
+    dup_presale = @pre_sale.dup
     @pre_sale.quantity = params[:pre_sale][:quantity].to_i
     availableProduct = AvailableProduct.find_by(pointsale_id: current_user.pointsale_id, product_id: @pre_sale.product_id)
+    total_in_pre_sales = PreSale.where(user_id: current_user.id, product_id: @pre_sale.product_id).where.not(id: @pre_sale.id).sum(:total)
 
-    same_product_quantity = 0
-    total_in_pre_sales = 0
-    PreSale.where(user_id: current_user.id, product_id: @pre_sale.product_id).where.not(id: @pre_sale.id).each do |pre|
-      total_in_pre_sales += pre.total
-      same_product_quantity += pre.quantity
-    end
-
-    total_quantity = same_product_quantity + @pre_sale.quantity
     respond_to do |format|
-      if availableProduct.stock >= total_quantity
+      if availableProduct.stock >= @pre_sale.quantity
         @pre_sale.get_totals
         total_in_pre_sales += @pre_sale.total
-        if !@pre_sale.credit?
-          @pre_sale.update(pre_sale_params)
-          format.json { render json: @pre_sale }
-        elsif @pre_sale.customer.sale_approved?(@pre_sale.customer.get_debiting + total_in_pre_sales)
+        case @pre_sale.sale_type
+        when "credit" then
+          if @pre_sale.customer.sale_approved?(@pre_sale.customer.get_debiting + total_in_pre_sales)
+            @pre_sale.update(pre_sale_params)
+            format.json { render json: @pre_sale }
+          else
+            @pre_sale.errors.add(:base, "El cliente ya no tiene crédito disponible")
+            format.json { render json: { errors: @pre_sale.errors.values, presale: dup_presale, quantity: dup_presale.quantity }, status: :unprocessable_entity }
+          end
+        when "cash", "reserved" then
           @pre_sale.update(pre_sale_params)
           format.json { render json: @pre_sale }
-        else
-          @pre_sale.errors.add(:base, "El cliente ya no tiene crédito disponible")
-          format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
         end
       else
         @pre_sale.errors.add(:base, "Stock insuficiente del producto #{@pre_sale.product.name}")
-        format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
+        format.json { render json: { errors: @pre_sale.errors.values, presale: dup_presale, quantity: dup_presale.quantity }, status: :unprocessable_entity }
       end
     end
   end
@@ -110,57 +96,42 @@ class PreSalesController < ApplicationController
     @product = pointsale.products.find_by("barcode = ? and stock > 0", params[:barcode])
     respond_to do |format|
       if @product.blank?
+        @pre_sale = PreSale.new
+        @pre_sale.errors.add(:product_id, "No se encontro el producto")
         format.js { render action: "create" }
       else
-        # ir sumando todos los presales que tiene, para ver si lo abarca el credito
-        PreSale.where(user_id: current_user.id).each do |pre|
-          total_in_pre_sales = total_in_pre_sales + pre.total
-        end
-
-        @pre_sale = PreSale.new
-        @pre_sale.customer_id = params[:customer_id]
-        @pre_sale.user_id = current_user.id
-        @pre_sale.open_cash_register_id = params[:open_cash_register_id]
-        @pre_sale.product_id = @product.id
-        @pre_sale.sale_type = params[:sale_type]
-        @pre_sale.quantity = 1
+        total_in_pre_sales = PreSale.where(user_id: current_user.id).sum(:total)
+        @pre_sale = PreSale.new(customer_id: params[:customer_id], user_id: current_user.id, open_cash_register_id: params[:open_cash_register_id], product_id: @product.id, sale_type: params[:sale_type], quantity: 1)
 
         #precio unitario
         @pre_sale.unit_price = @pre_sale.product.get_price_sale(OpenCashRegister.find(@pre_sale.open_cash_register_id).pointsale.id)
-
         @pre_sale.get_totals
-
-        total_in_pre_sales = total_in_pre_sales + @pre_sale.total
+        total_in_pre_sales += @pre_sale.total
 
         #cuando la venta es a credito checar que el credito permita esta nueva venta
         if has_enough_stock?(@pre_sale)
-          if @pre_sale.sale_type == "credit"
+          #cuando la venta es a credito checar que el credito permita esta nueva venta
+          case @pre_sale.sale_type
+          when "credit" then
             debiting = @pre_sale.customer.get_debiting
-            if @pre_sale.customer.sale_approved?(debiting + total_in_pre_sales)
-              if @pre_sale.save
-                format.js { render action: "create" }
-              end
+            if @pre_sale.customer.sale_approved?(debiting + total_in_pre_sales) && @pre_sale.save
+              format.js { render action: "create" }
             else
               @pre_sale.errors.add(:customer_id, "El cliente ya no tiene crédito disponible.")
               format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
-              format.js { render action: "create" }
+              format.js
             end
-          elsif @pre_sale.sale_type == "cash"
-            if  @pre_sale.save
+          when "cash", "reserved" then
+            if @pre_sale.save
               format.js { render action: "create" }
             else
               format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
             end
-          elsif @pre_sale.sale_type == "reserved"
-            if  @pre_sale.save
-              format.js
-            else
-              format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
-            end
           end
         else
           @pre_sale.errors.add(:base, "Stock insuficiente del producto #{@pre_sale.product.name}")
           format.json { render json: @pre_sale.errors.values, status: :unprocessable_entity }
+          format.js { render action: "create" }
         end
       end
     end
@@ -213,14 +184,8 @@ class PreSalesController < ApplicationController
   end
 
   def has_enough_stock?(pre_sale)
-    same_product_quantity = 0
-    PreSale.where(user_id: current_user.id, product_id: pre_sale.product_id).each do |pre|
-      same_product_quantity += pre.quantity
-    end
-
     availableProduct = AvailableProduct.find_by(pointsale_id: current_user.pointsale_id, product_id: pre_sale.product_id)
-
-    if availableProduct.stock >= (same_product_quantity + pre_sale.quantity)
+    if availableProduct.stock >= pre_sale.quantity
       return true
     else
       return false

+ 4 - 1
app/models/pre_sale.rb

@@ -40,7 +40,10 @@ class PreSale < ActiveRecord::Base
       else
         0
       end
-    self.amount -= haggle_discount if haggle_discount.present?
+    if haggle_discount.present?
+      self.discount += haggle_discount
+      self.amount -= haggle_discount
+    end
     self.tax = 0.0
     if product.include_sale_tax?
       self.tax = ((PosConfig.first.tax_percent / 100) * amount).round(2)

+ 16 - 11
app/views/pre_sales/_pre_sale.html.erb

@@ -1,12 +1,7 @@
 <tr id="pre_sale_<%= pre_sale.id %>">
-  <td>
-    #
-    <%= hidden_field_tag 'include_tax', pre_sale.product.include_sale_tax %>
-  </td>
+  <td> # <%= hidden_field_tag 'include_tax', pre_sale.product.include_sale_tax %> </td>
   <td><%= pre_sale.product.sku %></td>
-  <td class="text-center">
-    <img src="<%= pre_sale.product.small_img %>" width="100" height="100"/>
-  </td>
+  <td class="text-center"><img src="<%= pre_sale.product.small_img %>" width="100" height="100"/></td>
   <td>
     <%= pre_sale.product.name %><br>
     <%= pre_sale.product.display_attributes %>
@@ -14,11 +9,21 @@
   <td>
     <input type="number" min="1" id="quantity_<%= pre_sale.id %>" class="form-control input-xsmall" id="quantity_<%= pre_sale.id %>" oninput="calculatePrice($(this))" value="<%= pre_sale.quantity %>" pattern="^[0-9]*[1-9][0-9]*$" title="La cantidad debe de ser mayor o igual a 1" required>
   </td>
-  <td><%= pre_sale.unit_price %></td>
-  <td><%= pre_sale.tax %></td>
-  <td><%= pre_sale.discount %></td>
   <td>
-    <%= pre_sale.amount %>
+    <label><%= number_to_currency(pre_sale.unit_price, precision: 2) %></label>
+    <%= hidden_field_tag('unit_price', pre_sale.unit_price, { id: "unit_price_" + pre_sale.id.to_s }) %>
+  </td>
+  <td class="hidden">
+    <label><%= number_to_currency(pre_sale.tax, precision: 2) %></label>
+    <%= hidden_field_tag('tax', pre_sale.tax, { id: "tax_" + pre_sale.id.to_s }) %>
+  </td>
+  <td>
+    <label><%= number_to_currency(pre_sale.discount, precision: 2) %></label>
+    <%= hidden_field_tag('discount', pre_sale.discount, { id: "discount_" + pre_sale.id.to_s }) %>
+  </td>
+  <td>
+    <label><%= number_to_currency(pre_sale.total, precision: 2) %></label>
+    <%= hidden_field_tag('total', pre_sale.total, { id: "total_" + pre_sale.id.to_s }) %>
   </td>
   <td style="width:5%">
     <% if @pos_config.enable_haggle? && pre_sale.haggle.zero? && pre_sale.haggle_percent.zero? %>

+ 16 - 3
app/views/pre_sales/create.js.erb

@@ -1,4 +1,4 @@
-<% if @pre_sale.present? && @pre_sale.errors.values.any? %>
+<% if @pre_sale.errors.values.any? %>
 	$("#error_explanation").empty();
 	$('#error_explanation').removeClass('hidden');
 	$("#error_explanation").append($("<div class='alert alert-danger'></div>"));
@@ -6,7 +6,8 @@
     $("#error_explanation div").append($("<li />").html("<%= message.first.to_s %>"));
     toastr["error"]("<%= message.first.to_s %>");
   <% end %>
-<% elsif defined? @pre_sale %>
+<% elsif @is_new %>
+  $('#sale_customer_id').attr("disabled", true);
 	if($("#error_explanation").is(':visible')) {
 		$("#error_explanation").addClass('hidden');
 	}
@@ -16,7 +17,19 @@
 	newRow.find('td:eq(0)').html(newRow.find('td:eq(0)').html().replace('#', x.fnGetData().length + 1));
 	table.row.add(newRow).draw();
   $('#customer_remote').remove();
+<% elsif @pre_sale.quantity > 1 %>
+  $("#quantity_<%= @pre_sale.id %>").val(<%= @pre_sale.quantity.to_i %>);
+  $("#unit_price_<%= @pre_sale.id.to_s %>").val(<%= @pre_sale.unit_price.round(2) %>);
+  $("#tax_<%= @pre_sale.id.to_s %>").val(<%= @pre_sale.tax.round(2) %>);
+  $("#discount_<%= @pre_sale.id.to_s %>").val(<%= @pre_sale.discount.round(2) %>);
+  $("#total_<%= @pre_sale.id.to_s %>").val(<%= @pre_sale.total.round(2) %>);
+
+  tr = $("#pre_sale_<%= @pre_sale.id %>")
+  tr.find('td:eq(5) label').text("$ " + <%= @pre_sale.unit_price.round(2) %>);
+  tr.find('td:eq(6) label').text("$ " + <%= @pre_sale.tax.round(2) %>);
+  tr.find('td:eq(7) label').text("$ " + <%= @pre_sale.discount.round(2) %>);
+  tr.find('td:eq(8) label').text("$ " + <%= @pre_sale.total.round(2) %>);
 <% else %>
 	toastr["error"]("Error, No se encontró el producto.");
 <% end %>
-
+calculateTotals();

+ 97 - 66
app/views/sales/_form.html.erb

@@ -17,9 +17,9 @@
 	      </div>
 			<% end %>
 			<!-- boton para resetear datos -->
-			<div class="col-md-offset-10 col-md-2">
-				<button id="reset_pre_sales" type="button" class="btn btn-warning" <%= @disabled_button ? 'disabled' : '' %> onclick="deletePreSales()">Restaurar venta</button>
-			</div>
+			<!-- <div class="col-md-offset-10 col-md-2">
+				<button id="reset_pre_sales" type="button" class="btn btn-warning" < %= @disabled_button ? 'disabled' : '' %> onclick="deletePreSales()">Restaurar venta</button>
+			</div> -->
 			<div class="col-md-8">
 				<h4 class="form-section"> Datos generales</h4>
 				<!-- purchase code -->
@@ -169,7 +169,7 @@
 					<!-- -->
 						<input class="form-control" type="text" id="typeahead">
 					</div>
-					<button id="products_new" disabled class="btn btn-success" type="button" onclick="addRow()"> Agregar <i class="fa fa-plus"></i> </button>
+					<!-- <button id="products_new" disabled class="btn btn-success" type="button" onclick="addRow()"> Agregar <i class="fa fa-plus"></i> </button> -->
 				</div>
 			</div>
 		</div>
@@ -186,14 +186,14 @@
 						<th>Producto</th>
 						<th>Cantidad</th>
 						<th>Precio unitario</th>
-						<th>IVA</th>
+						<th class="hidden">IVA</th>
 						<th>Descuento</th>
 						<th>Importe</th>
 						<th width="15%">Acciones</th>
 					</tr>
 				</thead>
 				<tbody>
-				<%= render @pre_sales %>
+					<%= render @pre_sales %>
 				</tbody>
 			</table>
 		</div>
@@ -201,44 +201,44 @@
 		<!-- totales -->
 		<div class="row">
 			<div class="col-md-offset-8 col-md-4">
-					<div class="well">
-							<div class="row static-info align-reverse">
-									<div class="col-md-6 name"> Sub Total: </div>
-									<div class="col-md-6 value ">
-											<div class="input-group">
-													<span class="input-group-addon">$ </span>
-													 <%= f.text_field :amount, {:class=>"form-control sub_total", :readonly => true, :id => "amount"}  %>
-											</div>
-									</div>
+				<div class="well">
+					<div class="row static-info align-reverse">
+						<div class="col-md-6 name"> Sub Total: </div>
+						<div class="col-md-6 value ">
+							<div class="input-group">
+								<span class="input-group-addon">$ </span>
+								<%= f.text_field :amount, { class: "form-control sub_total", readonly: true, id: "amount" } %>
 							</div>
-							<div class="row static-info align-reverse">
-									<div class="col-md-6 name"> Descuento: </div>
-									<div class="col-md-6 value ">
-											<div class="input-group">
-													<span class="input-group-addon">$ </span>
-													 <%= f.text_field :discount, {:class=>"form-control sub_total", :readonly => true, :id => "discount"}  %>
-											</div>
-									</div>
+						</div>
+					</div>
+					<div class="row static-info align-reverse">
+						<div class="col-md-6 name"> Descuento: </div>
+						<div class="col-md-6 value ">
+							<div class="input-group">
+								<span class="input-group-addon">$ </span>
+								<%= f.text_field :discount, { class: "form-control sub_total", readonly: true, id: "discount" } %>
 							</div>
-							<div class="row static-info align-reverse">
-									<div class="col-md-6 name"> IVA: </div>
-									<div class="col-md-6 value ">
-											<div class="input-group">
-													<span class="input-group-addon">$ </span>
-													<%= f.text_field :tax, {:class=>"form-control descto", :readonly => true, :id => "tax"}  %>
-											</div>
-									</div>
+						</div>
+					</div>
+					<div class="row static-info align-reverse">
+						<div class="col-md-6 name"> IVA: </div>
+						<div class="col-md-6 value ">
+							<div class="input-group">
+								<span class="input-group-addon">$ </span>
+								<%= f.text_field :tax, { class: "form-control descto", readonly: true, id: "tax" } %>
 							</div>
-							<div class="row static-info align-reverse">
-									<div class="col-md-6 name"> Total: </div>
-									<div class="col-md-6 value ">
-											<div class="input-group">
-													<span class="input-group-addon">$ </span>
-													<%= f.text_field :total, {:class=>"form-control descto", :readonly => true, :id => "total"}  %>
-											</div>
-									</div>
+						</div>
+					</div>
+					<div class="row static-info align-reverse">
+						<div class="col-md-6 name"> Total: </div>
+						<div class="col-md-6 value ">
+							<div class="input-group">
+								<span class="input-group-addon">$ </span>
+								<%= f.text_field :total, {:class=>"form-control descto", :readonly => true, :id => "total"}  %>
 							</div>
+						</div>
 					</div>
+				</div>
 			</div>
 		</div>
 
@@ -247,7 +247,7 @@
 			<div class="row">
 				<div class="col-md-9">
 					<button type="button" class="btn green" onclick="addSale()" id="save_sale">Guardar venta</button>
-					<button type="button" class="btn default" onclick="deletePreSales()" id="save_sale">Cancelar</button>
+					<button type="button" class="btn btn-warning" onclick="deletePreSales()" id="save_sale">Cancelar</button>
 				</div>
 			</div>
 		</div>
@@ -438,7 +438,8 @@
 		var seller = $('#sale_seller_id').val();
 
 		if (openCash && customer && saleType && seller ) {
-			$('#products_new').attr('disabled', false);
+			addRow();
+			// $('#products_new').attr('disabled', false);
 		} else {
 			toastr["error"]("No ha ingresado toda la información requerida.");
 		}
@@ -487,22 +488,43 @@
 					type: "PUT",
 					url: "/pre_sales/" + preSaleId,
 					dataType: "json",
-					data: { pre_sale: { quantity: input.val() } },
+					data: {
+						pre_sale: { quantity: input.val() }
+					},
 					success: function(xhr, status, error) {
+            var tax_ = xhr.tax;
+            var discount_ = xhr.discount;
+            var total_ = xhr.total;
 
-						input.closest('tr').find('td:eq(6)').text(Math.round(xhr.tax * 100) / 100);
-
-						input.closest('tr').find('td:eq(7)').text(Math.round(xhr.discount * 100) / 100);
+            $("#tax_" + preSaleId).val(tax_);
+            $("#discount_" + preSaleId).val(discount_);
+            $("#total_" + preSaleId).val(total_);
 
-						input.closest('tr').find('td:eq(8)').text(Math.round(xhr.amount * 100) / 100);
+						input.closest('tr').find('td:eq(6) label').text("$ " + xhr.tax);
+						input.closest('tr').find('td:eq(7) label').text("$ " + xhr.discount);
+						input.closest('tr').find('td:eq(8) label').text("$ " + xhr.total);
 
 						calculateTotals();
 
 						$('#save_sale').attr('disabled', false);
 					},
 					error: function (xhr, status, errorThrown) {
-						input.val(1);
-						toastr["error"](xhr.responseText.substr(3, (xhr.responseText.length -6)));
+						var data = JSON.parse(xhr.responseText);
+						input.val(data.quantity);
+						toastr["error"](data.errors);
+						var tax_ = (Math.round(data.presale.tax * 100) / 100).toFixed(2);
+            var discount_ = (Math.round(data.presale.discount * 100) / 100).toFixed(2);
+            var total_ = (Math.round(data.presale.total * 100) / 100).toFixed(2);
+
+            $("#tax_" + preSaleId).val(tax_);
+            $("#discount_" + preSaleId).val(discount_);
+            $("#total_" + preSaleId).val(total_);
+
+            input.closest('tr').find('td:eq(6) label').text("$ " + tax_);
+            input.closest('tr').find('td:eq(7) label').text("$ " + discount_);
+            input.closest('tr').find('td:eq(8) label').text("$ " + total_);
+
+            calculateTotals();
 					}
 				});
 			}, 500);
@@ -515,27 +537,36 @@
 		var tax = 0;
 		var total = 0;
 
-		if($('#products_table').dataTable().fnGetData().length > 0) {
-			$('#products_table tbody tr').each(function() {
-				// quantity = parseFloat(($(this).find('td:nth-child(5) input').val()));
-				// price = parseFloat($(this).find('td:nth-child(6)').text());
-				// amount += (quantity * price);
-				amount += parseFloat($(this).find('td:nth-child(9)').text()); // importe
-			});
-		}
+		// if($('#products_table').dataTable().fnGetData().length > 0) {
+		// 	$('#products_table tbody tr').each(function() {
+		// 		// quantity = parseFloat(($(this).find('td:nth-child(5) input').val()));
+		// 		// price = parseFloat($(this).find('td:nth-child(6)').text());
+		// 		// amount += (quantity * price);
+		// 		amount += parseFloat($(this).find('td:nth-child(9)').text()); // importe
+		// 	});
+		// }
+
+		$('#products_table').dataTable().fnGetNodes().forEach(function(row) {
+      quantity = parseFloat(($(row).find('td:nth-child(5) input').val()));
+      price = parseFloat($(row).find('td:nth-child(6) input').val());
+      amount += (quantity * price);
+      tax += parseFloat($(row).find('td:nth-child(7) input').val());
+      discount += parseFloat($(row).find('td:nth-child(8) input').val());
+    });
 
-		$('#products_table tbody tr td:nth-child(7)').each(function() {
-			tax += parseFloat($(this).text());
-		});
-		$('#products_table tbody tr td:nth-child(8)').each(function() {
-			discount += parseFloat($(this).text());
-		});
+		// $('#products_table tbody tr td:nth-child(7)').each(function() {
+		// 	tax += parseFloat($(this).text());
+		// });
+		// $('#products_table tbody tr td:nth-child(8)').each(function() {
+		// 	discount += parseFloat($(this).text());
+		// });
 
 		total = amount + tax;
-		$('#tax').val(Math.round(tax * 100) / 100);
-		$('#discount').val(Math.round(discount * 100) / 100);
-		$('#amount').val(Math.round(amount * 100) / 100);
-		$('#total').val(Math.round(total * 100) / 100);
+		total -= discount;
+		$('#tax').val((Math.round(tax * 100) / 100).toFixed(2));
+    $('#discount').val((Math.round(discount * 100) / 100).toFixed(2));
+    $('#amount').val((Math.round(amount * 100) / 100).toFixed(2));
+    $('#total').val((Math.round(total * 100) / 100).toFixed(2));
 		if(total < parseFloat($("#available_credit").val())) {
 			$('#types_credit').attr('disabled', false);
 			$('#types_credit').closest('label').removeClass('disabled');

+ 6 - 2
app/views/sales/create_haggle.js.erb

@@ -2,8 +2,12 @@ $('#products_table tbody tr').each(function() {
  	trTxt = $(this).attr('id');
  	id = parseInt(trTxt.substring(trTxt.lastIndexOf('_') + 1, trTxt.length));
  	if (id == <%= @pre_sale.id %>) {
- 		$(this).find('td:eq(7)').text('<%= @pre_sale.discount %>');
- 		$(this).find('td:eq(8)').text('<%= @pre_sale.total %>');
+ 		$(this).find('td:eq(7) label').text('<%= number_to_currency(@pre_sale.discount, precision: 2) %>');
+    $(this).find('td:eq(7) input').val('<%= @pre_sale.discount.round(2) %>');
+    $(this).find('td:eq(6) label').text('<%= number_to_currency(@pre_sale.tax, precision: 2) %>');
+    $(this).find('td:eq(6) input').val('<%= @pre_sale.tax.round(2) %>');
+ 		$(this).find('td:eq(8) label').text('<%= number_to_currency(@pre_sale.total, precision: 2) %>');
+    $(this).find('td:eq(8) input').val('<%= @pre_sale.total.round(2) %>');
  		$(this).find(".hagglebutton").addClass("disabled").click(function(e){ e.preventDefault();});
  	}
 });