This repository has been archived on 2021-11-24. You can view files and clone it, but cannot push or open issues or pull requests.
phone_app/app/models/v_contact.rb
2021-09-07 15:32:27 +02:00

251 lines
8.0 KiB
Ruby

class VContact < ApplicationRecord
has_many :mail_hists
belongs_to :societe, :foreign_key => :codeproprietaire, :primary_key => :socmanaginn
belongs_to :centre_o, :foreign_key => :codeproprietaire, :primary_key => :socmanaginn, :class_name => "Societe"
validates :codemanaginn, :presence => true, :uniqueness => true
validates :nom, :presence => true
validates :prenom, :presence => true
acts_as_sorting :fields => {
:actions => {:name => "Actions", :reorder => true},
:id => {:name => "Id", :reorder => true},
:codemanaginn => {:name => "Numéro CCV", :reorder => true},
#:nomgroupe => {:name => "Nomgroupe", :reorder => true},
:v_societe => {:name => "Societé", :reorder => false},
:civilite => {:name => "Civilité", :reorder => true},
:nom => {:name => "Nom", :reorder => true},
:prenom => {:name => "Prénom", :reorder => true},
#:titre => {:name => "Titre", :reorder => true},
:mailto => {:name => "Email", :reorder => true},
#:mailcc => {:name => "Email (cc)", :reorder => true},
#:mailbcc => {:name => "Email (bcc)", :reorder => true},
:numportable => {:name => "Portable", :reorder => true},
:numtel => {:name => "Tel", :reorder => true},
#:numfax => {:name => "Fax", :reorder => true},
:adresse1 => {:name => "Adresse", :reorder => true},
:adresse2 => {:name => "Adresse (suite)", :reorder => true},
:codepostal => {:name => "Code postal", :reorder => true},
:ville => {:name => "Ville", :reorder => true},
#:anniversaire => {:name => "Anniversaire", :reorder => true},
#:pays => {:name => "Pays", :reorder => true},
#:photo => {:name => "Photo", :reorder => true},
#:login => {:name => "Login", :reorder => true},
#:password => {:name => "Password", :reorder => true},
#:typeuser => {:name => "Typeuser", :reorder => true},
#:commentaire => {:name => "Commentaire", :reorder => true},
:codeproprietaire => {:name => "Code societé", :reorder => true},
#:typepartage => {:name => "Typepartage", :reorder => true},
#:libre1 => {:name => "Libre 1", :reorder => true},
#:libre2 => {:name => "Libre 2", :reorder => true},
#:libre3 => {:name => "Libre 3", :reorder => true},
#:libre4 => {:name => "Libre 4", :reorder => true},
#:libre5 => {:name => "Libre 5", :reorder => true},
#:accesbloque => {:name => "Accesbloque", :reorder => true},
:corbeille => {:name => "Corbeille", :reorder => true},
#:codecreateur => {:name => "Codecreateur", :reorder => true},
#:partagedefaut => {:name => "Partagedefaut", :reorder => true},
#:npai => {:name => "Npai", :reorder => true},
#:npaimail => {:name => "Npaimail", :reorder => true},
#:npaisms => {:name => "Npaisms", :reorder => true},
#:rate => {:name => "Rate", :reorder => true},
#:prime => {:name => "Prime", :reorder => true},
#:nbr_vidanges => {:name => "Nbr_vidanges", :reorder => true},
#:vidanges_seuil => {:name => "Vidanges_seuil", :reorder => true},
#:vidanges_offerte => {:name => "Vidanges_offerte", :reorder => true},
:datecreation => {:name => "Datecreation", :reorder => true},
:last_volume_at => {:name => "Dernier mouvement", :reorder => true},
#:ac_rate => {:name => "Ac_rate", :reorder => true},
:enabled => {:name => "Actif ?", :reorder => true, :as => :boolean},
:nbr_mvt => {:name => "Nbr_mvt", :reorder => true},
:cc_centre => {:name => "Centre", :reorder => true},
:cc_total => {:name => "Historique CA", :reorder => true, :as => :currency},
:cc_cagnotte => {:name => "Cumul", :reorder => true, :as => :currency}
#:cc_remise => {:name => "Remises", :reorder => true, :as => :currency},
#:created_at => {:name => "Created_at", :reorder => true},
#:updated_at => {:name => "Updated_at", :reorder => true},
}
after_destroy do
self.volumes.destroy_all
end
acts_as_caching :fields => [:cagnotte, :total, :remise, :centre]
has_many :v_bdas
before_create do
self.enabled = true
end
def generate_ba
if self.societe.bon_type == "Bon d'achat" and self.societe.seuil? and self.societe.seuil <= self.cagnotte
self.v_bdas.create(:date => Date.today, :amount => self.societe.bon_amount, :seuil => self.societe.seuil, :bda_type => "bda")
end
end
def max_ri_amount
(self.cagnotte * (self.societe.remise_percent/100)).to_i if self.societe and self.societe.remise_percent.to_f != 0.0 and self.cagnotte.to_f != 0.0
end
def ca_centre
self.centre_o.nom if self.centre_o
end
def ca_cagnotte
self.volumes.select("valeur","datereception").sum(:valeur)
end
def ca_total
self.volumes.where("valeur > 0.0").sum(:valeur)
end
def ca_remise
self.volumes.where("valeur < 0.0").sum(:valeur)
end
before_validation do
self.ac_centre = nil
self.nbr_mvt = self.volumes.count
if lt = self.volumes.order("datedebut DESC").select("datedebut").first
self.last_volume_at = lt.datedebut
end
if self.societe
self.societe_id = self.societe.id
else
self.societe_id = nil
end
end
def volumes
VolumePeriodique.where(:codemanaginn => self.codemanaginn, :codeindicateur => "MGI000000001") #.order("datereception DESC")
end
def self.update_caches(force = false)
@gen_past_time = Time.now
if !force
v_contacts = VContact.where(:enabled => true, :nbr_mvt => nil)
else
v_contacts = VContact.where(:enabled => true)
end
#v_contacts = v_contacts.limit(2)
v_contacts.each do |vc|
puts vc.codemanaginn
vc.cumul = vc.volumes.select("valeur","datereception").where("valeur > 0.0").sum(:valeur)
vc.cagnotte = vc.volumes.select("valeur","datereception").sum(:valeur)
vc.nbr_mvt = vc.volumes.count
vc.last_volume_at = vc.volumes.select("datereception").first.datereception if vc.volumes.first
vc.prime = (vc.ac_rate.to_f / 100.0) * vc.cagnotte
vc.save
end
to_delete = VContact.where("(last_volume_at is NULL and datecreation < ?) or (last_volume_at < ?)", (Date.today-5.year), (Date.today-5.year))
puts VolumePeriodique.count
codes = to_delete.map{|a| a.codemanaginn}
codes = codes.reject { |e| e.to_s.empty? }
VolumePeriodique.where(:codemanaginn => codes).destroy_all
to_delete.destroy_all
if @gen_past_time
return "Rendu en #{(Time.now - @gen_past_time).round(3)}s"
else
return false
end
end
def self.set_valid_cards
VContact.where(:codeproprietaire => Societe.where(:enabled => true).pluck(:socmanaginn)).update_all(:enabled => true)
end
def self.update_centre_name
Societe.where(:enabled => true).find_each do |s|
s.v_contacts.update_all(:cc_centre => s.nom)
end
end
def self.update_mvt
# Mettre nbr_mvt à 0 pour toutes les cartes actives qui n'ont pas eu de mouvement
vc_ids = VolumePeriodique.select(:codemanaginn).group(:codemanaginn).map{|a| a.codemanaginn}
VContact.where(:enabled => true).where("codemanaginn not in(?)", vc_ids).update_all(:nbr_mvt => 0, :cc_cagnotte => 0, :cc_total => 0, :cc_remise => 0)
return true
end
def self.update_non_nil
VContact.where(:enabled => true).where(:nbr_mvt => nil).find_each do |vc|
vc.save
end
end
def self.update_all_cards
VContact.where(:enabled => true).find_each do |vc|
vc.save
end
end
def member_label
"#{self.codemanaginn} - #{self.nom} #{self.prenom}"
end
def self.update_code_proprietaires
VContact.where("codecreateur is not NULL and codecreateur != ''").find_each do |vc|
if societe = Societe.where(:socmanaginn => vc.codecreateur.upcase).first
vc.a_codeproprietaire = vc.codeproprietaire if !vc.a_codeproprietaire?
vc.codeproprietaire = societe.socmanaginn
vc.save
end
end
end
end