class Seller < ActiveRecord::Base belongs_to :pointsale has_many :sales has_many :sellerscommissions ##--- Llevar registro de Actividad del usuario audited enum status: [:erased, :active, :inactive] attr_accessor :skip_pointsale ##--- Validaciones previas de guardar validates :pointsale_id, presence: { message: "Debe seleccionar punto de venta para el vendedor." }, :on => [:create, :update], unless: :skip_pointsale validates :name, presence: { message: "Debe indicar nombre para el vendedor." }, :on => [:create, :update] validates :last_name, presence: { message: "Debe indicar apellido para el vendedor." }, :on => [:create, :update] scope :vigentes, -> { where( "status != 0") } ##--- Funciones personalizadas def full_name "#{self.name} #{last_name}" end def self.get_ranking(period, pointsale) all_serllers = Array.new if period == 'week' beg_period = Date.current.beginning_of_week end_period = Date.current.end_of_week elsif period == 'month' beg_period = Date.current.beginning_of_month end_period = Date.current.end_of_month end quantities_top_products = pointsale.sellers.joins(:sales).where("sales.date_sale between ? and ? and sales.status > 1", beg_period, end_period).group('sellers.name').order('sum_sales_total desc').limit(10).sum('sales.total') return quantities_top_products end def get_sales_by_period(initial_date, final_date, type) if type == 'commission' sales_ids = Sale.where(:date_sale => initial_date..final_date, :seller_id => self.id).activas.pluck(:id) commissions_paid = SalesSellercommission.where("sale_id IN (?)", sales_ids).pluck(:sale_id) news_to_pay = sales_ids - commissions_paid sales_by_period = Sale.where("sales.id IN (?)", news_to_pay) else sales_by_period = Sale.where(:date_sale => initial_date..final_date, :seller_id => self.id).activas end return sales_by_period end end