$label) { $html.= ''; } echo wp_kses($html, ['option'=>['value'=>[], 'selected'=>[]]]); } /** * Format number for export * * @var $number float * * @return string */ function woocommerce_accounting_format_number($number){ global $rounding_precision; $dec_separator = get_option('woocommerce_accounting_export_decimal_separator'); $zero_opt = get_option('woocommerce_accounting_export_zero_opt'); if(empty($number)){ if($zero_opt != 1){ return ''; } $number = 0.00; } return str_replace('.', $dec_separator, round((float) $number, $rounding_precision)); } /** * Unformat number for export * * @var $number float * * @return float */ function woocommerce_accounting_unformat_number($string){ return (float) str_replace(',', '.', $string); } function woocommerce_accounting_get_tax_id_from_order_item($order_item){ $tax_id = ''; $taxes = $order_item->get_taxes(); if(isset($taxes['total']) && !empty($taxes['total'])){ foreach($taxes['total'] as $tax_id => $tax_amount){ if(!empty($tax_amount)){ return $tax_id; } } } return $tax_id; } function woocommerce_accounting_add_line($output, $line, $separator, $force=false){ global $total_income, $total_outcome; $col_map = get_option('woocommerce_accounting_colorder'); $col_outcome = $col_map['Outcome']; $col_income = $col_map['Income']; $val_income = woocommerce_accounting_unformat_number($line[$col_income]); $total_income += $val_income; $val_outcome = woocommerce_accounting_unformat_number($line[$col_outcome]); $total_outcome += $val_outcome; if(abs($val_income)+abs($val_outcome) == 0 && !$force){ return; } if(wp_get_environment_type() == 'local'){ echo ''.wp_kses(implode('', $line), ['td'=>[]]).''; return; } fputcsv($output, $line, $separator); } /** * Get book code for order * * @param object $order * * @return string */ function woocommerce_accounting_get_book_code_for_order($order): string{ global $original_book_code; global $book_code_status; $book_code = $original_book_code; if(isset($book_code_status[$order->status]) && $book_code_status[$order->status] != ""){ $book_code = $book_code_status[$order->status]; } return apply_filters('woocommerce_accounting_book_code', $book_code, $order); } /** * Get orders * Uses high-performance order storage if enabled or falls back to WP_Query * * @param array $args * * @return array [WC_Order] */ function woocommerce_accounting_get_orders($args){ $hpos = get_option('woocommerce_custom_orders_table_enabled'); $wccutdse = get_option('woocommerce_custom_orders_table_data_sync_enabled'); $wcOrders = []; if($hpos === 'yes' && $wccutdse === 'yes'){ $wcOrders = wc_get_orders($args); } else{ wp_trigger_error('woocommerce_accounting_get_orders', 'High-performance order storage and compatibility mode is required for accounting exports.', E_USER_NOTICE); $arg_mapping = [ 'limit' => 'posts_per_page', 'type' => 'post_type', 'status' => 'post_status', 'orderby' => 'orderby', 'order' => 'order', 'meta_query' => 'meta_query', ]; $wp_args = []; foreach($arg_mapping as $key => $value){ if(isset($args[$key])){ $wp_args[$value] = $args[$key]; } } $wp_date_fields = [ 'date_created' => 'post_date', 'date_modified' => 'post_modified', ]; foreach($wp_date_fields as $date_field => $wp_date_field){ if(isset($args[$date_field])){ $range = explode('...', $args[$date_field]); $wp_args['date_query'][] = [ 'column' => $wp_date_field, 'after' => $range[0], 'before' => $range[1], ]; } } $wc_date_fields = [ 'date_paid' => '_paid_date', 'date_completed' => '_completed_date', ]; foreach($wc_date_fields as $date_field => $wc_date_field){ if(isset($args[$date_field])){ $range = explode('...', $args[$date_field]); $wp_args['meta_query'][] = [ 'key' => $wc_date_field, 'value' => $range, 'compare' => 'BETWEEN', 'type' => 'DATE', ]; } } $posts = get_posts($wp_args); foreach($posts as $post){ $wcOrders[] = wc_get_order($post->ID); } } return $wcOrders; }