expenses_controller.rb 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. class ExpensesController < ApplicationController
  2. ##--- Abilities
  3. load_and_authorize_resource
  4. ##--- Breadcrum_rails
  5. add_breadcrumb I18n.t("breadcrumbs." + controller_name), :expenses_path
  6. add_breadcrumb "Nuevo egreso" , :new_expense_path, only: :new
  7. add_breadcrumb "Detalle del egreso" , :expense_path, only: :show
  8. add_breadcrumb "Editar egreso" , :edit_expense_path, only: :edit
  9. before_action :set_expense, only: [:show, :edit, :update, :destroy]
  10. before_action :set_data, only: [:new, :create, :edit, :update]
  11. # GET /expenses
  12. # GET /expenses.json
  13. def index
  14. case current_user.usertype
  15. when "A"
  16. @from_pointsale = Expense.where.not('open_cash_register_id' => nil).includes(:expensesconcept).order(" id DESC ")
  17. @general_expenses = Expense.where(:open_cash_register_id => nil).includes(:expensesconcept).order(" id DESC ")
  18. when "G"
  19. @expenses = Pointsale.find(current_user.pointsale_id).expenses.includes(:expensesconcept, :open_cash_register).order(" id DESC ")
  20. when "C"
  21. @expenses = Expense.where(:open_cash_register_id => current_user.get_open_cash_register.id).includes(:expensesconcept).order(" id DESC ")
  22. end
  23. end
  24. # GET /expenses/1
  25. # GET /expenses/1.json
  26. def show
  27. end
  28. # GET /expenses/new
  29. def new
  30. @expense = Expense.new
  31. @concept_purchase_payment = Expensesconcept.find_by(:expense_from_purchase => 1)
  32. if current_user.usertype == 'C'
  33. @is_cashier = true
  34. @expense.open_cash_register_id = current_user.get_open_cash_register.id
  35. end
  36. end
  37. # GET /expenses/1/edit
  38. def edit
  39. end
  40. # POST /expenses
  41. # POST /expenses.json
  42. def create
  43. respond_to do |format|
  44. @expense = Expense.new(expense_params)
  45. @concept_purchase_payment = Expensesconcept.find_by(:expense_from_purchase => 1)
  46. @expense.status = :active
  47. if current_user.usertype == "A"
  48. @expense.skip_open_cash_validation = true
  49. @expense.skip_open_cash_has_money = true
  50. else
  51. @expense.expense_date = Date.current
  52. end
  53. @expense.audit_comment = "Egreso por #{@expense.quantity} registrado"
  54. if @expense.save
  55. # gasto pago a venta
  56. if @concept_purchase_payment.id == @expense.expensesconcept_id
  57. if params[:purchases].present?
  58. purchase = Purchase.find(params[:purchases])
  59. purchase.update_attributes(:status => "paid")
  60. end
  61. end
  62. #movimiento de efectivo
  63. if current_user.usertype != "A"
  64. move = CashRegistersMove.new
  65. move.skip_received_validation = true
  66. move.expense_id = @expense.id
  67. move.open_cash_register_id = @expense.open_cash_register_id
  68. move.quantity = @expense.quantity
  69. move.move_type = :egreso
  70. move.concept = :expense
  71. move.payment_method_id = PaymentMethod.find_by(:isCash => 1).id
  72. # si es pago a compra ponle el ID
  73. if purchase.present?
  74. move.purchase_id = purchase.id
  75. end
  76. move.save
  77. end
  78. format.html { redirect_to expenses_path, notice: 'El egreso fue creado correctamente.' }
  79. format.json { render :show, status: :created, location: @expense }
  80. else
  81. format.html { render :new }
  82. format.json { render json: @expense.errors, status: :unprocessable_entity }
  83. end
  84. end
  85. end
  86. # PATCH/PUT /expenses/1
  87. # PATCH/PUT /expenses/1.json
  88. def update
  89. respond_to do |format|
  90. if @expense.update(expense_params)
  91. format.html { redirect_to @expense, notice: 'Expense was successfully updated.' }
  92. format.json { render :show, status: :ok, location: @expense }
  93. else
  94. format.html { render :edit }
  95. format.json { render json: @expense.errors, status: :unprocessable_entity }
  96. end
  97. end
  98. end
  99. # DELETE /expenses/1
  100. # DELETE /expenses/1.json
  101. def destroy
  102. respond_to do |format|
  103. if current_user.usertype == 'A'
  104. @expense.skip_open_cash_validation = true
  105. end
  106. @expense.audit_comment = "Egreso #{@expense.expense_code} cancelado."
  107. if @expense.update_attributes(:status => 0)
  108. CashRegistersMove.where(:expense_id => @expense.id).each do |move|
  109. new_cash_move = move.dup
  110. new_cash_move.move_type = :ingreso
  111. new_cash_move.skip_received_validation = true
  112. new_cash_move.save
  113. end
  114. format.html { redirect_to expenses_url, warning: 'El Gasto fue cancelado correctamente.' }
  115. format.json { head :no_content }
  116. else
  117. format.html { redirect_to expenses_url, warning: 'Error, intentar nuevamente.' }
  118. format.json { head :no_content }
  119. end
  120. end
  121. end
  122. private
  123. def set_data
  124. @is_cashier = false
  125. if current_user.usertype != "A"
  126. @expenses_concepts = Array.new
  127. Expensesconcept.where("status = 1 and allpoints = 'true'").each do |expense|
  128. @expenses_concepts << expense
  129. end
  130. Pointsale.find(current_user.pointsale_id).expensesconcepts.activos.each do |expense|
  131. @expenses_concepts << expense
  132. end
  133. @expenses_concepts.uniq!
  134. else
  135. @expenses_concepts = Expensesconcept.activos
  136. end
  137. end
  138. # Use callbacks to share common setup or constraints between actions.
  139. def set_expense
  140. @expense = Expense.find(params[:id])
  141. end
  142. # Never trust parameters from the scary internet, only allow the white list through.
  143. def expense_params
  144. params.require(:expense).permit(:expensesconcept_id, :open_cash_register_id, :cash_registers_move_id, :quantity, :status, :purchases, :observations, :expense_date, :expense_code)
  145. end
  146. end