class PProductBrutStock < ApplicationRecord belongs_to :p_brut_product belongs_to :p_fournisseur_order belongs_to :p_tank validates :p_brut_product, :presence => true validates :p_tank_id, :presence => true, :if => :validate_tank? has_many :p_sheet_line_stocks #, :dependent => :destroy scope :oks, -> {where(:ok => true).order("ok_at DESC, id DESC")} scope :not_oks, -> {where(:ok => false).order("ok_at DESC, id DESC")} scope :between, lambda { |start, stop| after(start).before(stop) } scope :after, lambda { |date| where("(ok_at >= ?)", date ) } scope :before, lambda { |date| where("(ok_at <= ?)", date ) } validates :ok_at, :presence => true, :if => :validate_ok? validates :ok_price, :presence => true, :if => :validate_ok? validates :ok_qte, :presence => true, :if => :validate_ok? before_validation do if validate_tank? errors.add(:p_tank_id, 'doit correspondre au produit') if self.p_brut_product and self.p_tank and self.p_tank.p_brut_product and self.p_tank.p_brut_product != self.p_brut_product else self.p_tank = nil end end before_save do #self.qte_restant = self.ok_qte.to_f - self.qte_used_calc end def qte_used_calc PSheetLineStock.where(:p_product_brut_stock_id => self.id).sum(:qte_ok) end after_save do if self.ok and !self.lock self.qte_restant = self.ok_qte self.lock = true self.save end end def validate_ok? if self.ok true else false end end def validate_tank? if self.externe false else true end end def tva 0.2 end def tot (self.qte.to_f * self.price.to_f).round(2) end def tot_ttc (self.tot * (1+self.tva).round(2)) end def tot_ok (self.ok_qte.to_f * self.ok_price.to_f).round(2) end def tot_ttc_ok (self.tot_ok * (1+self.tva)).round(2) end def tva_ok (tot_ttc_ok - tot_ok).round(2) end end