Simplify service with ivar

This commit is contained in:
Maikel Linke
2024-09-06 13:38:22 +10:00
parent c7fa3ff819
commit 3e0eb8708e
3 changed files with 18 additions and 12 deletions

View File

@@ -27,7 +27,7 @@ class BackorderJob < ApplicationJob
end
def self.place_backorder(order, linked_variants)
orderer = FdcBackorderer.new
orderer = FdcBackorderer.new(order.distributor.owner)
backorder = orderer.find_or_build_order(order)
catalog = load_catalog(order.distributor.owner)
@@ -39,7 +39,7 @@ class BackorderJob < ApplicationJob
line.quantity = line.quantity.to_i + needed_quantity
end
orderer.send_order(order, backorder)
orderer.send_order(backorder)
# Once we have transformations and know the quantities in bulk products
# we will need to increase on_hand by the ordered quantity.

View File

@@ -7,9 +7,14 @@ class FdcBackorderer
FDC_NEW_ORDER_URL = "#{FDC_ORDERS_URL}/#".freeze
FDC_SALE_SESSION_URL = "#{FDC_BASE_URL}/SalesSession/#".freeze
attr_reader :user
def initialize(user)
@user = user
end
def find_or_build_order(ofn_order)
remote_order = find_open_order(ofn_order.distributor.owner)
remote_order || build_new_order(ofn_order)
find_open_order || build_new_order(ofn_order)
end
def build_new_order(ofn_order)
@@ -18,8 +23,8 @@ class FdcBackorderer
end
end
def find_open_order(user)
graph = import(user, FDC_ORDERS_URL)
def find_open_order
graph = import(FDC_ORDERS_URL)
open_orders = graph&.select do |o|
o.semanticType == "dfc-b:Order" && o.orderStatus[:path] == "Held"
end
@@ -78,20 +83,20 @@ class FdcBackorderer
end
end
def import(user, url)
def import(url)
api = DfcRequest.new(user)
json = api.call(url)
DfcIo.import(json)
end
def send_order(ofn_order, backorder)
def send_order(backorder)
lines = backorder.lines
offers = lines.map(&:offer)
products = offers.map(&:offeredItem)
sessions = [backorder.saleSession].compact
json = DfcIo.export(backorder, *lines, *offers, *products, *sessions)
api = DfcRequest.new(ofn_order.distributor.owner)
api = DfcRequest.new(user)
if backorder.semanticId == FDC_NEW_ORDER_URL
# Create order via POST:
@@ -102,9 +107,9 @@ class FdcBackorderer
end
end
def complete_order(ofn_order, backorder)
def complete_order(backorder)
backorder.orderStatus = "dfc-v:Complete"
send_order(ofn_order, backorder)
send_order(backorder)
end
def build_sale_session(order)

View File

@@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe FdcBackorderer do
let(:subject) { FdcBackorderer.new(order.distributor.owner) }
let(:order) { create(:completed_order_with_totals) }
let(:account) {
OidcAccount.new(
@@ -41,7 +42,7 @@ RSpec.describe FdcBackorderer do
expect(backorder.semanticId).to match %r{^https.*/[0-9]+$}
expect(backorder.lines.count).to eq 1
subject.complete_order(order, backorder)
subject.complete_order(backorder)
remaining_open_order = subject.find_or_build_order(order)
expect(remaining_open_order.semanticId).not_to eq backorder.semanticId