From 260e4f7b004adb52c2cf246fd29714e75e8a2fbf Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 20 Mar 2024 16:35:19 +1100 Subject: [PATCH] Create BackorderJob to place wholesale orders --- app/jobs/backorder_job.rb | 27 +++++++++++++++++++++++++++ app/models/spree/order.rb | 2 ++ spec/jobs/backorder_job_spec.rb | 13 +++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 app/jobs/backorder_job.rb create mode 100644 spec/jobs/backorder_job_spec.rb diff --git a/app/jobs/backorder_job.rb b/app/jobs/backorder_job.rb new file mode 100644 index 0000000000..7ce09eee75 --- /dev/null +++ b/app/jobs/backorder_job.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class BackorderJob < ApplicationJob + queue_as :default + + def self.check_stock(order) + variants_needing_stock = order.variants.select do |variant| + # TODO: scope variants to hub. + # We are only supporting producer stock at the moment. + variant.on_hand&.negative? + end + + linked_variants = variants_needing_stock.select do |variant| + variant.semantic_links.present? + end + + linked_variants.each do |variant| + # needed_quantity = -1 * variant.on_hand + # create DFC Order + # post order to endpoint + end + end + + def perform(*args) + # Do something later + end +end diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index e8974272c4..1e167f8e92 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -388,6 +388,8 @@ module Spree deliver_order_confirmation_email + BackorderJob.check_stock(self) + state_changes.create( previous_state: 'cart', next_state: 'complete', diff --git a/spec/jobs/backorder_job_spec.rb b/spec/jobs/backorder_job_spec.rb new file mode 100644 index 0000000000..09b2968c81 --- /dev/null +++ b/spec/jobs/backorder_job_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe BackorderJob do + let(:order) { create(:completed_order_with_totals) } + + describe ".check_stock" do + it "ignores products without semantic link" do + BackorderJob.check_stock(order) + end + end +end