WooCommerce: Obtenez une exportation de commande avec des lignes de taxe

Dec 01 2020

Je souhaite exporter toutes mes commandes avec les lignes de taxe séparées par taux de taxe.

Par exemple: une commande peut avoir les taux de taxe de 7% et 19%. Si la commande comporte des produits avec les deux taux de taxe, je ne reçois qu'un seul montant de taxe combiné.

Disons que la commande comporte deux produits pour 100 € chacun. Il y aurait les taxes suivantes:

  • 100 € tarif réduit: 7 €
  • 100 € par défaut: 19 €
  • taxes combinées: 26 €

J'utilise le code suivant (extrait) pour exporter les données de commande:

$order_data = $order->get_data(); // The Order data 
$order_date_created = $order_data['date_created']->date('d.m.Y'); // Example for oder creation date

Après avoir obtenu les données, je dois les stocker dans un tableau:

$custom_data = array( 'custom_order_date_created' => $custom_order_date_created,
)

Ce dont j'ai besoin est une colonne fixe (comme $order_date_createdci - dessus) pour chaque taux d'imposition.

Comme:

  • Colonne 1: taux d'imposition - 7%
  • Colonne 2: montant de la taxe - 7 €
  • Colonne 3: taux d'imposition - 19%
  • Colonne 4: montant de la taxe - 19 €

S'il n'y a pas de montant pour un taux de taxe, la colonne peut être vide.

Je sais qu'il existe une propriété order appelée tax_lines. Mais c'est un tableau et je ne sais pas comment m'en servir. La propriété tax_linesa ses propres propriétés de lignes fiscales .

Quelqu'un a-t-il une idée de la façon d'obtenir ces valeurs d'une commande?

EDIT: j'ai trouvé un extrait dans une autre question :

foreach ( $order->get_tax_totals() as $rate_code => $tax ) {
            $tax_rate_id = $tax->rate_id;
            $tax_label = $tax->label;
            $tax_amount = $tax->amount;
            $tax_f_amount = $tax->formatted_amount;
            $compound = $tax->is_compound;
            echo '<tr><td>' . $tax_label . ': </td><td>' . $tax_f_amount . '</td></tr>';
        }

Cela semble correct, mais je ne sais pas comment l'utiliser avec mon exemple de code et le stocker dans mon tableau.

EDIT 2: Après quelques recherches supplémentaires, j'ai trouvé l' WC_Order_Item_Tax objet qui contient les articles de taxe de commande. J'ai donc essayé d'utiliser ces données mais c'est un objet énorme et je ne sais pas comment sélectionner les données et les afficher dans la colonne de droite.

Cela ressemble à ceci (il y en a beaucoup plus). Et je dois sélectionner la taxe par rate_idexemple:

[4543] => WC_Order_Item_Tax Object
        (
            [extra_data:protected] => Array
                (
                    [rate_code] => 
                    [rate_id] => 0
                    [label] => 
                    [compound] => 
                    [tax_total] => 0
                    [shipping_tax_total] => 0
                    [rate_percent] => 
                )

            [data:protected] => Array
                (
                    [order_id] => 11244
                    [name] => 
                    [rate_code] => DE-MWST.-1
                    [rate_id] => 1
                    [label] => MwSt.
                    [compound] => 1
                    [tax_total] => 7.54
                    [shipping_tax_total] => 0
                    [rate_percent] => 16
                )

            [cache_group:protected] => order-items
            [meta_type:protected] => order_item
            [object_type:protected] => order_item
            [id:protected] => 4543
            [changes:protected] => Array
                (
                )

            [object_read:protected] => 1
            [default_data:protected] => Array
                (
                    [order_id] => 0
                    [name] => 
                    [rate_code] => 
                    [rate_id] => 0
                    [label] => 
                    [compound] => 
                    [tax_total] => 0
                    [shipping_tax_total] => 0
                    [rate_percent] => 
                )

Réponses

1 LoicTheAztec Dec 02 2020 at 01:27

Vous pouvez l'utiliser de cette façon peut-être après cette ligne de code

$custom_data = array( 'custom_order_date_created' => $custom_order_date_created,
)

Ensuite, la boucle foreach avec les éléments de taux de taxe et en utilisant la WC_Taxméthodeget_rate_percent() pour obtenir le pourcentage du taux de taxe comme suit:

// Loop through order tax items
foreach ( $order->get_tax_totals() as $rate_code => $tax ) { // Store it in the array $custom_data['taxes'][] = array(
        'tax_rate'   =>  WC_Tax::get_rate_percent($tax->rate_id), // <=== the tax rate percentage 'tax_amount' => $tax->formatted_amount
    );
}

En rapport:

  • Comment obtenir les détails et les taux des taxes sur les commandes dans WooCommerce?
  • Obtenez les montants totaux de taxe de l'ordre séparés avec la classe de taxe