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/p_customer.rb

946 lines
32 KiB
Ruby

class PCustomer < ApplicationRecord
has_many :price_documents
has_many :particulars, :as => :owner, :dependent => :destroy
has_many :p_contact_ps, :class_name => "PContact", :through => :particulars, :source => :p_contacts
has_many :p_contacts, :as => :contactable, :dependent => :destroy
accepts_nested_attributes_for :p_contacts, allow_destroy: true
has_many :p_customer_sheets
has_many :p_sheet_lines, :through => :p_customer_sheets
has_many :p_products, :through => :p_customer_sheets
accepts_nested_attributes_for :particulars
belongs_to :particular
accepts_nested_attributes_for :particular
has_many :p_payments
belongs_to :p_customer_cat
has_many :p_documents
validates :code, :presence => true, :uniqueness => true
has_many :p_compta_elements
belongs_to :accounting_zone
belongs_to :market_discount
has_many :timer_watchers
has_many :open_range_elements, :as => :element
has_many :open_ranges, :through => :open_range_elements
belongs_to :p_commercial
has_many :p_customer_ribs, :dependent => :destroy
accepts_nested_attributes_for :p_customer_ribs, :allow_destroy => true
has_secure_password validations: false
validates :password, :presence => true, :if => :password_needed?
validates :password, confirmation: { case_sensitive: true }, :presence => true, :if => :password_needed?
#validates :email, :presence => true, :uniqueness => true
attr_accessor :actual_password, :valid_last_password, :valid_public, :generate_mdp, :valid_pswd_confirmation
has_many :order_hist_lines
has_many :order_hists
# before_validation :set_auth_token, on: [:create, :update]
before_validation do
if self.code.blank?
generate_code
end
end
def generate_code
if !self.code
if self.class.all.order(code: :desc).limit(1)[0]
last_used_code = self.class.all.order(code: :desc).limit(1)[0].code
last_number = last_used_code.match(/\d+/).to_s.to_i + 1
else
last_used_code = 1
last_number = 1
end
code = "CLI%04d" % [last_number]
while self.class.find_by(code: code)
last_number += 1
code = "CLI%04d" % [last_number]
end
self.code = code
end
end
def self.qi_table_order
{
:created_at => {:name => "Date de création", :reorder => true, :as => :date},
:show_name => "Raison sociale",
:code => {:name => "Code", :reorder => true},
:enabled => {:name => "Etat", :reorder => true, :sort_name => "p_customers.enabled"},
:p_commercial => {:name => "Commercial", :reorder => true, :sort_name => "p_commercials.name"},
:p_customer_cat => "Catégorie",
:particular => "Ville",
:market_discount => "Remise marché",
:actions => "Actions"
}
#, :sort_name => "code"
end
def self.valid_sort
r = []
self.qi_table_order.each do |key, value|
if value.instance_of? Hash
if value[:reorder] == false
elsif value[:reorder] == true
if value[:sort_name]
r << value[:sort_name]
else
r << key.to_s
end
end
end
end
return r
end
before_destroy do
if self.p_customer_sheets.count > 0 or self.p_payments.count > 0
false
else
true
end
end
def can_destroy?
if self.p_customer_sheets.count > 0 or self.p_payments.count > 0
return false
else
return true
end
end
after_initialize do
begin
self.p_payment_type_id = 41 if !self.p_payment_type_id?
rescue
end
end
before_validation do
self.disabled_raison = "" if self.enabled
if false #!self.code?
if self.particulars[0]
cars = self.particulars[0].organisation
cars += self.particulars[0].name
cars += self.particulars[0].firstname
cars = cars.to_slug.gsub(/\W/,'').upcase
cars = cars[0..1]
cars +=
self.code = self.particulars[0].cp+cars
end
end
generate_mlm_token
if self.comptant
if self.acompte
errors.add(:acompte, "N'est pas compatible avec les paiements comptants")
end
if self.acompte_percent?
errors.add(:acompte_percent, "N'est pas compatible avec les paiements comptants")
end
if self.payment_delais?
errors.add(:payment_delais, "N'est pas compatible avec les paiements comptants")
end
if self.payment_fin_de_mois
errors.add(:payment_fin_de_mois, "N'est pas compatible avec les paiements comptants")
end
end
if self.acompte
if !self.acompte_percent?
errors.add(:acompte_percent, "Doit être remplis pour demander un acompte")
end
end
if !self.comptant
if !self.payment_delais?
errors.add(:payment_delais, "Délais de paiement nécessaire si pas de paiement comptant")
end
end
end
def tva_rate
if tva = TvaRate.where(:accounting_zone_id => self.accounting_zone_id).first
return tva
else
return nil
end
end
def update_caches
end
def ca_ht
0
end
def ca_ttc
0
end
def nbr_orders
self.p_customer_sheets.where(:state => "Payée")
end
def nbr_orders_refusees
self.p_customer_sheets.where(:state => "Refusée")
end
def encours_assure
r = 0.0
r = self.p_customer_cat.encourt_max if self.p_customer_cat
r
end
def encours_assure_restant
self.encours_assure.to_f - self.encours_ttc.to_f
end
def encours_ttc
self.solde_avoir_and_bills - self.paiements_total
end
def th_r_encours_ttc
self.solde_avoir_and_bills - self.th_r_paiements_total
end
def encours_at(date)
self.solde_avoir_and_bills(date) - self.paiements_total(date)
end
def sheets_total_ht
self.p_customer_sheets.where(:state => "facturée").sum(:cc_tot_amount_ht)
end
def solde_avoir_and_bills(date = Date.today)
raise # p_document_id à remplacer
self.p_documents.where(:p_document_type_id => [4,7]).where("created_at < ?", date.to_time.end_of_day).sum(:cache_total_ttc)
end
def sheets_total_ttc(date = Date.today)
self.p_customer_sheets.where(:state => "facturée").where("created_at < ?", date.to_time.end_of_day).sum(:a_ok_total_ttc)
end
def paiements_total(date = Date.today)
self.p_payments.where(:paid => true).where("paid_at < ?", date.to_time.end_of_day).sum(:amount)
end
def th_paiements_total
self.p_payments.where(:paid => false).sum(:amount)
end
def th_r_paiements_total
self.p_payments.sum(:amount)
end
def self.for_search(search)
PCustomer.joins(:particulars).where("code LIKE ? or particulars.organisation LIKE ? or particulars.name LIKE ? or particulars.firstname LIKE ? or particulars.address_2 LIKE ? or particulars.address_3 LIKE ? or particulars.cp LIKE ? or particulars.city LIKE ?","%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%","%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%").uniq
end
def generate_mlm_token
if !self.mlm_token?
self.mlm_token = loop do
mlm_token = SecureRandom.hex(3).upcase
break mlm_token unless PCustomer.exists?(mlm_token: mlm_token)
end
end
end
def name
self.show_name
end
def show_name
if self.particular
n = ""
n += self.particular.organisation+" " if self.particular.organisation?
#n += self.particular.name+" " if self.particular.name?
#n += self.particular.firstname+" " if self.particular.firstname?
return n
end
end
def show_name_extend
if self.particular
n = ""
n += self.code.to_s+" "
n += self.particular.organisation+" " if self.particular.organisation?
n += self.particular.name+" " if self.particular.name?
n += self.particular.firstname+" " if self.particular.firstname?
n += self.particular.cp+" " if self.particular.cp?
n += self.particular.city+" " if self.particular.city?
return n
end
end
after_save do
if !self.particular and self.particulars.count > 0
self.particular = self.particulars.first
self.save
end
end
def archive_import
past_fact = self.p_documents.where("d_number regexp '^[0-9]+'").order("created_at DESC")
if past_fact.first
date = past_fact.first.created_at + 1.second
amount = past_fact.sum(:cache_total_ttc)
if !self.p_payments.where(:p_payment_type_id => 66).first
p_payment = self.p_payments.new(:p_payment_type_id => 66, :imported => true, :paid => true, :paid_at => date, :amount => amount)
p_payment.save
end
end
PPayment.where(:imported => true).update_all(:paid => true)
date = nil
self.p_payments.order("paid_at DESC").each do |pp|
enc = self.encours_at(pp.paid_at)
if enc == 0.0
date = pp.paid_at.end_of_day
break
end
end
self.p_customer_sheets.where(:state => "facturée", :imported => true).update_all(:i_archive => false)
self.p_documents.where(:label => "Facture", :imported => true).update_all(:i_archive => false)
self.p_payments.where(:imported => true).update_all(:i_archive => false)
self.p_customer_sheets.where(:state => "facturée", :imported => true).where("created_at < ?", date).update_all(:i_archive => true)
self.p_documents.where(:label => "Facture", :imported => true).where("created_at < ?", date).update_all(:i_archive => true)
self.p_payments.where(:imported => true).where("paid_at < ?", date).update_all(:i_archive => true) if date
return true
end
def csv_enabled
if self.enabled
"Actif"
else
"Bloqué"
end
end
def csv_p_commercial
self.p_commercial.long_name if self.p_commercial
end
def csv_p_customer_cat
self.p_customer_cat.name if self.p_customer_cat
end
def csv_particular
r = ""
if self.particular
r += self.particular.cp.to_s+" " if self.particular.cp?
r += self.particular.city.to_s+" " if self.particular.city?
r += self.particular.country.to_s+" " if self.particular.country?
end
return r
end
def csv_market_discount
if self.market_discount
self.market_discount.percent.to_s+"%"
end
end
def verify_actual_password
self.authenticate(self.actual_password)
end
def password_needed?
false
# if (!self.id and (!self.generate_mdp or self.generate_mdp == "0")) or self.valid_pswd_confirmation
# true
# else
# false
# end
end
after_commit do
self.generate_mdp_now if self.generate_mdp and self.generate_mdp != "0"
end
before_validation do
if !self.particular
self.particular = self.particulars.first
end
if self.valid_last_password and !PCustomer.find(self.id).authenticate(self.actual_password)
errors.add(:actual_password, 'ne correspond pas au mot de passe actuel')
end
end
def generate_mdp_now
ps = SecureRandom.hex(4)
self.password = ps
self.password_confirmation = ps
if !self.email?
errors.add(:email, "Doit être présent")
end
self.generate_mdp = false
if self.save
#GeneralMailer.send_qi_mail("fr", "generation_mdp", self.email, {"mdp" => ps}).deliver
mail_hist = MailHist.generate_mail(self.locale, MailType.find_by_slug("generation_mdp"), self.email, {:arguments => {:mdp => ps, :civilite => self.particular.civilite, :nom => self.particular.name, :prenom => self.particular.firstname }, :p_customer => self, :element => self})
else
end
end
before_create do
generate_token(:auth_token)
end
before_update do
generate_token(:auth_token)
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while PCustomer.exists?(column => self[column])
end
acts_as_csv_import :fields => [
:code,
:societe_raison_sociale,
:nom_enseigne,
:adresse_facturation_1,
:adresse_livraison_2,
:adresse_3,
:cp,
:cp2,
:ville_1,
:ville_2,
:pays,
:societe_livraison,
:forme_juridique,
:famille_client,
:facturer_ttc,
:mode_reglement,
:libelle_mode_reglement,
:telephone_1,
:telephone_2,
:fax,
:risque,
:bloque,
:credit_accorde,
:mode_tva,
:nii,
:nom_banque,
:adresse_banque_1,
:adresse_banque_2,
:adresse_banque_3,
:code_postal_banque,
:ville_banque,
:pays_banque,
:code_banque,
:code_guichet,
:numero_compte,
:cle_rib,
:compte_comptable,
:analytique,
:taux_remise,
:observation,
:export_compta,
:releve_compte,
:email,
:url,
:siret,
:representant,
:nom_representant,
:encour_initial,
:credit_disponible,
:code_tarif,
:telephone_livraison,
:portable_livraison,
:fax_livraison,
:encours_courant,
:encours,
:client_divers,
:contacts_client,
:date_creation,
:code_iban,
:code_bic,
:nom_contact,
:societe_contact,
:titre_contact,
:fonction_contact,
:telephone_contact,
:portable_contact,
:email_contact
]
def self.custom_csv_import(list, import_csv)
#OK Code AUTO :code OK :code
#OK Société - Raison Sociale :particular.organisation OK :societe_raison_sociale
#OK Nom enseigne :particular.com_name OK :nom_enseigne
#OK Adresse facturation 1 :particular.address_1 OK :adresse_facturation_1
#OK Adresse Livraison 2 :particular.address_2 OK :adresse_livraison_2
#OK Adresse 3 :particular.address_3 OK :adresse_3
#OK Code Postal 1 :particular.cp OK :cp
#OK Code Postal 2 VIDE OK :cp2
#OK Ville 1 :particular_city OK :ville_1
#OK Ville 2 VIDE OK :ville_2
#OK Pays :particular.country OK :pays
#OK Société Livraison :particular.address_4 OK :societe_livraison
#OK Forme juridique livraison :particular.address_5 OK :forme_juridique
#OK Famille Client VIDE OK :famille_client
#OK Facturer en TTC VIDE OK :facturer_ttc
#OK Mode Règlement :p_payment_type OK :mode_reglement
#OK Libellé Mode Règlement :payment_delais OK :libelle_mode_reglement
#OK Téléphone 1 :particular.tel OK :telephone_1
#OK Téléphone 2 :particular.tel2 OK :telephone_2
#OK Fax :particular.fax OK :fax
#OK Risque VIDE OK :risque
#OK Bloqué VIDE OK :bloque
#OK Crédit accordé VIDE OK :credit_accorde
#OK Mode TVA VIDE OK :mode_tva
#OK N.I.I. VIDE OK :nii
#OK Nom Banque :p_bank.name OK :nom_banque
#OK Adresse 1 Banque :p_bank.particular.address_1 OK :adresse_banque_1
#OK Adresse 2 Banque :p_bank.particular.address_2 OK :adresse_banque_2
#OK Adresse 3 Banque VIDE OK :adresse_banque_3
#OK Code Postal Banque :p_bank.particular.cp OK :code_postal_banque
#OK Ville Banque :p_bank.particular.ville OK :ville_banque
#OK Pays Banque :p_bank.particular.pays OK :pays_banque
#OK Code Banque INUTILE OK :code_banque
#OK Code Guichet INUTILE OK :code_guichet
#OK Numéro Compte INUTILE OK :numero_compte
#OK Clé RIB INUTILE OK :cle_rib
# Compte Comptable ??? ?? :compte_comptable
#OK Analytique VIDE OK :analytique
#OK Taux Remise VIDE OK :taux_remise
#OK Observations AUTO :p_customer_sheet_note OK :observation
#OK Export Compta VIDE OK :export_compta
# Relevé Compte Bboolean à ajouter dans la base ?? :releve_compte
#OK E-mail AUTO :email OK :email
#OK URL VIDE OK :url
#OK SIRET AUTO :siret OK :siret
#OK Représentant :p_commercial_code OK :representant
#OK Nom Représentant :p_commercial_firstname OK :nom_representant
# Encours initial ??? ?? :encour_initial
# Crédit Disponible ??? ?? :credit_disponible
#OK Code Tarif VIDE OK :code_tarif
#OK Téléphone Livraison :particular.send_tel OK :telephone_livraison
#OK Portable Livraison :particular.send_tel2 OK :portable_livraison
#OK Fax Livraison :particular.send_fax OK :fax_livraison
# Encours courant ??? ?? :encours_courant
# encours_courant ??? ?? :encours
# Client divers ??? ?? :client_divers
#OK Contacts client INUTILE OK :contacts_client
#OK Date de création INUTILE OK :date_creation
#OK Code IBAN :p_customer_ribs.iban OK :code_iban
#OK Code BIC :p_customer_ribs.bic OK :code_bic
#OK Nom du contact :p_contact_name OK :nom_contact
#OK Société du contact VIDE OK :societe_contact
#OK Titre du contact :p_contact.civilite OK :titre_contact
#OK Fonction du contact :p_contact.comment OK :fonction_contact
#OK Téléphone du contact :p_contact.tel OK :telephone_contact
#OK Portable du contact :p_contact.tel2 OK :portable_contact
#OK E-mail du contact :p_contact.email OK :email_contact
# ap "*********************************************************************************************************"
# ap "*********************************************************************************************************"
# ap "*********************************************************************************************************"
# ap list
# ap list.class
# ap "*********************************************************************************************************"
# ap "*********************************************************************************************************"
# ap "*********************************************************************************************************"
# ap import_csv
# ap "*********************************************************************************************************"
# ap "*********************************************************************************************************"
# ap "*********************************************************************************************************"
list.each do |row|
n = self.new(imported: true, p_customer_cat: PCustomerCat.find_by_name("Professionnel"))
# particular = Particular.new(pro: true)
particular_bill = Particular.new(pro: true)
bank = bic = iban = p_commercial = particular_send = send_tel = send_tel2 = send_fax = send_address_2 = p_commercial_code = p_commercial_firstname = contact_2 = nil
bank_particular = Particular.new(pro: true)
contact = PContact.new
row.each do |key, value|
if self.type_for_attribute(key) and self.type_for_attribute(key).type == :decimal
eval "n.#{key} = value.to_s.gsub(' ', '').gsub(',', '.')"
else
case key
when "societe_raison_sociale"
particular_bill.organisation = value if !value.blank?
when "nom_enseigne"
particular_bill.com_name = value if !value.blank?
when "adresse_facturation_1"
particular_bill.address_1 = value if !value.blank?
when "adresse_livraison_2"
send_address_2 = value if !value.blank?
when "adresse_3"
particular_bill.address_3 = value if !value.blank?
when "cp"
particular_bill.cp = value if !value.blank?
when "ville_1"
particular_bill.city = value if !value.blank?
when "pays"
particular_bill.country = value if !value.blank?
when "societe_livraison"
particular_bill.address_4 = value if !value.blank?
when "forme_juridique"
particular_bill.address_5 = value if !value.blank?
when "telephone_1"
particular_bill.tel = value if !value.blank?
when "telephone_2"
particular_bill.tel2 = value if !value.blank?
when "fax"
particular_bill.fax = value if !value.blank?
when "mode_reglement"
if value.present?
if value == "VIR" || "VIR COM" || "VIR 60 J NET" || "VIR 30 J NET"
n.p_payment_type_id = PPaymentType.find_or_create_by!(name: "Virement").id
elsif value == "TRAITE"
n.p_payment_type_id = PPaymentType.find_or_create_by!(name: "Traite").id
else
n.p_payment_type_id = PPaymentType.find_or_create_by!(name: value).id
end
end
when "libelle_mode_reglement"
case value
when "Virement à la commande"
n.payment_delais = 0
when "Chèque à la commande"
n.payment_delais = 0
when "Chèque à réception"
n.payment_delais = 0
when "30 JOURS FIN DE MOIS"
n.payment_delais = 30
n.comptant = false
when "VIR 60J NET DATE RELEVE"
n.payment_delais = 60
n.comptant = false
when "TRAITE A 60 JOURS FIN DE MOIS"
n.payment_delais = 60
n.comptant = false
when "Mensuel - 30j fin de mois du dépôt"
n.payment_delais = 30
n.comptant = false
else
n.payment_delais = value if !value.blank?
end
when "nom_banque"
if value.present?
bank = PBank.find_or_create_by!(name: value)
end
when "adresse_banque_1"
bank_particular.address_1 = value if !value.blank?
when "adresse_banque_2"
bank_particular.address_2 = value if !value.blank?
when "code_postal_banque"
bank_particular.cp = value if !value.blank?
when "ville_banque"
bank_particular.city = value if !value.blank?
when "pays_banque"
bank_particular.country = value if !value.blank?
when "telephone_livraison"
send_tel = value if !value.blank?
when "portable_livraison"
send_tel2 = value if !value.blank?
when "fax_livraison"
send_fax = value if !value.blank?
when "representant"
p_commercial_code = value if !value.blank?
when "nom_representant"
p_commercial_firstname = value if !value.blank?
when "code_iban"
iban = value if !value.blank?
when "code_bic"
bic = value if !value.blank?
when "nom_contact"
contact.name = value if !value.blank?
when "titre_contact"
particular_bill.civilite = value if !value.blank?
when "fonction_contact"
if value.present?
contact.p_contact_types << PContactType.find_or_create_by!(name: value)
end
when "telephone_contact"
contact.tel = value if !value.blank?
when "portable_contact"
if value.present?
if contact.tel.nil?
contact.tel = value if !value.blank?
else
contact_2 = PContact.new(tel: value)
end
end
when "email_contact"
contact.email = value if !value.blank?
when "observation"
n.p_customer_sheet_note = value if !value.blank?
# champs vides ou inutiles :
when "cp2"
when "ville_2"
when "famille_client"
when "facturer_ttc"
when "risque"
when "bloque"
when "credit_accorde"
when "mode_tva"
when "nii"
when "adresse_banque_3"
when "code_banque"
when "code_guichet"
when "numero_compte"
when "cle_rib"
when "analytique"
when "taux_remise"
when "export_compta"
when "url"
when "code_tarif"
when "contacts_client"
when "date_creation"
when "societe_contact"
# Champs ???
when "compte_comptable"
when "encour_initial"
when "credit_disponible"
when "releve_compte"
when "encours_courant"
when "releve_compte"
when "encours"
when "client_divers"
else
eval "n.#{key} = value if !value.blank?"
end
end
end
n.particulars << particular_bill
n.save!
if bank
bank.bic = bic
bank_particular.organisation = bank.name
bank.particulars << bank_particular if bank_particular.address_1
bank.save!
import_csv.import_csv_elements << ImportCsvElement.new(:element => bank)
end
if bic || iban
rib = PCustomerRib.find_or_create_by!(bic: bic, iban: iban)
rib.bank = bank.name if bank
account = PBankAccount.find_or_create_by!(bic: bic, iban: iban, p_customer: n)
account.update(p_bank: bank) if bank
n.p_customer_ribs << rib
import_csv.import_csv_elements << ImportCsvElement.new(:element => rib)
import_csv.import_csv_elements << ImportCsvElement.new(:element => account)
end
if p_commercial_code || p_commercial_firstname
p_commercial = PCommercial.find_or_create_by!(code: p_commercial_code, firstname: p_commercial_firstname)
n.p_commercial = p_commercial
import_csv.import_csv_elements << ImportCsvElement.new(:element => p_commercial)
end
if send_tel || send_tel2 || send_fax || send_address_2
particular_send = Particular.new
particular_send.tel = send_tel if send_tel
particular_send.tel2 = send_tel2 if send_tel2
particular_send.fax = send_fax if send_fax
n.particulars << particular_send
n.particular_send_id = particular_send.id
end
n.p_contacts << contact if (contact.name || contact.tel || contact.email)
n.p_contacts << contact_2 if contact_2
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ n §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap n
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ contact §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap contact
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ n.contacts §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap n.p_contacts
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ n.particulars §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap n.particulars
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ n.p_customer_ribs §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap n.p_customer_ribs
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ n.p_commercial §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap n.p_commercial
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
# ap "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§"
import_csv.import_csv_elements << ImportCsvElement.new(:element => n)
end
end
end