feat: add custom/not_specified shipping modes with cost input for ML publish
- build_item_payload supports shipping_cost for custom mode with costs array - Add shipping mode selector: me2, custom, not_specified - Show shipping cost input when custom is selected - Backend passes shipping_cost through custom_data to payload builder
This commit is contained in:
@@ -144,6 +144,7 @@ def build_item_payload(
|
||||
listing_type_id: str = "gold_special",
|
||||
custom_title: str = None,
|
||||
extra_attributes: list = None,
|
||||
shipping_cost: float = None,
|
||||
) -> dict:
|
||||
"""Convert a Nexus inventory row into a MercadoLibre item payload."""
|
||||
title = custom_title or f"{inventory_row['name']} {inventory_row['brand'] or ''} {inventory_row['part_number'] or ''}".strip()
|
||||
@@ -152,9 +153,11 @@ def build_item_payload(
|
||||
title = title[:57] + "..."
|
||||
|
||||
shipping_payload = {"mode": shipping_mode}
|
||||
if shipping_mode == "me2":
|
||||
# Let ML determine free_shipping/local_pick_up defaults based on account config
|
||||
pass
|
||||
if shipping_mode == "custom" and shipping_cost is not None:
|
||||
shipping_payload["local_pick_up"] = False
|
||||
shipping_payload["free_shipping"] = False
|
||||
shipping_payload["methods"] = []
|
||||
shipping_payload["costs"] = [{"description": "Envio", "cost": str(shipping_cost)}]
|
||||
payload = {
|
||||
"title": title,
|
||||
"category_id": meli_category_id,
|
||||
@@ -375,11 +378,13 @@ def validate_items(
|
||||
extra_attrs = (custom_data.get("attributes") or {}).get(str(inv_id))
|
||||
price = (custom_data.get("prices") or {}).get(str(inv_id), inv["price_1"])
|
||||
item_stock = (custom_data.get("stocks") or {}).get(str(inv_id), stock)
|
||||
shipping_cost = custom_data.get("shipping_cost")
|
||||
|
||||
payload = build_item_payload(
|
||||
inv, images, meli_category_id, price, item_stock,
|
||||
shipping_mode=shipping_mode, listing_type_id=listing_type_id,
|
||||
custom_title=title, extra_attributes=extra_attrs,
|
||||
shipping_cost=shipping_cost,
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -480,11 +485,13 @@ def publish_items(
|
||||
extra_attrs = (custom_data.get("attributes") or {}).get(str(inv_id))
|
||||
price = (custom_data.get("prices") or {}).get(str(inv_id), inv["price_1"])
|
||||
item_stock = (custom_data.get("stocks") or {}).get(str(inv_id), stock)
|
||||
shipping_cost = custom_data.get("shipping_cost")
|
||||
|
||||
payload = build_item_payload(
|
||||
inv, images, meli_category_id, price, item_stock,
|
||||
shipping_mode=shipping_mode, listing_type_id=listing_type_id,
|
||||
custom_title=title, extra_attributes=extra_attrs,
|
||||
shipping_cost=shipping_cost,
|
||||
)
|
||||
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user