Support » WooCommerce » 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?

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)
  • Moderator espiat

    (@espiat)

    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 Woche, 5 Tage von Bego Mario Garde. Grund: Code formatiert
    Moderator espiat

    (@espiat)

    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?

    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 🙂

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)