@@ -65,6 +65,72 @@ def transform_childitems(self, data, parent_id, key, next_page_key):
6565
6666 return child_records
6767
68+ def get_fulfillment_line_items (self , fulfillment_id , next_page = None ):
69+ """
70+ Fetch all fulfillment line items for a given fulfillment ID.
71+ """
72+ fulfillment_line_items = []
73+ query = """
74+ query FulfillmentLineItems($fulfillmentId: ID!, $next_page: String) {
75+ fulfillment(id: $fulfillmentId) {
76+ fulfillmentLineItems(first: 1, after: $next_page) {
77+ pageInfo {
78+ hasNextPage
79+ endCursor
80+ }
81+ nodes {
82+ id
83+ quantity
84+ originalTotalSet {
85+ presentmentMoney {
86+ amount
87+ currencyCode
88+ }
89+ shopMoney {
90+ amount
91+ currencyCode
92+ }
93+ }
94+ discountedTotalSet {
95+ presentmentMoney {
96+ amount
97+ currencyCode
98+ }
99+ shopMoney {
100+ amount
101+ currencyCode
102+ }
103+ }
104+ lineItem {
105+ id
106+ }
107+ }
108+ }
109+ }
110+ }
111+ """
112+
113+ params = {
114+ "fulfillmentId" : fulfillment_id ,
115+ }
116+ if next_page :
117+ params ["next_page" ] = next_page
118+
119+ while True :
120+ response = self .call_api (params , query = query , data_key = "fulfillment" )
121+ fulfillment_line_items .extend (
122+ node for item in response .get ("fulfillmentLineItems" , {}).get ("nodes" , [])
123+ if (node := item )
124+ )
125+
126+ page_info = response .get ("fulfillmentLineItems" , {}).get ("pageInfo" , {})
127+ if not page_info .get ("hasNextPage" ):
128+ break
129+
130+ params ["next_page" ] = page_info .get ("endCursor" )
131+
132+ return fulfillment_line_items
133+
68134 def transform_object (self , obj ):
69135 """
70136 Transforms a collection object.
@@ -98,8 +164,16 @@ def transform_object(self, obj):
98164 )
99165 for item in obj ["fulfillments" ]:
100166 item ["fulfillmentOrders" ] = item ["fulfillmentOrders" ]["nodes" ]
101- item ["fulfillmentLineItems" ] = item ["fulfillmentLineItems" ]["nodes" ]
102167 item ["events" ] = item ["events" ]["nodes" ]
168+ initial_nodes = item ["fulfillmentLineItems" ]["nodes" ]
169+ if item ["fulfillmentLineItems" ]["pageInfo" ]["hasNextPage" ]:
170+ more_nodes = self .get_fulfillment_line_items (
171+ fulfillment_id = item ["id" ],
172+ next_page = item ["fulfillmentLineItems" ]["pageInfo" ]["endCursor" ]
173+ )
174+ item ["fulfillmentLineItems" ] = more_nodes + initial_nodes
175+ else :
176+ item ["fulfillmentLineItems" ] = initial_nodes
103177
104178 if obj .get ("fulfillmentOrdersForMerge" ):
105179 obj ["fulfillmentOrdersForMerge" ] = obj ["fulfillmentOrdersForMerge" ]["nodes" ]
@@ -286,6 +360,10 @@ def get_query(self):
286360 }
287361 }
288362 fulfillmentLineItems(first: 3) {
363+ pageInfo {
364+ hasNextPage
365+ endCursor
366+ }
289367 nodes {
290368 id
291369 quantity
@@ -313,7 +391,6 @@ def get_query(self):
313391 id
314392 }
315393 }
316-
317394 }
318395 legacyResourceId
319396 order {
0 commit comments