__( 'Per tracciare i tuoi ordini, devi prima effettuare il login.', 'aica-smart-ai-commerce-assistant' ), 'require_login' => true, ); } // Ottieni ordini recenti $orders = $this->get_user_recent_orders( $user_id ); if ( empty( $orders ) ) { return array( 'message' => __( 'Non hai ordini recenti da tracciare.', 'aica-smart-ai-commerce-assistant' ), ); } // Formatta risposta con ordini $order_info = $this->format_orders_response( $orders ); return array( 'message' => $order_info['message'], 'orders' => $order_info['orders'], ); } /** * Get user recent orders */ private function get_user_recent_orders( $user_id, $limit = 5 ) { $orders = wc_get_orders( array( 'customer_id' => $user_id, 'limit' => $limit, 'orderby' => 'date', 'order' => 'DESC', ) ); return $orders; } /** * Format orders response */ private function format_orders_response( $orders ) { $orders_data = array(); $message = __( 'Ecco i tuoi ordini recenti:', 'aica-smart-ai-commerce-assistant' ) . "\n\n"; foreach ( $orders as $order ) { $order_id = $order->get_id(); $order_number = $order->get_order_number(); $status = $order->get_status(); $status_name = wc_get_order_status_name( $status ); $date = $order->get_date_created()->date_i18n( 'd/m/Y' ); $total = $order->get_formatted_order_total(); // Tracking info (se disponibile) $tracking_number = $order->get_meta( '_tracking_number' ); $tracking_url = $order->get_meta( '_tracking_url' ); $orders_data[] = array( 'id' => $order_id, 'number' => $order_number, 'status' => $status, 'status_name' => $status_name, 'date' => $date, 'total' => $total, 'tracking_number' => $tracking_number, 'tracking_url' => $tracking_url, 'view_url' => $order->get_view_order_url(), ); $message .= sprintf( "**Ordine #%s** - %s\n" . "๐Ÿ“… Data: %s\n" . "๐Ÿ’ฐ Totale: %s\n" . "๐Ÿ“ฆ Stato: %s\n", $order_number, $status_name, $date, $total, $status_name ); if ( $tracking_number ) { $message .= sprintf( "๐Ÿ” Tracking: %s\n", $tracking_number ); } $message .= "\n"; } return array( 'message' => $message, 'orders' => $orders_data, ); } /** * Get order by number */ public function get_order_by_number( $order_number ) { global $wpdb; $cache_key = 'aica_order_id_' . $order_number; $order_id = wp_cache_get( $cache_key, 'aica_order_tracking' ); if ( false === $order_id ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $order_id = $wpdb->get_var( $wpdb->prepare( " SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND (ID = %s OR post_title LIKE %s) LIMIT 1 ", $order_number, '%' . $wpdb->esc_like( $order_number ) . '%' ) ); wp_cache_set( $cache_key, $order_id, 'aica_order_tracking', HOUR_IN_SECONDS ); } if ( $order_id ) { return wc_get_order( $order_id ); } return null; } } // Initialize // AICA_Order_Tracking::get_instance(); // Removed, handled by main plugin class