| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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
|