* 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' => "
part_number}')\">
part_number}')\">
part_number}','{$producto->proveedor}' )\">
part_number}')\">
part_number}')\">
part_number}')\">
"
];
}
} 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 S – Teclado – retroiluminación – inalámbrico – Bluetooth LE – QWERTY – español – interruptor: tecla de tijera – grafito – Jamtech
Skip to navigation
Skip to content
Inicio Bodega Externa Logitech MX Keys S – Teclado – retroiluminación – inalámbrico – Bluetooth LE – QWERTY – español – interruptor: tecla de tijera – grafito
Bodega Externa Logitech MX Keys S – Teclado – retroiluminación – inalámbrico – Bluetooth LE – QWERTY – español – interruptor: tecla de tijera – grafito
Availability:
4 disponibles
Logitech MX Keys S – Teclado – retroiluminación – inalámbrico – Bluetooth LE – QWERTY – español – interruptor: tecla de tijera – grafito
$ 122.00
4 disponibles
Based on 0 reviews
0.0 overall
There are no reviews yet.