Selaa lähdekoodia

fix in credits

chemi ledon 7 vuotta sitten
vanhempi
commit
1cf08ca69c

+ 108 - 54
app/controllers/cash_registers_moves_controller.rb

@@ -240,63 +240,117 @@ class CashRegistersMovesController < ApplicationController
 
   def save_when_is_credit(credit)
     abono = @cash_registers_move.quantity
-    abono_this_credit = abono >= credit.rest ? credit.rest : abono
-
-    # por si abonan dinero de mas, checar cuanto debe de ser de esta venta, y separarlo.
-    # @cash_registers_move.quantity = abono_this_credit
-    @credit_payment = CreditPayment.new
-    @credit_payment.credit_id = credit.id
-    @credit_payment.customer_id = credit.customer_id
-    @credit_payment.pointsale_id = credit.pointsale_id
-    @credit_payment.status = :active
-    @credit_payment.date_payment = Date.today
-    @credit_payment.user_id = current_user.id
-    # @credit_payment.quantity = abono_this_credit
-    @credit_payment.quantity = abono_this_credit
-
-    if @credit_payment.save
-      @cash_registers_move.credit_payment_id = @credit_payment.id
-      @cash_registers_move.concept = :credit_payment
-
-      if abono >= credit.rest # si se paga mas del adeudo de este credito
-        abono -= credit.rest
-
-        credit.update_attributes(rest: 0)
-        @sale.update_attributes(status: :paid)
-
-        # rubocop:disable Style/WhileUntilDo
-        while abono > 0 do
-          nextcredit = Credit.where("customer_id = #{credit.customer_id} and rest > 0").order("sale_id ASC")
-          # rubocop:disable Metrics/BlockNesting
-          if nextcredit.first.present?
-            if abono <= nextcredit.first.rest
-              next_credit_payment = CreditPayment.create(customer_id: credit.customer_id, credit_id: nextcredit.first.id, pointsale_id: credit.pointsale_id, quantity: abono, status: 0, date_payment: Date.today, user_id: current_user.id)
-              # next_credit_abono = @cash_registers_move.dup
-              # next_credit_abono.quantity = abono
-              # next_credit_abono.credit_payment_id = next_credit_payment.id
-              # next_credit_abono.save
-              nextcredit.first.update_attributes(rest: nextcredit.first.rest - abono)
-              sale = Sale.find_by_id(nextcredit.first.sale_id)
-              sale.update_attributes(status: :parcial)
-              abono -= nextcredit.first.rest
-            else
-              abono -= nextcredit.first.rest
-              nextcredit.first.update_attributes(rest: 0)
-              sale = Sale.find_by_id(nextcredit.sale_id)
-              sale.update_attributes(status: :paid)
-            end
-          else
-            abono = 0 # si ya no hay deuda
-          end
-          # rubocop:enable Metrics/BlockNesting
+    recibido =  @cash_registers_move.received
+    change = recibido - abono
+    while abono > 0 do
+      credits_with_debt = Credit.where("customer_id = #{credit.customer_id} and rest > 0 and status = 0").order("sale_id ASC")
+      if credits_with_debt.first.present?
+        cash_registers_move_new = CashRegistersMove.new(cash_registers_move_params)
+        next_credit = credits_with_debt.first
+        @credit_payment = CreditPayment.new
+        @credit_payment.credit_id = next_credit.id
+        @credit_payment.customer_id = next_credit.customer_id
+        @credit_payment.pointsale_id = next_credit.pointsale_id
+        @credit_payment.status = :active
+        @credit_payment.date_payment = Date.today
+        @credit_payment.user_id = current_user.id
+        if abono < next_credit.rest #si se paga más del adeudo de este crédito
+          @credit_payment.quantity = abono
+          sale = Sale.find_by_id(next_credit.sale_id)
+          sale.update_attributes(:status => :parcial)
+          cash_registers_move_new.quantity = abono
+          cash_registers_move_new.received = abono + change
+          cash_registers_move_new.change = change
+          rest_aux = abono - next_credit.rest
+          next_credit.update_attributes(:rest => next_credit.rest - abono)
+        else
+          @credit_payment.quantity = next_credit.rest
+          sale = Sale.find_by_id(next_credit.sale_id)
+          sale.update_attributes(:status => :paid)
+          cash_registers_move_new.quantity = next_credit.rest
+          cash_registers_move_new.received = next_credit.rest
+          cash_registers_move_new.change = 0
+          rest_aux = abono - next_credit.rest
+          next_credit.update_attributes(:rest => 0)
+        end
+        if @credit_payment.save
+          cash_registers_move_new.open_cash_register_id = @sale.open_cash_register_id
+          cash_registers_move_new.credit_payment_id = @credit_payment.id
+          cash_registers_move_new.concept = :credit_payment
+          cash_registers_move_new.sale_id = next_credit.sale_id
+          cash_registers_move_new.open_cash_register_id = session[:open_cash_register_id]
+          cash_registers_move_new.move_type = :ingreso
+          cash_registers_move_new.save
         end
-        # rubocop:enable Style/WhileUntilDo
+        abono = rest_aux
       else
-        @cash_registers_move.quantity = abono
-        abono = credit.rest - abono
-        credit.update_attributes(rest: abono)
-        @sale.update_attributes(status: :parcial)
+        abono = 0 #si ya no hay deuda
       end
     end
+    true
+    rescue
+      false
   end
+
+  # def save_when_is_credit(credit)
+  #   abono = @cash_registers_move.quantity
+  #   abono_this_credit = abono >= credit.rest ? credit.rest : abono
+
+  #   # por si abonan dinero de mas, checar cuanto debe de ser de esta venta, y separarlo.
+  #   # @cash_registers_move.quantity = abono_this_credit
+  #   @credit_payment = CreditPayment.new
+  #   @credit_payment.credit_id = credit.id
+  #   @credit_payment.customer_id = credit.customer_id
+  #   @credit_payment.pointsale_id = credit.pointsale_id
+  #   @credit_payment.status = :active
+  #   @credit_payment.date_payment = Date.today
+  #   @credit_payment.user_id = current_user.id
+  #   # @credit_payment.quantity = abono_this_credit
+  #   @credit_payment.quantity = abono_this_credit
+
+  #   if @credit_payment.save
+  #     @cash_registers_move.credit_payment_id = @credit_payment.id
+  #     @cash_registers_move.concept = :credit_payment
+
+  #     if abono >= credit.rest # si se paga mas del adeudo de este credito
+  #       abono -= credit.rest
+
+  #       credit.update_attributes(rest: 0)
+  #       @sale.update_attributes(status: :paid)
+
+  #       # rubocop:disable Style/WhileUntilDo
+  #       while abono > 0 do
+  #         nextcredit = Credit.where("customer_id = #{credit.customer_id} and rest > 0").order("sale_id ASC")
+  #         # rubocop:disable Metrics/BlockNesting
+  #         if nextcredit.first.present?
+  #           if abono <= nextcredit.first.rest
+  #             next_credit_payment = CreditPayment.create(customer_id: credit.customer_id, credit_id: nextcredit.first.id, pointsale_id: credit.pointsale_id, quantity: abono, status: 0, date_payment: Date.today, user_id: current_user.id)
+  #             # next_credit_abono = @cash_registers_move.dup
+  #             # next_credit_abono.quantity = abono
+  #             # next_credit_abono.credit_payment_id = next_credit_payment.id
+  #             # next_credit_abono.save
+  #             nextcredit.first.update_attributes(rest: nextcredit.first.rest - abono)
+  #             sale = Sale.find_by_id(nextcredit.first.sale_id)
+  #             sale.update_attributes(status: :parcial)
+  #             abono -= nextcredit.first.rest
+  #           else
+  #             abono -= nextcredit.first.rest
+  #             nextcredit.first.update_attributes(rest: 0)
+  #             sale = Sale.find_by_id(nextcredit.sale_id)
+  #             sale.update_attributes(status: :paid)
+  #           end
+  #         else
+  #           abono = 0 # si ya no hay deuda
+  #         end
+  #         # rubocop:enable Metrics/BlockNesting
+  #       end
+  #       # rubocop:enable Style/WhileUntilDo
+  #     else
+  #       @cash_registers_move.quantity = abono
+  #       abono = credit.rest - abono
+  #       credit.update_attributes(rest: abono)
+  #       @sale.update_attributes(status: :parcial)
+  #     end
+  #   end
+  # end
 end

+ 28 - 25
app/views/customers/customer_sales.html.erb

@@ -181,33 +181,36 @@
 															<th width="15%">Acciones</th>
 														</tr>
 													</thead>
-													<tbody id="abonos" >
-													<% @credit.each_with_index do |credit, key| %>
-														<% abonos = CreditPayment.where(:credit_id => credit.id) %>
-															<% abonos.each_with_index do |abono, key| %>
-															<tr class=<%= (credit.cancelled? ? 'danger' : (credit.active? ? 'success' : '')) %>>
-																<td><%= credit.sale.sale_code %> </td>
-																<td><%= abono.date_payment %></td>
-																<td><%= number_to_currency(credit.total, precision: 2) %></td>
-																<td><%= number_to_currency(abono.quantity, precision: 2) %></td>
-																<td><%= number_to_currency(credit.rest, precision: 2) %></td>
-																<td>
-																	<% case abono.status %>
-																	<% when "cancelled"%>
-																		<span class="label label-danger"> CANCELADO </span>
-																	<% when "active"%>
-																		<span class="label label-success"> ACTIVO </span>
-																	<% end %>
-																</td>
-																<td class="text-center">
-																<% if !abono.cancelled? && abono.cash_registers_move.present? && abono.cash_registers_move.open_cash_register.open?%>
-																	<%= link_to cash_move_delete_payment_path(:credit_payment_id => abono.id, :credit => credit.id) , method: :delete_credit_payment, :class => "btn btn-icon-only btn-danger", :title=>"Cancelar abono", data: { confirm: '¿Está seguro que desea cancelar el abono?' } do %> <i class="fa fa-ban"></i>
-																	<% end %>
+													<tbody id="abonos">
+														<% @credit.each_with_index do |credit, key| %>
+															<% abonos = CreditPayment.where(:credit_id => credit.id).order('id') %>
+																<% total = credit.total %>
+																<% abonos.each_with_index do |abono, key| %>
+																	<% rest = total - abono.quantity %>
+																	<tr class=<%= (credit.cancelled? ? 'danger' : (credit.active? ? 'success' : '')) %>>
+																		<td><%= credit.sale.sale_code %> </td>
+																		<td><%= l(abono.date_payment, :format => '%d/%m/%Y')  %></td>
+																		<td><%= number_to_currency(total, precision: 2) %></td>
+																		<td><%= number_to_currency(abono.quantity, precision: 2) %></td>
+																		<td><%= number_to_currency(rest, precision: 2) %></td>
+																		<td>
+																			<% case abono.status %>
+																			<% when "cancelled"%>
+																				<span class="label label-danger"> CANCELADO </span>
+																			<% when "active"%>
+																				<span class="label label-success"> ACTIVO </span>
+																			<% end %>
+																		</td>
+																		<td class="text-center">
+																		<% if !abono.cancelled? && abono.cash_registers_move.present? && abono.cash_registers_move.open_cash_register.open?%>
+																			<%= link_to cash_move_delete_payment_path(:credit_payment_id => abono.id, :credit => credit.id) , method: :delete_credit_payment, :class => "btn btn-icon-only btn-danger", :title=>"Cancelar abono", data: { confirm: '¿Está seguro que desea cancelar el abono?' } do %> <i class="fa fa-ban"></i>
+																			<% end %>
+																		<% end %>
+																		</td>
+																		<% total -= abono.quantity %>
+																	</tr>
 																<% end %>
-																</td>
-															</tr>
 														<% end %>
-													<% end %>
 													</tbody>
 												</table>
 												</div>