Das DATEV-Export-Plugin kann auch angepasst werden, um Bestellungen in Fremdwährung automatisch umzurechnen. Das kann z.B. hilfreich sein, wenn die Buchhaltungs-Software die Fremdwährungs-Spalten in der DATEV-CSV-Datei nicht verarbeiten kann.
Die genaue Vorgehensweise sollte unbedingt mit der jeweiligen Steuerberatung abgesprochen werden. Eine zum Teil verwendete Vorgehensweise ist z.B. die Umrechnung der Beträge auf Basis des Vormonats-EZB-Referenzkurs, wie sie unten im Code dargestellt ist.
Wichtig: Keine Steuerberatung o.ä. - unbedingt mit der eigenen Steuerberatung absprechen!
/**
* DATEV Export: Kombinierte Filterung und USD Konvertierung
*/
// Filter für USD zu EUR Konvertierung
add_filter('wcdtvfe_create_all_accounting_records', 'convert_usd_to_eur', 20, 2);
function convert_usd_to_eur($accounting_records, $order) {
if (is_numeric($order)) {
$order = wc_get_order($order);
}
if ($order && $order->get_currency() === 'USD' && !empty($accounting_records)) {
$order_date = $order->get_date_created()->format('Y-m-d');
$exchange_rate = get_ezb_exchange_rate($order_date);
foreach ($accounting_records as $key => $record) {
if (isset($record['001_revenue'])) {
$usd_amount = (float)$record['001_revenue'];
$eur_amount = round($usd_amount * $exchange_rate, 2);
$accounting_records[$key]['001_revenue'] = $eur_amount;
$accounting_records[$key]['014_posting_text'] .= sprintf(
' (Original: USD %.2f @ %.4f)',
$usd_amount,
$exchange_rate
);
}
}
}
return $accounting_records;
}
function get_ezb_exchange_rate($date) {
$url = "https://api.frankfurter.app/$date?from=USD&to=EUR";
$response = wp_remote_get($url);
if (is_wp_error($response)) {
error_log("Frankfurter API Fehler: " . $response->get_error_message());
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (isset($body['rates']['EUR'])) {
return $body['rates']['EUR'];
}
// Fallback: EZB Daily XML falls Frankfurter nicht verfügbar
$xml_url = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml';
$xml = simplexml_load_file($xml_url);
$xml->registerXPathNamespace('ex', 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref');
$rate_node = $xml->xpath("//ex:Cube[@currency='USD']");
return !empty($rate_node) ? (float)$rate_node[0]['rate'] : 0.95;
}
Sie haben Fragen oder möchten ein Angebot anfordern?