commissions_controller.rb 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. class CommissionsController < ApplicationController
  2. ##--- Abilities
  3. load_and_authorize_resource
  4. ##--- Breadcrum_rails
  5. add_breadcrumb I18n.t("breadcrumbs." + controller_name), :commissions_path, only: :show
  6. before_action :set_commission, only: [:show, :edit, :update, :destroy]
  7. before_action :get_filters, only: [:index, :show, :edit, :new]
  8. # GET /commissions
  9. # GET /commissions.json
  10. def index
  11. @commissions = current_user.usertype == "A" || current_user.usertype == "SS" ? Commission.all.includes(:pointsale, :user).order('created_at desc') : Commission.includes(:pointsale, :user).where(pointsale_id: current_user.pointsale_id).order('created_at desc')
  12. end
  13. # GET /commissions/1
  14. # GET /commissions/1.json
  15. def show
  16. sellers_commissions_ids = SalesSellercommission.where('sellerscommission_id in (?)', @commission.sellerscommissions.pluck(:id)).pluck(:sale_id)
  17. @sales = Sale.where('sales.id in (?)', sellers_commissions_ids).joins(:seller).order('sellers.name')
  18. end
  19. # GET /commissions/new
  20. def new
  21. @sellers = Seller.where('id IN (?)', params[:sellers_ids])
  22. @initial_date = params[:initial_date]
  23. @final_date = params[:final_date]
  24. commission_total = 0
  25. @sellers.each do |seller|
  26. total = seller.get_sales_by_period(@initial_date, @final_date, 'commission').sum(:total)
  27. commission_total += total
  28. end
  29. @commission = Commission.new
  30. @commission.sellerscommissions.new
  31. @commission.commission_total = commission_total
  32. @commission.pointsale_id = params[:pointsale_id]
  33. @commission.initial_date = @initial_date
  34. @commission.final_date = @final_date
  35. end
  36. # GET /commissions/1/edit
  37. def edit; end
  38. # POST /commissions
  39. # POST /commissions.json
  40. def create
  41. @commission = Commission.new(commission_params)
  42. @commission.user_id = current_user.id
  43. respond_to do |format|
  44. @commission.audit_comment = "Comisiones del #{@commission.initial_date} al #{@commission.final_date} generadas"
  45. if @commission.save
  46. @commission.sellerscommissions.each do |seller_commission|
  47. sales_by_period = seller_commission.seller.get_sales_by_period(@commission.initial_date, @commission.final_date, 'commission').pluck(:id)
  48. sales_by_period.each do |sale|
  49. sales_sellercom = SalesSellercommission.new
  50. sales_sellercom.sellerscommission_id = seller_commission.id
  51. sales_sellercom.sale_id = sale
  52. sales_sellercom.save
  53. end
  54. end
  55. format.html { redirect_to commissions_path, notice: 'Pago de comisión registrado con éxito.' }
  56. format.json { render :show, status: :created, location: @commission }
  57. else
  58. format.html { render :new }
  59. format.json { render json: @commission.errors, status: :unprocessable_entity }
  60. end
  61. end
  62. end
  63. # PATCH/PUT /commissions/1
  64. # PATCH/PUT /commissions/1.json
  65. def update
  66. respond_to do |format|
  67. if @commission.update(commission_params)
  68. format.html { redirect_to @commission, notice: 'Commission was successfully updated.' }
  69. format.json { render :show, status: :ok, location: @commission }
  70. else
  71. format.html { render :edit }
  72. format.json { render json: @commission.errors, status: :unprocessable_entity }
  73. end
  74. end
  75. end
  76. # DELETE /commissions/1
  77. # DELETE /commissions/1.json
  78. def destroy
  79. @commission.destroy
  80. respond_to do |format|
  81. format.html { redirect_to commissions_url, notice: 'Commission was successfully destroyed.' }
  82. format.json { head :no_content }
  83. end
  84. end
  85. def sellers_for_commissions; end
  86. def generate_commissions; end
  87. def find_sellers_by_date
  88. initial_date = DateTime.parse(params[:initial_date])
  89. final_date = DateTime.parse(params[:final_date])
  90. exists_any = Commission.where("pointsale_id = ? AND ((initial_date BETWEEN ? AND ?) OR (final_date BETWEEN ? AND ?))", params[:pointsale_id], initial_date, final_date, initial_date, final_date).any?
  91. if exists_any
  92. render json: Array.new, status: :unprocessable_entity
  93. else
  94. ids_w_moves_in_period = Pointsale.find(params[:pointsale_id]).cash_registers_moves.where(move_type: '1', created_at: initial_date..final_date).pluck(:sale_id)
  95. news_sales_in_period = Pointsale.find(params[:pointsale_id]).sales.activas.where(date_sale: initial_date..final_date).pluck(:id)
  96. all_ids = (ids_w_moves_in_period + news_sales_in_period).uniq
  97. if all_ids.present?
  98. commissions_paid = SalesSellercommission.includes(:sale).where('sale_id IN (?) and sales.saletype = ?', all_ids, 1).pluck(:sale_id)
  99. to_pay = all_ids - commissions_paid
  100. sellers = Sale.where('sales.id IN (?)', to_pay).joins(:seller).distinct(:seller_id).select(:seller_id, :name)
  101. else
  102. sellers = Array.new
  103. end
  104. render json: sellers
  105. end
  106. end
  107. private
  108. # Use callbacks to share common setup or constraints between actions.
  109. def set_commission
  110. @commission = Commission.find(params[:id])
  111. end
  112. def get_filters
  113. @current_page = params[:current_page].blank? ? 1 : params[:current_page]
  114. @filter = params[:filter]
  115. end
  116. # Never trust parameters from the scary internet, only allow the white list through.
  117. def commission_params
  118. params.require(:commission).permit(:initial_date, :final_date, :commission_total, :pointsale_id, :user_id, sellerscommissions_attributes: [:total_sold_cash, :total_sold_credits_apartments, :income_by_cash, :income_by_reserved_and_credits, :seller_id, :num_sales, :sales_total, :commission_calculated, :commission_paid, :commission_percent])
  119. end
  120. end