diff --git a/app/models/price_document.rb b/app/models/price_document.rb index 3fe9fe5..5161238 100644 --- a/app/models/price_document.rb +++ b/app/models/price_document.rb @@ -31,7 +31,7 @@ class PriceDocument < ApplicationRecord AVANCEMENT = ["0%", "25%", "50%", "75%", "100"] validates :public_fournisseur_name, :presence => true, :if => :public_fournisseur_name_needed? - acts_as_csv_import :fields => [:p_fournisseur_id, :p_product_ref] + acts_as_csv_import :fields => [:p_fournisseur_id, :p_fournisseur_name, :p_fournisseur_ref_ref, :p_fournisseur_ref_label, :p_product_ref_name, :price_line_qte, :date, :price_line_ct_u_price_ht, :p_devise ] def public_fournisseur_name_needed? if self.label == "Réponse fournisseur" @@ -709,57 +709,52 @@ class PriceDocument < ApplicationRecord def self.custom_csv_import(list, import_csv) - ap "*********************************************************************************************************" - ap "*********************************************************************************************************" - ap "*********************************************************************************************************" - ap list - ap list.class - ap "*********************************************************************************************************" - ap "*********************************************************************************************************" - ap "*********************************************************************************************************" - ap import_csv - ap "*********************************************************************************************************" - ap "*********************************************************************************************************" - ap "*********************************************************************************************************" list.each do |row| + p_product_ref = nil - n = self.new(price_document_type: PriceDocumentType.find_by_label("Catalogue fournisseur")) - # price_document = PriceDocument.new(price_document_type: PriceDocumentType.find_by_label("Catalogue fournisseur")) - contact_2 = nil - contact_3 = nil - row.each do |key, value| + p_devise = PDevise.find_by(symbol: row["p_devise"]) - if self.type_for_attribute(key) and self.type_for_attribute(key).type == :decimal - eval "n.#{key} = value.to_s.gsub(' ', '').gsub(',', '.')" - # elsif key == "p_fournisseur_id" - # price_document.p_fournisseur = PFournisseur.find(key) - # elsif key == "p_contact_comment" - # contact_1.p_contact_types << PContactType.find_or_create_by(name: value) - # elsif key == "p_contact_tel" - # contact_1.tel = value - # elsif key == "p_contact_skype" - # contact_1.skype = value - # elsif key == "p_contact_email_1" - # contact_1.email = value - # elsif key == "p_contact_email_2" - # contact_2 = PContact.new(email: value) - # elsif key == "p_contact_email_3" - # contact_3 = PContact.new(email: value) - # elsif key == "p_payment_type" - # n.p_payment_type_id = PPaymentType.find_or_create_by(name: value).id - else - eval "n.#{key} = value" - end + p_fournisseur = PFournisseur.find_by(id: row["p_fournisseur_id"]) + if row["p_fournisseur_id"].nil? + p_fournisseur = PFournisseur.find_by(name: row["p_fournisseur_name"]) end - # particular.organisation = self.name - # n.save - ap n - # n.p_contacts << contact_1 if (contact_1.name || contact_1.tel || contact_1.skype || contact_1.email) - # n.p_contacts << contact_2 if contact_2 - # n.p_contacts << contact_3 if contact_3 - # import_csv.import_csv_elements << ImportCsvElement.new(:element => n) + + raise "Fournisseur introuvable. Ajouter le fournisseur manquant avant l'import" if p_fournisseur.nil? + + n = self.find_or_initialize_by(price_document_type: PriceDocumentType.find_by_label("Catalogue fournisseur"), p_fournisseur: p_fournisseur, date: row["date"], p_devise: p_devise ) + if n.price_line_block.nil? + n.price_line_block = PriceLineBlock.new(p_devise: p_devise, p_fournisseur: p_fournisseur, imported: true) + end + + + if row["p_fournisseur_ref_ref"].present? + p_fournisseur_ref = PFournisseurRef.find_by(p_fournisseur: p_fournisseur, ref: row["p_fournisseur_ref_ref"]) + p_product_ref = p_fournisseur_ref.p_product_ref if p_fournisseur_ref + else + p_fournisseur_ref = PFournisseurRef.find_by(p_fournisseur: p_fournisseur, label: row["p_fournisseur_ref_label"]) + p_product_ref = p_fournisseur_ref.p_product_ref if p_fournisseur_ref + end + + + if row["price_line_qte"].kind_of? Float + qte = row["price_line_qte"] + elsif row["price_line_qte"].kind_of? Integer + qte = row["price_line_qte"].to_f + elsif row["price_line_qte"].kind_of? String + qte = row["price_line_qte"].split.map {|x| x[/\d+/]}[0].to_f + else + qte = 0 + end + + price_line = PriceLine.new(p_product_ref: p_product_ref, ct_ref: row["p_fournisseur_ref_ref"], ct_title: row["p_fournisseur_ref_label"], price_line_block: n.price_line_block, qte: qte || 0.0, ct_u_price_ht: row["price_line_ct_u_price_ht"], imported: true ) + price_line.p_product = p_product_ref.p_product if p_product_ref && p_product_ref.p_product + n.price_line_block.price_lines << price_line + + + n.save + import_csv.import_csv_elements << ImportCsvElement.new(:element => n) end end