Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.95 KB | None | 0 0
  1. module V1::Admin
  2.   class CustomersController < ApplicationController
  3.     include Rails::Pagination
  4.     def index
  5.       customers = check_params_blank ? current_shop_customers : filtered_customers
  6.       customers = search_for_customers(customers) if params[:search_value].present?
  7.       paginate json: customers, per_page: 25
  8.         end
  9.  
  10.     private
  11.    
  12.     def is_number? (string)
  13.       true if Float(string) rescue false
  14.     end
  15.  
  16.     def check_params_blank
  17.       params[:key].blank? && params[:value].blank?
  18.     end
  19.    
  20.     def current_shop_customers
  21.       current_user.customers.order("id ASC")
  22.     end
  23.  
  24.     def filtered_customers
  25.       keys = params[:key].split('_')
  26.       value = params[:value].split('_')
  27.       keys.each_with_index do |key, index|
  28.         if key == "paymentStatusFilter"
  29.           return payment_status_filter(value[index])
  30.         elsif key == 'orderCountFilter'
  31.           return order_count_filter(value[index])
  32.         end
  33.       end
  34.     end
  35.  
  36.     def order_count_filter(value)
  37.       current_shop_customers.joins(:orders).group('customers.id').having('count(orders.id)>?', ConvertFullWidth.call(value).to_i)
  38.     end
  39.  
  40.     def payment_status_filter(status)
  41.       status == 'Failed' ? current_shop_customers.joins(:customer_subscriptions).where('customer_subscriptions.payment_fail_mail_sent = true or customer_subscriptions.decline_mail_sent = true').group('customers.id') :
  42.                            current_shop_customers.joins(:customer_subscriptions).where('(customer_subscriptions.payment_fail_mail_sent = false or customer_subscriptions.payment_fail_mail_sent is null) and (customer_subscriptions.decline_mail_sent = false or
  43.                                                                                         customer_subscriptions.decline_mail_sent is null) and customer_subscriptions.status != ?', 'cancelled').group('customers.id')
  44.     end
  45.  
  46.     def search_for_customers(customers)
  47.       is_number?(ConvertFullWidth.call(params[:search_value])) ?
  48.                 customers.joins(:orders).joins(:customer_subscriptions).where('customer_subscriptions.id = :query or customers.shopify_customer_id = :query or orders.shopify_order_id = :query or orders.id = :query',
  49.                                                                                query: "#{ConvertFullWidth.call(params[:search_value]).to_i}").group('customers.id')  :
  50.                 customers.joins(:customer_subscriptions).joins(:orders).where("lower(customer_subscriptions.checkout_data -> 'shipping_address' ->> 'last_name') LIKE :query or lower(customer_subscriptions.checkout_data -> 'shipping_address' ->> 'first_name') LIKE :query or
  51.                                                                               lower(customer_subscriptions.checkout_data ->> 'email') LIKE :query", query: "%#{params[:search_value].downcase}%").group('customers.id')
  52.                                                                              
  53.     end
  54.     end
  55. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement