Woocommerce create order
-
Hallo zusammen,
in einem Woocommerce-Shop soll per Script eine neue Bestellung generiert werden ($order = wc_create_order();). Soweit kein Problem. Es müssen aber je nach Gegebenheit unterschiedliche MwSt-Sätze berücksichtigt werden (normaler Steuersatz oder zero). Wie kann ich nun beim Generieren der Bestellung die tax-class festelegen?
-
Hi.
Kannst du mal deinen Code zeigen?
Ohne Code wird dir da keiner helfen können.Die taxes sind ja eigentlich im Produkt hinterlegt und haben wenig mit der Bestellung zu tun.
Hi,
danke für die Antwort. In diesem Shop sind die taxes nicht an das Produkt gekoppelt, sondern abhängig vom Kunden (Kunde aus DE oder Kunde aus EU oder Kunde aus Drittland und weitere Kombinationen – z.B Niederlassungen usw.). Das läuft auch alles bei normalen Bestellungen des Kunden. Es soll aber wie bei einem Abo automatisiert eine neue Bestellung generiert werden mit vorhandenen Daten. Der Code dazu sieht so aus:
$order = wc_create_order(); $order->set_customer_id( $kundeID ); /* * $keineMwSt = get_user_meta($userid,"keineMwSt",true); if( $keineMwSt == 1 ){ $tax_class = 'Zero Rate'; } else { $tax_class = 'Virtual rate'; } */ $args = array( 'name' => "Lizenzierung im Abo", 'tax_class' => "", 'product_id' => "", 'variation_id' => "", 'variation' => "", 'subtotal' => $gesamtpreis, 'total' => $gesamtpreis, 'quantity' => 1, ); $order->add_product( wc_get_product( 954 ) , 1, $args ); $address = array( 'first_name' => get_user_meta($kundeID,'first_name',true), 'last_name' => get_user_meta($kundeID,'last_name',true), 'company' => get_user_meta($kundeID,'billing_company',true), 'email' => get_user_meta($kundeID,'billing_email',true), 'phone' => get_user_meta($kundeID,'billing_phone',true), 'address_1' => get_user_meta($kundeID,'billing_address_1',true), 'address_2' => get_user_meta($kundeID,'billing_address_2',true), 'city' => get_user_meta($kundeID,'billing_city',true), 'postcode' => get_user_meta($kundeID,'billing_postcode',true), 'country' => get_user_meta($kundeID,'billing_country',true), ); $order->set_address( $address, 'billing' ); $order->set_address( $address, 'shipping' ); $order->set_payment_method( 'PayPerLink' ); $order->set_payment_method_title( 'PayPerLink' ); $order->set_status( 'wc-on-hold', 'Order is created programmatically'); $order->calculate_totals(); //$order->save();
Hier fehlt jetzt noch der Steuersatz.
- Diese Antwort wurde geändert vor 2 Jahren, 2 Monaten von Bego Mario Garde. Grund: Code formatiert
Hi.
Entscheidend ist dieser Teil:
if( $keineMwSt == 1 ){ $tax_class = ‚Zero Rate‘; } else { $tax_class = ‚Virtual rate‘; } */ $args = array( ’name‘ => „Lizenzierung im Abo“, ‚tax_class‘ => „“, ‚product_id‘ => „“, ‚variation_id‘ => „“, ‚variation‘ => „“,
du musst die tax class auch für das Produkt setzen
if( $keineMwSt == 1 ){ $tax_class = ‚Zero Rate‘; } else { $tax_class = ‚Virtual rate‘; } */ $args = array( ’name‘ => „Lizenzierung im Abo“, ‚tax_class‘ => $tax_class, ‚product_id‘ => „“, ‚variation_id‘ => „“, ‚variation‘ => „“,
Danke dir. Das hatte ich auch schon gedacht, klappt aber leider nicht. Als Beispiel: Kunde aus Drittland, z.B. China, mit Niederlassung in EU und Umsatzsteuer DE zahlt 19% MwSt. Bestellung die vom Kunden ausgelöst wird, klappt. Die dynamisch erstellte Bestellung ist dann ohne MwSt., was in diesem Fall falsch ist. Gibt es dazu ein Hook ähnlich wie woocommerce_before_calculate_totals?
Schau dir mal https://stackoverflow.com/questions/64662176/programmatically-created-woocommerce-order-have-no-tax-for-new-users
An 🙂
Da wird gezeigt wie die steuerberechnung erfolgen muss 🙂
Hi,
ich muss leider noch mal nerven :-). Ich habe jetzt sämtlich Kombinationen durch – klappt leider nicht. Z.B. muss bei einem Kunden 19% berechnet werden (Rechnungsadresse in China mit NL in EU und DE-Umsatzsteuer). Kann man irgendwie ausschalten, dass die Rechnungsadresse für die Steuerberechnung verwendet wird? Bei der Bestellung durch den Kunden klappt das ja, nur nicht bei der Erstellung durch wc_create_order().
Naja Rechnungsadresse gleich Steuersitz??!!
Alles andere macht rechtlich doch garkeine Sinn? Wieso willst du das überschreiben?
Danke. Ist halt ein kompliziertes Konstrukt – vom Kunden so vorgegeben. ich habe aber eine ganz einfache Lösung: Ich lasse die MwSt. anhand der Lieferadresse berechnen und setze die dann je nach Konstellation passend. Geliefert wird nichts, da virtuelles Produkt. Das wäre die Lösung und sollte reichen :-).
- Das Thema „Woocommerce create order“ ist für neue Antworten geschlossen.