sadem_app/app/models/m_odr_rep.rb
Nicolas Bally 8ce9260471 suite
2020-04-01 14:28:19 +02:00

289 lines
7.1 KiB
Ruby

class MOdrRep < ApplicationRecord
belongs_to :m_odr
include ActionView::Helpers::NumberHelper
include ActionView::Helpers::TranslationHelper
include ActionView::Helpers::UrlHelper
has_many :particulars, :dependent => :destroy
accepts_nested_attributes_for :particulars, :allow_destroy => true
has_many :mail_hists
has_many :m_odr_virements
has_many :m_odr_rep_ribs, :dependent => :destroy
accepts_nested_attributes_for :m_odr_rep_ribs, :allow_destroy => true
belongs_to :m_odr_product
belongs_to :m_odr_place
belongs_to :particular
has_many :m_odr_files, :dependent => :destroy
accepts_nested_attributes_for :m_odr_files, :allow_destroy => true
validates :m_odr_product_cat_id, :presence => true, :if => :product_cat_needed?
validates :qte, :presence => true
validates :m_odr_product_id, :presence => true
validates :m_odr_place_id, :presence => true
validates :rgpd, :presence => true, :if => :rgpd_needed?
validates :reduc_code, :presence => true, length: { in: 6..6 }, :if => :reduc_code_needed?
belongs_to :m_odr_tracker
def reduc_code_needed?
if self.m_odr.reduc_code_needed
true
else
false
end
end
def product_cat_needed?
if self.m_odr.m_odr_product_cats.count > 0
true
else
false
end
end
def rgpd_needed?
if self.m_odr and self.m_odr.confirm_case_needed
true
else
false
end
end
def send_mail_type(slug, element = nil)
if self.m_odr and mail_type = self.m_odr.mail_types.where(:slug => slug).first and self.particulars.first and self.particulars.first.email?
mail_hist = MailHist.generate_mail(:fr, mail_type, self.particulars.first.email, {:arguments => {:nom_odr => self.m_odr.name, :remise => number_to_currency(self.remise.to_f), :civilite => self.particular_civilite, :nom => self.particular_name, :prenom => self.particular_firstname }, :m_odr => self.m_odr, :m_odr_rep => self, :element => element})
end
end
QI_DYNAMICS = %w(admin_ok_to_send rib_admin_ok
file_admin_ok remise particular_civilite particular_name particular_firstname particular_address_2 particular_address_3 particular_cp particular_city particular_country particular_email particular_tel product_name product_brand tracker_name place_name)
eval(QI_DYNAMICS_CORE)
def ca_rib_admin_ok
if self.m_odr_rep_ribs.where(:admin_ok => true).count > 0
true
else
false
end
end
def ca_file_admin_ok
if self.m_odr_files.where(:admin_ok => true).count > 0
true
else
false
end
end
def change_state(state)
self.state = state
self.save
end
before_validation do
if self.m_odr.reduc_code_needed and self.m_odr.m_odr_coupons.count > 0 and !self.m_odr.m_odr_coupons.where("name LIKE ?", self.reduc_code).first
errors.add(:reduc_code, 'doit être différent de la page actuelle')
end
self.particular = self.particulars.first
if !self.state
self.state = "Reçue"
end
if self.t.to_s != ""
self.m_odr_tracker = MOdrTracker.where(:token => self.t).first
end
end
def ca_particular_civilite
self.particular.civilite if self.particular
end
def ca_particular_name
self.particular.name if self.particular
end
def ca_particular_firstname
self.particular.firstname if self.particular
end
def ca_particular_address_2
self.particular.address_2 if self.particular
end
def ca_particular_address_3
self.particular.address_3 if self.particular
end
def ca_particular_cp
self.particular.cp if self.particular
end
def ca_particular_city
self.particular.city if self.particular
end
def ca_particular_country
self.particular.country if self.particular
end
def ca_particular_email
self.particular.email if self.particular
end
def ca_particular_tel
self.particular.tel if self.particular
end
def ca_product_name
self.m_odr_product.name if self.m_odr_product
end
def ca_product_brand
self.m_odr_product.m_odr_brand.name if self.m_odr_product and self.m_odr_product.m_odr_brand
end
def ca_tracker_name
self.m_odr_tracker.name if self.m_odr_tracker
end
def ca_place_name
self.m_odr_place.name if self.m_odr_place
end
attr_accessor :t
before_create { generate_token() }
def generate_token()
begin
self[:token] = SecureRandom.urlsafe_base64
end while MOdrRep.exists?(:token => self[:token])
end
def self.qi_table_order
{
:m_odr => "ODR",
:created_at => {:name => "Date", :reorder => true},
:state => {:name => "Etat", :reorder => true},
:cc_rib_admin_ok => {:name => "Rib valide ?", :reorder => true},
:cc_file_admin_ok => {:name => "Fichiers valides ?", :reorder => true},
:cc_admin_ok_to_send => {:name => "Virement à envoyer ?", :reorder => true},
:cc_particular_civilite => {:name => "Civ.", :reorder => true},
:cc_particular_name => {:name => "Nom", :reorder => true},
:cc_particular_firstname => {:name => "Prénom", :reorder => true},
:cc_particular_address_2 => {:name => "Adresse", :reorder => true},
:cc_particular_address_3 => {:name => "Adresse (2)", :reorder => true},
:cc_particular_cp => {:name => "Code postal", :reorder => true},
:cc_particular_city => {:name => "Ville", :reorder => true},
:cc_particular_country => {:name => "Pays", :reorder => true},
:cc_particular_email => {:name => "Email", :reorder => true},
:cc_particular_tel => {:name => "Tel", :reorder => true},
:cc_particular_tel => {:name => "Tel", :reorder => true},
:cc_particular_tel => {:name => "Tel", :reorder => true},
:cc_product_brand => {:name => "Marque", :reorder => true},
:cc_product_name => {:name => "Produit", :reorder => true},
:qte => {:name => "Quantité", :reorder => true},
:cc_remise => {:name => "Remise", :reorder => true},
:cc_place_name => {:name => "Revendeur", :reorder => true},
:cc_tracker_name => {:name => "Trackeur", :reorder => true},
:actions => "Actions",
#:created_at => {:name => "Date", :reorder => true},
}
#, :sort_name => "code"
end
def ca_admin_ok_to_send
if self.rib_admin_ok and self.file_admin_ok
true
else
false
end
end
def ca_remise
if self.qte and self.m_odr_product
if self.m_odr_product and remise = self.m_odr_product.m_odr_product_remises.where(:qte => self.qte).first
remise.amount
else
nil
end
end
end
def long_name
self.particular.long_name if self.particular
end
def self.valid_sort
r = []
self.qi_table_order.each do |key, value|
if value.instance_of? Hash
if value[:reorder] and value[:reorder] == true
r << key.to_s if value[:reorder]
end
end
end
return r
end
end