class PVolucompteur < ApplicationRecord has_many :p_vol_excepts accepts_nested_attributes_for :p_vol_excepts, allow_destroy: true #validates_associated :p_vol_excepts validates :p_truck_id, :presence => true belongs_to :p_ship_tour_truck #has_one :p_ship_tour, :through => :p_ship_tour_truck attr_accessor :write_why, :check_delta validates :start_vol, :presence => true validates :end_vol, :presence => true #validates :delta_cause, :presence => true, :if => :delta_needed? before_validation do #errors.add(:end_vol, 'Volucompteur :'+self.p_ship_tour_truck.volume_total_th_ok.to_f.to_s+" AAA "+self.prov_vol.to_s) nbr_volucompteurs = 0 if self.id nbr_volucompteurs = self.p_ship_tour_truck.p_volucompteurs.where("id != ?",self.id).count elsif nbr_volucompteurs = self.p_ship_tour_truck.p_volucompteurs.count end if nbr_volucompteurs > 0 errors.add(:end_vol, 'Le volumètre existe déjà') end errors.add(:end_vol, 'Vous devez justifier la différence entière') if !justif_ok? true end def prov_vol self.p_ship_tour_truck.volume_total_th_ok.to_f end def justif_ok? puts "JJJJ" puts total_justif.to_f puts "JJJJ" puts delta_calc_ok.to_f puts "DDD" #sdffsdfs = sdfsfd if (total_justif.to_f) == delta_calc_ok.to_f true else false end end def total_justif r = 0.0 self.p_vol_excepts.each do |pve| #puts "TEST" #puts pve.qte.to_f #puts "AAA" r += pve.qte.to_f if !pve.marked_for_destruction? end return r end after_validation do if self.end_vol.to_f < self.start_vol.to_f errors.add(:end_vol, 'doit être supérieur ou égal à la valeur de départ') end if delta_needed? and !justif_ok? self.write_why = true errors.add(:end_vol, 'Le volumètre ne correspond pas aux quantités (delta : '+delta_calc_ok.to_s+')') end true end def delta_needed? if true if delta_calc_ok != 0.0 true end end end def volume_used self.end_vol.to_f - self.start_vol.to_f end def delta_calc self.volume_used.to_f - self.p_ship_tour_truck.volume_total_th.to_f end def delta_calc_ok self.volume_used.to_f - self.prov_vol.to_f end end