yarilorenzo Posted May 6, 2015 Share Posted May 6, 2015 Hola a todos, Primero de todo decir que soy novato en PS. Estoy utilizando la versión 1.6.0.14. Actualmente cargo mediante JSON usuarios utilizando la API de PrestaShop y cada usuario pertenece a un grupo. Por otro lado tendría que cargar artículos con 3 precios distintos (uno para cada grupo). El objetivo sería ,que dependiendo del grupo al que pertenezca el usuario, el artículo mostrase un precio u otro. Sé que esto se puede hacer manualmente desde la pestaña Producto-> Precios específicos pero me gustaría saber cómo realizarlo mediante web service. Mi función para añadir un producto es la siguiente: private function add_product ($data) { $xml = $this->webservice->get_template('products'); $product = $xml->product; $product->removeChild($product->position_in_category); // Estado: activo o no $product->active->addCData( ($this->activate_products) ? '1' : '0' ); $product->available_for_order->addCData( ($this->activate_products) ? '1' : '0' ); // Referencia if ($data['supplier_reference']) { $product->supplier_reference->addCData( $data['supplier_reference'] ); } if ($data['reference']) { $product->reference->addCData( $data['reference'] ); } // Nombre $name = $product->name->xpath('language[@id="' . $this->active_language_id . '"]'); $name = $name[0]; $name->addCData( $data['name'] ); // Fabricante $manufacturer_id = $this->get_or_add_manufacturer( $data['manufacturer'] ); $product->id_manufacturer->addCData($manufacturer_id); // Descripción if (isset($data['description']) && $data['description']) { $description = $product->description->xpath('language[@id="' . $this->active_language_id . '"]'); $description = $description[0]; $description->addCData( $data['description'] ); } // Reescritura de URLs $link_rewrite = $product->link_rewrite->xpath('language[@id="' . $this->active_language_id . '"]'); $link_rewrite = $link_rewrite[0]; $link_rewrite->addCData( $data['slug'] ); // Precio e impuestos $product->price->addCData( number_format($data['price'], 2, '.', '') ); $product->show_price->addCData(1); $product->id_tax_rules_group->addCData($this->tax_rule_group_id); // Categorías $categories = (is_array($data['category'])) ? $data['category'] : array( $data['category'] ); $i = 1; foreach ($categories as $category) { $category_id = $this->get_or_add_category($category); if ($i == 1) { //var_dump($product); //die; $product->associations->categories->category->id->addCData($category_id); } else { $c = $product->associations->categories->addChild('categories'); $c->addChild('id')->addCData($category_id); } $i++; } $product->id_category_default->addCData( $this->get_category_id_by_name($categories[0]) ); // Características $i = 1; if ($this->update_features) { foreach ($data['features'] as $feature_name => $feature_value) { $feature_id = $this->get_or_add_product_feature($feature_name); $feature_value_id = $this->get_or_add_product_feature_value($feature_name, $feature_value); if ($i == 1) { $product->associations->product_features->product_feature->id->addCData($feature_id); $product->associations->product_features->product_feature->id_feature_value->addCData($feature_value_id); } else { $f = $product->associations->product_features->addChild('product_features'); $f->addChild('id')->addCData($feature_id); $f->addChild('id_feature_value')->addCData($feature_value_id); } $i++; } } // Opciones if ($this->update_options || $this->update_combinations) { foreach ($data['options'] as $option_name => $option_values) { if ( ! $option_name) continue; foreach ($option_values as $option_value) { if ( ! $option_value) continue; $option_value_id = $this->get_or_add_product_option_value($option_name, $option_value); } } } $res = $this->webservice->add('products', $xml); $product_id = (int) $res->product->id; $this->log('Producto añadido "' . $data['name'] .'" con ID ' . $product_id, self::DEBUG); } Mientras mi JSON tiene la siguiente estructura: { "name": "Jamón de Jabugo", "reference": "3111", "price": 120, "description": "<b>marca:</b> Navidul <br /><b>peso:</b>8kg-10kg<br />", "manufacturer": "Navidul", "images": [ "3111.jpg", "1111_3.jpg" ], "features": { "tipoUnidad": "peso" }, "options": { "peso": [ "8kg" ], "etiqueta": [ "verde" ] }, "meta": { "section": "Alimentación > Embutidos" }, "combinations": [ { "price":140, "image": "1111_3.jpg", "options": { "peso": "10kg", "etiqueta": "roja" } } ] } Si existiese también algún módulo que solventase mi problema también podría ser de utilidad. Un saludo! Link to comment Share on other sites More sharing options...
jesa Posted May 6, 2015 Share Posted May 6, 2015 Supongo que sabrás que se pueden crear reglas de precio por categoría y grupos de clientes. Si con eso te vale sería más sencillo hacerlo directamente desde el BO. Al final la forma más sencilla de hacer estas cosas es a mi forma de ver, dejarlo como lo quiere prestashop. Así te evitas dolores de cabeza cada vez que tengas que actualizar o poner algún módulo que interfiera en temas de precio. La verdad que nunca he usado los servicios web de prestashop, pero entiendo que esa función que tienes creada te dejará crear productos como si estuvieras usando el importador po lo que no te deja añadir precios específicos por grupos verdad? Link to comment Share on other sites More sharing options...
yarilorenzo Posted May 6, 2015 Author Share Posted May 6, 2015 Gracias Jesa, sí que conocía ese tipo de reglas. El problema es que el precio de un artículo para cada categoría no se basa en ninguna regla. Para explicarme mejor: Si tengo un artículo X, su precio para los grupos podría ser: grupo1 : 10€ grupo2: 11€ grupo3: 4.5€ Mientras que para el artículo Y podrían ser: grupo1 : 1€ grupo2: 2€ grupo3: 3€ Es decir no se cumple una regla de aumento de precio equitativo para todos los artículos, sino que es específico del mismo. En cuanto a mi método utilizando el WS supongo que se puede incluir el precio específico para cada grupo pero no encuentro manera de hacer. Digo supongo porque si se puede hacer desde el BO también se debe poder hacer mediante API. Link to comment Share on other sites More sharing options...
Recommended Posts