pre_transfers_controller.rb 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. class PreTransfersController < ApplicationController
  2. before_action :set_pre_transfer, only: [:show, :edit, :update, :destroy]
  3. # GET /pre_transfers/new
  4. def new
  5. @pre_transfer = PreTransfer.new
  6. end
  7. # POST /pre_transfers
  8. # POST /pre_transfers.json
  9. def create
  10. @pre_transfer = PreTransfer.new(pre_transfer_params)
  11. @pre_transfer.user_id = current_user.id
  12. @pre_transfer.origin_is_pointsale = params[:pre_transfer][:origin_id].first == 'P' ? 1 : 0
  13. @pre_transfer.destiny_is_pointsale = params[:pre_transfer][:destiny_id].first == 'P' ? 1 : 0
  14. @pre_transfer.origin_id = params[:pre_transfer][:origin_id][2, params[:pre_transfer][:origin_id].length]
  15. @pre_transfer.destiny_id = params[:pre_transfer][:destiny_id][2, params[:pre_transfer][:destiny_id].length]
  16. respond_to do |format|
  17. if @pre_transfer.save
  18. if @pre_transfer.origin_is_pointsale == 1
  19. stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
  20. :product_id => @pre_transfer.product_id)
  21. else
  22. stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
  23. :product_id => @pre_transfer.product_id)
  24. end
  25. stock.stock = stock.stock -= @pre_transfer.quantity
  26. stock.save
  27. format.js
  28. else
  29. format.json { render json: @pre_transfer.errors.values, status: :unprocessable_entity }
  30. end
  31. end
  32. end
  33. # PATCH/PUT /pre_transfers/1
  34. # PATCH/PUT /pre_transfers/1.json
  35. def update
  36. respond_to do |format|
  37. if @pre_transfer.origin_is_pointsale == 1
  38. stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
  39. :product_id => @pre_transfer.product_id)
  40. else
  41. stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
  42. :product_id => @pre_transfer.product_id)
  43. end
  44. #regresarle al stock la cantidad a traspasar que estaba anteriormente
  45. stock.stock += @pre_transfer.quantity
  46. new_quantity = params[:pre_transfer][:quantity].to_i
  47. stock.stock = stock.stock -= new_quantity
  48. if stock.stock >= 0
  49. if @pre_transfer.update(pre_transfer_params)
  50. stock.save
  51. format.json { head :ok }
  52. else
  53. format.json { render json: @pre_transfer.errors, status: :unprocessable_entity }
  54. end
  55. else
  56. @pre_transfer.errors.add(:product, "El stock actual del producto es insuficiente.")
  57. format.json { render json: @pre_transfer.errors, status: :unprocessable_entity }
  58. end
  59. end
  60. end
  61. # DELETE /pre_transfers/1
  62. # DELETE /pre_transfers/1.json
  63. def destroy
  64. respond_to do |format|
  65. if @pre_transfer.origin_is_pointsale == 1
  66. stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
  67. :product_id => @pre_transfer.product_id)
  68. else
  69. stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
  70. :product_id => @pre_transfer.product_id)
  71. end
  72. if @pre_transfer.destroy
  73. stock.stock += @pre_transfer.quantity
  74. stock.save
  75. format.json { head :ok }
  76. end
  77. end
  78. end
  79. def add_pre_transfer_by_barcode
  80. respond_to do |format|
  81. @pre_transfer = PreTransfer.new
  82. @pre_transfer.user_id = current_user.id
  83. #dependiendo del prefijo que traiga W o P determinar de que tipo es el origen.
  84. @pre_transfer.origin_is_pointsale = params[:origin_id].first == 'P' ? 1 : 0
  85. @pre_transfer.destiny_is_pointsale = params[:destiny_id].first == 'P' ? 1 : 0
  86. @pre_transfer.origin_id = params[:origin_id][2, params[:origin_id].length]
  87. @pre_transfer.destiny_id = params[:destiny_id][2, params[:destiny_id].length]
  88. if @pre_transfer.origin_is_pointsale == 1
  89. origin = Pointsale.find(@pre_transfer.origin_id)
  90. product = origin.products.find_by("barcode = ? and stock > 0", params[:barcode])
  91. else
  92. origin = Warehouse.find(@pre_transfer.origin_id)
  93. product = origin.products.find_by("barcode = ? and stock > 0", params[:barcode])
  94. end
  95. if product.blank?
  96. @error = "No existe producto escaneado o no tiene stock"
  97. else
  98. @pre_transfer.product_id = product.id
  99. @pre_transfer.quantity = 1
  100. if @pre_transfer.save
  101. if @pre_transfer.origin_is_pointsale == 1
  102. stock = AvailableProduct.find_by(:pointsale_id => @pre_transfer.origin_id,
  103. :product_id => product.id)
  104. else
  105. stock = WarehouseStock.find_by(:warehouse_id => @pre_transfer.origin_id,
  106. :product_id => product.id)
  107. end
  108. stock.stock = stock.stock -= @pre_transfer.quantity
  109. stock.save
  110. end
  111. end
  112. format.js { render :action => "create" }
  113. end
  114. end
  115. private
  116. # Use callbacks to share common setup or constraints between actions.
  117. def set_pre_transfer
  118. @pre_transfer = PreTransfer.find(params[:id])
  119. end
  120. # Never trust parameters from the scary internet, only allow the white list through.
  121. def pre_transfer_params
  122. params.require(:pre_transfer).permit(:origin_id, :destiny_id, :user_id, :product_id, :quantity)
  123. end
  124. end