mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Simplify service with ivar
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user