fulfillment_order.rb 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. module ShopifyAPI
  2. class FulfillmentOrder < Base
  3. MINIMUM_VERSION = '2020-01'
  4. def initialize(attributes = {}, persisted = false)
  5. ShopifyAPI::Base.version_validation!(MINIMUM_VERSION)
  6. super(attributes, persisted)
  7. end
  8. def self.find(scope, *args)
  9. ShopifyAPI::Base.version_validation!(MINIMUM_VERSION)
  10. if scope == :all
  11. order_id = args.first&.dig(:params, :order_id)
  12. raise ShopifyAPI::ValidationException, "'order_id' is required" if order_id.blank?
  13. order = ::ShopifyAPI::Order.new(id: order_id)
  14. order.fulfillment_orders(args.first[:params].except(:order_id))
  15. else
  16. super(scope, *args)
  17. end
  18. end
  19. def fulfillments(options = {})
  20. fulfillment_hashes = get(:fulfillments, options)
  21. fulfillment_hashes.map { |fulfillment_hash| Fulfillment.new(fulfillment_hash) }
  22. end
  23. def locations_for_move
  24. locations_for_move_hashes = get(:locations_for_move, {})
  25. locations_for_move_hashes.map do |locations_for_move_hash|
  26. FulfillmentOrderLocationsForMove.new(locations_for_move_hash)
  27. end
  28. end
  29. def move(new_location_id:)
  30. body = {
  31. fulfillment_order: {
  32. new_location_id: new_location_id
  33. }
  34. }
  35. keyed_fulfillment_orders = keyed_fulfillment_orders_from_response(post(:move, {}, body.to_json))
  36. load_keyed_fulfillment_order(keyed_fulfillment_orders, 'original_fulfillment_order')
  37. keyed_fulfillment_orders
  38. end
  39. def cancel
  40. keyed_fulfillment_orders = keyed_fulfillment_orders_from_response(post(:cancel, {}, only_id))
  41. load_keyed_fulfillment_order(keyed_fulfillment_orders, 'fulfillment_order')
  42. keyed_fulfillment_orders
  43. end
  44. def close(message: nil)
  45. body = {
  46. fulfillment_order: {
  47. message: message
  48. }
  49. }
  50. load_attributes_from_response(post(:close, {}, body.to_json))
  51. end
  52. def request_fulfillment(fulfillment_order_line_items: nil, message: nil)
  53. body = {
  54. fulfillment_request: {
  55. fulfillment_order_line_items: fulfillment_order_line_items,
  56. message: message
  57. }
  58. }
  59. keyed_fulfillment_orders = keyed_fulfillment_orders_from_response(post(:fulfillment_request, {}, body.to_json))
  60. load_keyed_fulfillment_order(keyed_fulfillment_orders, 'original_fulfillment_order')
  61. keyed_fulfillment_orders
  62. end
  63. def accept_fulfillment_request(message: nil)
  64. body = {
  65. fulfillment_request: {
  66. message: message
  67. }
  68. }
  69. load_attributes_from_response(post('fulfillment_request/accept', {}, body.to_json))
  70. end
  71. def reject_fulfillment_request(message: nil)
  72. body = {
  73. fulfillment_request: {
  74. message: message
  75. }
  76. }
  77. load_attributes_from_response(post('fulfillment_request/reject', {}, body.to_json))
  78. end
  79. def request_cancellation(message: nil)
  80. body = {
  81. cancellation_request: {
  82. message: message
  83. }
  84. }
  85. load_attributes_from_response(post(:cancellation_request, {}, body.to_json))
  86. end
  87. def accept_cancellation_request(message: nil)
  88. body = {
  89. cancellation_request: {
  90. message: message
  91. }
  92. }
  93. load_attributes_from_response(post('cancellation_request/accept', {}, body.to_json))
  94. end
  95. def reject_cancellation_request(message: nil)
  96. body = {
  97. cancellation_request: {
  98. message: message
  99. }
  100. }
  101. load_attributes_from_response(post('cancellation_request/reject', {}, body.to_json))
  102. end
  103. private
  104. def load_keyed_fulfillment_order(keyed_fulfillment_orders, key)
  105. if keyed_fulfillment_orders[key]&.attributes
  106. load(keyed_fulfillment_orders[key].attributes, false, true)
  107. end
  108. end
  109. def keyed_fulfillment_orders_from_response(response)
  110. return load_attributes_from_response(response) if response.code != '200'
  111. keyed_fulfillment_orders = ActiveSupport::JSON.decode(response.body)
  112. keyed_fulfillment_orders.transform_values do |fulfillment_order_attributes|
  113. FulfillmentOrder.new(fulfillment_order_attributes) if fulfillment_order_attributes
  114. end
  115. end
  116. end
  117. end