CentryCL / centry_ps_esclavo

Módulo de Centry para prestashop
3 stars 4 forks source link

Variante se elimina de carro de compra recibir actualización #3

Closed ncyrcus closed 2 years ago

ncyrcus commented 3 years ago

Cuando un cliente está comprando en un prestashop y uno de los productos agregados al carrito recibe una actualización por parte de Centry, este se elimina del carrito.

Luego de muchas pruebas se determinó que la causa de este incidente se debe a la ejecución de https://github.com/CentryCL/centry_ps_esclavo/blob/146f7b6e262fd9e5bad75e0b690379d0ce197d0a/classes/translators/Products.php#L600

private static function saveVariant($combination_ps, $variant, $sync) {
    $combination_ps->reference = $sync["variant_sku"] ? mb_substr($variant->sku, 0, 64) : 
    $combination_ps->reference;
    $combination_ps->ean13 = $sync["barcode"] ? mb_substr($variant->barcode, 0, 13) : $combination_ps->ean13;

    if ($sync["stock"]) {
      \StockAvailable::setQuantity($combination_ps->id_product, $combination_ps->id, $variant->quantity);
    }
    $attributes = self::Attributes($combination_ps, $variant, $sync);
    $combination_ps->setAttributes($attributes);
    try {
      $combination_ps->save();
    } catch (\Exception $ex) {
      error_log($ex->getMessage());
    }
    if ($variant->quantity > 0) {
      try {
        (new \Product($combination_ps->id_product))->setDefaultAttribute($combination_ps->id);
      } catch (\Exception $ex) {
        error_log($ex->getMessage());
      }
    }
  }

Se recomienda revisar el flujo de actualización talla y color y accionar $combination_ps->setAttributes($attributes); sólo cuando sea necesario y no en cada actualización

eliaslama commented 2 years ago

La clase Combination de Prestashop presentaba un bug al momento de actualizar el valor de una combinación, eliminando innecesariamente la combinación de todos los carritos de compra de los usuarios. A partir de la versión 1.7.8.0 de Prestashop se corrigió el bug.

Link al PR donde se corrige: https://github.com/PrestaShop/PrestaShop/pull/23081

Para aquellas versiones de Prestashop que presentan el bug, se sobreescriben los métodos necesarios para lograr la misma solución dada por el autor del PR. Para las versiones que no presentan el bug, se utiliza el método original.

Revisar el commit https://github.com/CentryCL/centry_ps_esclavo/commit/c70a04849c6e9f08b6ea67a1d2e1de7005ea335c