From 0564ea59ac34f49fa97014057079164b7658fc36 Mon Sep 17 00:00:00 2001 From: bluebash-dev Date: Wed, 23 Mar 2022 13:15:24 +0530 Subject: [PATCH 1/6] bug fix for failure exception. --- app/services/spree/cart/add_item_decorator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/spree/cart/add_item_decorator.rb b/app/services/spree/cart/add_item_decorator.rb index 9837727d..f4390545 100644 --- a/app/services/spree/cart/add_item_decorator.rb +++ b/app/services/spree/cart/add_item_decorator.rb @@ -20,7 +20,7 @@ def add_to_line_item(order:, variant:, quantity: nil, options: {}) end line_item.target_shipment = options[:shipment] if options.key? :shipment - line_item.save! + return failure(line_item) unless line_item.save line_item.reload.update_price From e8c5691f7babf970681c304b1c77ee2aa7f77608 Mon Sep 17 00:00:00 2001 From: bluebash-dev Date: Fri, 8 Apr 2022 19:05:59 +0530 Subject: [PATCH 2/6] bug fix for stock manage --- .../backend/spree_product_assembly/index.js | 3 +- .../spree/admin/parts_controller.rb | 55 ++++++++++--------- .../spree/admin/parts/_parts_table.html.erb | 39 +++++++++---- 3 files changed, 61 insertions(+), 36 deletions(-) diff --git a/app/assets/javascripts/spree/backend/spree_product_assembly/index.js b/app/assets/javascripts/spree/backend/spree_product_assembly/index.js index 02ee3fed..d790db8f 100644 --- a/app/assets/javascripts/spree/backend/spree_product_assembly/index.js +++ b/app/assets/javascripts/spree/backend/spree_product_assembly/index.js @@ -91,7 +91,8 @@ partsTable.on("click", "a.set_count_admin_product_part_link", function() { var params; params = { - count: $("input", $(this).parent().parent()).val() + count: $("input#count", $(this).parent().parent()).val(), + change_part_id: $("select", $(this).parent().parent()).val() }; return makePostRequest($(this), params); }); diff --git a/app/controllers/spree/admin/parts_controller.rb b/app/controllers/spree/admin/parts_controller.rb index 2928b2ec..1f470de9 100644 --- a/app/controllers/spree/admin/parts_controller.rb +++ b/app/controllers/spree/admin/parts_controller.rb @@ -1,18 +1,19 @@ class Spree::Admin::PartsController < Spree::Admin::BaseController helper_method :product + before_action :find_assembly_part, only: [:set_count, :remove] def index @parts = product.assemblies_parts.includes(:assembly, :part) end def remove - assembly_part = Spree::AssembliesPart.find(params[:id]) - assembly_part.destroy + @assembly_part.delete_all if assembly_part.present? render 'spree/admin/parts/update_parts_table' end def set_count - save_part(existing_part_params) + @assembly_part.update_all(count: params[:count], part_id: params[:change_part_id]) if @assembly_part.present? + render 'spree/admin/parts/update_parts_table' end def available @@ -34,30 +35,34 @@ def create private - def save_part(part_params) - form = Spree::AssignPartToBundleForm.new(product, part_params) - if form.submit - render 'spree/admin/parts/update_parts_table' - else - error_message = form.errors.full_messages.to_sentence - render json: error_message.to_json, status: 422 - end + def save_part(part_params) + form = Spree::AssignPartToBundleForm.new(product, part_params) + if form.submit + render 'spree/admin/parts/update_parts_table' + else + error_message = form.errors.full_messages.to_sentence + render json: error_message.to_json, status: 422 end + end - def product - @product ||= Spree::Product.find_by(slug: params[:product_id]) - end + def product + @product ||= Spree::Product.find_by(slug: params[:product_id]) + end - def new_part_params - params.require(:assemblies_part).permit( - :count, - :part_id, - :assembly_id, - :variant_selection_deferred - ) - end + def new_part_params + params.require(:assemblies_part).permit( + :count, + :part_id, + :assembly_id, + :variant_selection_deferred + ) + end - def existing_part_params - params.permit(:id, :count) - end + def existing_part_params + params.permit(:id, :count, :part_id) + end + + def find_assembly_part + @assembly_part = Spree::AssembliesPart.where(assembly_id: params[:id], part_id: params[:part_id]) + end end diff --git a/app/views/spree/admin/parts/_parts_table.html.erb b/app/views/spree/admin/parts/_parts_table.html.erb index aa755356..da51aa71 100644 --- a/app/views/spree/admin/parts/_parts_table.html.erb +++ b/app/views/spree/admin/parts/_parts_table.html.erb @@ -1,31 +1,50 @@ - - - + + + - - + + + + <% parts.each do |part| %> + <% next unless part.part %> - + + + - + + <% end %> <% if parts.empty? %> From 7e1763e0c6e7d732aa6725afd42ce5151b76c760 Mon Sep 17 00:00:00 2001 From: bluebash-dev Date: Mon, 11 Apr 2022 11:48:26 +0530 Subject: [PATCH 3/6] code refactor. --- .../spree/admin/parts_controller.rb | 116 +++++++++--------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/app/controllers/spree/admin/parts_controller.rb b/app/controllers/spree/admin/parts_controller.rb index 1f470de9..f7144967 100644 --- a/app/controllers/spree/admin/parts_controller.rb +++ b/app/controllers/spree/admin/parts_controller.rb @@ -1,68 +1,74 @@ -class Spree::Admin::PartsController < Spree::Admin::BaseController - helper_method :product - before_action :find_assembly_part, only: [:set_count, :remove] +module Spree + module Admin + class PartsController < Spree::Admin::BaseController + helper_method :product + before_action :find_assembly_part, only: [:set_count, :remove] - def index - @parts = product.assemblies_parts.includes(:assembly, :part) - end + def index + @parts = product.assemblies_parts.includes(:assembly, :part) + end - def remove - @assembly_part.delete_all if assembly_part.present? - render 'spree/admin/parts/update_parts_table' - end + def remove + @assembly_part.delete_all if @assembly_part.present? + render 'spree/admin/parts/update_parts_table' + end - def set_count - @assembly_part.update_all(count: params[:count], part_id: params[:change_part_id]) if @assembly_part.present? - render 'spree/admin/parts/update_parts_table' - end + def set_count + @assembly_part.update_all(count: params[:count], part_id: params[:change_part_id]) if @assembly_part.present? + render 'spree/admin/parts/update_parts_table' + rescue Exception => e + render 'spree/admin/parts/update_parts_table', status: 422, json: e.to_json + end - def available - if params[:q].blank? - @available_products = [] - else - query = "%#{params[:q]}%" - @available_products = Spree::Product.search_can_be_part(query).distinct! - end - respond_to do |format| - format.html {render :layout => false} - format.js {render :layout => false} - end - end + def available + if params[:q].blank? + @available_products = [] + else + query = "%#{params[:q]}%" + @available_products = Spree::Product.search_can_be_part(query).distinct! + end + respond_to do |format| + format.html { render layout: false } + format.js { render layout: false } + end + end - def create - save_part(new_part_params) - end + def create + save_part(new_part_params) + end - private + private - def save_part(part_params) - form = Spree::AssignPartToBundleForm.new(product, part_params) - if form.submit - render 'spree/admin/parts/update_parts_table' - else - error_message = form.errors.full_messages.to_sentence - render json: error_message.to_json, status: 422 - end - end + def save_part(part_params) + form = Spree::AssignPartToBundleForm.new(product, part_params) + if form.submit + render 'spree/admin/parts/update_parts_table' + else + error_message = form.errors.full_messages.to_sentence + render json: error_message.to_json, status: 422 + end + end - def product - @product ||= Spree::Product.find_by(slug: params[:product_id]) - end + def product + @product ||= Spree::Product.find_by(slug: params[:product_id]) + end - def new_part_params - params.require(:assemblies_part).permit( - :count, - :part_id, - :assembly_id, - :variant_selection_deferred - ) - end + def new_part_params + params.require(:assemblies_part).permit( + :count, + :part_id, + :assembly_id, + :variant_selection_deferred + ) + end - def existing_part_params - params.permit(:id, :count, :part_id) - end + def existing_part_params + params.permit(:id, :count, :part_id) + end - def find_assembly_part - @assembly_part = Spree::AssembliesPart.where(assembly_id: params[:id], part_id: params[:part_id]) + def find_assembly_part + @assembly_part = Spree::AssembliesPart.where(assembly_id: params[:id], part_id: params[:part_id]) + end + end end end From fa85ded62cef8881b6a4405e0ac7df6fbc9d6fac Mon Sep 17 00:00:00 2001 From: rahulsingh-bluebash Date: Mon, 4 Jul 2022 15:58:36 +0530 Subject: [PATCH 4/6] update positions --- app/controllers/spree/admin/parts_controller.rb | 10 ++++++++++ app/models/spree/assemblies_part.rb | 2 +- app/views/spree/admin/parts/_parts_table.html.erb | 9 +++++++-- config/routes.rb | 1 + 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/controllers/spree/admin/parts_controller.rb b/app/controllers/spree/admin/parts_controller.rb index f7144967..602b5559 100644 --- a/app/controllers/spree/admin/parts_controller.rb +++ b/app/controllers/spree/admin/parts_controller.rb @@ -37,6 +37,16 @@ def create save_part(new_part_params) end + def update_positions + params[:positions].each do |id, index| + Spree::AssembliesPart.where(assembly_id: params[:assembly_id], part_id: id).update_all(position: index) + end + + respond_to do |format| + format.js { render plain: 'Ok' } + end + end + private def save_part(part_params) diff --git a/app/models/spree/assemblies_part.rb b/app/models/spree/assemblies_part.rb index 6147b016..cb7c8529 100644 --- a/app/models/spree/assemblies_part.rb +++ b/app/models/spree/assemblies_part.rb @@ -6,8 +6,8 @@ class AssembliesPart < ActiveRecord::Base belongs_to :part, class_name: "Spree::Variant", foreign_key: "part_id" + default_scope { order(:position) } delegate :name, :sku, to: :part - after_create :set_master_unlimited_stock def self.get(assembly_id, part_id) diff --git a/app/views/spree/admin/parts/_parts_table.html.erb b/app/views/spree/admin/parts/_parts_table.html.erb index da51aa71..c8d1614d 100644 --- a/app/views/spree/admin/parts/_parts_table.html.erb +++ b/app/views/spree/admin/parts/_parts_table.html.erb @@ -1,6 +1,7 @@ -
<%= Spree.t(:sku) %><%= Spree.t(:name) %>
<%= Spree.t(:sku) %><%= Spree.t(:name) %> <%= Spree.t(:options) %> <%= Spree.t(:variant) %><%= Spree.t(:qty) %>
<%= Spree.t(:qty) %>Stock
<%= part.sku %> <%= part.name %><%= part.options_text %> + <% if part.part.product.has_variants? %> + <%- opts = part.part.product.variants.map {|v| [v.options_text, v.id] } %> + <%= select_tag "part[id]", + options_for_select(opts, part&.part_id), + include_blank: Spree.t(:user_selectable), class: 'form-control' + %> + <% else %> + <%= hidden_field_tag "part[id]", part.part.master.id %> + <%= Spree.t(:no_variants) %> + <% end %> + <%= variant_including_master_options part.assembly %> <%= text_field_tag :count, part.count, class: "form-control" %> + <%= image_tag "spinner.gif", :style => "display:none", :class => "spinner" %> <%= link_to_with_icon("edit", Spree.t("edit"), - set_count_admin_product_part_url(product, part), + set_count_admin_product_part_url(product, id: part.assembly.id, part_id: part.part_id), :class => "set_count_admin_product_part_link btn btn-primary btn-sm", :no_text => true) %> <%= link_to_with_icon("delete", Spree.t("delete"), - remove_admin_product_part_url(product, part), + remove_admin_product_part_url(product, id: part.assembly.id, part_id: part.part_id), :class => "remove_admin_product_part_link btn btn-danger btn-sm delete-resource", :no_text => true) %> - + <%= part.part.stock_items.where(state: "available").sum(:count_on_hand) %> +
+
+ @@ -13,7 +14,11 @@ <% parts.each do |part| %> <% next unless part.part %> - + <%= hidden_field_tag "assembly[id]", part.assembly.id %> + +
<%= Spree.t(:sku) %> <%= Spree.t(:name) %> <%= Spree.t(:options) %>
+ + <%= part.sku %> <%= part.name %> diff --git a/config/routes.rb b/config/routes.rb index 875670b0..9ffc611c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,7 @@ collection do post :available get :selected + post :update_positions end end end From 5a95e091d000ef7fb7ea6f00efc1f1c0dd4987c1 Mon Sep 17 00:00:00 2001 From: rahulsingh-bluebash Date: Tue, 5 Jul 2022 15:22:36 +0530 Subject: [PATCH 5/6] code refactor. --- app/controllers/spree/admin/parts_controller.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controllers/spree/admin/parts_controller.rb b/app/controllers/spree/admin/parts_controller.rb index 602b5559..c5ef8b41 100644 --- a/app/controllers/spree/admin/parts_controller.rb +++ b/app/controllers/spree/admin/parts_controller.rb @@ -42,6 +42,9 @@ def update_positions Spree::AssembliesPart.where(assembly_id: params[:assembly_id], part_id: id).update_all(position: index) end + product = Spree::Product.find_by_slug(params[:product_id]) + product.touch if product.present? + respond_to do |format| format.js { render plain: 'Ok' } end From df467a19d49ad0856260ec362dd6e4486ad03799 Mon Sep 17 00:00:00 2001 From: bluebash-dev Date: Tue, 6 Sep 2022 17:58:02 +0530 Subject: [PATCH 6/6] bug fix for update inventory --- app/models/spree/line_item_decorator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/spree/line_item_decorator.rb b/app/models/spree/line_item_decorator.rb index 4b0731ab..8744c4af 100644 --- a/app/models/spree/line_item_decorator.rb +++ b/app/models/spree/line_item_decorator.rb @@ -31,7 +31,7 @@ def quantity_by_variant private def update_inventory - if (changed? || target_shipment.present?) && + if (saved_changes? || target_shipment.present?) && order.has_checkout_step?("delivery") if product.assembly? Spree::OrderInventoryAssembly.new(self).verify(target_shipment)