vulco_app/app/models/societe.rb
Nicolas Bally fcedb9ceaf suite
2021-06-11 16:03:54 +02:00

110 lines
2.8 KiB
Ruby

class Societe < ApplicationRecord
def self.codes_from_cards
(VContact.where("codemanaginn LIKE 'CCV%'").group(:codeproprietaire).map{|a| a.codeproprietaire} - ["", nil])
end
def self.valid_codes
Societe.where(:socmanaginn => self.codes_from_cards).group(:socmanaginn).map{|a| a.socmanaginn}
end
def self.update_valids
puts "Societe update valid"
Societe.update_all(:enabled => false, :ac_rate => nil)
Societe.valids.update_all(:enabled => true)
puts "Contact update valid"
VContact.update_all(:last_volume_at => nil, :enabled => false, :prime => nil, :ac_rate => nil, :cagnotte => nil, :cumul => nil, :prime => nil)
VContact.where(:codeproprietaire => self.valid_codes).update_all(:enabled => true)
puts "Purge contact"
#ActiveRecord::Base.connection.execute("DELETE FROM v_contacts WHERE enabled = 0;")
puts "Purge Volume periodique"
#VolumePeriodique.where("codemanaginn not in(?)", VContact.select(:codemanaginn).group(:codemanaginn).map {|c| c.codemanaginn}).delete_all
return true
end
def self.update_caches
Societe.valids.all.each do |s|
rate = s.ca_rate
s.ac_rate = rate
s.ac_cumul = s.volumes.where("valeur > 0.0").sum(:valeur)
s.ac_cagnotte = s.volumes.sum(:valeur)
s.last_volume_at = s.volumes.first.datereception if s.volumes.first
s.save
VContact.where(:codeproprietaire => s.socmanaginn).update_all(:enabled => true, :ac_rate => rate)
end
return true
end
def self.valids
Societe.where(:socmanaginn => self.valid_codes)
end
def self.unvalids
Societe.where("socmanaginn not in(?)", self.valid_codes)
end
def seuils(date = Date.today)
SeuilDeclencheur.where(:codedeclencheur => "MGD00000004", :socmanaginn => self.socmanaginn).where("datefin > ?", date)
end
def seuil(date = Date.today)
self.seuils(date).first
end
def ca_rate(date = Date.today)
self.seuil(date)
if self.seuil(date)
r = ((self.seuil(date).valba.to_f / self.seuil(date).valseuil.to_f) * 100.0).round(2) if self.seuil(date).valba? and self.seuil(date).valseuil.to_f > 0.0
else
r = 0.0
end
return r
end
def cartes
VContact.where("codemanaginn LIKE 'CCV%'").where(:codeproprietaire => self.socmanaginn)
end
def cartes_ids
cartes.select("codemanaginn").map{|a| a.codemanaginn}
end
def volumes
VolumePeriodique.where(:codemanaginn => self.cartes_ids, :codeindicateur => "MGI000000001").order("datereception DESC")
end
def self.update_card_names
Societe.all.each do |s|
VContact.where(:codeproprietaire => s.socmanaginn).update_all(:cc_centre => s.nom)
end
end
end