Support » WooCommerce » Woocommerce create order

  • Gelöst patricksd

    (@patricksd)


    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?

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • 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.

    Thread-Starter patricksd

    (@patricksd)

    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 1 Jahr, 6 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‘ => „“,
    Thread-Starter patricksd

    (@patricksd)

    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?

    Moderator Michi91

    (@michi91)

    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 🙂

    Thread-Starter patricksd

    (@patricksd)

    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().

    Moderator Michi91

    (@michi91)

    Naja Rechnungsadresse gleich Steuersitz??!!

    Alles andere macht rechtlich doch garkeine Sinn? Wieso willst du das überschreiben?

    Thread-Starter patricksd

    (@patricksd)

    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 :-).

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • Das Thema „Woocommerce create order“ ist für neue Antworten geschlossen.