diff --git a/nexterp_custom/api.py b/nexterp_custom/api.py index f91de94..0bbedd4 100644 --- a/nexterp_custom/api.py +++ b/nexterp_custom/api.py @@ -4,7 +4,8 @@ from frappe import _ @frappe.whitelist() def sync_custom_fields_to_woocommerce(item_code): - """Sync Custom Fields vom Item nach WooCommerce ACF""" + """Sync Custom Fields vom Item nach WooCommerce ACF + Liest die Zuordnungen dynamisch aus dem DocType 'WooCommerce ACF Mapping'""" if not item_code: frappe.throw(_("Kein Item Code angegeben")) @@ -18,13 +19,20 @@ def sync_custom_fields_to_woocommerce(item_code): frappe.msgprint(_("Item hat keine verknüpften WooCommerce Server"), indicator="orange") return False - # Hier die Felder definieren: ERPNext-Feld : ACF-Feld - field_mapping = { - "custom_zustand2": "zustand2", - # Weitere Felder hier hinzufügen: - # "custom_mein_feld": "mein_feld", - # "custom_preisstufe": "preisstufe", - } + # Dynamisches Mapping aus dem DocType laden + field_mapping = {} + mappings = frappe.get_all("WooCommerce ACF Mapping", + filters={"enabled": 1}, + fields=["erp_field", "acf_field"]) + + for m in mappings: + if m.erp_field and m.acf_field: + field_mapping[m.erp_field] = m.acf_field + + if not field_mapping: + frappe.msgprint(_("Keine aktivierten Mappings im DocType 'WooCommerce ACF Mapping' gefunden"), + indicator="orange") + return False success_count = 0 errors = [] @@ -75,20 +83,20 @@ def sync_custom_fields_to_woocommerce(item_code): success_count += 1 except requests.exceptions.RequestException as e: - error_msg = "API-Fehler fuer Produkt {}: {}".format(wc_link.woocommerce_id, str(e)) + error_msg = "API-Fehler für Produkt {}: {}".format(wc_link.woocommerce_id, str(e)) errors.append(error_msg) frappe.log_error(error_msg, "WooCommerce ACF Sync") except Exception as e: - error_msg = "Unerwarteter Fehler fuer Item {} / WC-ID {}: {}".format(item_code, wc_link.woocommerce_id, str(e)) + error_msg = "Unerwarteter Fehler für Item {} / WC-ID {}: {}".format(item_code, wc_link.woocommerce_id, str(e)) errors.append(error_msg) frappe.log_error(error_msg, "WooCommerce ACF Sync") # Zusammenfassung if success_count > 0: - msg = "Custom Fields fuer {} WooCommerce-Produkt(e) erfolgreich synchronisiert".format(success_count) + msg = "Custom Fields für {} WooCommerce-Produkt(e) erfolgreich synchronisiert".format(success_count) if errors: - msg += " ({} Fehler)".format(len(errors)) + msg += " ({} Fehler aufgetreten)".format(len(errors)) frappe.msgprint(msg, alert=True, indicator="green") return True else: