217 lines
5.7 KiB
Python
217 lines
5.7 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
import shopify
|
|
|
|
from trytond.modules.web_shop_shopify.common import id2gid
|
|
from trytond.modules.web_shop_shopify.shopify_retry import GraphQLException
|
|
|
|
|
|
def get_location():
|
|
return shopify.GraphQL().execute('''{
|
|
locations(first:1) {
|
|
nodes {
|
|
id
|
|
}
|
|
}
|
|
}''')['data']['locations']['nodes'][0]
|
|
|
|
|
|
def get_inventory_levels(location):
|
|
return shopify.GraphQL().execute('''query InventoryLevels($id: ID!) {
|
|
location(id: $id) {
|
|
inventoryLevels(first: 250) {
|
|
nodes {
|
|
item {
|
|
id
|
|
}
|
|
quantities(names: ["available"]) {
|
|
name
|
|
quantity
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}''', {
|
|
'id': location['id'],
|
|
})['data']['location']['inventoryLevels']['nodes']
|
|
|
|
|
|
def get_product(id):
|
|
return shopify.GraphQL().execute('''query Product($id: ID!) {
|
|
product(id: $id) {
|
|
status
|
|
}
|
|
}''', {
|
|
'id': id2gid('Product', id),
|
|
})['data']['product']
|
|
|
|
|
|
def delete_product(id):
|
|
result = shopify.GraphQL().execute('''mutation productDelete($id: ID!) {
|
|
productDelete(input: {id: $id}) {
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'id': id,
|
|
})['data']['productDelete']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|
|
|
|
|
|
def delete_collection(id):
|
|
result = shopify.GraphQL().execute('''mutation collectionDelete($id: ID!) {
|
|
collectionDelete(input: {id: $id}) {
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'id': id,
|
|
})['data']['collectionDelete']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|
|
|
|
|
|
def create_customer(customer):
|
|
result = shopify.GraphQL().execute('''mutation customerCreate(
|
|
$input: CustomerInput!) {
|
|
customerCreate(input: $input) {
|
|
customer {
|
|
id
|
|
}
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'input': customer,
|
|
})['data']['customerCreate']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|
|
return result['customer']
|
|
|
|
|
|
def delete_customer(id):
|
|
result = shopify.GraphQL().execute('''mutation customerDelete($id: ID!) {
|
|
customerDelete(input: {id: $id}) {
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'id': id,
|
|
})['data']['customerDelete']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|
|
|
|
|
|
def create_order(order):
|
|
result = shopify.GraphQL().execute('''mutation orderCreate(
|
|
$order: OrderCreateOrderInput!) {
|
|
orderCreate(order: $order) {
|
|
order {
|
|
id
|
|
totalPriceSet {
|
|
presentmentMoney {
|
|
amount
|
|
currencyCode
|
|
}
|
|
}
|
|
displayFinancialStatus
|
|
displayFulfillmentStatus
|
|
transactions(first: 250) {
|
|
id
|
|
}
|
|
fulfillments {
|
|
id
|
|
}
|
|
closed
|
|
}
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'order': order,
|
|
})['data']['orderCreate']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|
|
return result['order']
|
|
|
|
|
|
def get_order(id):
|
|
return shopify.GraphQL().execute('''query Order($id: ID!) {
|
|
order(id: $id) {
|
|
id
|
|
totalPriceSet {
|
|
presentmentMoney {
|
|
amount
|
|
currencyCode
|
|
}
|
|
}
|
|
displayFinancialStatus
|
|
displayFulfillmentStatus
|
|
transactions(first: 250) {
|
|
id
|
|
}
|
|
fulfillments {
|
|
id
|
|
fulfillmentLineItems(first: 10) {
|
|
nodes {
|
|
quantity
|
|
}
|
|
}
|
|
}
|
|
closed
|
|
}
|
|
}''', {
|
|
'id': id,
|
|
})['data']['order']
|
|
|
|
|
|
def capture_order(id, amount, parent_transaction_id):
|
|
result = shopify.GraphQL().execute('''mutation orderCapture(
|
|
$input: OrderCaptureInput!) {
|
|
orderCapture(input: $input) {
|
|
transaction {
|
|
id
|
|
}
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'input': {
|
|
'amount': amount,
|
|
'id': id,
|
|
'parentTransactionId': parent_transaction_id,
|
|
},
|
|
})['data']['orderCapture']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|
|
return result['transaction']
|
|
|
|
|
|
def delete_order(id):
|
|
result = shopify.GraphQL().execute('''mutation orderDelete($orderId: ID!) {
|
|
orderDelete(orderId: $orderId) {
|
|
userErrors {
|
|
field
|
|
message
|
|
}
|
|
}
|
|
}''', {
|
|
'orderId': id,
|
|
})['data']['orderDelete']
|
|
if errors := result.get('userErrors'):
|
|
raise GraphQLException({'errors': errors})
|