* Clases para el catalogo - WooCatalogo * @link https://josecortesia.cl * @since 1.0.0 * * @package base * @subpackage base/include */ class cCatalogWooCatalog { public static function fGetCatalogCSV($nonce) { // Verificar nonce para seguridad desde $_GET $nonce = isset($_GET['nonce']) ? sanitize_text_field($_GET['nonce']) : ''; if (!wp_verify_nonce($nonce, 'segu')) { die("Ajaaaa, estas de noob!"); } // Generar el CSV en memoria ob_start(); (new cWooCatalogoApiRequest())->fGenerateCatalogCSV(); $csvContent = ob_get_clean(); // Forzar la descarga del archivo CSV header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="CatalogWooCatalogo.csv";'); header('Pragma: no-cache'); header('Expires: 0'); // Enviar contenido del CSV al navegador echo $csvContent; exit; } public static function fUpdateJsonCatalog($nonce) { $nonce = sanitize_text_field( $_POST['nonce'] ); if (!wp_verify_nonce($nonce, 'segu')) { die ("Ajaaaa, estas de noob!"); } $oCatalogWooCatalogo = (new cWooCatalogoApiRequest())->fgetCatalogWooCatalogo(); // Verificar que la propiedad "data" existe y es un array if (isset($oCatalogWooCatalogo->data) && is_array($oCatalogWooCatalogo->data)) { foreach ($oCatalogWooCatalogo->data as $producto) { // Buscar el producto por partnumber o SKU $existingProductId = !empty($producto->part_number) ? wc_get_product_id_by_sku($producto->part_number) : null; if (empty($existingProductId) && !empty($producto->sku)) { $existingProductId = wc_get_product_id_by_sku($producto->sku); } $sRes = ($existingProductId) ? "SI" : "NO" ; $awooArray[] = [ 'woo' => $sRes, 'id' => $producto->id, 'sku' => $producto->sku, 'mpn' => $producto->part_number, 'nombre' => $producto->nombre_producto, 'precio' => $producto->precio, 'stock' => $producto->stock, 'categoria' => $producto->categoria, 'subcategoria' => $producto->subcategoria, 'proveedor' => $producto->proveedor, 'creado' => $producto->created_at, 'actualizado' => $producto->updated_at, 'acciones' => " " ]; } } else { echo "Usted no tiene acceso a nuestro servicio, por favor verifique su licencia con contacto@josecortesia.cl"; } $jCatalog= json_encode(array('data' => $awooArray)); file_put_contents(WOOCATALOGO__PLUGIN_DIR.'/admin/dataWooCatalogo/dataWooCatalogo.json', $jCatalog); echo "Actualización del catálogo completa"; wp_die(); } public static function fUpdatePriceWooCatalogo($nonce) { $nonce = sanitize_text_field( $_POST['nonce'] ); if (!wp_verify_nonce($nonce, 'segu')) { die ("Ajaaaa, estas de noob!"); } $oTagsDB = (new cWooCatalogoApiRequest())->fGetConfigValuesWooCatalogo(); //var_dump($oTagsDB ); $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, // Obtener todos los productos ); $products_query = new WP_Query($args); if ($products_query->have_posts()) { while ($products_query->have_posts()) { $products_query->the_post(); // Obtener el objeto WC_Product $product = wc_get_product(get_the_ID()); // Datos del producto $part_number = $product->get_sku(); $product_id = wc_get_product_id_by_sku($part_number); $proveedor = get_post_meta($product_id, '_proveedor', true); $sku_proveedor = get_post_meta($product_id, '_sku_proveedor', true); //var_dump("Producto: ",$proveedor, $product_id, $part_number); if ($product_id && $proveedor) { var_dump($part_number, $proveedor, $sku_proveedor); $product = wc_get_product($product_id); $oGetPriceWooCatalogo = (new cWooCatalogoApiRequest())->fGetProductPriceStock($part_number, $sku_proveedor, $proveedor); //var_dump($oGetPriceWooCatalogo); //proteger el precio $current_price = 9000000; // Obtener el nuevo precio desde el webservice //$new_price = $oGetPriceWooCatalogo->data[0]->precioMasBajo; $new_price = $oGetPriceWooCatalogo->data[0]->precio; var_dump($new_price); //$new_price = 1; // Comprobar si el nuevo precio es válido (no nulo y no igual a cero) $checkprecio = (!is_null($new_price) && $new_price > 0) ? $new_price : $current_price; $price = floatval(sanitize_text_field($checkprecio)); $etiquetas = get_the_terms ( $product_id, 'product_tag' ); $etiquetas_precio = $etiquetas[0]->name; foreach ($oTagsDB as $bd_res) { if ($bd_res['etiquetas_precio'] == $etiquetas_precio) { if (empty($oTagsDB)) { $dolar = 99000000; $fmult = 999999999; $comision = 999999; }else{ $dolar = floatval($bd_res['dolar']); $fmult = floatval($bd_res['fmult']); $comision = floatval($bd_res['comision']); } $priceVenta = round(($price*$dolar)*$fmult*$comision,0,PHP_ROUND_HALF_UP); $product->set_regular_price($priceVenta); $product->save(); } } } else { continue; } // Comparar el SKU con los SKU de la otra API y actualizar el stock/precio si es necesario // Aquí deberías tener la lógica para comparar y actualizar según tus necesidades } echo "Actualización de precios completa"; wp_reset_postdata(); // Restaurar los datos originales del loop de WordPress } else { echo "No se encontraron productos publicados"; } die(); } public static function fUpdateStockWooCatalogo($nonce) { $nonce = sanitize_text_field( $_POST['nonce'] ); if (!wp_verify_nonce($nonce, 'segu')) { die ("Ajaaaa, estas de noob!"); } $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1, // Obtener todos los productos ); $products_query = new WP_Query($args); if ($products_query->have_posts()) { while ($products_query->have_posts()) { $products_query->the_post(); // Obtener el objeto WC_Product $product = wc_get_product(get_the_ID()); // Acceder al SKU del producto $part_number = $product->get_sku(); $product_id = wc_get_product_id_by_sku($part_number); $proveedor = get_post_meta($product_id, '_proveedor', true); $sku_proveedor = get_post_meta($product_id, '_sku_proveedor', true); if ($product_id && $proveedor) { $product = wc_get_product($product_id); //$oGetStockWooCatalogo = (new cWooCatalogoApiRequest())->fGetStockWooCatalogo($part_number); $oGetStockWooCatalogo = (new cWooCatalogoApiRequest())->fGetProductPriceStock($part_number, $sku_proveedor, $proveedor); var_dump($oGetStockWooCatalogo); if ($oGetStockWooCatalogo->data[0]->stock != 0) { $stock = $oGetStockWooCatalogo->data[0]->stock; var_dump("stock: ",$stock); $product->set_stock_status('instock'); $product->set_stock_quantity($stock); $product->save(); }else{ $stock = 0; $product->set_stock_status('outofstock'); $product->set_stock_quantity($stock); $product->save(); } var_dump("stock: ",$stock); } else { continue; } // Comparar el SKU con los SKU de la otra API y actualizar el stock/precio si es necesario // Aquí deberías tener la lógica para comparar y actualizar según tus necesidades } echo "Actualización de stock completa"; wp_reset_postdata(); // Restaurar los datos originales del loop de WordPress } else { echo "No se encontraron productos publicados"; } die(); } public static function procesar_lote_productos() { check_ajax_referer('actualizar_stock_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_send_json_error('Permisos insuficientes.'); } $offset = isset($_POST['offset']) ? intval($_POST['offset']) : 0; $tamano_lote = isset($_POST['tamano_lote']) ? intval($_POST['tamano_lote']) : 50; $args = array( 'post_type' => 'product', 'posts_per_page' => $tamano_lote, 'offset' => $offset, 'post_status' => 'publish', 'meta_query' => array( 'relation' => 'AND', array( 'key' => '_proveedor', 'value' => '', 'compare' => '!=', ), array( 'key' => '_sku_proveedor', 'value' => '', 'compare' => '!=', ), ), ); $query = new WP_Query($args); $productos = $query->posts; $total_productos = $query->found_posts; $actualizados = 0; $oTagsDB = (new cWooCatalogoApiRequest())->fGetConfigValuesWooCatalogo(); foreach ($productos as $producto) { $product = wc_get_product($producto->ID); if (!$product) { // Manejar el caso donde el producto no se encuentra continue; }else{ //var_dump($product); $part_number = $product->get_sku(); $sku_proveedor = get_post_meta($producto->ID, '_sku_proveedor', true); $proveedor = get_post_meta($producto->ID, '_proveedor', true); $part_number = $product->get_sku(); if ($sku_proveedor && $proveedor) { $datos_api = (new cWooCatalogoApiRequest())->obtener_datos_producto_api($part_number, $sku_proveedor, $proveedor); if (!empty($datos_api['data'])) { $producto_api = $datos_api['data'][0]; if (isset($producto_api['stock'])) { if ($producto_api['stock'] != 0) { $stock = $producto_api['stock']; $product->set_stock_status('instock'); $product->set_stock_quantity($stock); $product->save(); }else{ $stock = 0; $product->set_stock_status('outofstock'); $product->set_stock_quantity($stock); $product->save(); } } if (isset($producto_api['precio'])) { //proteger el precio $current_price = 9000000; // Obtener el nuevo precio desde el webservice $new_price = $producto_api['precio']; // Comprobar si el nuevo precio es válido (no nulo y no igual a cero) $checkprecio = (!is_null($new_price) && $new_price > 0) ? $new_price : $current_price; $price = floatval(sanitize_text_field($checkprecio)); $etiquetas = get_the_terms ( $producto->ID, 'product_tag' ); $etiquetas_precio = $etiquetas[0]->name; foreach ($oTagsDB as $bd_res) { if ($bd_res['etiquetas_precio'] == $etiquetas_precio) { if (empty($oTagsDB)) { $dolar = 99000000; $fmult = 999999999; $comision = 999999; }else{ $dolar = floatval($bd_res['dolar']); $fmult = floatval($bd_res['fmult']); $comision = floatval($bd_res['comision']); } $priceVenta = round(($price*$dolar)*$fmult*$comision,0,PHP_ROUND_HALF_UP); $product->set_regular_price($priceVenta); $product->save(); } } } $actualizados++; } } } } wp_send_json_success(array( 'total' => $total_productos, 'actualizados' => $actualizados, 'datos_api' => $datos_api, 'datos_precio'=> $new_price, 'etiqueta_producto' => $etiquetas_precio, 'etiqueta_bd' => $bd_res['etiquetas_precio'], )); } /* public static function fUpdateJsonExtendCatalogWooCatalogo($nonce) { $nonce = sanitize_text_field( $_POST['nonce'] ); if (!wp_verify_nonce($nonce, 'segu')) { die ("Ajaaaa, estas de noob!"); } } */ } Logitech MX Keys Mini – Teclado – Inalámbrico – Español – USB / Bluetooth – Ergonomic Design – Grafito – Jamtech

Logitech MX Keys Mini – Teclado – Inalámbrico – Español – USB / Bluetooth – Ergonomic Design – Grafito

Availability:

3 disponibles


Logitech MX Keys Mini – Teclado – Inalámbrico – Español – USB / Bluetooth – Ergonomic Design – Grafito

$110.00

3 disponibles

SKU: 920-010476 Categoría: Etiqueta:

Based on 0 reviews

0.0 overall
0
0
0
0
0

Be the first to review “Logitech MX Keys Mini – Teclado – Inalámbrico – Español – USB / Bluetooth – Ergonomic Design – Grafito”

There are no reviews yet.

Selecciona al menos 2 productos
para comparar