fulfillment_order.rb 3.9 KB

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