| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- class ExpensesController < ApplicationController
- ##--- Abilities
- load_and_authorize_resource
- ##--- Breadcrum_rails
- add_breadcrumb I18n.t("breadcrumbs." + controller_name), :expenses_path
- add_breadcrumb "Nuevo egreso", :new_expense_path, only: :new
- add_breadcrumb "Detalle del egreso", :expense_path, only: :show
- add_breadcrumb "Editar egreso", :edit_expense_path, only: :edit
- before_action :set_expense, only: [:show, :edit, :update, :destroy]
- before_action :set_data, only: [:new, :create, :edit, :update]
- # GET /expenses
- # GET /expenses.json
- def index
- case current_user.usertype
- when "A", "SS"
- @from_pointsale = Expense.where.not(open_cash_register_id: nil).includes(:expensesconcept).order(" id DESC ")
- @general_expenses = Expense.where(open_cash_register_id: nil).includes(:expensesconcept).order(" id DESC ")
- when "G"
- @expenses = Pointsale.find(current_user.pointsale_id).expenses.includes(:expensesconcept, :open_cash_register).order("id DESC ")
- when "C"
- @expenses = Expense.where(open_cash_register_id: session[:open_cash_register_id]).includes(:expensesconcept).order("id DESC ")
- end
- end
- # GET /expenses/1
- # GET /expenses/1.json
- def show; end
- # GET /expenses/new
- def new
- @expense = Expense.new
- @concept_purchase_payment = Expensesconcept.find_by(expense_from_purchase: 1)
- if current_user.usertype == 'C'
- @is_cashier = true
- @expense.open_cash_register_id = session[:open_cash_register_id]
- end
- end
- # GET /expenses/1/edit
- def edit; end
- # POST /expenses
- # POST /expenses.json
- # rubocop:disable Metrics/BlockLength
- def create
- respond_to do |format|
- @expense = Expense.new(expense_params)
- @concept_purchase_payment = Expensesconcept.find_by(expense_from_purchase: 1)
- @expense.status = :active
- if current_user.usertype == "A" || current_user.usertype == "SS"
- @expense.skip_open_cash_validation = true
- @expense.skip_open_cash_has_money = true
- else
- @expense.expense_date = Date.current
- end
- @expense.audit_comment = "Egreso por #{@expense.quantity} registrado"
- if @expense.save
- # gasto pago a venta
- if @concept_purchase_payment.id == @expense.expensesconcept_id
- if params[:purchases].present?
- purchase = Purchase.find(params[:purchases])
- purchase.update_attributes(status: "paid")
- end
- end
- # movimiento de efectivo
- if current_user.usertype != "A" || current_user.usertype != "SS"
- move = CashRegistersMove.new
- move.skip_received_validation = true
- move.expense_id = @expense.id
- move.open_cash_register_id = @expense.open_cash_register_id
- move.quantity = @expense.quantity
- move.move_type = :egreso
- move.concept = :expense
- move.payment_method_id = PaymentMethod.find_by(isCash: 1).id
- # si es pago a compra ponle el ID
- if purchase.present?
- move.purchase_id = purchase.id
- end
- move.save
- end
- format.html { redirect_to expenses_path, notice: 'El egreso fue creado correctamente.' }
- format.json { render :show, status: :created, location: @expense }
- else
- format.html { render :new }
- format.json { render json: @expense.errors, status: :unprocessable_entity }
- end
- end
- end
- # rubocop:enable Metrics/BlockLength
- # PATCH/PUT /expenses/1
- # PATCH/PUT /expenses/1.json
- def update
- respond_to do |format|
- if @expense.update(expense_params)
- format.html { redirect_to @expense, notice: 'Expense was successfully updated.' }
- format.json { render :show, status: :ok, location: @expense }
- else
- format.html { render :edit }
- format.json { render json: @expense.errors, status: :unprocessable_entity }
- end
- end
- end
- # DELETE /expenses/1
- # DELETE /expenses/1.json
- def destroy
- respond_to do |format|
- if current_user.usertype == "A" || current_user.usertype == "SS"
- @expense.skip_open_cash_validation = true
- end
- @expense.audit_comment = "Egreso #{@expense.expense_code} cancelado."
- if @expense.update_attributes(status: 0)
- CashRegistersMove.where(expense_id: @expense.id).destroy_all
- format.html { redirect_to expenses_url, warning: 'El Gasto fue cancelado correctamente.' }
- else
- format.html { redirect_to expenses_url, warning: 'Error, intentar nuevamente.' }
- end
- format.json { head :no_content }
- end
- end
- private
- def set_data
- @is_cashier = false
- if current_user.usertype != "A" && current_user.usertype != "SS"
- @expenses_concepts = Array.new
- Expensesconcept.where("status = 1 and allpoints = 'true'").each do |expense|
- @expenses_concepts << expense
- end
- Pointsale.find(current_user.pointsale_id).expensesconcepts.activos.each do |expense|
- @expenses_concepts << expense
- end
- @expenses_concepts.uniq!
- else
- @expenses_concepts = Expensesconcept.activos
- end
- end
- # Use callbacks to share common setup or constraints between actions.
- def set_expense
- @expense = Expense.find(params[:id])
- end
- # Never trust parameters from the scary internet, only allow the white list through.
- def expense_params
- params.require(:expense).permit(:expensesconcept_id, :open_cash_register_id, :cash_registers_move_id, :quantity, :status, :purchases, :observations, :expense_date, :expense_code)
- end
- end
|