admin-dashboard-backend/groupTasks/groups/shx-fetch-google-sheet-prod.../script.py

124 lines
3.8 KiB
Python

import gspread
import json
import codecs
import sys
def add_underscore_at_position(text, position):
# Split the string into a list of words
words = text.split()
# Check if the text contains less than two words
if len(words) < 2:
return text
# Check if the position is valid
if position < 0 or position >= len(words) - 1:
raise ValueError("Invalid position for underscore")
# Add the underscore between the words at the specified position
words[position] = words[position] + '_' + words[position + 1]
# Remove the word at the next position since it's already added
del words[position + 1]
# Join the list back into a string
result = ' '.join(words)
return result
# values by google sheets are returned like "Gold (Gl\u00e4nzend)"
def decode_unicode_escapes(text):
# Decode Unicode escape sequences
return codecs.decode(text, 'unicode_escape')
def update_grouptask_products_list_options(index_json_path, products_list):
with open(index_json_path, 'r', encoding='utf-8') as json_file:
data = json.load(json_file)
options_list = []
for product in products_list:
# replace _ with " " just for better style in dashboard
product_name = product['name'].replace("_", " ")
option = f"#{product['id']} {product_name}, {product['product_variant']}, {product['product_color']}"
options_list.append(option)
for task in data['tasks']:
for parameter in task['parameters']:
if parameter['parameterName'] == 'product_type_id':
parameter['options'] = options_list
with open(index_json_path, 'w', encoding='utf-8') as output_file:
json.dump(data, output_file, ensure_ascii=False, indent=2)
def google_sheets_products():
gc = gspread.service_account(
filename="../../secrets/shinnex-424321-b88b144bc9ef.json")
spreadsheet = gc.open_by_key(
"1gZkjykb55aLWumBxHxj_ZUq_ktjGK4FlJsH_9qg-ThU")
worksheet = spreadsheet.worksheet("Produkte")
data = worksheet.get_all_values()
# auto get the row index numbers for the columns
products = []
rowIndexProductId = -1
rowIndexProductName = -1
rowIndexProductVariant = -1
rowIndexProductVariantCharacteristics = -1
rowIndexNameSplitAtPosition = -1
for i in range(len(data[1])):
row = data[1][i]
if row == "#id":
rowIndexProductId = i
elif row == "Name":
rowIndexProductName = i
elif row == "Produktvariante":
rowIndexProductVariant = i
elif row == "Produktfarbe/Characteristics":
rowIndexProductVariantCharacteristics = i
elif row == "Name trennen bei Position":
rowIndexNameSplitAtPosition = i
if rowIndexProductId == -1 or rowIndexProductId == -1 or rowIndexProductName == -1 or rowIndexProductVariant == -1 or rowIndexProductVariantCharacteristics == -1:
sys.exit("Failed to get row index. Please check if the row names are equal to the names of the google sheet table header")
# adding products to list
for row in data[2:]:
if row[0] == "":
continue
products.append({
"id": row[rowIndexProductId],
"name": add_underscore_at_position(row[1], int(row[rowIndexNameSplitAtPosition])),
"product_variant": row[rowIndexProductVariant],
"product_color": row[rowIndexProductVariantCharacteristics]
})
products_dict = {"products": products}
# Write the products list to a JSON file
with open('../../groupsData/google-sheet-products.json', 'w', encoding='utf-8') as json_file:
json.dump(products_dict, json_file, ensure_ascii=False, indent=2)
update_grouptask_products_list_options(
"../../groups/shx-product-label/index.json", products)
update_grouptask_products_list_options(
"../../groups/shx-all-in-one-order/index.json", products)
print("Finished. Do not forget to reload the group configuration by clicking on the 'Reload' button above the table on the right side.")
google_sheets_products()