Woocommerce Shop Smarty Importer

Hallo,

Ich beschreibe im Post

https://xentral.community/t/woocommerce-import/1731

unseren eigenen Smarty-Importer und bitte um Hilfe zur Verbesserung bei verschiedenen Themen:

  1. schlanker Code
  2. Abfrage abweichende Lieferadresse

Kann bitte jemand behilflich sein? Besten Dank.

Ferner soll der Smarty-Importer anderen helfen, die spärlich gefüllte Help-Seite zu Woocommerce Smarty zu ergänzen.

Zitat:

Hallo,

leider konnte mir der Xentral Suppport nicht weiterhelfen (nicht im Support-Umfang enthalten, genauso wenig wie eine funktionierende Betriebsanleitung :roll_eyes:), daher poste ich hier unseren Smarty Importer für Woocommerce. Vielleicht kann bitte ein fähiger Programmierer darüber schauen und den Code optimieren? :hugs:

Seit dem Update auf 23.3.1 funktioniert zB die Abfrage der Abweichenden Lieferadresse nicht mehr. Obwohl im Smarty-Test oft “0” ausgegeben wird, wird beim Import trotzdem eine “1” geschrieben. Weiß jemand warum? :thinking:

Außerdem meinte der Xentral-Support, dass nur die erkannten Knoten ersetzt werden sollen und nicht das ganze Template ersetzt werden soll (Häkchen in Smarty-Einstellung “Warenkorb ersetzten”). Wir haben dies gesetzt, und bisher keine Probleme damit. Hat dazu bereits jemand Erfahrungen gemacht?

Durch die Nutzung unterschiedlichster Plugins im Shop sieht die XML-Datei auch sehr unterschiedlich aus, die Grundstrutktur sollte jedoch gleich sein. Wir fragen nicht alle Sachen im Smarty ab, daher sind nicht alle ansprechbaren Variablen enthalten.

Da wir ein Problem mit den rückgerechneten Preisen in Xentral hatten (Rundungsfehler in rückgerechneten Preisen mit dem 1 Cent Fehler bzw. fehlerhafte Erkennung der Zahlungsströmen, haben wir den Import so umgebaut, dass Bruttopreise vom Shop ausgegeben werden bei Lieferland Deutschland, und Nettopreise bei innergemeinschaftlicher Lieferung. Drittland müsste noch ergänzt werden durch Abfrage der definierten Lieferländer z.B. “CH” oder “UK”. Es werden dann die Nettopreise rückgerechnet.

Gern würde ich eure Meinung hören, was gut ist und was noch verbessert werden kann. Wir möchten den Code so schlank wie möglich halten.

Enthalten sind folgende Abfragen:

  • Stückpreis Brutto
  • Anrede, Anschreiben, Gruppe (gruppe funktioniert leider noch nicht)
  • abweichende Lieferadresse
  • USt-ID/VAT-Nummer mit Brutto/Nettopreis

Was noch nicht enthalten ist:

  • Rabatte
  • Fremdnummern (unsere Nummern sind gleich, weil wir ein Produzent sind)
  • Drittländer
  • Artikeloptionen

Hier unser Smarty-Template zu freien Nutzung und Weiterentwicklung ohne Gewähr :wink::

{Warenkorb}
auftragsdaten->date_created}]]>
auftragsdaten->date_modified}]]>
auftragsdaten->number}]]>
1
auftragsdaten->customer_note}]]>

{Versand}
auftragsdaten->shipping_lines->item0->method_id}]]>
auftragsdaten->shipping_lines->item0->total+$cart->auftragsdaten->shipping_lines->item0->total_tax}]]>
auftragsdaten->tax_lines->item0->rate_percent}]]>
{if $cart->auftragsdaten->billing->first_name neq $cart->auftragsdaten->shipping->first_name
OR $cart->auftragsdaten->billing->last_name neq $cart->auftragsdaten->shipping->last_name
OR $cart->auftragsdaten->billing->company neq $cart->auftragsdaten->shipping->company
OR $cart->auftragsdaten->billing->address_1 neq $cart->auftragsdaten->shipping->address_1
OR $cart->auftragsdaten->billing->address_2 neq $cart->auftragsdaten->shipping->address_2
OR $cart->auftragsdaten->billing->postcode neq $cart->auftragsdaten->shipping->postcode
OR $cart->auftragsdaten->billing->city neq $cart->auftragsdaten->shipping->city
OR $cart->auftragsdaten->billing->country neq $cart->auftragsdaten->shipping->country}
<abweichende_lieferadresse>1</abweichende_lieferadresse>
{else}
<abweichende_lieferadresse>0</abweichende_lieferadresse>
{/if}

{Zahlung}
auftragsdaten->transaction_id}]]>
auftragsdaten->currency}]]>
auftragsdaten->total}]]>
auftragsdaten->payment_method}]]>

{Metadaten}
{foreach key=metadataKey item=metadataItem from=$cart->auftragsdaten->meta_data}
{if $metadataItem->key == „is_vat_exempt“}
{if $metadataItem->value == „yes“}
<ust_befreit>1</ust_befreit>
{/if}
{/if}
{if $metadataItem->key == „billing_vat“}
value}]]>
{/if}
{if $metadataItem->key == „wpml_language“}
value}]]>
{/if}
{if $metadataItem->key == „_billing_anrede“}
{assign var=billing_anrede $metadataItem->value}
{/if}
{if $metadataItem->key == „_shipping_anrede“}
{assign var=shipping_anrede $metadataItem->value}
{/if}
{/foreach}

{Anrede, Anschreiben und Gruppe}
{if $cart->auftragsdaten->billing->company == „“}
B2C
{if $billing_anrede == „Frau“}
frau
Sehr geehrte Frau {$cart->auftragsdaten->billing->last_name}
{/if}
{if $billing_anrede == „Herr“}
herr
Sehr geehrter Herr {$cart->auftragsdaten->billing->last_name}
{/if}
{if $billing_anrede == „Mister“}
herr
Dear Mr. {$cart->auftragsdaten->billing->last_name}
{/if}
{if $billing_anrede == „Miss“}
frau
Dear Ms. {$cart->auftragsdaten->billing->last_name}
{/if}
{else}
B2B Registrierung
{if $billing_anrede == „Company“}
Dear Ladies and Gentlemen
{/if}
{/if}

{Rechnungsadresse}
{if $cart->auftragsdaten->billing->company == „“}
auftragsdaten->billing->first_name} {$cart->auftragsdaten->billing->last_name}]]>
{else}
auftragsdaten->billing->company}]]>
auftragsdaten->billing->first_name} {$cart->auftragsdaten->billing->last_name}]]>
{/if}
auftragsdaten->billing->phone}]]>
auftragsdaten->billing->address_1}]]>
auftragsdaten->billing->postcode}]]>
auftragsdaten->billing->city}]]>
auftragsdaten->billing->country}]]>
auftragsdaten->billing->email}]]>
auftragsdaten->billing->address_2}]]>

{Lieferadresse}
{if $cart->auftragsdaten->billing->company == „“}
<lieferadresse_name>auftragsdaten->shipping->first_name} {$cart->auftragsdaten->shipping->last_name}]]></lieferadresse_name>
{else}
<lieferadresse_name>auftragsdaten->shipping->company}]]></lieferadresse_name>
<lieferadresse_ansprechpartner>auftragsdaten->shipping->first_name} {$cart->auftragsdaten->shipping->last_name}]]></lieferadresse_ansprechpartner>
{/if}
<lieferadresse_strasse>auftragsdaten->shipping->address_1}]]></lieferadresse_strasse>
<lieferadresse_plz>auftragsdaten->shipping->postcode}]]></lieferadresse_plz>
<lieferadresse_ort>auftragsdaten->shipping->city}]]></lieferadresse_ort>
<lieferadresse_land>auftragsdaten->shipping->country}]]></lieferadresse_land>
<lieferadresse_adresszusatz>auftragsdaten->shipping->address_2}]]></lieferadresse_adresszusatz>

{Artikelliste}

{foreach key=lineItemKey item=lineItem from=$cart->auftragsdaten->line_items}
<{$lineItemKey}>
sku}]]>
name}]]>
quantity}]]>

{foreach key=metadataKey item=metadataItem from=$cart->auftragsdaten->meta_data}
{if $metadataItem->key == „is_vat_exempt“}
{if $metadataItem->value == „yes“}
<price_netto>{($lineItem->subtotal+$lineItem->subtotal_tax)/$lineItem->quantity}</price_netto>
0
befreit
{else}
{($lineItem->subtotal+$lineItem->subtotal_tax)/$lineItem->quantity}
auftragsdaten->tax_lines->item0->rate_percent}]]>
{/if}
{/if}
{/foreach}
</{$lineItemKey}>
{/foreach}

Änderung:

  1. Das Problem mit der abweichenden Lieferadresse ist gelöst, die variable war falsch benannt:
    FALSCH:

    <abweichende_lieferadresse>
    

    RICHTIG:

    <abweichendelieferadresse>
    
  2. Die Werte der Sprache haben wir geändert auf “deutsch” und “englisch” anstatt “de” und “en”

  3. Die Abfrage nach der EU-Lieferung haben wir erweitert zu

    {if $metadataItem->key == "is_vat_exempt"}
    {if $metadataItem->value == "yes"}
    <ust_befreit>1</ust_befreit>
    {else}
    <ust_befreit>0</ust_befreit>
    {/if}
    {/if}
    

    da sonst der Knoten nicht aktiv auf Null gesetzt wird.

Das Problem, dass die Benutzergruppe nicht gesetzt wird, besteht immer noch. Weiß jemand warum?

Nach einem erfolgreichen-Support-Kontakt bzgl. der Variable abweichende Lieferadresse funktioniert der Smarty-Code zuverlässig bis auf die Funktionen:

  • Sprache
  • Benutzergruppe

Wer kann hier bitte noch helfen?

<xml>

{*Warenkorb*}
<zeitstempel><![CDATA[{$cart->auftragsdaten->date_created}]]></zeitstempel>
<bestelldatum><![CDATA[{$cart->auftragsdaten->date_modified}]]></bestelldatum>
<onlinebestellnummer><![CDATA[{$cart->auftragsdaten->number}]]></onlinebestellnummer>
<useorderid>1</useorderid>
<internebemerkung><![CDATA[{$cart->auftragsdaten->customer_note}]]></internebemerkung>

{*Versand*}
<lieferung><![CDATA[{$cart->auftragsdaten->shipping_lines->item0->method_id}]]></lieferung>
<versandkostenbrutto><![CDATA[{$cart->auftragsdaten->shipping_lines->item0->total+$cart->auftragsdaten->shipping_lines->item0->total_tax}]]></versandkostenbrutto>
<portosteuersatz><![CDATA[{$cart->auftragsdaten->tax_lines->item0->rate_percent}]]></portosteuersatz>
{if $cart->auftragsdaten->billing->first_name neq $cart->auftragsdaten->shipping->first_name
OR $cart->auftragsdaten->billing->last_name neq $cart->auftragsdaten->shipping->last_name
OR $cart->auftragsdaten->billing->company neq $cart->auftragsdaten->shipping->company
OR $cart->auftragsdaten->billing->address_1 neq $cart->auftragsdaten->shipping->address_1
OR $cart->auftragsdaten->billing->address_2 neq $cart->auftragsdaten->shipping->address_2
OR $cart->auftragsdaten->billing->postcode neq $cart->auftragsdaten->shipping->postcode
OR $cart->auftragsdaten->billing->city neq $cart->auftragsdaten->shipping->city
OR $cart->auftragsdaten->billing->country neq $cart->auftragsdaten->shipping->country}
<abweichendelieferadresse>1</abweichendelieferadresse>
{*Lieferadresse*}
{if $cart->auftragsdaten->billing->company == ""}
<lieferadresse_name><![CDATA[{$cart->auftragsdaten->shipping->first_name} {$cart->auftragsdaten->shipping->last_name}]]></lieferadresse_name>
{else}
<lieferadresse_name><![CDATA[{$cart->auftragsdaten->shipping->company}]]></lieferadresse_name>
<lieferadresse_ansprechpartner><![CDATA[{$cart->auftragsdaten->shipping->first_name} {$cart->auftragsdaten->shipping->last_name}]]></lieferadresse_ansprechpartner>
{/if}
<lieferadresse_strasse><![CDATA[{$cart->auftragsdaten->shipping->address_1}]]></lieferadresse_strasse>
<lieferadresse_plz><![CDATA[{$cart->auftragsdaten->shipping->postcode}]]></lieferadresse_plz>
<lieferadresse_ort><![CDATA[{$cart->auftragsdaten->shipping->city}]]></lieferadresse_ort>
<lieferadresse_land><![CDATA[{$cart->auftragsdaten->shipping->country}]]></lieferadresse_land>
<lieferadresse_adresszusatz><![CDATA[{$cart->auftragsdaten->shipping->address_2}]]></lieferadresse_adresszusatz>
{else}
<abweichendelieferadresse>0</abweichendelieferadresse>
{/if}

{*Zahlung*}
<transaktionsnummer><![CDATA[{$cart->auftragsdaten->transaction_id}]]></transaktionsnummer> 
<waehrung><![CDATA[{$cart->auftragsdaten->currency}]]></waehrung>
<gesamtsumme><![CDATA[{$cart->auftragsdaten->total}]]></gesamtsumme>
<zahlungsweise><![CDATA[{$cart->auftragsdaten->payment_method}]]></zahlungsweise>

{*Metadaten*}
{foreach key=metadataKey item=metadataItem from=$cart->auftragsdaten->meta_data}
{if $metadataItem->key == "is_vat_exempt"}
{if $metadataItem->value == "yes"}
<ust_befreit>1</ust_befreit>
{else}
<ust_befreit>0</ust_befreit>
{/if}
{/if}
{if $metadataItem->key == "billing_vat"}
<ustid><![CDATA[{$metadataItem->value}]]></ustid>
{/if}
{if $metadataItem->key == "wpml_language"}
{if $metadataItem->value == "de"}
<sprache>deutsch</sprache>
{/if}
{if $metadataItem->value == "en"}
<sprache>englisch</sprache>
{/if}
{/if}
{if $metadataItem->key == "_billing_anrede"}
{assign var=billing_anrede $metadataItem->value}
{/if}
{if $metadataItem->key == "_shipping_anrede"}
{assign var=shipping_anrede $metadataItem->value}
{/if}
{/foreach}

{*Anrede, Anschreiben und Gruppe*} 
{if $cart->auftragsdaten->billing->company == ""}
<benutzergruppe>B2C</benutzergruppe>
{if $billing_anrede == "Frau"}
<anrede>frau</anrede>
<anschreiben>Sehr geehrte Frau {$cart->auftragsdaten->billing->last_name}</anschreiben>
{/if}
{if $billing_anrede == "Herr"}
<anrede>herr</anrede>
<anschreiben>Sehr geehrter Herr {$cart->auftragsdaten->billing->last_name}</anschreiben>
{/if}
{if $billing_anrede == "Mister"}
<anrede>herr</anrede>
<anschreiben>Dear Mr. {$cart->auftragsdaten->billing->last_name}</anschreiben>
{/if}
{if $billing_anrede == "Miss"}
<anrede>frau</anrede>
<anschreiben>Dear Ms. {$cart->auftragsdaten->billing->last_name}</anschreiben>
{/if}
{else}
<benutzergruppe>B2B Registrierung</benutzergruppe>
{if $billing_anrede == "Company"}
<anschreiben>Dear Ladies and Gentlemen</anschreiben>
{/if}
{/if}

{*Rechnungsadresse*}
{if $cart->auftragsdaten->billing->company == ""}
<name><![CDATA[{$cart->auftragsdaten->billing->first_name} {$cart->auftragsdaten->billing->last_name}]]></name>
{else}
<name><![CDATA[{$cart->auftragsdaten->billing->company}]]></name>
<ansprechpartner><![CDATA[{$cart->auftragsdaten->billing->first_name} {$cart->auftragsdaten->billing->last_name}]]></ansprechpartner>
{/if}
<telefon><![CDATA[{$cart->auftragsdaten->billing->phone}]]></telefon>
<strasse><![CDATA[{$cart->auftragsdaten->billing->address_1}]]></strasse>
<plz><![CDATA[{$cart->auftragsdaten->billing->postcode}]]></plz>
<ort><![CDATA[{$cart->auftragsdaten->billing->city}]]></ort>
<land><![CDATA[{$cart->auftragsdaten->billing->country}]]></land>
<email><![CDATA[{$cart->auftragsdaten->billing->email}]]></email>
<adresszusatz><![CDATA[{$cart->auftragsdaten->billing->address_2}]]></adresszusatz>

{*Artikelliste*}
<articlelist>
  {foreach key=lineItemKey item=lineItem from=$cart->auftragsdaten->line_items}
   <{$lineItemKey}>
   <articleid><![CDATA[{$lineItem->sku}]]></articleid>
   <name><![CDATA[{$lineItem->name}]]></name>
   <quantity><![CDATA[{$lineItem->quantity}]]></quantity>

   {foreach key=metadataKey item=metadataItem from=$cart->auftragsdaten->meta_data}
	{if $metadataItem->key == "is_vat_exempt"}
	{if $metadataItem->value == "yes"}
	<price_netto>{($lineItem->subtotal+$lineItem->subtotal_tax)/$lineItem->quantity}</price_netto>
	<steuersatz>0</steuersatz>
	<umsatzsteuer>befreit</umsatzsteuer>
	{else}
	<price>{($lineItem->subtotal+$lineItem->subtotal_tax)/$lineItem->quantity}</price>
	<steuersatz><![CDATA[{$cart->auftragsdaten->tax_lines->item0->rate_percent}]]></steuersatz>
	{/if}
	{/if}
   {/foreach}    
   </{$lineItemKey}>   
  {/foreach}
 </articlelist> 

</xml>