diff --git a/app/controllers/admin/p_product_stocks_controller.rb b/app/controllers/admin/p_product_stocks_controller.rb index 80c807a..4bfd2a1 100644 --- a/app/controllers/admin/p_product_stocks_controller.rb +++ b/app/controllers/admin/p_product_stocks_controller.rb @@ -12,14 +12,16 @@ class Admin::PProductStocksController < ApplicationController @file = "" @headers = [ - "ID Sys", + "ID produit Sys.", "Ref produit", "Nom", + "ID variante", "Ref variante", "Taille", "Couleur", "Stock Physique", - "Stock théorique (prenant en compte les commandes en cours)" + "Stock theo", + "Stock const" ] @@ -34,6 +36,7 @@ class Admin::PProductStocksController < ApplicationController line << p_product.code line << p_product.name + line << pps.id line << pps.code line << (pps.p_color ? pps.p_color.name : "") line << (pps.p_size ? pps.p_size.name : "") @@ -42,6 +45,8 @@ class Admin::PProductStocksController < ApplicationController line << pps.stock_th_ok + line << "" + csv << line end @@ -78,7 +83,7 @@ class Admin::PProductStocksController < ApplicationController end def import - if true + if false #@file = params[:csv_file] @@ -90,6 +95,20 @@ class Admin::PProductStocksController < ApplicationController end + def import_stocks + @file = params[:csv_file] if params[:csv_file] + + if @file + csv_text = @file.tempfile.read #.force_encoding('ISO-8859-1').encode('utf-8') + + @csv = CSV.parse(csv_text, :headers => true, :col_sep => ";") + else + + end + + + end + def import_prix if false diff --git a/app/models/p_import_stock.rb b/app/models/p_import_stock.rb new file mode 100644 index 0000000..dd9f9e1 --- /dev/null +++ b/app/models/p_import_stock.rb @@ -0,0 +1,7 @@ +class PImportStock < ActiveRecord::Base + + has_many :p_import_stock_product_stocks + + has_many :p_product_stocks, :through => :p_import_stock_product_stocks + +end diff --git a/app/models/p_import_stock_product_stock.rb b/app/models/p_import_stock_product_stock.rb new file mode 100644 index 0000000..eba48b4 --- /dev/null +++ b/app/models/p_import_stock_product_stock.rb @@ -0,0 +1,4 @@ +class PImportStockProductStock < ActiveRecord::Base + belongs_to :p_import_stock + belongs_to :p_product_stock +end diff --git a/app/views/admin/p_product_stocks/import_stocks.html.haml b/app/views/admin/p_product_stocks/import_stocks.html.haml new file mode 100644 index 0000000..8271b29 --- /dev/null +++ b/app/views/admin/p_product_stocks/import_stocks.html.haml @@ -0,0 +1,112 @@ +.qi_header + + %h1 + Achats + %span + Import stocks + + +.qi_row + .qi_pannel.qi_plain.padding + + -if !@csv and !params[:import_ok] + =form_tag import_stocks_admin_p_product_stocks_path(), multipart: true do + =file_field_tag :csv_file + %br + %br + =submit_tag "Vérifier et importer", :class => "btn btn-primary" + + -if @csv + =form_tag import_stocks_admin_p_product_stocks_path(), multipart: true do + =hidden_field_tag "import_ok", true + %table.table.table-striped + %tr + %th + %th Réf variante + %th Id variante + %th Méthode ident. + %th Nom produit + %th Taille + %th Couleur + %th Stock actuel + %th Stock à importer + + -@csv.each do |row| + -ps = nil + -if row["Stock const"].to_s != "" + -if row["Ref variante"].to_s != "" and PProductStock.where(:code => row["Ref variante"]).count == 1 + -m = "Par réf." + -ps = PProductStock.where(:code => row["Ref variante"]).first + + -elsif row["ID variante"].to_s != "" and PProductStock.where(:id => row["ID variante"]).count == 1 + + -m = "Par id" + -ps = PProductStock.where(:id => row["ID variante"]).first + + -else + -m = "Produit introuvable" + + + + %tr + %td + =check_box_tag :"ids[]", ps.id, true if ps + =hidden_field_tag "ps_#{ps.id}", row["Stock const"] + + %td=row["Ref variante"] + %td=row["ID variante"] + %td=m + + -if ps + %td=ps.p_product.name + %td=ps.p_size.name if ps.p_size + %td=ps.p_color.name if ps.p_color + %td=ps.stock_ok + -else + %td + %td + %td + + + + %td=row["Stock const"] + + =submit_tag "Valider et importer", :class => "btn btn-primary" + + -if params[:import_ok] + + %h2 Import réalisé + -p_import_stock = PImportStock.create() + %table.table.table-striped + %tr + %th Réf variante + %th Id variante + %th Nom produit + %th Taille + %th Couleur + %th Stock actuel + %th Stock importé + + -params[:ids].each do |id| + -ps = PProductStock.where(:id => id.to_i).first + + -p_import_stock.p_import_stock_product_stocks << PImportStockProductStock.new(:stock => params[:"ps_#{ps.id}"], :past_stock => ps.stock_ok, :p_product_stock => ps) + + %tr + %td=ps.code + %td=ps.id + %td=ps.p_product.name + %td=ps.p_size.name if ps.p_size + %td=ps.p_color.name if ps.p_color + %td=ps.stock_ok + %td=params[:"ps_#{ps.id}"] + + + -ps.stock_ok = params[:"ps_#{ps.id}"] + -ps.save + + %br + %br + =link_to "Retour au résumé stock", admin_p_product_stocks_path, :class => "btn btn-default" + + \ No newline at end of file diff --git a/app/views/admin/p_product_stocks/index.html.haml b/app/views/admin/p_product_stocks/index.html.haml index fcecb01..3411b2d 100644 --- a/app/views/admin/p_product_stocks/index.html.haml +++ b/app/views/admin/p_product_stocks/index.html.haml @@ -9,6 +9,7 @@ .qi_row .qi_pannel.qi_plain.padding =link_to "Export stocks", export_admin_p_product_stocks_path, :class => "btn btn-default" + =link_to "Import stocks", import_stocks_admin_p_product_stocks_path, :class => "btn btn-default" %br %br diff --git a/config/routes.rb b/config/routes.rb index e3e5703..743a02f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -135,6 +135,8 @@ Rails.application.routes.draw do get :export get :import get :import_prix + get :import_stocks + post :import_stocks end end diff --git a/db/migrate/20190704151810_create_p_import_stocks.rb b/db/migrate/20190704151810_create_p_import_stocks.rb new file mode 100644 index 0000000..6aaa89d --- /dev/null +++ b/db/migrate/20190704151810_create_p_import_stocks.rb @@ -0,0 +1,9 @@ +class CreatePImportStocks < ActiveRecord::Migration + def change + create_table :p_import_stocks do |t| + t.string :name + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20190704151954_create_p_import_stock_product_stocks.rb b/db/migrate/20190704151954_create_p_import_stock_product_stocks.rb new file mode 100644 index 0000000..cae670a --- /dev/null +++ b/db/migrate/20190704151954_create_p_import_stock_product_stocks.rb @@ -0,0 +1,16 @@ +class CreatePImportStockProductStocks < ActiveRecord::Migration + def change + create_table :p_import_stock_product_stocks do |t| + t.boolean :ignored, :default => false + t.references :p_import_stock, index: true, foreign_key: true + t.references :p_product_stock, index: true, foreign_key: true + t.decimal :stock, :precision => 12, :scale => 2 + t.decimal :stock_th, :precision => 12, :scale => 2 + t.decimal :past_stock, :precision => 12, :scale => 2 + t.decimal :past_stock_th, :precision => 12, :scale => 2 + t.text :csv_line + + t.timestamps null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 20fdf71..fec8a88 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190627165947) do +ActiveRecord::Schema.define(version: 20190704151954) do create_table "admin_admin_roles", force: :cascade do |t| t.integer "admin_id", limit: 4 @@ -997,6 +997,28 @@ ActiveRecord::Schema.define(version: 20190627165947) do t.string "tel", limit: 255 end + create_table "p_import_stock_product_stocks", force: :cascade do |t| + t.boolean "ignored", default: false + t.integer "p_import_stock_id", limit: 4 + t.integer "p_product_stock_id", limit: 4 + t.decimal "stock", precision: 12, scale: 2 + t.decimal "stock_th", precision: 12, scale: 2 + t.decimal "past_stock", precision: 12, scale: 2 + t.decimal "past_stock_th", precision: 12, scale: 2 + t.text "csv_line", limit: 65535 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "p_import_stock_product_stocks", ["p_import_stock_id"], name: "index_p_import_stock_product_stocks_on_p_import_stock_id", using: :btree + add_index "p_import_stock_product_stocks", ["p_product_stock_id"], name: "index_p_import_stock_product_stocks_on_p_product_stock_id", using: :btree + + create_table "p_import_stocks", force: :cascade do |t| + t.string "name", limit: 255 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "p_origines", force: :cascade do |t| t.string "name", limit: 255 t.datetime "created_at", null: false @@ -1634,6 +1656,8 @@ ActiveRecord::Schema.define(version: 20190627165947) do add_foreign_key "p_customers", "p_price_cats" add_foreign_key "p_degressifs", "p_price_cats" add_foreign_key "p_degressifs", "p_products" + add_foreign_key "p_import_stock_product_stocks", "p_import_stocks" + add_foreign_key "p_import_stock_product_stocks", "p_product_stocks" add_foreign_key "p_price_cat_p_degressifs", "p_degressifs" add_foreign_key "p_price_cat_p_degressifs", "p_price_cats" add_foreign_key "p_product_certifs", "p_certifs" diff --git a/test/fixtures/p_import_stock_product_stocks.yml b/test/fixtures/p_import_stock_product_stocks.yml new file mode 100644 index 0000000..6b0d0f8 --- /dev/null +++ b/test/fixtures/p_import_stock_product_stocks.yml @@ -0,0 +1,19 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + ignored: false + p_import_stock_id: + p_product_stock_id: + stock: 9.99 + stock_th: 9.99 + past_stock: 9.99 + past_stock_th: 9.99 + +two: + ignored: false + p_import_stock_id: + p_product_stock_id: + stock: 9.99 + stock_th: 9.99 + past_stock: 9.99 + past_stock_th: 9.99 diff --git a/test/fixtures/p_import_stocks.yml b/test/fixtures/p_import_stocks.yml new file mode 100644 index 0000000..56066c6 --- /dev/null +++ b/test/fixtures/p_import_stocks.yml @@ -0,0 +1,7 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: MyString + +two: + name: MyString diff --git a/test/models/p_import_stock_product_stock_test.rb b/test/models/p_import_stock_product_stock_test.rb new file mode 100644 index 0000000..0dc4ad4 --- /dev/null +++ b/test/models/p_import_stock_product_stock_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class PImportStockProductStockTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/models/p_import_stock_test.rb b/test/models/p_import_stock_test.rb new file mode 100644 index 0000000..96419ab --- /dev/null +++ b/test/models/p_import_stock_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class PImportStockTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end