mmsc_app/app/models/m_odr_file.rb
2022-01-11 18:10:09 +01:00

179 lines
4.6 KiB
Ruby

class MOdrFile < ApplicationRecord
belongs_to :m_odr_rep
belongs_to :m_odr_file_type
belongs_to :p_customer
belongs_to :m_odr_place
belongs_to :m_event
has_one :particular, :through => :p_customer
has_many :mail_hists
has_many :m_odr_file_products, :dependent => :destroy
accepts_nested_attributes_for :m_odr_file_products, :allow_destroy => true
validates_associated :m_odr_file_products
has_many :m_odr_file_roulages, :dependent => :destroy
accepts_nested_attributes_for :m_odr_file_roulages, :allow_destroy => true
mount_uploader :file, OdrUploader
validates :file, :presence => true, :if => :file_needed?
before_create { generate_token() }
validates :buy_at, :presence => true, :if => :buy_at_needed?
acts_as_caching :fields => [:doc_date]
def file_needed?
true if !self.id
end
def ca_doc_date
if self.m_odr_file_type_id == 1
if m_odr_file_roulage = self.m_odr_file_roulages.order("date DESC").first
m_odr_file_roulage.date
else
self.created_at
end
elsif self.m_odr_file_type_id == 2
if self.buy_at
self.buy_at
else
self.created_at
end
end
end
def buy_at_needed?
true if self.m_odr_file_type_id == 2
end
def new_nbr_primes
self.m_odr_file_roulages.count if self.m_odr_file_type_id == 1
end
def new_nbr_primes_useds
MOdrPrime.where(:m_odr_file_roulage_id => self.m_odr_file_roulages.ids).count if self.m_odr_file_type_id == 1
end
def new_nbr_primes_not_useds
(self.new_nbr_primes - self.new_nbr_primes_useds) if self.m_odr_file_type_id == 1
end
after_save do
#self.p_customer.generate_prime if self.p_customer
end
before_validation do
if self.m_odr_file_type_id == 1
nbr_primes = 0
nbr_primes_useds = 0
self.m_odr_file_roulages.each do |mofr|
mofr.save
nbr_primes += mofr.nbr_primes.to_i
nbr_primes_useds += mofr.nbr_primes_useds.to_i
end
self.nbr_primes = nbr_primes # if !self.id or !self.nbr_primes
self.nbr_primes_useds = nbr_primes_useds
self.nbr_primes_not_useds = self.nbr_primes - nbr_primes_useds
elsif self.m_odr_file_type_id == 2
self.nbr_pneus = 0
self.m_odr_file_products.each do |mofp|
self.nbr_pneus += mofp.qte.to_i
end
if self.nbr_pneus > 2
self.nbr_pneus = 2
end
self.nbr_pneus_not_useds = self.nbr_pneus - self.nbr_pneus_useds.to_i
end
end
def generate_token()
begin
self[:token] = SecureRandom.urlsafe_base64
end while MOdrFile.exists?(:token => self[:token])
end
def rotate(degrees=90)
versions = [self.file.path]
versions.each do |v|
image = Magick::ImageList.new(v)
image = image.rotate(degrees)
image.write(v)
end
self.file.recreate_versions!(:secure, :secure_thumb)
self.updated_at = Time.now
self.save
end
acts_as_sorting :fields => {
:id => {:name => "Id", :reorder => true},
:created_at => {:name => "Date de téléchargement", :reorder => true},
:p_customer => {:name => "Utilisateur", :reorder => true, :sort_name => "p_customers.cc_show_name"},
:m_odr_file_type => {:name => "Type de document"},
:admin_ok => {:name => "Décision", :reorder => true},
:reject_reason => {:name => "Raison du rejet", :reorder => true},
:reject_reason_description => {:name => "Raison du rejet : commentaire", :reorder => true},
:nbr_pneus => {:name => "Nbr pneus", :reorder => true},
:nbr_pneus_useds => {:name => "Nbr pneus utilisés", :reorder => true},
:nbr_pneus_not_useds => {:name => "Nbr pneus restants", :reorder => true},
:nbr_primes => {:name => "Nbr primes", :reorder => true},
:nbr_primes_useds => {:name => "Nbr primes utilisés", :reorder => true},
:nbr_primes_not_useds => {:name => "Nbr primes restantes", :reorder => true},
:actions => {:name => "Actions", :reorder => true},
}
def send_mail_type(slug, element = nil)
if self.m_odr_file_type_id
mail_hist = MailHist.auto_generate_mail(:fr, slug, self.p_customer.email, {:arguments => {:nbr => self.nbr_pneus }, :m_odr_file => self, :p_customer => self.p_customer, :element => self})
else
mail_hist = MailHist.auto_generate_mail(:fr, slug, self.p_customer.email, {:arguments => {:nbr => self.nbr_pneus }, :m_odr_file => self, :p_customer => self.p_customer, :element => self})
end
end
end