class Virement < ActiveRecord::Base belongs_to :devise validates :amount_ht, :presence => true belongs_to :product_customer belongs_to :virement_remise belongs_to :commission belongs_to :account_rib scope :execute_between, lambda { |start, stop| execute_after(start).execute_before(stop) } scope :execute_after, lambda { |date| joins(:virement_remise).where("(virement_remises.created_at >= ?)", date ) } scope :execute_before, lambda { |date| where("(virement_remises.created_at <= ?)", date ) } def generate_token self.token = loop do token = SecureRandom.hex(6) break token unless Virement.exists?(token: token) end self.token end def name_for_edi value = self.account_rib.name.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s # Remove single quotes from input value.gsub!(/[']+/, '') # Replace any non-word character (\W) with a space value.gsub!(/\W+/, ' ') # Remove any whitespace before and after the string value.strip! return value end before_validation do if self.product_customer.virements.where("sended is null").count >= 1 errors.add(:amount_ht, "Vous ne pouvez pas avoir plus d'un virements en attente d'execution.") end if !self.product_customer.account_ribs.where(:id => self.account_rib.id, :validated => true).first or !self.account_rib.validated errors.add(:account_rib, 'Compte sélectionné invalide') end if self.amount_ht.to_f < 5 or self.amount_ht.to_f > self.product_customer.max_virement errors.add(:amount_ht, "Le montant doit être compris entre 5 € et #{self.product_customer.max_virement.to_i} €") end end end