expenses_controller.rb 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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", "SS"
  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: session[: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; end
  27. # GET /expenses/new
  28. def new
  29. @expense = Expense.new
  30. @concept_purchase_payment = Expensesconcept.find_by(expense_from_purchase: 1)
  31. if current_user.usertype == 'C'
  32. @is_cashier = true
  33. @expense.open_cash_register_id = session[:open_cash_register_id]
  34. end
  35. end
  36. # GET /expenses/1/edit
  37. def edit; end
  38. # POST /expenses
  39. # POST /expenses.json
  40. # rubocop:disable Metrics/BlockLength
  41. def create
  42. respond_to do |format|
  43. @expense = Expense.new(expense_params)
  44. @concept_purchase_payment = Expensesconcept.find_by(expense_from_purchase: 1)
  45. @expense.status = :active
  46. if current_user.usertype == "A" || current_user.usertype == "SS"
  47. @expense.skip_open_cash_validation = true
  48. @expense.skip_open_cash_has_money = true
  49. else
  50. @expense.expense_date = Date.current
  51. end
  52. @expense.audit_comment = "Egreso por #{@expense.quantity} registrado"
  53. if @expense.save
  54. # gasto pago a venta
  55. if @concept_purchase_payment.id == @expense.expensesconcept_id
  56. if params[:purchases].present?
  57. purchase = Purchase.find(params[:purchases])
  58. purchase.update_attributes(status: "paid")
  59. end
  60. end
  61. # movimiento de efectivo
  62. if current_user.usertype != "A" || current_user.usertype != "SS"
  63. move = CashRegistersMove.new
  64. move.skip_received_validation = true
  65. move.expense_id = @expense.id
  66. move.open_cash_register_id = @expense.open_cash_register_id
  67. move.quantity = @expense.quantity
  68. move.move_type = :egreso
  69. move.concept = :expense
  70. move.payment_method_id = PaymentMethod.find_by(isCash: 1).id
  71. # si es pago a compra ponle el ID
  72. if purchase.present?
  73. move.purchase_id = purchase.id
  74. end
  75. move.save
  76. end
  77. format.html { redirect_to expenses_path, notice: 'El egreso fue creado correctamente.' }
  78. format.json { render :show, status: :created, location: @expense }
  79. else
  80. format.html { render :new }
  81. format.json { render json: @expense.errors, status: :unprocessable_entity }
  82. end
  83. end
  84. end
  85. # rubocop:enable Metrics/BlockLength
  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" || current_user.usertype == "SS"
  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).destroy_all
  109. format.html { redirect_to expenses_url, warning: 'El Gasto fue cancelado correctamente.' }
  110. else
  111. format.html { redirect_to expenses_url, warning: 'Error, intentar nuevamente.' }
  112. end
  113. format.json { head :no_content }
  114. end
  115. end
  116. private
  117. def set_data
  118. @is_cashier = false
  119. if current_user.usertype != "A" && current_user.usertype != "SS"
  120. @expenses_concepts = Array.new
  121. Expensesconcept.where("status = 1 and allpoints = 'true'").each do |expense|
  122. @expenses_concepts << expense
  123. end
  124. Pointsale.find(current_user.pointsale_id).expensesconcepts.activos.each do |expense|
  125. @expenses_concepts << expense
  126. end
  127. @expenses_concepts.uniq!
  128. else
  129. @expenses_concepts = Expensesconcept.activos
  130. end
  131. end
  132. # Use callbacks to share common setup or constraints between actions.
  133. def set_expense
  134. @expense = Expense.find(params[:id])
  135. end
  136. # Never trust parameters from the scary internet, only allow the white list through.
  137. def expense_params
  138. params.require(:expense).permit(:expensesconcept_id, :open_cash_register_id, :cash_registers_move_id, :quantity, :status, :purchases, :observations, :expense_date, :expense_code)
  139. end
  140. end