This code snippet adds settings in the sevDesk add-on so that you can define a booking account for fees for each existing tax class in WooCommerce and a booking account for “no tax class” for fees:
add_filter( 'sevdesk_woocommerce_api_voucher_pos_fee_use_split_tax', '__return_false' ); add_filter( 'woocommerce_de_sevdesk_additional_booking_accounts', function( $settings, $booking_accounts ) { $tax_classes = WC_Tax::get_tax_classes(); array_unshift( $tax_classes, 'standard' ); foreach ( $tax_classes as $tax_class ) { $settings[] = array( 'name' => sprintf( __( 'Booking Account - Fees - Tax Class %s', 'woocommerce-german-market' ), $tax_class ), 'id' => 'woocommerce_de_sevdesk_booking_fee_' . sanitize_title( $tax_class ), 'type' => 'select', 'options' => $booking_accounts, 'default' => 26, 'class' => 'sevdesk_select_booking_account' ); } $settings[] = array( 'name' => __( 'Booking Account - Fees - No Tax Class', 'woocommerce-german-market' ), 'id' => 'woocommerce_de_sevdesk_booking_fee_no_tax_class', 'type' => 'select', 'options' => $booking_accounts, 'default' => 26, 'class' => 'sevdesk_select_booking_account' ); return $settings; }, 99, 2 ); add_filter( 'sevdesk_woocommerce_api_voucher_pos_fee_accounting_type', function( $accounting_type, $fee ) { if ( is_object( $fee ) && method_exists( $fee, 'get_tax_class' ) ) { $tax_classes = WC_Tax::get_tax_classes(); array_unshift( $tax_classes, 'standard' ); $taxes = $fee->get_taxes(); if ( isset( $taxes[ 'total' ] ) ) { foreach ( $taxes[ 'total' ] as $fee_rate_id => $tax ) { if ( floatval( $tax ) > 0 ) { foreach ( $tax_classes as $tax_class ) { $rates = WC_Tax::get_rates_for_tax_class( $tax_class ); if ( isset( $rates[ $fee_rate_id ] ) ) { $booking_account = get_option( 'woocommerce_de_sevdesk_booking_fee_' . sanitize_title( $tax_class ), 26 ); $accounting_type[ 'id' ] = $booking_account; return $accounting_type; } } } } } } $booking_account = get_option( 'woocommerce_de_sevdesk_booking_fee_no_tax_class', 26 ); $accounting_type[ 'id' ] = $booking_account; return $accounting_type; }, 50, 2 );