60 lines
1.5 KiB
Ruby
60 lines
1.5 KiB
Ruby
class MOdrFileRoulage < ApplicationRecord
|
|
belongs_to :m_odr_file
|
|
belongs_to :m_event
|
|
|
|
before_validation do
|
|
self.nbr_primes = 2
|
|
|
|
self.nbr_primes_not_useds = self.nbr_primes - nbr_primes_useds
|
|
|
|
|
|
end
|
|
|
|
|
|
def generate_prime
|
|
prime_ids = []
|
|
if nbr_primes_to_use = self.nbr_primes_not_useds and nbr_primes_to_use > 0
|
|
|
|
|
|
if achats = MOdrFile.where(:admin_ok => true, :p_customer_id => self.m_odr_file.p_customer_id,:m_odr_file_type_id => 2).where("buy_at <= ? and nbr_pneus_not_useds > 0", self.date) and (achats.sum(:nbr_pneus_not_useds) > 0)
|
|
|
|
state = "A traiter"
|
|
|
|
prime = MOdrPrime.new(:state => state, :m_odr_file_roulage => self, :p_customer_id => self.m_odr_file.p_customer_id)
|
|
n_tot = 0
|
|
achats.each do |a|
|
|
if n_tot < nbr_primes_to_use
|
|
if (nbr_primes_to_use - n_tot) <= a.nbr_pneus_not_useds
|
|
n = (nbr_primes_to_use - n_tot)
|
|
|
|
else
|
|
n = a.nbr_pneus_not_useds
|
|
end
|
|
|
|
prime.m_odr_prime_files.build(:m_odr_file => a, :nbr_pneus => n, :amount => n*15.0)
|
|
|
|
a.nbr_pneus_useds = a.nbr_pneus_useds.to_i + n
|
|
|
|
prime.save
|
|
a.save
|
|
|
|
prime_ids << prime.id
|
|
|
|
n_tot = n_tot + n
|
|
|
|
self.nbr_primes_useds = self.nbr_primes_useds.to_i + n
|
|
self.save
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
prime_ids = prime_ids.uniq
|
|
|
|
MOdrPrime.where(:id => prime_ids).all.each do |p|
|
|
p.send_init_mail
|
|
end
|
|
end
|
|
|
|
end
|