Hi Andrew,
could you please advice about the Jam way of doing this query?
The closest I got is below, but that is showing partial data, not full data as above SQL
(for example, it is not showing Products with no values in other tables):
# def get_records(item):
# res, inventory = [], product = [], ''
# product = item.task.products.copy()
# #product.set_where(id=41)
# #product.set_order_by('id')
# #product.open(fields=['id', 'product_name', 'target_level'])
# product.open(fields=['id', 'product_name', 'target_level'],
# #funcs={'quantity': 'sum'},
# group_by=['id'], order_by=['id'])
# for p in product:
# allocated_inventory = 0
# target_level = 0
# product_id = product.id.value
# #product_name = product.product_name.display_text
# target_level += product.target_level.value
# print(product_id)
# order_details = item.task.order_details.copy()
# order_details.set_fields('product_id', 'status_id', 'quantity')
# #order_details.set_where(product_id=product_id, status_id=4);
# order_details.set_where(product_id=product_id);
# order_details.open(fields=['product_id', 'quantity', 'status_id'],
# funcs={'quantity': 'sum'},
# group_by=['product_id'], order_by=['product_id'])
# #print(order_details.status_id.value)
# for i in order_details:
# quantity = 0;
# transaction_type = 0
# quantity_sold = 0
# quantity_purchased = 0
# quantity_on_hold = 0
# quantity_on_hand = 0
# quantity_on_order = 0
# quantity_on_back_order = 0
# #quantity += order_details.quantity.value
# #print()
# inv_transactions = item.task.inventory_transactions.copy()
# inv_transactions.set_fields('product_id', 'transaction_type', 'quantity')
# inv_transactions.set_where(product_id=product_id, transaction_type__in=[1,2,3])
# inv_transactions.open(fields=['product_id', 'transaction_type', 'quantity'],
# funcs={'quantity': 'sum'},
# group_by=['transaction_type'], order_by=['product_id'])
# #inv_transactions.open(fields=['product_id', 'transaction_type', 'quantity'],
# # funcs={'quantity': 'sum'},
# # group_by=['product_id'], order_by=['product_id'])
# for i in inv_transactions:
# #allocated_inventory += inv_transactions.quantity.value
# if inv_transactions.transaction_type.value == 1:
# quantity_purchased += inv_transactions.quantity.value
# if inv_transactions.transaction_type.value == 2:
# quantity_sold += inv_transactions.quantity.value
# if inv_transactions.transaction_type.value == 3:
# quantity_on_hold += inv_transactions.quantity.value
# quantity_on_hand = quantity_purchased - quantity_sold
# purchase_order_details = item.task.purchase_order_details.copy()
# purchase_order_details.set_fields('product_id', 'posted_to_inventory', 'quantity')
# purchase_order_details.set_where(product_id=product_id, posted_to_inventory=0)
# purchase_order_details.open(fields=['product_id', 'quantity'],
# funcs={'id': 'count'},
# group_by=['product_id'], order_by=['product_id'])
# for i in purchase_order_details:
# quantity_on_order = purchase_order_details.quantity.value
# res.append(
# {
# 'product_name': i.product_id.display_text,
# 'target_level': target_level,
# 'quantity_on_hold': quantity_on_hold,
# 'quantity_on_hand': quantity_on_hand,
# 'quantity_purchased': quantity_purchased,
# 'quantity_sold': quantity_sold,
# 'quantity_on_order': quantity_on_order
# }
# )
# print(res)
# return res
Thanks