Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module V1::Admin
- class CustomersController < ApplicationController
- include Rails::Pagination
- def index
- customers = check_params_blank ? current_shop_customers : filtered_customers
- customers = search_for_customers(customers) if params[:search_value].present?
- paginate json: customers, per_page: 25
- end
- private
- def is_number? (string)
- true if Float(string) rescue false
- end
- def check_params_blank
- params[:key].blank? && params[:value].blank?
- end
- def current_shop_customers
- current_user.customers.order("id ASC")
- end
- def filtered_customers
- keys = params[:key].split('_')
- value = params[:value].split('_')
- keys.each_with_index do |key, index|
- if key == "paymentStatusFilter"
- return payment_status_filter(value[index])
- elsif key == 'orderCountFilter'
- return order_count_filter(value[index])
- end
- end
- end
- def order_count_filter(value)
- current_shop_customers.joins(:orders).group('customers.id').having('count(orders.id)>?', ConvertFullWidth.call(value).to_i)
- end
- def payment_status_filter(status)
- 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') :
- 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
- customer_subscriptions.decline_mail_sent is null) and customer_subscriptions.status != ?', 'cancelled').group('customers.id')
- end
- def search_for_customers(customers)
- is_number?(ConvertFullWidth.call(params[:search_value])) ?
- 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',
- query: "#{ConvertFullWidth.call(params[:search_value]).to_i}").group('customers.id') :
- 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
- lower(customer_subscriptions.checkout_data ->> 'email') LIKE :query", query: "%#{params[:search_value].downcase}%").group('customers.id')
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement