diff --git a/src/asquare.py b/src/asquare.py index 356a6c9..2eb9ba1 100644 --- a/src/asquare.py +++ b/src/asquare.py @@ -286,26 +286,42 @@ async def update_itm(item_id: str, lego_set: dict, item_data: dict = None): print(f"[@DEBUG] Fresh variation version: {variation_version}") print(f"[@DEBUG] Final category_id for upsert: {category_id}") - # Build upsert body - variation_obj = { - "type": "ITEM_VARIATION", - "id": variation_id if variation_id else "#TEMP_VARIATION_ID", - "item_variation_data": { - "item_id": item_id, - "name": "Regular", - "pricing_type": "FIXED_PRICING", - "price_money": { - "amount": price_in_cents, - "currency": "USD", - }, - "sku": set_number, # LEGO set number (e.g., "10338") - "upc": set_upc if set_upc else None, # Barcode/GTIN - }, - } + # Preserve existing variation and update only what we need + if variations: + # Start with existing variation to preserve all fields + variation_obj = variations[0].copy() + variation_data = variation_obj.get("item_variation_data", {}).copy() - # Include variation version if it exists (required for updates) - if variation_version is not None: - variation_obj["version"] = variation_version + # Update only the fields we want to change + variation_data["price_money"] = { + "amount": price_in_cents, + "currency": "USD", + } + variation_data["sku"] = set_number # LEGO set number + variation_data["upc"] = set_upc if set_upc else None # Barcode/GTIN + + variation_obj["item_variation_data"] = variation_data + + # Update version if exists (required for updates) + if variation_version is not None: + variation_obj["version"] = variation_version + else: + # Create new variation if none exists + variation_obj = { + "type": "ITEM_VARIATION", + "id": "#TEMP_VARIATION_ID", + "item_variation_data": { + "item_id": item_id, + "name": "Regular", + "pricing_type": "FIXED_PRICING", + "price_money": { + "amount": price_in_cents, + "currency": "USD", + }, + "sku": set_number, + "upc": set_upc if set_upc else None, + }, + } # Get the full existing item_data and modify only what we need # This preserves ALL existing fields (location settings, tax, etc)