| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- class PreTransfersController < ApplicationController
- before_action :set_pre_transfer, only: [:show, :edit, :update, :destroy]
- # GET /pre_transfers/new
- def new
- @pre_transfer = PreTransfer.new
- end
- # POST /pre_transfers
- # POST /pre_transfers.json
- def create
- @pre_transfer = PreTransfer.new(pre_transfer_params)
- @pre_transfer.user_id = current_user.id
- @pre_transfer.origin_is_pointsale = params[:pre_transfer][:origin_id].first == 'P' ? 1 : 0
- @pre_transfer.destiny_is_pointsale = params[:pre_transfer][:destiny_id].first == 'P' ? 1 : 0
- @pre_transfer.origin_id = params[:pre_transfer][:origin_id][2, params[:pre_transfer][:origin_id].length]
- @pre_transfer.destiny_id = params[:pre_transfer][:destiny_id][2, params[:pre_transfer][:destiny_id].length]
- respond_to do |format|
- if @pre_transfer.save
- if @pre_transfer.origin_is_pointsale == 1
- stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
- :product_id => @pre_transfer.product_id)
- else
- stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
- :product_id => @pre_transfer.product_id)
- end
- stock.stock = stock.stock -= @pre_transfer.quantity
- stock.save
- format.js
- else
- format.json { render json: @pre_transfer.errors.values, status: :unprocessable_entity }
- end
- end
- end
- # PATCH/PUT /pre_transfers/1
- # PATCH/PUT /pre_transfers/1.json
- def update
- respond_to do |format|
- if @pre_transfer.origin_is_pointsale == 1
- stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
- :product_id => @pre_transfer.product_id)
- else
- stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
- :product_id => @pre_transfer.product_id)
- end
- #regresarle al stock la cantidad a traspasar que estaba anteriormente
- stock.stock += @pre_transfer.quantity
- new_quantity = params[:pre_transfer][:quantity].to_i
- stock.stock = stock.stock -= new_quantity
- if stock.stock >= 0
- if @pre_transfer.update(pre_transfer_params)
- stock.save
- format.json { head :ok }
- else
- format.json { render json: @pre_transfer.errors, status: :unprocessable_entity }
- end
- else
- @pre_transfer.errors.add(:product, "El stock actual del producto es insuficiente.")
- format.json { render json: @pre_transfer.errors, status: :unprocessable_entity }
- end
- end
- end
- # DELETE /pre_transfers/1
- # DELETE /pre_transfers/1.json
- def destroy
- respond_to do |format|
- if @pre_transfer.origin_is_pointsale == 1
- stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
- :product_id => @pre_transfer.product_id)
- else
- stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
- :product_id => @pre_transfer.product_id)
- end
- if @pre_transfer.destroy
- stock.stock += @pre_transfer.quantity
- stock.save
- format.json { head :ok }
- end
- end
- end
- def add_pre_transfer_by_barcode
- respond_to do |format|
- @pre_transfer = PreTransfer.new
- @pre_transfer.user_id = current_user.id
- #dependiendo del prefijo que traiga W o P determinar de que tipo es el origen.
- @pre_transfer.origin_is_pointsale = params[:origin_id].first == 'P' ? 1 : 0
- @pre_transfer.destiny_is_pointsale = params[:destiny_id].first == 'P' ? 1 : 0
- @pre_transfer.origin_id = params[:origin_id][2, params[:origin_id].length]
- @pre_transfer.destiny_id = params[:destiny_id][2, params[:destiny_id].length]
- if @pre_transfer.origin_is_pointsale == 1
- origin = Pointsale.find(@pre_transfer.origin_id)
- product = origin.products.find_by("barcode = ? and stock > 0", params[:barcode])
- else
- origin = Warehouse.find(@pre_transfer.origin_id)
- product = origin.products.find_by("barcode = ? and stock > 0", params[:barcode])
- end
- if product.blank?
- @error = "No existe producto escaneado o no tiene stock"
- else
- @pre_transfer.product_id = product.id
- @pre_transfer.quantity = 1
- if @pre_transfer.save
- if @pre_transfer.origin_is_pointsale == 1
- stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
- :product_id => product.id)
- else
- stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
- :product_id => product.id)
- end
- stock.stock = stock.stock -= @pre_transfer.quantity
- stock.save
- end
- end
- format.js { render :action => "create" }
- end
- end
- private
- # Use callbacks to share common setup or constraints between actions.
- def set_pre_transfer
- @pre_transfer = PreTransfer.find(params[:id])
- end
- # Never trust parameters from the scary internet, only allow the white list through.
- def pre_transfer_params
- params.require(:pre_transfer).permit(:origin_id, :destiny_id, :user_id, :product_id, :quantity)
- end
- end
|