|
|
@@ -1,5 +1,6 @@
|
|
|
class CashRegistersMovesController < ApplicationController
|
|
|
before_action :set_cash_registers_move, only: [:show, :edit, :update, :destroy]
|
|
|
+ before_action :set_payment_methods, only: [:new, :register_payment]
|
|
|
|
|
|
# GET /cash_registers_moves/new
|
|
|
def new
|
|
|
@@ -7,7 +8,7 @@ class CashRegistersMovesController < ApplicationController
|
|
|
|
|
|
if params[:sale].present?
|
|
|
@sale = Sale.find(params[:sale])
|
|
|
- @credito = Credit.where(customer_id: @sale.customer_id, status: "0").sum(:rest)
|
|
|
+ @credito = Credit.activos.where(customer_id: @sale.customer_id).sum(:rest)
|
|
|
@cash_registers_move.open_cash_register_id = @sale.open_cash_register_id
|
|
|
elsif params[:products_return].present?
|
|
|
@products_return = ProductsReturn.find(params[:products_return])
|
|
|
@@ -49,26 +50,28 @@ class CashRegistersMovesController < ApplicationController
|
|
|
@products_return = ProductsReturn.find(params[:cash_registers_move][:products_return_id]) if params[:cash_registers_move][:products_return_id].present?
|
|
|
|
|
|
respond_to do |format|
|
|
|
- if @sale.present?
|
|
|
+ if !@cash_registers_move.valid?
|
|
|
+ format.js
|
|
|
+ format.json { render json: @cash_registers_move.errors, status: :unprocessable_entity }
|
|
|
+ elsif @sale.present?
|
|
|
# calcular cambio cuando aplica.
|
|
|
@cash_registers_move.calculate_quantities
|
|
|
-
|
|
|
+ @cash_registers_move.concept = :sale
|
|
|
@cash_registers_move.move_type = :ingreso
|
|
|
|
|
|
+ if credit.present?
|
|
|
+ save_when_is_credit(@cash_registers_move, @sale)
|
|
|
+ @cash_registers_move.open_cash_register_id = session[:open_cash_register_id]
|
|
|
+ end
|
|
|
+
|
|
|
if @sale.cash?
|
|
|
@sale.update_attributes(status: :paid)
|
|
|
- @cash_registers_move.concept = :sale
|
|
|
elsif @sale.reserved?
|
|
|
@cash_registers_move.status = :inactive
|
|
|
@cash_registers_move.choose_concept_when_reserved
|
|
|
@cash_registers_move.open_cash_register_id = session[:open_cash_register_id]
|
|
|
end
|
|
|
|
|
|
- if credit.present?
|
|
|
- save_when_is_credit(credit)
|
|
|
- @cash_registers_move.open_cash_register_id = session[:open_cash_register_id]
|
|
|
- end
|
|
|
-
|
|
|
message = "movimiento de efectivo por venta con folio #{@cash_registers_move.sale.sale_code}"
|
|
|
@cash_registers_move.audit_comment = message
|
|
|
if @cash_registers_move.save
|
|
|
@@ -88,7 +91,7 @@ class CashRegistersMovesController < ApplicationController
|
|
|
if @cash_registers_move.save
|
|
|
format.html { redirect_to purchases_path, success: 'Movimiento de efectivo realizado correctamente.' }
|
|
|
else
|
|
|
- format.html { render :new }
|
|
|
+ format.js
|
|
|
format.json { render json: @cash_registers_move.errors, status: :unprocessable_entity }
|
|
|
end
|
|
|
elsif @products_return.present?
|
|
|
@@ -226,6 +229,14 @@ class CashRegistersMovesController < ApplicationController
|
|
|
redirect_to new_cash_registers_move_path(sale: @sale, customer: @customer)
|
|
|
end
|
|
|
|
|
|
+ def set_payment_methods
|
|
|
+ @is_cash = PaymentMethod.find_by(isCash: 1).id
|
|
|
+ @is_credit_card = PaymentMethod.find_by(method: "Tarjeta de credito").id
|
|
|
+ @is_debit_card = PaymentMethod.find_by(method: "Tarjeta de debito").id
|
|
|
+ @is_transfer = PaymentMethod.find_by(method: "Transferencia bancaria").id
|
|
|
+ @is_check = PaymentMethod.find_by(method: "Cheque").id
|
|
|
+ end
|
|
|
+
|
|
|
private
|
|
|
|
|
|
# Use callbacks to share common setup or constraints between actions.
|
|
|
@@ -235,68 +246,71 @@ class CashRegistersMovesController < ApplicationController
|
|
|
|
|
|
# Never trust parameters from the scary internet, only allow the white list through.
|
|
|
def cash_registers_move_params
|
|
|
- params.require(:cash_registers_move).permit(:payment_method_id, :quantity, :open_cash_register_id, :sale_id, :cardnumber, :ticket, :received, :change, :products_return_id)
|
|
|
+ params.require(:cash_registers_move).permit(:payment_method_id, :quantity, :open_cash_register_id, :sale_id, :cardnumber, :ticket, :received, :change, :products_return_id, :bank_name, :check_number, :customer_account, :customer_code)
|
|
|
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)
|
|
|
+ def save_when_is_credit(cash_registers_move, sale)
|
|
|
+ if sale.paid?
|
|
|
+ sale = Sale.credit_pending(sale.customer_id).first
|
|
|
+ end
|
|
|
+ credit = Credit.find_by(sale_id: sale.id)
|
|
|
+ abono = cash_registers_move.received
|
|
|
+ total_debt = Credit.activos.where(customer_id: sale.customer_id)
|
|
|
+ @debt = total_debt.sum(:rest)
|
|
|
+ cash_registers_move.concept = :credit_payment
|
|
|
+ cash_registers_move.quantity = abono
|
|
|
+ cash_registers_move.change = 0
|
|
|
+ cash_registers_move.save
|
|
|
+
|
|
|
+ if abono >= total_debt.sum(:rest) # => liquidacion de la deuda total
|
|
|
+ nuevo_saldo = abono - total_debt.sum(:rest)
|
|
|
+ total_debt.each do |c|
|
|
|
+ sale = Sale.find_by_id(c.sale_id)
|
|
|
+ CreditPayment.create(credit_id: c.id, customer_id: sale.customer_id, pointsale_id: current_user.pointsale_id, status: "active", date_payment: Date.today, user_id: current_user.id, quantity: c.rest, cash_registers_move_id: cash_registers_move.id)
|
|
|
+ sale.update_attribute(:status, 2)
|
|
|
+ end
|
|
|
+ total_debt.update_all(rest: 0, status: 3)
|
|
|
+ cash_registers_move.update_attributes(change: nuevo_saldo, quantity: abono - nuevo_saldo) if cash_registers_move.payment_method.isCash?
|
|
|
+
|
|
|
+ elsif abono > credit.rest
|
|
|
+ CreditPayment.create(credit_id: credit.id, customer_id: sale.customer_id, pointsale_id: current_user.pointsale_id, status: "active", date_payment: Date.today, user_id: current_user.id, quantity: credit.rest, cash_registers_move_id: cash_registers_move.id)
|
|
|
+ abono -= credit.rest
|
|
|
+ credit.update_attributes(rest: 0, status: 3)
|
|
|
+ sale.update_attribute(:status, 2)
|
|
|
+ if abono > 0
|
|
|
+ new_debt(abono, cash_registers_move, sale)
|
|
|
+ elsif cash_registers_move.payment_method.isCash?
|
|
|
+ cash_registers_move.update_attributes(change: abono, quantity: cash_registers_move.quantity - abono)
|
|
|
+ end
|
|
|
+ else
|
|
|
+ CreditPayment.create(credit_id: credit.id, customer_id: sale.customer_id, pointsale_id: current_user.pointsale_id, status: "active", date_payment: Date.today, user_id: current_user.id, quantity: abono, cash_registers_move_id: cash_registers_move.id)
|
|
|
+ nuevo_saldo = credit.rest - abono
|
|
|
+ credit.update_attribute(:rest, nuevo_saldo)
|
|
|
+ sale.update_attribute(:status, 3)
|
|
|
+ end
|
|
|
+ end
|
|
|
|
|
|
- # 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
|
|
|
+ def new_debt(abono, cash_registers_move, sale)
|
|
|
+ until abono.zero?
|
|
|
+ next_sale = Sale.credit_pending(sale.customer_id).first
|
|
|
+ if next_sale.present?
|
|
|
+ credit = Credit.find_by(sale_id: next_sale.id)
|
|
|
+ if abono < credit.rest
|
|
|
+ cp = CreditPayment.create(credit_id: credit.id, customer_id: next_sale.customer_id, status: 0, date_payment: Date.today, user_id: current_user.id, quantity: abono, cash_registers_move_id: cash_registers_move.id)
|
|
|
+ nuevo_saldo = credit.rest - abono
|
|
|
+ abono = 0
|
|
|
+ credit.update_attribute(:rest, nuevo_saldo)
|
|
|
+ next_sale.update_attribute(:status, 3)
|
|
|
+ else
|
|
|
+ cp = CreditPayment.create(credit_id: credit.id, customer_id: next_sale.customer_id, status: 0, date_payment: Date.today, user_id: current_user.id, quantity: credit.rest, cash_registers_move_id: cash_registers_move.id)
|
|
|
+ abono -= credit.rest
|
|
|
+ credit.update_attributes(rest: 0, status: 3)
|
|
|
+ next_sale.update_attribute(:status, 2)
|
|
|
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)
|
|
|
+ cash_registers_move.update_attribute(:change, abono)
|
|
|
+ abono = 0
|
|
|
end
|
|
|
end
|
|
|
- end
|
|
|
+ end # new debt
|
|
|
end
|