commissions_controller.rb 4.8 KB

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